From e7a7c6aa1dd45826d17a0255db27bc66e8f7c394 Mon Sep 17 00:00:00 2001
From: JakobEliasWagner <JakobEliasWagner@users.noreply.github.com>
Date: Tue, 26 Mar 2024 12:04:32 +0000
Subject: [PATCH] deploy: 877129ef2623b522da8569e54c00a4b66115e2a0

---
 .buildinfo                                    |    4 +
 .nojekyll                                     |    0
 _sources/coverage.rst.txt                     |    4 +
 _sources/examples.rst.txt                     |    3 +
 _sources/index.rst.txt                        |   31 +
 _sources/modules.rst.txt                      |    7 +
 _sources/nos.benchmarks.rst.txt               |   21 +
 _sources/nos.data.indicator_function.rst.txt  |   37 +
 _sources/nos.data.rst.txt                     |   19 +
 _sources/nos.data.transmission_loss.rst.txt   |   45 +
 _sources/nos.metrics.rst.txt                  |   37 +
 _sources/nos.networks.attention.rst.txt       |   45 +
 _sources/nos.networks.rst.txt                 |   29 +
 _sources/nos.operators.rst.txt                |   85 ++
 _sources/nos.plots.rst.txt                    |   53 +
 _sources/nos.preprocessing.rst.txt            |   21 +
 _sources/nos.rst.txt                          |   27 +
 _sources/nos.trainers.rst.txt                 |   37 +
 _sources/nos.transforms.rst.txt               |   21 +
 _sources/nos.utils.rst.txt                    |   29 +
 _static/alabaster.css                         |  708 ++++++++++
 _static/basic.css                             |  925 +++++++++++++
 _static/codecov/coverage_html.js              |  624 +++++++++
 .../d_040e78c194e497af_scaling_py.html        |  120 ++
 ...dc9496c7d_nested_dataclass_to_dict_py.html |  128 ++
 .../d_431cb39dc9496c7d_unique_id_py.html      |  120 ++
 ...6b2e3943_transmission_loss_compact_py.html |  162 +++
 ...16966b2e3943_transmission_loss_exp_py.html |  137 ++
 ...7e8216966b2e3943_transmission_loss_py.html |  194 +++
 ...6966b2e3943_transmission_loss_wave_py.html |  169 +++
 .../d_8650266d82634dfb_c_shape_py.html        |  171 +++
 ...d_8650266d82634dfb_indicator_to_tl_py.html |  145 +++
 ...50266d82634dfb_params_to_indicator_py.html |  124 ++
 ...d_8dbc7d2850ae11b9_low_pass_filter_py.html |  139 ++
 ...93093ff38057b02c_deep_dot_operator_py.html |  170 +++
 ...93ff38057b02c_deep_neural_operator_py.html |  148 +++
 .../d_93093ff38057b02c_deep_o_fno_py.html     |  159 +++
 .../d_93093ff38057b02c_deep_o_net_py.html     |  207 +++
 ...3093ff38057b02c_deep_root_operator_py.html |  186 +++
 ...f38057b02c_fourier_neural_operator_py.html |  126 ++
 ...057b02c_mean_stack_neural_operator_py.html |  179 +++
 .../d_93093ff38057b02c_operator_py.html       |  120 ++
 .../codecov/d_93093ff38057b02c_utils_py.html  |  191 +++
 .../d_99aac0089c5f15d8_error_metrics_py.html  |  150 +++
 .../codecov/d_99aac0089c5f15d8_metric_py.html |  133 ++
 ..._99aac0089c5f15d8_operator_metrics_py.html |  139 ++
 .../d_a94113ed293c43ea_benchmark_py.html      |  125 ++
 .../codecov/d_d726faacd801a058_data_py.html   |  193 +++
 .../d_d726faacd801a058_metrics_py.html        |  238 ++++
 ...d_d726faacd801a058_training_curves_py.html |  161 +++
 ...d726faacd801a058_transmission_loss_py.html |  321 +++++
 .../codecov/d_d726faacd801a058_utils_py.html  |  142 ++
 .../d_dfcfe80011fec8d7_residual_py.html       |  144 ++
 .../d_e3bc015ca2131802_average_metric_py.html |  124 ++
 .../d_e3bc015ca2131802_trainer_py.html        |  308 +++++
 .../codecov/d_e3bc015ca2131802_util_py.html   |  125 ++
 _static/codecov/favicon_32.png                |  Bin 0 -> 1732 bytes
 _static/codecov/index.html                    |  327 +++++
 _static/codecov/keybd_closed.png              |  Bin 0 -> 9004 bytes
 _static/codecov/keybd_open.png                |  Bin 0 -> 9003 bytes
 _static/codecov/status.json                   |    1 +
 _static/codecov/style.css                     |  309 +++++
 _static/custom.css                            |    1 +
 _static/doctools.js                           |  156 +++
 _static/documentation_options.js              |   13 +
 _static/file.png                              |  Bin 0 -> 286 bytes
 _static/language_data.js                      |  199 +++
 _static/minus.png                             |  Bin 0 -> 90 bytes
 _static/plus.png                              |  Bin 0 -> 90 bytes
 _static/pygments.css                          |   84 ++
 _static/searchtools.js                        |  574 ++++++++
 _static/sphinx_highlight.js                   |  154 +++
 coverage.html                                 |  112 ++
 examples.html                                 |  107 ++
 genindex.html                                 | 1155 +++++++++++++++++
 index.html                                    |  133 ++
 modules.html                                  |  200 +++
 nos.benchmarks.html                           |  167 +++
 nos.data.html                                 |  215 +++
 nos.data.indicator_function.html              |  162 +++
 nos.data.transmission_loss.html               |  260 ++++
 nos.html                                      |  505 +++++++
 nos.metrics.html                              |  250 ++++
 nos.networks.attention.html                   |  136 ++
 nos.networks.html                             |  221 ++++
 nos.operators.html                            |  538 ++++++++
 nos.plots.html                                |  458 +++++++
 nos.preprocessing.html                        |  165 +++
 nos.trainers.html                             |  131 ++
 nos.transforms.html                           |  199 +++
 nos.utils.html                                |  170 +++
 objects.inv                                   |  Bin 0 -> 1973 bytes
 py-modindex.html                              |  349 +++++
 search.html                                   |  123 ++
 searchindex.js                                |    1 +
 95 files changed, 15785 insertions(+)
 create mode 100644 .buildinfo
 create mode 100644 .nojekyll
 create mode 100644 _sources/coverage.rst.txt
 create mode 100644 _sources/examples.rst.txt
 create mode 100644 _sources/index.rst.txt
 create mode 100644 _sources/modules.rst.txt
 create mode 100644 _sources/nos.benchmarks.rst.txt
 create mode 100644 _sources/nos.data.indicator_function.rst.txt
 create mode 100644 _sources/nos.data.rst.txt
 create mode 100644 _sources/nos.data.transmission_loss.rst.txt
 create mode 100644 _sources/nos.metrics.rst.txt
 create mode 100644 _sources/nos.networks.attention.rst.txt
 create mode 100644 _sources/nos.networks.rst.txt
 create mode 100644 _sources/nos.operators.rst.txt
 create mode 100644 _sources/nos.plots.rst.txt
 create mode 100644 _sources/nos.preprocessing.rst.txt
 create mode 100644 _sources/nos.rst.txt
 create mode 100644 _sources/nos.trainers.rst.txt
 create mode 100644 _sources/nos.transforms.rst.txt
 create mode 100644 _sources/nos.utils.rst.txt
 create mode 100644 _static/alabaster.css
 create mode 100644 _static/basic.css
 create mode 100644 _static/codecov/coverage_html.js
 create mode 100644 _static/codecov/d_040e78c194e497af_scaling_py.html
 create mode 100644 _static/codecov/d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html
 create mode 100644 _static/codecov/d_431cb39dc9496c7d_unique_id_py.html
 create mode 100644 _static/codecov/d_7e8216966b2e3943_transmission_loss_compact_py.html
 create mode 100644 _static/codecov/d_7e8216966b2e3943_transmission_loss_exp_py.html
 create mode 100644 _static/codecov/d_7e8216966b2e3943_transmission_loss_py.html
 create mode 100644 _static/codecov/d_7e8216966b2e3943_transmission_loss_wave_py.html
 create mode 100644 _static/codecov/d_8650266d82634dfb_c_shape_py.html
 create mode 100644 _static/codecov/d_8650266d82634dfb_indicator_to_tl_py.html
 create mode 100644 _static/codecov/d_8650266d82634dfb_params_to_indicator_py.html
 create mode 100644 _static/codecov/d_8dbc7d2850ae11b9_low_pass_filter_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_deep_dot_operator_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_deep_neural_operator_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_deep_o_fno_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_deep_o_net_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_deep_root_operator_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_fourier_neural_operator_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_mean_stack_neural_operator_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_operator_py.html
 create mode 100644 _static/codecov/d_93093ff38057b02c_utils_py.html
 create mode 100644 _static/codecov/d_99aac0089c5f15d8_error_metrics_py.html
 create mode 100644 _static/codecov/d_99aac0089c5f15d8_metric_py.html
 create mode 100644 _static/codecov/d_99aac0089c5f15d8_operator_metrics_py.html
 create mode 100644 _static/codecov/d_a94113ed293c43ea_benchmark_py.html
 create mode 100644 _static/codecov/d_d726faacd801a058_data_py.html
 create mode 100644 _static/codecov/d_d726faacd801a058_metrics_py.html
 create mode 100644 _static/codecov/d_d726faacd801a058_training_curves_py.html
 create mode 100644 _static/codecov/d_d726faacd801a058_transmission_loss_py.html
 create mode 100644 _static/codecov/d_d726faacd801a058_utils_py.html
 create mode 100644 _static/codecov/d_dfcfe80011fec8d7_residual_py.html
 create mode 100644 _static/codecov/d_e3bc015ca2131802_average_metric_py.html
 create mode 100644 _static/codecov/d_e3bc015ca2131802_trainer_py.html
 create mode 100644 _static/codecov/d_e3bc015ca2131802_util_py.html
 create mode 100644 _static/codecov/favicon_32.png
 create mode 100644 _static/codecov/index.html
 create mode 100644 _static/codecov/keybd_closed.png
 create mode 100644 _static/codecov/keybd_open.png
 create mode 100644 _static/codecov/status.json
 create mode 100644 _static/codecov/style.css
 create mode 100644 _static/custom.css
 create mode 100644 _static/doctools.js
 create mode 100644 _static/documentation_options.js
 create mode 100644 _static/file.png
 create mode 100644 _static/language_data.js
 create mode 100644 _static/minus.png
 create mode 100644 _static/plus.png
 create mode 100644 _static/pygments.css
 create mode 100644 _static/searchtools.js
 create mode 100644 _static/sphinx_highlight.js
 create mode 100644 coverage.html
 create mode 100644 examples.html
 create mode 100644 genindex.html
 create mode 100644 index.html
 create mode 100644 modules.html
 create mode 100644 nos.benchmarks.html
 create mode 100644 nos.data.html
 create mode 100644 nos.data.indicator_function.html
 create mode 100644 nos.data.transmission_loss.html
 create mode 100644 nos.html
 create mode 100644 nos.metrics.html
 create mode 100644 nos.networks.attention.html
 create mode 100644 nos.networks.html
 create mode 100644 nos.operators.html
 create mode 100644 nos.plots.html
 create mode 100644 nos.preprocessing.html
 create mode 100644 nos.trainers.html
 create mode 100644 nos.transforms.html
 create mode 100644 nos.utils.html
 create mode 100644 objects.inv
 create mode 100644 py-modindex.html
 create mode 100644 search.html
 create mode 100644 searchindex.js

diff --git a/.buildinfo b/.buildinfo
new file mode 100644
index 00000000..fc847633
--- /dev/null
+++ b/.buildinfo
@@ -0,0 +1,4 @@
+# Sphinx build info version 1
+# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
+config: 343d47b1cca2da89436b36abcb430701
+tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/.nojekyll b/.nojekyll
new file mode 100644
index 00000000..e69de29b
diff --git a/_sources/coverage.rst.txt b/_sources/coverage.rst.txt
new file mode 100644
index 00000000..412a2b1f
--- /dev/null
+++ b/_sources/coverage.rst.txt
@@ -0,0 +1,4 @@
+Code Coverage
+=============
+
+ For an in detail report on the code coverage `click here <_static/codecov/index.html>`_.
diff --git a/_sources/examples.rst.txt b/_sources/examples.rst.txt
new file mode 100644
index 00000000..b90c0e1c
--- /dev/null
+++ b/_sources/examples.rst.txt
@@ -0,0 +1,3 @@
+========
+Examples
+========
diff --git a/_sources/index.rst.txt b/_sources/index.rst.txt
new file mode 100644
index 00000000..7cd2a19c
--- /dev/null
+++ b/_sources/index.rst.txt
@@ -0,0 +1,31 @@
+===========================================
+Neural Operators for Helmholtz Equation
+===========================================
+
+Welcome to the documentation for the Neural Operators for Helmholtz Equation project! This project focuses on the application of advanced neural operator techniques to solve the Helmholtz equation in various parameterized geometries. The approach integrates deep learning with physical modeling of domains.
+
+Contents
+========
+
+.. toctree::
+    :maxdepth: 2
+
+    coverage
+    modules
+    examples
+
+Introduction
+============
+
+The Helmholtz equation is a fundamental partial differential equation in physics, particularly in the fields of acoustics, electromagnetics, and quantum mechanics. In this project, we develop and utilize neural operators, a form of deep learning model, to solve the Helmholtz equation across different parameterized geometries. This approach aims to overcome the limitations of traditional numerical methods, offering speed and flexibility for complex geometries.
+
+
+API Reference
+=============
+
+The :doc:`modules` section offers detailed descriptions of the functions, classes, and methods available in this project.
+
+Examples
+========
+
+Explore practical applications and see the neural operators in action in the :doc:`examples` section.
diff --git a/_sources/modules.rst.txt b/_sources/modules.rst.txt
new file mode 100644
index 00000000..977c47e5
--- /dev/null
+++ b/_sources/modules.rst.txt
@@ -0,0 +1,7 @@
+nos
+===
+
+.. toctree::
+   :maxdepth: 4
+
+   nos
diff --git a/_sources/nos.benchmarks.rst.txt b/_sources/nos.benchmarks.rst.txt
new file mode 100644
index 00000000..bb55be41
--- /dev/null
+++ b/_sources/nos.benchmarks.rst.txt
@@ -0,0 +1,21 @@
+nos.benchmarks package
+======================
+
+Submodules
+----------
+
+nos.benchmarks.benchmark module
+-------------------------------
+
+.. automodule:: nos.benchmarks.benchmark
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.benchmarks
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.data.indicator_function.rst.txt b/_sources/nos.data.indicator_function.rst.txt
new file mode 100644
index 00000000..3077c8bb
--- /dev/null
+++ b/_sources/nos.data.indicator_function.rst.txt
@@ -0,0 +1,37 @@
+nos.data.indicator\_function package
+====================================
+
+Submodules
+----------
+
+nos.data.indicator\_function.c\_shape module
+--------------------------------------------
+
+.. automodule:: nos.data.indicator_function.c_shape
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.data.indicator\_function.indicator\_to\_tl module
+-----------------------------------------------------
+
+.. automodule:: nos.data.indicator_function.indicator_to_tl
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.data.indicator\_function.params\_to\_indicator module
+---------------------------------------------------------
+
+.. automodule:: nos.data.indicator_function.params_to_indicator
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.data.indicator_function
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.data.rst.txt b/_sources/nos.data.rst.txt
new file mode 100644
index 00000000..7b2c4437
--- /dev/null
+++ b/_sources/nos.data.rst.txt
@@ -0,0 +1,19 @@
+nos.data package
+================
+
+Subpackages
+-----------
+
+.. toctree::
+   :maxdepth: 4
+
+   nos.data.indicator_function
+   nos.data.transmission_loss
+
+Module contents
+---------------
+
+.. automodule:: nos.data
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.data.transmission_loss.rst.txt b/_sources/nos.data.transmission_loss.rst.txt
new file mode 100644
index 00000000..8bdfe7d2
--- /dev/null
+++ b/_sources/nos.data.transmission_loss.rst.txt
@@ -0,0 +1,45 @@
+nos.data.transmission\_loss package
+===================================
+
+Submodules
+----------
+
+nos.data.transmission\_loss.transmission\_loss module
+-----------------------------------------------------
+
+.. automodule:: nos.data.transmission_loss.transmission_loss
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.data.transmission\_loss.transmission\_loss\_compact module
+--------------------------------------------------------------
+
+.. automodule:: nos.data.transmission_loss.transmission_loss_compact
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.data.transmission\_loss.transmission\_loss\_exp module
+----------------------------------------------------------
+
+.. automodule:: nos.data.transmission_loss.transmission_loss_exp
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.data.transmission\_loss.transmission\_loss\_wave module
+-----------------------------------------------------------
+
+.. automodule:: nos.data.transmission_loss.transmission_loss_wave
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.data.transmission_loss
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.metrics.rst.txt b/_sources/nos.metrics.rst.txt
new file mode 100644
index 00000000..3819268b
--- /dev/null
+++ b/_sources/nos.metrics.rst.txt
@@ -0,0 +1,37 @@
+nos.metrics package
+===================
+
+Submodules
+----------
+
+nos.metrics.error\_metrics module
+---------------------------------
+
+.. automodule:: nos.metrics.error_metrics
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.metrics.metric module
+-------------------------
+
+.. automodule:: nos.metrics.metric
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.metrics.operator\_metrics module
+------------------------------------
+
+.. automodule:: nos.metrics.operator_metrics
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.metrics
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.networks.attention.rst.txt b/_sources/nos.networks.attention.rst.txt
new file mode 100644
index 00000000..fb46dc11
--- /dev/null
+++ b/_sources/nos.networks.attention.rst.txt
@@ -0,0 +1,45 @@
+nos.networks.attention package
+==============================
+
+Submodules
+----------
+
+nos.networks.attention.cross\_attention module
+----------------------------------------------
+
+.. automodule:: nos.networks.attention.cross_attention
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.networks.attention.linear\_cross\_attention module
+------------------------------------------------------
+
+.. automodule:: nos.networks.attention.linear_cross_attention
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.networks.attention.linear\_self\_attention module
+-----------------------------------------------------
+
+.. automodule:: nos.networks.attention.linear_self_attention
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.networks.attention.self\_attention module
+---------------------------------------------
+
+.. automodule:: nos.networks.attention.self_attention
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.networks.attention
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.networks.rst.txt b/_sources/nos.networks.rst.txt
new file mode 100644
index 00000000..fccced01
--- /dev/null
+++ b/_sources/nos.networks.rst.txt
@@ -0,0 +1,29 @@
+nos.networks package
+====================
+
+Subpackages
+-----------
+
+.. toctree::
+   :maxdepth: 4
+
+   nos.networks.attention
+
+Submodules
+----------
+
+nos.networks.residual module
+----------------------------
+
+.. automodule:: nos.networks.residual
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.networks
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.operators.rst.txt b/_sources/nos.operators.rst.txt
new file mode 100644
index 00000000..2447d7ff
--- /dev/null
+++ b/_sources/nos.operators.rst.txt
@@ -0,0 +1,85 @@
+nos.operators package
+=====================
+
+Submodules
+----------
+
+nos.operators.deep\_dot\_operator module
+----------------------------------------
+
+.. automodule:: nos.operators.deep_dot_operator
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.operators.deep\_neural\_operator module
+-------------------------------------------
+
+.. automodule:: nos.operators.deep_neural_operator
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.operators.deep\_o\_fno module
+---------------------------------
+
+.. automodule:: nos.operators.deep_o_fno
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.operators.deep\_o\_net module
+---------------------------------
+
+.. automodule:: nos.operators.deep_o_net
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.operators.deep\_root\_operator module
+-----------------------------------------
+
+.. automodule:: nos.operators.deep_root_operator
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.operators.fourier\_neural\_operator module
+----------------------------------------------
+
+.. automodule:: nos.operators.fourier_neural_operator
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.operators.mean\_stack\_neural\_operator module
+--------------------------------------------------
+
+.. automodule:: nos.operators.mean_stack_neural_operator
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.operators.operator module
+-----------------------------
+
+.. automodule:: nos.operators.operator
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.operators.utils module
+--------------------------
+
+.. automodule:: nos.operators.utils
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.operators
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.plots.rst.txt b/_sources/nos.plots.rst.txt
new file mode 100644
index 00000000..1d09b6fa
--- /dev/null
+++ b/_sources/nos.plots.rst.txt
@@ -0,0 +1,53 @@
+nos.plots package
+=================
+
+Submodules
+----------
+
+nos.plots.data module
+---------------------
+
+.. automodule:: nos.plots.data
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.plots.metrics module
+------------------------
+
+.. automodule:: nos.plots.metrics
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.plots.training\_curves module
+---------------------------------
+
+.. automodule:: nos.plots.training_curves
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.plots.transmission\_loss module
+-----------------------------------
+
+.. automodule:: nos.plots.transmission_loss
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.plots.utils module
+----------------------
+
+.. automodule:: nos.plots.utils
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.plots
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.preprocessing.rst.txt b/_sources/nos.preprocessing.rst.txt
new file mode 100644
index 00000000..392678ef
--- /dev/null
+++ b/_sources/nos.preprocessing.rst.txt
@@ -0,0 +1,21 @@
+nos.preprocessing package
+=========================
+
+Submodules
+----------
+
+nos.preprocessing.low\_pass\_filter module
+------------------------------------------
+
+.. automodule:: nos.preprocessing.low_pass_filter
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.preprocessing
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.rst.txt b/_sources/nos.rst.txt
new file mode 100644
index 00000000..c4875abb
--- /dev/null
+++ b/_sources/nos.rst.txt
@@ -0,0 +1,27 @@
+nos package
+===========
+
+Subpackages
+-----------
+
+.. toctree::
+   :maxdepth: 4
+
+   nos.benchmarks
+   nos.data
+   nos.metrics
+   nos.networks
+   nos.operators
+   nos.plots
+   nos.preprocessing
+   nos.trainers
+   nos.transforms
+   nos.utils
+
+Module contents
+---------------
+
+.. automodule:: nos
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.trainers.rst.txt b/_sources/nos.trainers.rst.txt
new file mode 100644
index 00000000..aafd3d13
--- /dev/null
+++ b/_sources/nos.trainers.rst.txt
@@ -0,0 +1,37 @@
+nos.trainers package
+====================
+
+Submodules
+----------
+
+nos.trainers.average\_metric module
+-----------------------------------
+
+.. automodule:: nos.trainers.average_metric
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.trainers.trainer module
+---------------------------
+
+.. automodule:: nos.trainers.trainer
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.trainers.util module
+------------------------
+
+.. automodule:: nos.trainers.util
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.trainers
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.transforms.rst.txt b/_sources/nos.transforms.rst.txt
new file mode 100644
index 00000000..a0e3c919
--- /dev/null
+++ b/_sources/nos.transforms.rst.txt
@@ -0,0 +1,21 @@
+nos.transforms package
+======================
+
+Submodules
+----------
+
+nos.transforms.scaling module
+-----------------------------
+
+.. automodule:: nos.transforms.scaling
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.transforms
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_sources/nos.utils.rst.txt b/_sources/nos.utils.rst.txt
new file mode 100644
index 00000000..5e743efc
--- /dev/null
+++ b/_sources/nos.utils.rst.txt
@@ -0,0 +1,29 @@
+nos.utils package
+=================
+
+Submodules
+----------
+
+nos.utils.nested\_dataclass\_to\_dict module
+--------------------------------------------
+
+.. automodule:: nos.utils.nested_dataclass_to_dict
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+nos.utils.unique\_id module
+---------------------------
+
+.. automodule:: nos.utils.unique_id
+   :members:
+   :undoc-members:
+   :show-inheritance:
+
+Module contents
+---------------
+
+.. automodule:: nos.utils
+   :members:
+   :undoc-members:
+   :show-inheritance:
diff --git a/_static/alabaster.css b/_static/alabaster.css
new file mode 100644
index 00000000..e3174bf9
--- /dev/null
+++ b/_static/alabaster.css
@@ -0,0 +1,708 @@
+@import url("basic.css");
+
+/* -- page layout ----------------------------------------------------------- */
+
+body {
+    font-family: Georgia, serif;
+    font-size: 17px;
+    background-color: #fff;
+    color: #000;
+    margin: 0;
+    padding: 0;
+}
+
+
+div.document {
+    width: 940px;
+    margin: 30px auto 0 auto;
+}
+
+div.documentwrapper {
+    float: left;
+    width: 100%;
+}
+
+div.bodywrapper {
+    margin: 0 0 0 220px;
+}
+
+div.sphinxsidebar {
+    width: 220px;
+    font-size: 14px;
+    line-height: 1.5;
+}
+
+hr {
+    border: 1px solid #B1B4B6;
+}
+
+div.body {
+    background-color: #fff;
+    color: #3E4349;
+    padding: 0 30px 0 30px;
+}
+
+div.body > .section {
+    text-align: left;
+}
+
+div.footer {
+    width: 940px;
+    margin: 20px auto 30px auto;
+    font-size: 14px;
+    color: #888;
+    text-align: right;
+}
+
+div.footer a {
+    color: #888;
+}
+
+p.caption {
+    font-family: inherit;
+    font-size: inherit;
+}
+
+
+div.relations {
+    display: none;
+}
+
+
+div.sphinxsidebar {
+    max-height: 100%;
+    overflow-y: auto;
+}
+
+div.sphinxsidebar a {
+    color: #444;
+    text-decoration: none;
+    border-bottom: 1px dotted #999;
+}
+
+div.sphinxsidebar a:hover {
+    border-bottom: 1px solid #999;
+}
+
+div.sphinxsidebarwrapper {
+    padding: 18px 10px;
+}
+
+div.sphinxsidebarwrapper p.logo {
+    padding: 0;
+    margin: -10px 0 0 0px;
+    text-align: center;
+}
+
+div.sphinxsidebarwrapper h1.logo {
+    margin-top: -10px;
+    text-align: center;
+    margin-bottom: 5px;
+    text-align: left;
+}
+
+div.sphinxsidebarwrapper h1.logo-name {
+    margin-top: 0px;
+}
+
+div.sphinxsidebarwrapper p.blurb {
+    margin-top: 0;
+    font-style: normal;
+}
+
+div.sphinxsidebar h3,
+div.sphinxsidebar h4 {
+    font-family: Georgia, serif;
+    color: #444;
+    font-size: 24px;
+    font-weight: normal;
+    margin: 0 0 5px 0;
+    padding: 0;
+}
+
+div.sphinxsidebar h4 {
+    font-size: 20px;
+}
+
+div.sphinxsidebar h3 a {
+    color: #444;
+}
+
+div.sphinxsidebar p.logo a,
+div.sphinxsidebar h3 a,
+div.sphinxsidebar p.logo a:hover,
+div.sphinxsidebar h3 a:hover {
+    border: none;
+}
+
+div.sphinxsidebar p {
+    color: #555;
+    margin: 10px 0;
+}
+
+div.sphinxsidebar ul {
+    margin: 10px 0;
+    padding: 0;
+    color: #000;
+}
+
+div.sphinxsidebar ul li.toctree-l1 > a {
+    font-size: 120%;
+}
+
+div.sphinxsidebar ul li.toctree-l2 > a {
+    font-size: 110%;
+}
+
+div.sphinxsidebar input {
+    border: 1px solid #CCC;
+    font-family: Georgia, serif;
+    font-size: 1em;
+}
+
+div.sphinxsidebar #searchbox input[type="text"] {
+    width: 160px;
+}
+
+div.sphinxsidebar .search > div {
+    display: table-cell;
+}
+
+div.sphinxsidebar hr {
+    border: none;
+    height: 1px;
+    color: #AAA;
+    background: #AAA;
+
+    text-align: left;
+    margin-left: 0;
+    width: 50%;
+}
+
+div.sphinxsidebar .badge {
+    border-bottom: none;
+}
+
+div.sphinxsidebar .badge:hover {
+    border-bottom: none;
+}
+
+/* To address an issue with donation coming after search */
+div.sphinxsidebar h3.donation {
+    margin-top: 10px;
+}
+
+/* -- body styles ----------------------------------------------------------- */
+
+a {
+    color: #004B6B;
+    text-decoration: underline;
+}
+
+a:hover {
+    color: #6D4100;
+    text-decoration: underline;
+}
+
+div.body h1,
+div.body h2,
+div.body h3,
+div.body h4,
+div.body h5,
+div.body h6 {
+    font-family: Georgia, serif;
+    font-weight: normal;
+    margin: 30px 0px 10px 0px;
+    padding: 0;
+}
+
+div.body h1 { margin-top: 0; padding-top: 0; font-size: 240%; }
+div.body h2 { font-size: 180%; }
+div.body h3 { font-size: 150%; }
+div.body h4 { font-size: 130%; }
+div.body h5 { font-size: 100%; }
+div.body h6 { font-size: 100%; }
+
+a.headerlink {
+    color: #DDD;
+    padding: 0 4px;
+    text-decoration: none;
+}
+
+a.headerlink:hover {
+    color: #444;
+    background: #EAEAEA;
+}
+
+div.body p, div.body dd, div.body li {
+    line-height: 1.4em;
+}
+
+div.admonition {
+    margin: 20px 0px;
+    padding: 10px 30px;
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.admonition tt.xref, div.admonition code.xref, div.admonition a tt {
+    background-color: #FBFBFB;
+    border-bottom: 1px solid #fafafa;
+}
+
+div.admonition p.admonition-title {
+    font-family: Georgia, serif;
+    font-weight: normal;
+    font-size: 24px;
+    margin: 0 0 10px 0;
+    padding: 0;
+    line-height: 1;
+}
+
+div.admonition p.last {
+    margin-bottom: 0;
+}
+
+div.highlight {
+    background-color: #fff;
+}
+
+dt:target, .highlight {
+    background: #FAF3E8;
+}
+
+div.warning {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.danger {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+    -moz-box-shadow: 2px 2px 4px #D52C2C;
+    -webkit-box-shadow: 2px 2px 4px #D52C2C;
+    box-shadow: 2px 2px 4px #D52C2C;
+}
+
+div.error {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+    -moz-box-shadow: 2px 2px 4px #D52C2C;
+    -webkit-box-shadow: 2px 2px 4px #D52C2C;
+    box-shadow: 2px 2px 4px #D52C2C;
+}
+
+div.caution {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.attention {
+    background-color: #FCC;
+    border: 1px solid #FAA;
+}
+
+div.important {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.note {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.tip {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.hint {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.seealso {
+    background-color: #EEE;
+    border: 1px solid #CCC;
+}
+
+div.topic {
+    background-color: #EEE;
+}
+
+p.admonition-title {
+    display: inline;
+}
+
+p.admonition-title:after {
+    content: ":";
+}
+
+pre, tt, code {
+    font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
+    font-size: 0.9em;
+}
+
+.hll {
+    background-color: #FFC;
+    margin: 0 -12px;
+    padding: 0 12px;
+    display: block;
+}
+
+img.screenshot {
+}
+
+tt.descname, tt.descclassname, code.descname, code.descclassname {
+    font-size: 0.95em;
+}
+
+tt.descname, code.descname {
+    padding-right: 0.08em;
+}
+
+img.screenshot {
+    -moz-box-shadow: 2px 2px 4px #EEE;
+    -webkit-box-shadow: 2px 2px 4px #EEE;
+    box-shadow: 2px 2px 4px #EEE;
+}
+
+table.docutils {
+    border: 1px solid #888;
+    -moz-box-shadow: 2px 2px 4px #EEE;
+    -webkit-box-shadow: 2px 2px 4px #EEE;
+    box-shadow: 2px 2px 4px #EEE;
+}
+
+table.docutils td, table.docutils th {
+    border: 1px solid #888;
+    padding: 0.25em 0.7em;
+}
+
+table.field-list, table.footnote {
+    border: none;
+    -moz-box-shadow: none;
+    -webkit-box-shadow: none;
+    box-shadow: none;
+}
+
+table.footnote {
+    margin: 15px 0;
+    width: 100%;
+    border: 1px solid #EEE;
+    background: #FDFDFD;
+    font-size: 0.9em;
+}
+
+table.footnote + table.footnote {
+    margin-top: -15px;
+    border-top: none;
+}
+
+table.field-list th {
+    padding: 0 0.8em 0 0;
+}
+
+table.field-list td {
+    padding: 0;
+}
+
+table.field-list p {
+    margin-bottom: 0.8em;
+}
+
+/* Cloned from
+ * https://github.com/sphinx-doc/sphinx/commit/ef60dbfce09286b20b7385333d63a60321784e68
+ */
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
+table.footnote td.label {
+    width: .1px;
+    padding: 0.3em 0 0.3em 0.5em;
+}
+
+table.footnote td {
+    padding: 0.3em 0.5em;
+}
+
+dl {
+    margin-left: 0;
+    margin-right: 0;
+    margin-top: 0;
+    padding: 0;
+}
+
+dl dd {
+    margin-left: 30px;
+}
+
+blockquote {
+    margin: 0 0 0 30px;
+    padding: 0;
+}
+
+ul, ol {
+    /* Matches the 30px from the narrow-screen "li > ul" selector below */
+    margin: 10px 0 10px 30px;
+    padding: 0;
+}
+
+pre {
+    background: #EEE;
+    padding: 7px 30px;
+    margin: 15px 0px;
+    line-height: 1.3em;
+}
+
+div.viewcode-block:target {
+    background: #ffd;
+}
+
+dl pre, blockquote pre, li pre {
+    margin-left: 0;
+    padding-left: 30px;
+}
+
+tt, code {
+    background-color: #ecf0f3;
+    color: #222;
+    /* padding: 1px 2px; */
+}
+
+tt.xref, code.xref, a tt {
+    background-color: #FBFBFB;
+    border-bottom: 1px solid #fff;
+}
+
+a.reference {
+    text-decoration: none;
+    border-bottom: 1px dotted #004B6B;
+}
+
+/* Don't put an underline on images */
+a.image-reference, a.image-reference:hover {
+    border-bottom: none;
+}
+
+a.reference:hover {
+    border-bottom: 1px solid #6D4100;
+}
+
+a.footnote-reference {
+    text-decoration: none;
+    font-size: 0.7em;
+    vertical-align: top;
+    border-bottom: 1px dotted #004B6B;
+}
+
+a.footnote-reference:hover {
+    border-bottom: 1px solid #6D4100;
+}
+
+a:hover tt, a:hover code {
+    background: #EEE;
+}
+
+
+@media screen and (max-width: 870px) {
+
+    div.sphinxsidebar {
+    	display: none;
+    }
+
+    div.document {
+       width: 100%;
+
+    }
+
+    div.documentwrapper {
+    	margin-left: 0;
+    	margin-top: 0;
+    	margin-right: 0;
+    	margin-bottom: 0;
+    }
+
+    div.bodywrapper {
+    	margin-top: 0;
+    	margin-right: 0;
+    	margin-bottom: 0;
+    	margin-left: 0;
+    }
+
+    ul {
+    	margin-left: 0;
+    }
+
+	li > ul {
+        /* Matches the 30px from the "ul, ol" selector above */
+		margin-left: 30px;
+	}
+
+    .document {
+    	width: auto;
+    }
+
+    .footer {
+    	width: auto;
+    }
+
+    .bodywrapper {
+    	margin: 0;
+    }
+
+    .footer {
+    	width: auto;
+    }
+
+    .github {
+        display: none;
+    }
+
+
+
+}
+
+
+
+@media screen and (max-width: 875px) {
+
+    body {
+        margin: 0;
+        padding: 20px 30px;
+    }
+
+    div.documentwrapper {
+        float: none;
+        background: #fff;
+    }
+
+    div.sphinxsidebar {
+        display: block;
+        float: none;
+        width: 102.5%;
+        margin: 50px -30px -20px -30px;
+        padding: 10px 20px;
+        background: #333;
+        color: #FFF;
+    }
+
+    div.sphinxsidebar h3, div.sphinxsidebar h4, div.sphinxsidebar p,
+    div.sphinxsidebar h3 a {
+        color: #fff;
+    }
+
+    div.sphinxsidebar a {
+        color: #AAA;
+    }
+
+    div.sphinxsidebar p.logo {
+        display: none;
+    }
+
+    div.document {
+        width: 100%;
+        margin: 0;
+    }
+
+    div.footer {
+        display: none;
+    }
+
+    div.bodywrapper {
+        margin: 0;
+    }
+
+    div.body {
+        min-height: 0;
+        padding: 0;
+    }
+
+    .rtd_doc_footer {
+        display: none;
+    }
+
+    .document {
+        width: auto;
+    }
+
+    .footer {
+        width: auto;
+    }
+
+    .footer {
+        width: auto;
+    }
+
+    .github {
+        display: none;
+    }
+}
+
+
+/* misc. */
+
+.revsys-inline {
+    display: none!important;
+}
+
+/* Hide ugly table cell borders in ..bibliography:: directive output */
+table.docutils.citation, table.docutils.citation td, table.docutils.citation th {
+  border: none;
+  /* Below needed in some edge cases; if not applied, bottom shadows appear */
+  -moz-box-shadow: none;
+  -webkit-box-shadow: none;
+  box-shadow: none;
+}
+
+
+/* relbar */
+
+.related {
+    line-height: 30px;
+    width: 100%;
+    font-size: 0.9rem;
+}
+
+.related.top {
+    border-bottom: 1px solid #EEE;
+    margin-bottom: 20px;
+}
+
+.related.bottom {
+    border-top: 1px solid #EEE;
+}
+
+.related ul {
+    padding: 0;
+    margin: 0;
+    list-style: none;
+}
+
+.related li {
+    display: inline;
+}
+
+nav#rellinks {
+    float: right;
+}
+
+nav#rellinks li+li:before {
+    content: "|";
+}
+
+nav#breadcrumbs li+li:before {
+    content: "\00BB";
+}
+
+/* Hide certain items when printing */
+@media print {
+    div.related {
+        display: none;
+    }
+}
\ No newline at end of file
diff --git a/_static/basic.css b/_static/basic.css
new file mode 100644
index 00000000..4157edf2
--- /dev/null
+++ b/_static/basic.css
@@ -0,0 +1,925 @@
+/*
+ * basic.css
+ * ~~~~~~~~~
+ *
+ * Sphinx stylesheet -- basic theme.
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+/* -- 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: 10px 0 0 20px;
+    padding: 0;
+}
+
+ul.search li {
+    padding: 5px 0 5px 20px;
+    background-image: url(file.png);
+    background-repeat: no-repeat;
+    background-position: 0 7px;
+}
+
+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: inherit;
+    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;
+}
+
+.translated {
+    background-color: rgba(207, 255, 207, 0.2)
+}
+
+.untranslated {
+    background-color: rgba(255, 207, 207, 0.2)
+}
+
+/* -- 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/_static/codecov/coverage_html.js b/_static/codecov/coverage_html.js
new file mode 100644
index 00000000..59348828
--- /dev/null
+++ b/_static/codecov/coverage_html.js
@@ -0,0 +1,624 @@
+// Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0
+// For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt
+
+// Coverage.py HTML report browser code.
+/*jslint browser: true, sloppy: true, vars: true, plusplus: true, maxerr: 50, indent: 4 */
+/*global coverage: true, document, window, $ */
+
+coverage = {};
+
+// General helpers
+function debounce(callback, wait) {
+    let timeoutId = null;
+    return function(...args) {
+        clearTimeout(timeoutId);
+        timeoutId = setTimeout(() => {
+            callback.apply(this, args);
+        }, wait);
+    };
+};
+
+function checkVisible(element) {
+    const rect = element.getBoundingClientRect();
+    const viewBottom = Math.max(document.documentElement.clientHeight, window.innerHeight);
+    const viewTop = 30;
+    return !(rect.bottom < viewTop || rect.top >= viewBottom);
+}
+
+function on_click(sel, fn) {
+    const elt = document.querySelector(sel);
+    if (elt) {
+        elt.addEventListener("click", fn);
+    }
+}
+
+// Helpers for table sorting
+function getCellValue(row, column = 0) {
+    const cell = row.cells[column]  // nosemgrep: eslint.detect-object-injection
+    if (cell.childElementCount == 1) {
+        const child = cell.firstElementChild
+        if (child instanceof HTMLTimeElement && child.dateTime) {
+            return child.dateTime
+        } else if (child instanceof HTMLDataElement && child.value) {
+            return child.value
+        }
+    }
+    return cell.innerText || cell.textContent;
+}
+
+function rowComparator(rowA, rowB, column = 0) {
+    let valueA = getCellValue(rowA, column);
+    let valueB = getCellValue(rowB, column);
+    if (!isNaN(valueA) && !isNaN(valueB)) {
+        return valueA - valueB
+    }
+    return valueA.localeCompare(valueB, undefined, {numeric: true});
+}
+
+function sortColumn(th) {
+    // Get the current sorting direction of the selected header,
+    // clear state on other headers and then set the new sorting direction
+    const currentSortOrder = th.getAttribute("aria-sort");
+    [...th.parentElement.cells].forEach(header => header.setAttribute("aria-sort", "none"));
+    if (currentSortOrder === "none") {
+        th.setAttribute("aria-sort", th.dataset.defaultSortOrder || "ascending");
+    } else {
+        th.setAttribute("aria-sort", currentSortOrder === "ascending" ? "descending" : "ascending");
+    }
+
+    const column = [...th.parentElement.cells].indexOf(th)
+
+    // Sort all rows and afterwards append them in order to move them in the DOM
+    Array.from(th.closest("table").querySelectorAll("tbody tr"))
+        .sort((rowA, rowB) => rowComparator(rowA, rowB, column) * (th.getAttribute("aria-sort") === "ascending" ? 1 : -1))
+        .forEach(tr => tr.parentElement.appendChild(tr) );
+}
+
+// Find all the elements with data-shortcut attribute, and use them to assign a shortcut key.
+coverage.assign_shortkeys = function () {
+    document.querySelectorAll("[data-shortcut]").forEach(element => {
+        document.addEventListener("keypress", event => {
+            if (event.target.tagName.toLowerCase() === "input") {
+                return; // ignore keypress from search filter
+            }
+            if (event.key === element.dataset.shortcut) {
+                element.click();
+            }
+        });
+    });
+};
+
+// Create the events for the filter box.
+coverage.wire_up_filter = function () {
+    // Cache elements.
+    const table = document.querySelector("table.index");
+    const table_body_rows = table.querySelectorAll("tbody tr");
+    const no_rows = document.getElementById("no_rows");
+
+    // Observe filter keyevents.
+    document.getElementById("filter").addEventListener("input", debounce(event => {
+        // Keep running total of each metric, first index contains number of shown rows
+        const totals = new Array(table.rows[0].cells.length).fill(0);
+        // Accumulate the percentage as fraction
+        totals[totals.length - 1] = { "numer": 0, "denom": 0 };  // nosemgrep: eslint.detect-object-injection
+
+        // Hide / show elements.
+        table_body_rows.forEach(row => {
+            if (!row.cells[0].textContent.includes(event.target.value)) {
+                // hide
+                row.classList.add("hidden");
+                return;
+            }
+
+            // show
+            row.classList.remove("hidden");
+            totals[0]++;
+
+            for (let column = 1; column < totals.length; column++) {
+                // Accumulate dynamic totals
+                cell = row.cells[column]  // nosemgrep: eslint.detect-object-injection
+                if (column === totals.length - 1) {
+                    // Last column contains percentage
+                    const [numer, denom] = cell.dataset.ratio.split(" ");
+                    totals[column]["numer"] += parseInt(numer, 10);  // nosemgrep: eslint.detect-object-injection
+                    totals[column]["denom"] += parseInt(denom, 10);  // nosemgrep: eslint.detect-object-injection
+                } else {
+                    totals[column] += parseInt(cell.textContent, 10);  // nosemgrep: eslint.detect-object-injection
+                }
+            }
+        });
+
+        // Show placeholder if no rows will be displayed.
+        if (!totals[0]) {
+            // Show placeholder, hide table.
+            no_rows.style.display = "block";
+            table.style.display = "none";
+            return;
+        }
+
+        // Hide placeholder, show table.
+        no_rows.style.display = null;
+        table.style.display = null;
+
+        const footer = table.tFoot.rows[0];
+        // Calculate new dynamic sum values based on visible rows.
+        for (let column = 1; column < totals.length; column++) {
+            // Get footer cell element.
+            const cell = footer.cells[column];  // nosemgrep: eslint.detect-object-injection
+
+            // Set value into dynamic footer cell element.
+            if (column === totals.length - 1) {
+                // Percentage column uses the numerator and denominator,
+                // and adapts to the number of decimal places.
+                const match = /\.([0-9]+)/.exec(cell.textContent);
+                const places = match ? match[1].length : 0;
+                const { numer, denom } = totals[column];  // nosemgrep: eslint.detect-object-injection
+                cell.dataset.ratio = `${numer} ${denom}`;
+                // Check denom to prevent NaN if filtered files contain no statements
+                cell.textContent = denom
+                    ? `${(numer * 100 / denom).toFixed(places)}%`
+                    : `${(100).toFixed(places)}%`;
+            } else {
+                cell.textContent = totals[column];  // nosemgrep: eslint.detect-object-injection
+            }
+        }
+    }));
+
+    // Trigger change event on setup, to force filter on page refresh
+    // (filter value may still be present).
+    document.getElementById("filter").dispatchEvent(new Event("input"));
+};
+
+coverage.INDEX_SORT_STORAGE = "COVERAGE_INDEX_SORT_2";
+
+// Loaded on index.html
+coverage.index_ready = function () {
+    coverage.assign_shortkeys();
+    coverage.wire_up_filter();
+    document.querySelectorAll("[data-sortable] th[aria-sort]").forEach(
+        th => th.addEventListener("click", e => sortColumn(e.target))
+    );
+
+    // Look for a localStorage item containing previous sort settings:
+    const stored_list = localStorage.getItem(coverage.INDEX_SORT_STORAGE);
+
+    if (stored_list) {
+        const {column, direction} = JSON.parse(stored_list);
+        const th = document.querySelector("[data-sortable]").tHead.rows[0].cells[column];  // nosemgrep: eslint.detect-object-injection
+        th.setAttribute("aria-sort", direction === "ascending" ? "descending" : "ascending");
+        th.click()
+    }
+
+    // Watch for page unload events so we can save the final sort settings:
+    window.addEventListener("unload", function () {
+        const th = document.querySelector('[data-sortable] th[aria-sort="ascending"], [data-sortable] [aria-sort="descending"]');
+        if (!th) {
+            return;
+        }
+        localStorage.setItem(coverage.INDEX_SORT_STORAGE, JSON.stringify({
+            column: [...th.parentElement.cells].indexOf(th),
+            direction: th.getAttribute("aria-sort"),
+        }));
+    });
+
+    on_click(".button_prev_file", coverage.to_prev_file);
+    on_click(".button_next_file", coverage.to_next_file);
+
+    on_click(".button_show_hide_help", coverage.show_hide_help);
+};
+
+// -- pyfile stuff --
+
+coverage.LINE_FILTERS_STORAGE = "COVERAGE_LINE_FILTERS";
+
+coverage.pyfile_ready = function () {
+    // If we're directed to a particular line number, highlight the line.
+    var frag = location.hash;
+    if (frag.length > 2 && frag[1] === "t") {
+        document.querySelector(frag).closest(".n").classList.add("highlight");
+        coverage.set_sel(parseInt(frag.substr(2), 10));
+    } else {
+        coverage.set_sel(0);
+    }
+
+    on_click(".button_toggle_run", coverage.toggle_lines);
+    on_click(".button_toggle_mis", coverage.toggle_lines);
+    on_click(".button_toggle_exc", coverage.toggle_lines);
+    on_click(".button_toggle_par", coverage.toggle_lines);
+
+    on_click(".button_next_chunk", coverage.to_next_chunk_nicely);
+    on_click(".button_prev_chunk", coverage.to_prev_chunk_nicely);
+    on_click(".button_top_of_page", coverage.to_top);
+    on_click(".button_first_chunk", coverage.to_first_chunk);
+
+    on_click(".button_prev_file", coverage.to_prev_file);
+    on_click(".button_next_file", coverage.to_next_file);
+    on_click(".button_to_index", coverage.to_index);
+
+    on_click(".button_show_hide_help", coverage.show_hide_help);
+
+    coverage.filters = undefined;
+    try {
+        coverage.filters = localStorage.getItem(coverage.LINE_FILTERS_STORAGE);
+    } catch(err) {}
+
+    if (coverage.filters) {
+        coverage.filters = JSON.parse(coverage.filters);
+    }
+    else {
+        coverage.filters = {run: false, exc: true, mis: true, par: true};
+    }
+
+    for (cls in coverage.filters) {
+        coverage.set_line_visibilty(cls, coverage.filters[cls]);  // nosemgrep: eslint.detect-object-injection
+    }
+
+    coverage.assign_shortkeys();
+    coverage.init_scroll_markers();
+    coverage.wire_up_sticky_header();
+
+    document.querySelectorAll("[id^=ctxs]").forEach(
+        cbox => cbox.addEventListener("click", coverage.expand_contexts)
+    );
+
+    // Rebuild scroll markers when the window height changes.
+    window.addEventListener("resize", coverage.build_scroll_markers);
+};
+
+coverage.toggle_lines = function (event) {
+    const btn = event.target.closest("button");
+    const category = btn.value
+    const show = !btn.classList.contains("show_" + category);
+    coverage.set_line_visibilty(category, show);
+    coverage.build_scroll_markers();
+    coverage.filters[category] = show;
+    try {
+        localStorage.setItem(coverage.LINE_FILTERS_STORAGE, JSON.stringify(coverage.filters));
+    } catch(err) {}
+};
+
+coverage.set_line_visibilty = function (category, should_show) {
+    const cls = "show_" + category;
+    const btn = document.querySelector(".button_toggle_" + category);
+    if (btn) {
+        if (should_show) {
+            document.querySelectorAll("#source ." + category).forEach(e => e.classList.add(cls));
+            btn.classList.add(cls);
+        }
+        else {
+            document.querySelectorAll("#source ." + category).forEach(e => e.classList.remove(cls));
+            btn.classList.remove(cls);
+        }
+    }
+};
+
+// Return the nth line div.
+coverage.line_elt = function (n) {
+    return document.getElementById("t" + n)?.closest("p");
+};
+
+// Set the selection.  b and e are line numbers.
+coverage.set_sel = function (b, e) {
+    // The first line selected.
+    coverage.sel_begin = b;
+    // The next line not selected.
+    coverage.sel_end = (e === undefined) ? b+1 : e;
+};
+
+coverage.to_top = function () {
+    coverage.set_sel(0, 1);
+    coverage.scroll_window(0);
+};
+
+coverage.to_first_chunk = function () {
+    coverage.set_sel(0, 1);
+    coverage.to_next_chunk();
+};
+
+coverage.to_prev_file = function () {
+    window.location = document.getElementById("prevFileLink").href;
+}
+
+coverage.to_next_file = function () {
+    window.location = document.getElementById("nextFileLink").href;
+}
+
+coverage.to_index = function () {
+    location.href = document.getElementById("indexLink").href;
+}
+
+coverage.show_hide_help = function () {
+    const helpCheck = document.getElementById("help_panel_state")
+    helpCheck.checked = !helpCheck.checked;
+}
+
+// Return a string indicating what kind of chunk this line belongs to,
+// or null if not a chunk.
+coverage.chunk_indicator = function (line_elt) {
+    const classes = line_elt?.className;
+    if (!classes) {
+        return null;
+    }
+    const match = classes.match(/\bshow_\w+\b/);
+    if (!match) {
+        return null;
+    }
+    return match[0];
+};
+
+coverage.to_next_chunk = function () {
+    const c = coverage;
+
+    // Find the start of the next colored chunk.
+    var probe = c.sel_end;
+    var chunk_indicator, probe_line;
+    while (true) {
+        probe_line = c.line_elt(probe);
+        if (!probe_line) {
+            return;
+        }
+        chunk_indicator = c.chunk_indicator(probe_line);
+        if (chunk_indicator) {
+            break;
+        }
+        probe++;
+    }
+
+    // There's a next chunk, `probe` points to it.
+    var begin = probe;
+
+    // Find the end of this chunk.
+    var next_indicator = chunk_indicator;
+    while (next_indicator === chunk_indicator) {
+        probe++;
+        probe_line = c.line_elt(probe);
+        next_indicator = c.chunk_indicator(probe_line);
+    }
+    c.set_sel(begin, probe);
+    c.show_selection();
+};
+
+coverage.to_prev_chunk = function () {
+    const c = coverage;
+
+    // Find the end of the prev colored chunk.
+    var probe = c.sel_begin-1;
+    var probe_line = c.line_elt(probe);
+    if (!probe_line) {
+        return;
+    }
+    var chunk_indicator = c.chunk_indicator(probe_line);
+    while (probe > 1 && !chunk_indicator) {
+        probe--;
+        probe_line = c.line_elt(probe);
+        if (!probe_line) {
+            return;
+        }
+        chunk_indicator = c.chunk_indicator(probe_line);
+    }
+
+    // There's a prev chunk, `probe` points to its last line.
+    var end = probe+1;
+
+    // Find the beginning of this chunk.
+    var prev_indicator = chunk_indicator;
+    while (prev_indicator === chunk_indicator) {
+        probe--;
+        if (probe <= 0) {
+            return;
+        }
+        probe_line = c.line_elt(probe);
+        prev_indicator = c.chunk_indicator(probe_line);
+    }
+    c.set_sel(probe+1, end);
+    c.show_selection();
+};
+
+// Returns 0, 1, or 2: how many of the two ends of the selection are on
+// the screen right now?
+coverage.selection_ends_on_screen = function () {
+    if (coverage.sel_begin === 0) {
+        return 0;
+    }
+
+    const begin = coverage.line_elt(coverage.sel_begin);
+    const end = coverage.line_elt(coverage.sel_end-1);
+
+    return (
+        (checkVisible(begin) ? 1 : 0)
+        + (checkVisible(end) ? 1 : 0)
+    );
+};
+
+coverage.to_next_chunk_nicely = function () {
+    if (coverage.selection_ends_on_screen() === 0) {
+        // The selection is entirely off the screen:
+        // Set the top line on the screen as selection.
+
+        // This will select the top-left of the viewport
+        // As this is most likely the span with the line number we take the parent
+        const line = document.elementFromPoint(0, 0).parentElement;
+        if (line.parentElement !== document.getElementById("source")) {
+            // The element is not a source line but the header or similar
+            coverage.select_line_or_chunk(1);
+        } else {
+            // We extract the line number from the id
+            coverage.select_line_or_chunk(parseInt(line.id.substring(1), 10));
+        }
+    }
+    coverage.to_next_chunk();
+};
+
+coverage.to_prev_chunk_nicely = function () {
+    if (coverage.selection_ends_on_screen() === 0) {
+        // The selection is entirely off the screen:
+        // Set the lowest line on the screen as selection.
+
+        // This will select the bottom-left of the viewport
+        // As this is most likely the span with the line number we take the parent
+        const line = document.elementFromPoint(document.documentElement.clientHeight-1, 0).parentElement;
+        if (line.parentElement !== document.getElementById("source")) {
+            // The element is not a source line but the header or similar
+            coverage.select_line_or_chunk(coverage.lines_len);
+        } else {
+            // We extract the line number from the id
+            coverage.select_line_or_chunk(parseInt(line.id.substring(1), 10));
+        }
+    }
+    coverage.to_prev_chunk();
+};
+
+// Select line number lineno, or if it is in a colored chunk, select the
+// entire chunk
+coverage.select_line_or_chunk = function (lineno) {
+    var c = coverage;
+    var probe_line = c.line_elt(lineno);
+    if (!probe_line) {
+        return;
+    }
+    var the_indicator = c.chunk_indicator(probe_line);
+    if (the_indicator) {
+        // The line is in a highlighted chunk.
+        // Search backward for the first line.
+        var probe = lineno;
+        var indicator = the_indicator;
+        while (probe > 0 && indicator === the_indicator) {
+            probe--;
+            probe_line = c.line_elt(probe);
+            if (!probe_line) {
+                break;
+            }
+            indicator = c.chunk_indicator(probe_line);
+        }
+        var begin = probe + 1;
+
+        // Search forward for the last line.
+        probe = lineno;
+        indicator = the_indicator;
+        while (indicator === the_indicator) {
+            probe++;
+            probe_line = c.line_elt(probe);
+            indicator = c.chunk_indicator(probe_line);
+        }
+
+        coverage.set_sel(begin, probe);
+    }
+    else {
+        coverage.set_sel(lineno);
+    }
+};
+
+coverage.show_selection = function () {
+    // Highlight the lines in the chunk
+    document.querySelectorAll("#source .highlight").forEach(e => e.classList.remove("highlight"));
+    for (let probe = coverage.sel_begin; probe < coverage.sel_end; probe++) {
+        coverage.line_elt(probe).querySelector(".n").classList.add("highlight");
+    }
+
+    coverage.scroll_to_selection();
+};
+
+coverage.scroll_to_selection = function () {
+    // Scroll the page if the chunk isn't fully visible.
+    if (coverage.selection_ends_on_screen() < 2) {
+        const element = coverage.line_elt(coverage.sel_begin);
+        coverage.scroll_window(element.offsetTop - 60);
+    }
+};
+
+coverage.scroll_window = function (to_pos) {
+    window.scroll({top: to_pos, behavior: "smooth"});
+};
+
+coverage.init_scroll_markers = function () {
+    // Init some variables
+    coverage.lines_len = document.querySelectorAll("#source > p").length;
+
+    // Build html
+    coverage.build_scroll_markers();
+};
+
+coverage.build_scroll_markers = function () {
+    const temp_scroll_marker = document.getElementById("scroll_marker")
+    if (temp_scroll_marker) temp_scroll_marker.remove();
+    // Don't build markers if the window has no scroll bar.
+    if (document.body.scrollHeight <= window.innerHeight) {
+        return;
+    }
+
+    const marker_scale = window.innerHeight / document.body.scrollHeight;
+    const line_height = Math.min(Math.max(3, window.innerHeight / coverage.lines_len), 10);
+
+    let previous_line = -99, last_mark, last_top;
+
+    const scroll_marker = document.createElement("div");
+    scroll_marker.id = "scroll_marker";
+    document.getElementById("source").querySelectorAll(
+        "p.show_run, p.show_mis, p.show_exc, p.show_exc, p.show_par"
+    ).forEach(element => {
+        const line_top = Math.floor(element.offsetTop * marker_scale);
+        const line_number = parseInt(element.querySelector(".n a").id.substr(1));
+
+        if (line_number === previous_line + 1) {
+            // If this solid missed block just make previous mark higher.
+            last_mark.style.height = `${line_top + line_height - last_top}px`;
+        } else {
+            // Add colored line in scroll_marker block.
+            last_mark = document.createElement("div");
+            last_mark.id = `m${line_number}`;
+            last_mark.classList.add("marker");
+            last_mark.style.height = `${line_height}px`;
+            last_mark.style.top = `${line_top}px`;
+            scroll_marker.append(last_mark);
+            last_top = line_top;
+        }
+
+        previous_line = line_number;
+    });
+
+    // Append last to prevent layout calculation
+    document.body.append(scroll_marker);
+};
+
+coverage.wire_up_sticky_header = function () {
+    const header = document.querySelector("header");
+    const header_bottom = (
+        header.querySelector(".content h2").getBoundingClientRect().top -
+        header.getBoundingClientRect().top
+    );
+
+    function updateHeader() {
+        if (window.scrollY > header_bottom) {
+            header.classList.add("sticky");
+        } else {
+            header.classList.remove("sticky");
+        }
+    }
+
+    window.addEventListener("scroll", updateHeader);
+    updateHeader();
+};
+
+coverage.expand_contexts = function (e) {
+    var ctxs = e.target.parentNode.querySelector(".ctxs");
+
+    if (!ctxs.classList.contains("expanded")) {
+        var ctxs_text = ctxs.textContent;
+        var width = Number(ctxs_text[0]);
+        ctxs.textContent = "";
+        for (var i = 1; i < ctxs_text.length; i += width) {
+            key = ctxs_text.substring(i, i + width).trim();
+            ctxs.appendChild(document.createTextNode(contexts[key]));
+            ctxs.appendChild(document.createElement("br"));
+        }
+        ctxs.classList.add("expanded");
+    }
+};
+
+document.addEventListener("DOMContentLoaded", () => {
+    if (document.body.classList.contains("indexfile")) {
+        coverage.index_ready();
+    } else {
+        coverage.pyfile_ready();
+    }
+});
diff --git a/_static/codecov/d_040e78c194e497af_scaling_py.html b/_static/codecov/d_040e78c194e497af_scaling_py.html
new file mode 100644
index 00000000..199bb5a4
--- /dev/null
+++ b/_static/codecov/d_040e78c194e497af_scaling_py.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/transforms/scaling.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/transforms/scaling.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">15 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">15<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_e3bc015ca2131802_util_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">transforms</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">Transform</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">class</span> <span class="nam">MinMaxScale</span><span class="op">(</span><span class="nam">Transform</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">min_value</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">max_value</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">min_value</span> <span class="op">=</span> <span class="nam">min_value</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">max_value</span> <span class="op">=</span> <span class="nam">max_value</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">delta</span> <span class="op">=</span> <span class="nam">max_value</span> <span class="op">-</span> <span class="nam">min_value</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">target_min</span> <span class="op">=</span> <span class="op">-</span><span class="num">1.0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">target_max</span> <span class="op">=</span> <span class="num">1.0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">target_delta</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">target_max</span> <span class="op">-</span> <span class="nam">self</span><span class="op">.</span><span class="nam">target_min</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">tensor</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="key">return</span> <span class="op">(</span><span class="op">(</span><span class="nam">tensor</span> <span class="op">-</span> <span class="nam">self</span><span class="op">.</span><span class="nam">min_value</span><span class="op">)</span> <span class="op">/</span> <span class="nam">self</span><span class="op">.</span><span class="nam">delta</span><span class="op">)</span> <span class="op">*</span> <span class="nam">self</span><span class="op">.</span><span class="nam">target_delta</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">target_min</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">    <span class="key">def</span> <span class="nam">undo</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">tensor</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="key">return</span> <span class="op">(</span><span class="nam">tensor</span> <span class="op">-</span> <span class="nam">self</span><span class="op">.</span><span class="nam">target_min</span><span class="op">)</span> <span class="op">/</span> <span class="nam">self</span><span class="op">.</span><span class="nam">target_delta</span> <span class="op">*</span> <span class="nam">self</span><span class="op">.</span><span class="nam">delta</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">min_value</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_e3bc015ca2131802_util_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html b/_static/codecov/d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html
new file mode 100644
index 00000000..04dd3451
--- /dev/null
+++ b/_static/codecov/d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html
@@ -0,0 +1,128 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/utils/nested_dataclass_to_dict.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/utils/nested_dataclass_to_dict.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">14 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">14<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_040e78c194e497af_scaling_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_431cb39dc9496c7d_unique_id_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">dataclasses</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">fields</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">is_dataclass</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">    <span class="nam">Any</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">def</span> <span class="nam">dataclass_to_dict</span><span class="op">(</span><span class="nam">obj</span><span class="op">:</span> <span class="nam">Any</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Any</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="str">"""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="str">    Recursively converts a nested dataclass into a dictionary.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="str">    Args:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="str">        obj: The dataclass instance to convert.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="str">    Returns:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="str">        A dictionary representation of the dataclass, including nested dataclasses.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="str">    """</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="key">if</span> <span class="nam">is_dataclass</span><span class="op">(</span><span class="nam">obj</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="nam">result</span> <span class="op">=</span> <span class="op">{</span><span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="key">for</span> <span class="nam">field</span> <span class="key">in</span> <span class="nam">fields</span><span class="op">(</span><span class="nam">obj</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">            <span class="nam">value</span> <span class="op">=</span> <span class="nam">getattr</span><span class="op">(</span><span class="nam">obj</span><span class="op">,</span> <span class="nam">field</span><span class="op">.</span><span class="nam">name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">            <span class="nam">result</span><span class="op">[</span><span class="nam">field</span><span class="op">.</span><span class="nam">name</span><span class="op">]</span> <span class="op">=</span> <span class="nam">dataclass_to_dict</span><span class="op">(</span><span class="nam">value</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="key">return</span> <span class="nam">result</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">    <span class="key">elif</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">obj</span><span class="op">,</span> <span class="nam">list</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="key">return</span> <span class="op">[</span><span class="nam">dataclass_to_dict</span><span class="op">(</span><span class="nam">item</span><span class="op">)</span> <span class="key">for</span> <span class="nam">item</span> <span class="key">in</span> <span class="nam">obj</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">    <span class="key">elif</span> <span class="nam">isinstance</span><span class="op">(</span><span class="nam">obj</span><span class="op">,</span> <span class="nam">dict</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="key">return</span> <span class="op">{</span><span class="nam">key</span><span class="op">:</span> <span class="nam">dataclass_to_dict</span><span class="op">(</span><span class="nam">value</span><span class="op">)</span> <span class="key">for</span> <span class="nam">key</span><span class="op">,</span> <span class="nam">value</span> <span class="key">in</span> <span class="nam">obj</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">    <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">        <span class="key">return</span> <span class="nam">obj</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_040e78c194e497af_scaling_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_431cb39dc9496c7d_unique_id_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_431cb39dc9496c7d_unique_id_py.html b/_static/codecov/d_431cb39dc9496c7d_unique_id_py.html
new file mode 100644
index 00000000..c2eac968
--- /dev/null
+++ b/_static/codecov/d_431cb39dc9496c7d_unique_id_py.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/utils/unique_id.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/utils/unique_id.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">8 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">8<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="index.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">datetime</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">datetime</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">uuid</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">    <span class="nam">uuid4</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">class</span> <span class="nam">UniqueId</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="str">"""Unique ID."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">time_stamp</span><span class="op">:</span> <span class="nam">datetime</span><span class="op">.</span><span class="nam">time</span> <span class="op">=</span> <span class="nam">datetime</span><span class="op">.</span><span class="nam">now</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">        <span class="str">"""Unique ID in the format YYYY_MM_DD_HH_MM_SS-uuid4.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="str">        Args:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="str">            time_stamp: Time used for the first part of the ID.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="str">        """</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">        <span class="com"># time part</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">time_stamp</span> <span class="op">=</span> <span class="nam">time_stamp</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">uuid</span> <span class="op">=</span> <span class="nam">uuid4</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">    <span class="key">def</span> <span class="nam">__str__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">time_stamp</span><span class="op">.</span><span class="nam">strftime</span><span class="op">(</span><span class="str">"%Y_%m_%d_%H_%M_%S-"</span><span class="op">)</span> <span class="op">+</span> <span class="nam">str</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">uuid</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="index.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_7e8216966b2e3943_transmission_loss_compact_py.html b/_static/codecov/d_7e8216966b2e3943_transmission_loss_compact_py.html
new file mode 100644
index 00000000..470eff7c
--- /dev/null
+++ b/_static/codecov/d_7e8216966b2e3943_transmission_loss_compact_py.html
@@ -0,0 +1,162 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/data/transmission_loss/transmission_loss_compact.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/data/transmission_loss/transmission_loss_compact.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">23 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">23<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_exp_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">transmission_loss</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">get_tl_frame</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">get_transformations</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">    <span class="nam">get_unique_crystals</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">def</span> <span class="nam">get_tl_compact</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">    <span class="nam">df</span> <span class="op">=</span> <span class="nam">get_tl_frame</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="nam">unique_crystals</span> <span class="op">=</span> <span class="nam">get_unique_crystals</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="nam">compact_df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">    <span class="key">for</span> <span class="nam">_</span><span class="op">,</span> <span class="nam">crystal</span> <span class="key">in</span> <span class="nam">unique_crystals</span><span class="op">.</span><span class="nam">iterrows</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">tmp_df</span> <span class="op">=</span> <span class="nam">df</span><span class="op">[</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">            <span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"radius"</span><span class="op">]</span> <span class="op">==</span> <span class="nam">crystal</span><span class="op">[</span><span class="str">"radius"</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">            <span class="op">&amp;</span> <span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"inner_radius"</span><span class="op">]</span> <span class="op">==</span> <span class="nam">crystal</span><span class="op">[</span><span class="str">"inner_radius"</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">            <span class="op">&amp;</span> <span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"gap_width"</span><span class="op">]</span> <span class="op">==</span> <span class="nam">crystal</span><span class="op">[</span><span class="str">"gap_width"</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">c_df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">            <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">                <span class="str">"radius"</span><span class="op">:</span> <span class="nam">crystal</span><span class="op">[</span><span class="str">"radius"</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">                <span class="str">"inner_radius"</span><span class="op">:</span> <span class="nam">crystal</span><span class="op">[</span><span class="str">"inner_radius"</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">                <span class="str">"gap_width"</span><span class="op">:</span> <span class="nam">crystal</span><span class="op">[</span><span class="str">"gap_width"</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">                <span class="str">"frequencies"</span><span class="op">:</span> <span class="op">[</span><span class="nam">tmp_df</span><span class="op">[</span><span class="str">"frequency"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">                <span class="str">"min_frequency"</span><span class="op">:</span> <span class="nam">min</span><span class="op">(</span><span class="nam">tmp_df</span><span class="op">[</span><span class="str">"frequency"</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">                <span class="str">"max_frequency"</span><span class="op">:</span> <span class="nam">max</span><span class="op">(</span><span class="nam">tmp_df</span><span class="op">[</span><span class="str">"frequency"</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">                <span class="str">"transmission_losses"</span><span class="op">:</span> <span class="op">[</span><span class="nam">tmp_df</span><span class="op">[</span><span class="str">"transmission_loss"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">                <span class="str">"min_transmission_loss"</span><span class="op">:</span> <span class="nam">min</span><span class="op">(</span><span class="nam">tmp_df</span><span class="op">[</span><span class="str">"transmission_loss"</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">                <span class="str">"max_transmission_loss"</span><span class="op">:</span> <span class="nam">max</span><span class="op">(</span><span class="nam">tmp_df</span><span class="op">[</span><span class="str">"transmission_loss"</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">            <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">        <span class="nam">compact_df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="op">[</span><span class="nam">compact_df</span><span class="op">,</span> <span class="nam">c_df</span><span class="op">]</span><span class="op">,</span> <span class="nam">ignore_index</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="key">return</span> <span class="nam">compact_df</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"><span class="key">class</span> <span class="nam">TLDatasetCompact</span><span class="op">(</span><span class="nam">OperatorDataset</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">    <span class="str">"""Transmission loss dataset, with bigger evaluation space."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">get_tl_compact</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">        <span class="nam">x</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">            <span class="op">[</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"inner_radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"gap_width"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">            <span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">            <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">        <span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">        <span class="nam">u</span> <span class="op">=</span> <span class="nam">x</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">        <span class="nam">y</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"frequencies"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">        <span class="nam">v</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"transmission_losses"</span><span class="op">]</span><span class="op">)</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">        <span class="nam">transformations</span> <span class="op">=</span> <span class="nam">get_transformations</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">,</span> <span class="op">**</span><span class="nam">transformations</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_exp_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_7e8216966b2e3943_transmission_loss_exp_py.html b/_static/codecov/d_7e8216966b2e3943_transmission_loss_exp_py.html
new file mode 100644
index 00000000..a021ab24
--- /dev/null
+++ b/_static/codecov/d_7e8216966b2e3943_transmission_loss_exp_py.html
@@ -0,0 +1,137 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/data/transmission_loss/transmission_loss_exp.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/data/transmission_loss/transmission_loss_exp.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">16 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">16<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_compact_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_wave_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">transmission_loss</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">    <span class="nam">get_transformations</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">transmission_loss_compact</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">    <span class="nam">get_tl_compact</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">class</span> <span class="nam">TLDatasetCompactExp</span><span class="op">(</span><span class="nam">OperatorDataset</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">    <span class="str">"""Transmission loss dataset, with bigger evaluation space."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">get_tl_compact</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">x</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">            <span class="op">[</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"inner_radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"gap_width"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">            <span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">            <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">        <span class="nam">u</span> <span class="op">=</span> <span class="nam">x</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">        <span class="nam">y</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"frequencies"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="nam">v</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"transmission_losses"</span><span class="op">]</span><span class="op">)</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">        <span class="com"># exp part</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">        <span class="nam">v</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">clamp</span><span class="op">(</span><span class="nam">v</span><span class="op">,</span> <span class="nam">max</span><span class="op">=</span><span class="num">0.0</span><span class="op">)</span>  <span class="com"># clamp unphysical values over zero to zero</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">        <span class="nam">v</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">pow</span><span class="op">(</span><span class="nam">v</span><span class="op">,</span> <span class="num">10</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">        <span class="nam">transformations</span> <span class="op">=</span> <span class="nam">get_transformations</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">,</span> <span class="op">**</span><span class="nam">transformations</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_compact_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_wave_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_7e8216966b2e3943_transmission_loss_py.html b/_static/codecov/d_7e8216966b2e3943_transmission_loss_py.html
new file mode 100644
index 00000000..56cb74e7
--- /dev/null
+++ b/_static/codecov/d_7e8216966b2e3943_transmission_loss_py.html
@@ -0,0 +1,194 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/data/transmission_loss/transmission_loss.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/data/transmission_loss/transmission_loss.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">51 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">51<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_8650266d82634dfb_params_to_indicator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_compact_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">Dict</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">transforms</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="nam">Transform</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">transforms</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">    <span class="nam">MinMaxScale</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="nam">FILTER_COLS</span> <span class="op">=</span> <span class="op">[</span><span class="str">"radius"</span><span class="op">,</span> <span class="str">"inner_radius"</span><span class="op">,</span> <span class="str">"gap_width"</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">def</span> <span class="nam">get_tl_from_path</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="key">if</span> <span class="nam">path</span><span class="op">.</span><span class="nam">is_file</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">read_csv</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="nam">np</span><span class="op">.</span><span class="nam">float32</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">    <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="key">for</span> <span class="nam">file</span> <span class="key">in</span> <span class="nam">path</span><span class="op">.</span><span class="nam">rglob</span><span class="op">(</span><span class="str">"*.csv"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">            <span class="nam">df_tmp</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">read_csv</span><span class="op">(</span><span class="nam">file</span><span class="op">,</span> <span class="nam">dtype</span><span class="op">=</span><span class="nam">np</span><span class="op">.</span><span class="nam">float32</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">            <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="op">[</span><span class="nam">df</span><span class="op">,</span> <span class="nam">df_tmp</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">    <span class="key">return</span> <span class="nam">df</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="key">def</span> <span class="nam">get_unique_crystals</span><span class="op">(</span><span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">)</span> <span class="op">-></span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">    <span class="key">return</span> <span class="nam">df</span><span class="op">[</span><span class="nam">FILTER_COLS</span><span class="op">]</span><span class="op">.</span><span class="nam">drop_duplicates</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"><span class="key">def</span> <span class="nam">get_n_unique</span><span class="op">(</span><span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">    <span class="key">if</span> <span class="nam">n_samples</span> <span class="op">==</span> <span class="op">-</span><span class="num">1</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="key">return</span> <span class="nam">df</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="nam">unique_crystals</span> <span class="op">=</span> <span class="nam">get_unique_crystals</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">    <span class="nam">unique_crystals</span> <span class="op">=</span> <span class="nam">unique_crystals</span><span class="op">.</span><span class="nam">sample</span><span class="op">(</span><span class="nam">n_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">    <span class="key">return</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">merge</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">unique_crystals</span><span class="op">,</span> <span class="nam">on</span><span class="op">=</span><span class="nam">FILTER_COLS</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t"><span class="key">def</span> <span class="nam">get_tl_frame</span><span class="op">(</span><span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">    <span class="nam">df</span> <span class="op">=</span> <span class="nam">get_tl_from_path</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">    <span class="key">return</span> <span class="nam">get_n_unique</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t"><span class="key">def</span> <span class="nam">get_transformations</span><span class="op">(</span><span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">u</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">v</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Dict</span><span class="op">[</span><span class="nam">str</span><span class="op">,</span> <span class="nam">Transform</span><span class="op">]</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">    <span class="nam">x_tmp</span> <span class="op">=</span> <span class="nam">x</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">x</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">    <span class="nam">x_min</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">x_tmp</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">    <span class="nam">x_max</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">x_tmp</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">    <span class="nam">u_tmp</span> <span class="op">=</span> <span class="nam">u</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">u</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">    <span class="nam">u_min</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">u_tmp</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">    <span class="nam">u_max</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">u_tmp</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">    <span class="nam">y_tmp</span> <span class="op">=</span> <span class="nam">y</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">    <span class="nam">y_min</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">y_tmp</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">    <span class="nam">y_max</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">y_tmp</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">    <span class="nam">v_tmp</span> <span class="op">=</span> <span class="nam">v</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">v</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">    <span class="nam">v_min</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">v_tmp</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">    <span class="nam">v_max</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">v_tmp</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">    <span class="key">return</span> <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">        <span class="str">"x_transform"</span><span class="op">:</span> <span class="nam">MinMaxScale</span><span class="op">(</span><span class="nam">x_min</span><span class="op">,</span> <span class="nam">x_max</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">        <span class="str">"u_transform"</span><span class="op">:</span> <span class="nam">MinMaxScale</span><span class="op">(</span><span class="nam">u_min</span><span class="op">,</span> <span class="nam">u_max</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">        <span class="str">"y_transform"</span><span class="op">:</span> <span class="nam">MinMaxScale</span><span class="op">(</span><span class="nam">y_min</span><span class="op">,</span> <span class="nam">y_max</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">        <span class="str">"v_transform"</span><span class="op">:</span> <span class="nam">MinMaxScale</span><span class="op">(</span><span class="nam">v_min</span><span class="op">,</span> <span class="nam">v_max</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">    <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t"><span class="key">class</span> <span class="nam">TLDataset</span><span class="op">(</span><span class="nam">OperatorDataset</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">        <span class="com"># retrieve data</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">get_tl_frame</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t">        <span class="nam">x</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t">            <span class="op">[</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"inner_radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"gap_width"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t">            <span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t">            <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t">        <span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t">        <span class="nam">u</span> <span class="op">=</span> <span class="nam">x</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t">        <span class="nam">y</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"frequency"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t">        <span class="nam">v</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"transmission_loss"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t">        <span class="nam">transformations</span> <span class="op">=</span> <span class="nam">get_transformations</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">,</span> <span class="op">**</span><span class="nam">transformations</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_8650266d82634dfb_params_to_indicator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_compact_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_7e8216966b2e3943_transmission_loss_wave_py.html b/_static/codecov/d_7e8216966b2e3943_transmission_loss_wave_py.html
new file mode 100644
index 00000000..f89678e7
--- /dev/null
+++ b/_static/codecov/d_7e8216966b2e3943_transmission_loss_wave_py.html
@@ -0,0 +1,169 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/data/transmission_loss/transmission_loss_wave.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/data/transmission_loss/transmission_loss_wave.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">35 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">35<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_exp_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_99aac0089c5f15d8_error_metrics_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">Callable</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">numpy</span> <span class="key">as</span> <span class="nam">np</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">transmission_loss</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="nam">get_transformations</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">transmission_loss_compact</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">    <span class="nam">get_tl_compact</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="key">def</span> <span class="nam">simple_sine_encoding</span><span class="op">(</span><span class="nam">u</span><span class="op">,</span> <span class="nam">x</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">    <span class="nam">vals</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">einsum</span><span class="op">(</span><span class="str">"abc,ade->adc"</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">x</span><span class="op">)</span>  <span class="com"># different modes for the properties</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">    <span class="com"># min-max scale all values</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">    <span class="nam">min_vals</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">vals</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">vals</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="nam">max_vals</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">vals</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">vals</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">    <span class="nam">vals</span> <span class="op">=</span> <span class="op">(</span><span class="op">(</span><span class="nam">vals</span> <span class="op">-</span> <span class="nam">min_vals</span><span class="op">)</span> <span class="op">/</span> <span class="op">(</span><span class="nam">max_vals</span> <span class="op">-</span> <span class="nam">min_vals</span><span class="op">)</span> <span class="op">+</span> <span class="num">1</span><span class="op">)</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">pi</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="nam">x_min</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">x</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">    <span class="nam">x_max</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">x</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">    <span class="nam">x_scaled</span> <span class="op">=</span> <span class="op">(</span><span class="op">(</span><span class="nam">x</span> <span class="op">-</span> <span class="nam">x_min</span><span class="op">)</span> <span class="op">/</span> <span class="op">(</span><span class="nam">x_max</span> <span class="op">-</span> <span class="nam">x_min</span><span class="op">)</span> <span class="op">-</span> <span class="num">0.5</span><span class="op">)</span> <span class="op">*</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">    <span class="key">return</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">sin</span><span class="op">(</span><span class="nam">x_scaled</span> <span class="op">*</span> <span class="nam">vals</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="key">def</span> <span class="nam">gaussian_modulated_sine_encoding</span><span class="op">(</span><span class="nam">u</span><span class="op">,</span> <span class="nam">x</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">    <span class="com"># leads to massive overfitting</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">    <span class="nam">alpha</span> <span class="op">=</span> <span class="num">5</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">    <span class="nam">min_u</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">u</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">u</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">    <span class="nam">max_u</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">u</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">u</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">    <span class="nam">u_scaled</span> <span class="op">=</span> <span class="op">(</span><span class="op">(</span><span class="nam">u</span> <span class="op">-</span> <span class="nam">min_u</span><span class="op">)</span> <span class="op">/</span> <span class="op">(</span><span class="nam">max_u</span> <span class="op">-</span> <span class="nam">min_u</span><span class="op">)</span> <span class="op">+</span> <span class="num">1</span><span class="op">)</span> <span class="op">*</span> <span class="num">2</span>  <span class="com"># [1, 2]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="nam">min_x</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">x</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">x</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">    <span class="nam">max_x</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">max</span><span class="op">(</span><span class="nam">x</span><span class="op">.</span><span class="nam">view</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">x</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">    <span class="nam">x_scaled</span> <span class="op">=</span> <span class="op">(</span><span class="op">(</span><span class="nam">x</span> <span class="op">-</span> <span class="nam">min_x</span><span class="op">)</span> <span class="op">/</span> <span class="op">(</span><span class="nam">max_x</span> <span class="op">-</span> <span class="nam">min_x</span><span class="op">)</span> <span class="op">-</span> <span class="num">0.5</span><span class="op">)</span> <span class="op">*</span> <span class="num">2</span>  <span class="com"># [-1, 1]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">    <span class="key">return</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">exp</span><span class="op">(</span><span class="op">-</span><span class="nam">alpha</span> <span class="op">*</span> <span class="nam">x_scaled</span><span class="op">**</span><span class="num">2</span><span class="op">)</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">sin</span><span class="op">(</span><span class="num">4</span> <span class="op">*</span> <span class="nam">np</span><span class="op">.</span><span class="nam">pi</span> <span class="op">*</span> <span class="nam">u_scaled</span> <span class="op">*</span> <span class="op">(</span><span class="nam">x_scaled</span> <span class="op">+</span> <span class="num">1</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"><span class="key">class</span> <span class="nam">TLDatasetCompactWave</span><span class="op">(</span><span class="nam">OperatorDataset</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">    <span class="str">"""Transmission loss dataset, for use with FNO."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">wave_encoding</span><span class="op">:</span> <span class="nam">Callable</span> <span class="op">=</span> <span class="nam">simple_sine_encoding</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">get_tl_compact</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">        <span class="nam">x</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"frequencies"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">        <span class="nam">u</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">            <span class="op">[</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"inner_radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"gap_width"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">            <span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">            <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">        <span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">        <span class="nam">y</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"frequencies"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">        <span class="nam">v</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"transmission_losses"</span><span class="op">]</span><span class="op">)</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">        <span class="com"># apply wave encoding</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">        <span class="nam">u</span> <span class="op">=</span> <span class="nam">wave_encoding</span><span class="op">(</span><span class="nam">u</span><span class="op">,</span> <span class="nam">x</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">        <span class="nam">transformations</span> <span class="op">=</span> <span class="nam">get_transformations</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">,</span> <span class="op">**</span><span class="nam">transformations</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_exp_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_99aac0089c5f15d8_error_metrics_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_8650266d82634dfb_c_shape_py.html b/_static/codecov/d_8650266d82634dfb_c_shape_py.html
new file mode 100644
index 00000000..810297eb
--- /dev/null
+++ b/_static/codecov/d_8650266d82634dfb_c_shape_py.html
@@ -0,0 +1,171 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/data/indicator_function/c_shape.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/data/indicator_function/c_shape.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">34 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">34<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_a94113ed293c43ea_benchmark_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_8650266d82634dfb_indicator_to_tl_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">class</span> <span class="nam">CShape</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">        <span class="nam">outer_radius</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="op">[</span><span class="num">6.5e-3</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">        <span class="nam">inner_radius</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="op">[</span><span class="num">5e-3</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">        <span class="nam">gap_width</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="op">[</span><span class="num">4e-3</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">        <span class="nam">grid_size</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="op">[</span><span class="num">22e-3</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">        <span class="nam">n_circle_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1000</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">        <span class="nam">n_gap_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">100</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">outer_radius</span> <span class="op">=</span> <span class="nam">outer_radius</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">inner_radius</span> <span class="op">=</span> <span class="nam">inner_radius</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">gap_width</span> <span class="op">=</span> <span class="nam">gap_width</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">center</span> <span class="op">=</span> <span class="op">(</span><span class="nam">grid_size</span> <span class="op">/</span> <span class="num">2</span><span class="op">)</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">ones</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">            <span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="com"># Compute angle for gap boundaries</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">theta_gap_outer</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">asin</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gap_width</span> <span class="op">/</span> <span class="num">2</span> <span class="op">/</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outer_radius</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="nam">theta_gap_inner</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">asin</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">gap_width</span> <span class="op">/</span> <span class="num">2</span> <span class="op">/</span> <span class="nam">self</span><span class="op">.</span><span class="nam">inner_radius</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="com"># Define ranges for circle sampling excluding the gap</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">theta_outer</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">linspace</span><span class="op">(</span><span class="nam">theta_gap_outer</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="num">2</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">pi</span> <span class="op">-</span> <span class="nam">theta_gap_outer</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">n_circle_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">theta_inner</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">linspace</span><span class="op">(</span><span class="nam">theta_gap_inner</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="num">2</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">pi</span> <span class="op">-</span> <span class="nam">theta_gap_inner</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">n_circle_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="com"># Sample points on the outer and inner circles</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">        <span class="nam">outer_circle_x</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outer_radius</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cos</span><span class="op">(</span><span class="nam">theta_outer</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">        <span class="nam">outer_circle_y</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outer_radius</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">sin</span><span class="op">(</span><span class="nam">theta_outer</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="nam">outer_circle</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">[</span><span class="nam">outer_circle_x</span><span class="op">,</span> <span class="nam">outer_circle_y</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">        <span class="nam">outer_circle</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">center</span> <span class="op">-</span> <span class="nam">outer_circle</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">        <span class="nam">inner_circle_x</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">inner_radius</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cos</span><span class="op">(</span><span class="nam">theta_inner</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">        <span class="nam">inner_circle_y</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">inner_radius</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">sin</span><span class="op">(</span><span class="nam">theta_inner</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">        <span class="nam">inner_circle</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">[</span><span class="nam">inner_circle_x</span><span class="op">,</span> <span class="nam">inner_circle_y</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">        <span class="nam">inner_circle</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">center</span> <span class="op">-</span> <span class="nam">inner_circle</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="com"># Sample points on the gap edges</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">        <span class="nam">gap_x</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">linspace</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">center</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">-</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outer_radius</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cos</span><span class="op">(</span><span class="nam">theta_gap_outer</span><span class="op">)</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">center</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">-</span> <span class="nam">self</span><span class="op">.</span><span class="nam">inner_radius</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cos</span><span class="op">(</span><span class="nam">theta_gap_inner</span><span class="op">)</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">            <span class="nam">n_gap_samples</span> <span class="op">//</span> <span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="nam">gap_y</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">gap_width</span> <span class="op">/</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">        <span class="com"># Concatenate all samples</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">samples</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cat</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">            <span class="op">[</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">                <span class="nam">outer_circle</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">                <span class="nam">inner_circle</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">[</span><span class="nam">gap_x</span><span class="op">,</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">ones</span><span class="op">(</span><span class="nam">gap_x</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> <span class="op">*</span> <span class="nam">self</span><span class="op">.</span><span class="nam">center</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">+</span> <span class="nam">gap_y</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">[</span><span class="nam">gap_x</span><span class="op">,</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">ones</span><span class="op">(</span><span class="nam">gap_x</span><span class="op">.</span><span class="nam">shape</span><span class="op">)</span> <span class="op">*</span> <span class="nam">self</span><span class="op">.</span><span class="nam">center</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">-</span> <span class="nam">gap_y</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">            <span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">            <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">    <span class="key">def</span> <span class="nam">__call__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">        <span class="nam">distance</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cdist</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">        <span class="nam">distance</span><span class="op">,</span> <span class="nam">_</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">min</span><span class="op">(</span><span class="nam">distance</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">        <span class="nam">dist_from_center</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cdist</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">center</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">0</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">squeeze</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">        <span class="nam">is_in_outer</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">less_equal</span><span class="op">(</span><span class="nam">dist_from_center</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">outer_radius</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">        <span class="nam">is_outside_inner</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">greater_equal</span><span class="op">(</span><span class="nam">dist_from_center</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">inner_radius</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">        <span class="nam">is_right</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">greater_equal</span><span class="op">(</span><span class="nam">x</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">center</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">        <span class="nam">is_gap_height</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">greater_equal</span><span class="op">(</span><span class="nam">torch</span><span class="op">.</span><span class="nam">abs</span><span class="op">(</span><span class="nam">x</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="num">1</span><span class="op">]</span> <span class="op">-</span> <span class="nam">self</span><span class="op">.</span><span class="nam">center</span><span class="op">[</span><span class="num">1</span><span class="op">]</span><span class="op">)</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">gap_width</span> <span class="op">/</span> <span class="num">2</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">        <span class="nam">is_outside_gap</span> <span class="op">=</span> <span class="nam">is_right</span> <span class="op">|</span> <span class="nam">is_gap_height</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">        <span class="nam">mask</span> <span class="op">=</span> <span class="nam">is_in_outer</span> <span class="op">&amp;</span> <span class="nam">is_outside_inner</span> <span class="op">&amp;</span> <span class="nam">is_outside_gap</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">        <span class="nam">distance</span><span class="op">[</span><span class="nam">mask</span><span class="op">]</span> <span class="op">*=</span> <span class="op">-</span><span class="num">1</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">        <span class="key">return</span> <span class="nam">distance</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_a94113ed293c43ea_benchmark_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_8650266d82634dfb_indicator_to_tl_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_8650266d82634dfb_indicator_to_tl_py.html b/_static/codecov/d_8650266d82634dfb_indicator_to_tl_py.html
new file mode 100644
index 00000000..03a0ac2e
--- /dev/null
+++ b/_static/codecov/d_8650266d82634dfb_indicator_to_tl_py.html
@@ -0,0 +1,145 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/data/indicator_function/indicator_to_tl.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/data/indicator_function/indicator_to_tl.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">18 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">18<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_8650266d82634dfb_c_shape_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_8650266d82634dfb_params_to_indicator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">discrete</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">    <span class="nam">UniformBoxSampler</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">discrete</span><span class="op">.</span><span class="nam">box_sampler</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">BoxSampler</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">data</span><span class="op">.</span><span class="nam">transmission_loss</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">    <span class="nam">get_tl_compact</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">    <span class="nam">get_transformations</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">params_to_indicator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="nam">params_to_indicator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t"><span class="key">class</span> <span class="nam">IndicatorTLDataset</span><span class="op">(</span><span class="nam">OperatorDataset</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span> <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">sampler</span><span class="op">:</span> <span class="nam">BoxSampler</span> <span class="op">=</span> <span class="key">None</span><span class="op">,</span> <span class="nam">n_box_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">2</span><span class="op">**</span><span class="num">10</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="com"># retrieve data</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">get_tl_compact</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">        <span class="com"># params</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="key">if</span> <span class="nam">sampler</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">            <span class="nam">sampler</span> <span class="op">=</span> <span class="nam">UniformBoxSampler</span><span class="op">(</span><span class="op">[</span><span class="num">0.0</span><span class="op">,</span> <span class="num">0.0</span><span class="op">]</span><span class="op">,</span> <span class="op">[</span><span class="num">22e-3</span><span class="op">,</span> <span class="num">22e-3</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">        <span class="nam">params</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">            <span class="op">[</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"inner_radius"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">                <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"gap_width"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">            <span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">            <span class="nam">dim</span><span class="op">=</span><span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">        <span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">3</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">        <span class="nam">x</span><span class="op">,</span> <span class="nam">u</span> <span class="op">=</span> <span class="nam">params_to_indicator</span><span class="op">(</span><span class="nam">params</span><span class="op">,</span> <span class="nam">sampler</span><span class="op">,</span> <span class="nam">n_box_samples</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">        <span class="nam">y</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"frequencies"</span><span class="op">]</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">        <span class="nam">v</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"transmission_losses"</span><span class="op">]</span><span class="op">)</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="nam">len</span><span class="op">(</span><span class="nam">df</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="nam">transformations</span> <span class="op">=</span> <span class="nam">get_transformations</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span><span class="op">,</span> <span class="op">**</span><span class="nam">transformations</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_8650266d82634dfb_c_shape_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_8650266d82634dfb_params_to_indicator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_8650266d82634dfb_params_to_indicator_py.html b/_static/codecov/d_8650266d82634dfb_params_to_indicator_py.html
new file mode 100644
index 00000000..e56160ff
--- /dev/null
+++ b/_static/codecov/d_8650266d82634dfb_params_to_indicator_py.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/data/indicator_function/params_to_indicator.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/data/indicator_function/params_to_indicator.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">12 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">12<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_8650266d82634dfb_indicator_to_tl_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">Tuple</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">discrete</span><span class="op">.</span><span class="nam">box_sampler</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">BoxSampler</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">c_shape</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">CShape</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="key">def</span> <span class="nam">params_to_indicator</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">    <span class="nam">u</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">sampler</span><span class="op">:</span> <span class="nam">BoxSampler</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">2</span><span class="op">**</span><span class="num">10</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="op">)</span> <span class="op">-></span> <span class="op">(</span><span class="nam">Tuple</span><span class="op">)</span><span class="op">[</span><span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">]</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="nam">n_observations</span> <span class="op">=</span> <span class="nam">u</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="nam">x</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">stack</span><span class="op">(</span><span class="op">[</span><span class="nam">sampler</span><span class="op">(</span><span class="nam">n_samples</span><span class="op">)</span> <span class="key">for</span> <span class="nam">_</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">n_observations</span><span class="op">)</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="num">0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">    <span class="nam">indicator</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">empty</span><span class="op">(</span><span class="op">(</span><span class="nam">n_observations</span><span class="op">,</span> <span class="nam">n_samples</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">    <span class="key">for</span> <span class="nam">i</span><span class="op">,</span> <span class="op">(</span><span class="nam">xi</span><span class="op">,</span> <span class="nam">ui</span><span class="op">)</span> <span class="key">in</span> <span class="nam">enumerate</span><span class="op">(</span><span class="nam">zip</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">)</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">        <span class="nam">shape</span> <span class="op">=</span> <span class="nam">CShape</span><span class="op">(</span><span class="nam">outer_radius</span><span class="op">=</span><span class="nam">ui</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="num">0</span><span class="op">]</span><span class="op">,</span> <span class="nam">inner_radius</span><span class="op">=</span><span class="nam">ui</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="num">1</span><span class="op">]</span><span class="op">,</span> <span class="nam">gap_width</span><span class="op">=</span><span class="nam">ui</span><span class="op">[</span><span class="op">:</span><span class="op">,</span> <span class="num">2</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">indicator</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span> <span class="op">=</span> <span class="nam">shape</span><span class="op">(</span><span class="nam">xi</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="key">return</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">indicator</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_8650266d82634dfb_indicator_to_tl_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_8dbc7d2850ae11b9_low_pass_filter_py.html b/_static/codecov/d_8dbc7d2850ae11b9_low_pass_filter_py.html
new file mode 100644
index 00000000..baf00aae
--- /dev/null
+++ b/_static/codecov/d_8dbc7d2850ae11b9_low_pass_filter_py.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/preprocessing/low_pass_filter.py: 96%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/preprocessing/low_pass_filter.py</b>:
+            <span class="pc_cov">96%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">28 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">27<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">1<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_utils_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_e3bc015ca2131802_average_metric_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">class</span> <span class="nam">LowPassFilter1D</span><span class="op">(</span><span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">kernel_size</span><span class="op">,</span> <span class="nam">cutoff_frequency</span><span class="op">,</span> <span class="nam">sampling_rate</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">        <span class="key">if</span> <span class="nam">kernel_size</span> <span class="op">%</span> <span class="num">2</span> <span class="op">==</span> <span class="num">0</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">            <span class="nam">kernel_size</span> <span class="op">+=</span> <span class="num">1</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">kernel_size</span> <span class="op">=</span> <span class="nam">kernel_size</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">        <span class="nam">nyquist_rate</span> <span class="op">=</span> <span class="num">0.5</span> <span class="op">*</span> <span class="nam">sampling_rate</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">        <span class="nam">normalized_cutoff</span> <span class="op">=</span> <span class="nam">cutoff_frequency</span> <span class="op">/</span> <span class="nam">nyquist_rate</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">        <span class="com"># Generate the filter kernel</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">        <span class="nam">ideal_response</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="nam">kernel_size</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">        <span class="nam">center</span> <span class="op">=</span> <span class="nam">kernel_size</span> <span class="op">//</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">        <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">kernel_size</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">            <span class="key">if</span> <span class="nam">i</span> <span class="op">==</span> <span class="nam">center</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">                <span class="nam">ideal_response</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span> <span class="op">=</span> <span class="num">2</span> <span class="op">*</span> <span class="nam">normalized_cutoff</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">            <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">                <span class="nam">ideal_response</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">sin</span><span class="op">(</span><span class="nam">torch</span><span class="op">.</span><span class="nam">tensor</span><span class="op">(</span><span class="num">2</span> <span class="op">*</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">pi</span> <span class="op">*</span> <span class="nam">normalized_cutoff</span> <span class="op">*</span> <span class="op">(</span><span class="nam">i</span> <span class="op">-</span> <span class="nam">center</span><span class="op">)</span><span class="op">)</span><span class="op">)</span> <span class="op">/</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">                    <span class="nam">torch</span><span class="op">.</span><span class="nam">pi</span> <span class="op">*</span> <span class="op">(</span><span class="nam">i</span> <span class="op">-</span> <span class="nam">center</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">                <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">window</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">hann_window</span><span class="op">(</span><span class="nam">kernel_size</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">filter_kernel</span> <span class="op">=</span> <span class="nam">ideal_response</span> <span class="op">*</span> <span class="nam">window</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">filter_kernel</span> <span class="op">/=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">sum</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">filter_kernel</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">        <span class="nam">output_length</span> <span class="op">=</span> <span class="nam">len</span><span class="op">(</span><span class="nam">x</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">        <span class="nam">output</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">empty</span><span class="op">(</span><span class="nam">output_length</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">        <span class="nam">x_padded</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">zeros</span><span class="op">(</span><span class="nam">output_length</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">kernel_size</span> <span class="op">-</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">        <span class="nam">x_padded</span><span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">kernel_size</span> <span class="op">//</span> <span class="num">2</span> <span class="op">:</span> <span class="op">-</span><span class="nam">self</span><span class="op">.</span><span class="nam">kernel_size</span> <span class="op">//</span> <span class="num">2</span> <span class="op">+</span> <span class="num">1</span><span class="op">]</span> <span class="op">=</span> <span class="nam">x</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">        <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">output_length</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">            <span class="nam">j</span> <span class="op">=</span> <span class="nam">i</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">kernel_size</span> <span class="op">//</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">            <span class="nam">window</span> <span class="op">=</span> <span class="nam">x_padded</span><span class="op">[</span><span class="nam">j</span> <span class="op">-</span> <span class="nam">self</span><span class="op">.</span><span class="nam">kernel_size</span> <span class="op">//</span> <span class="num">2</span> <span class="op">:</span> <span class="nam">j</span> <span class="op">+</span> <span class="nam">self</span><span class="op">.</span><span class="nam">kernel_size</span> <span class="op">//</span> <span class="num">2</span> <span class="op">+</span> <span class="num">1</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">            <span class="nam">output</span><span class="op">[</span><span class="nam">i</span><span class="op">]</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">dot</span><span class="op">(</span><span class="nam">window</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">filter_kernel</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">        <span class="key">return</span> <span class="nam">output</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_utils_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_e3bc015ca2131802_average_metric_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_deep_dot_operator_py.html b/_static/codecov/d_93093ff38057b02c_deep_dot_operator_py.html
new file mode 100644
index 00000000..8316384f
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_deep_dot_operator_py.html
@@ -0,0 +1,170 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/deep_dot_operator.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/deep_dot_operator.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">28 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">28<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_dfcfe80011fec8d7_residual_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_neural_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">networks</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">    <span class="nam">ResNet</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">operator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">class</span> <span class="nam">DeepDotOperator</span><span class="op">(</span><span class="nam">Operator</span><span class="op">,</span> <span class="nam">NeuralOperator</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="nam">branch_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">16</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">branch_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="nam">trunk_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">16</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">        <span class="nam">trunk_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">dot_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">16</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">dot_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">act</span><span class="op">:</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Tanh</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="nam">stride</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">        <span class="nam">NeuralOperator</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">            <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">            <span class="nam">properties</span><span class="op">=</span><span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">                <span class="str">"branch_width"</span><span class="op">:</span> <span class="nam">branch_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">                <span class="str">"branch_depth"</span><span class="op">:</span> <span class="nam">branch_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">                <span class="str">"trunk_width"</span><span class="op">:</span> <span class="nam">trunk_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">                <span class="str">"trunk_depth"</span><span class="op">:</span> <span class="nam">trunk_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">                <span class="str">"dot_width"</span><span class="op">:</span> <span class="nam">dot_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">                <span class="str">"dot_depth"</span><span class="op">:</span> <span class="nam">dot_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">                <span class="str">"act"</span><span class="op">:</span> <span class="nam">act</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">                <span class="str">"stride"</span><span class="op">:</span> <span class="nam">stride</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">            <span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="com"># branch network</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">        <span class="nam">dot_branch_width</span> <span class="op">=</span> <span class="nam">dot_width</span> <span class="op">//</span> <span class="num">2</span> <span class="op">+</span> <span class="nam">dot_depth</span> <span class="op">%</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">num</span> <span class="op">*</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">branch_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">branch_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">branch_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">branch_width</span><span class="op">,</span> <span class="nam">dot_branch_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">branch_lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">        <span class="com"># root branch convolution</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">root_branch_conv</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Conv1d</span><span class="op">(</span><span class="num">2</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">        <span class="com"># trunk network</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">        <span class="nam">dot_trunk_width</span> <span class="op">=</span> <span class="nam">dot_width</span> <span class="op">//</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">y</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">trunk_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">trunk_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">trunk_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">trunk_width</span><span class="op">,</span> <span class="nam">dot_trunk_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">trunk_lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">        <span class="com"># deep dot</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">dot_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">dot_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">dot_width</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">v</span><span class="op">.</span><span class="nam">dim</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">u</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">        <span class="nam">branch_out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch</span><span class="op">(</span><span class="nam">u</span><span class="op">.</span><span class="nam">flatten</span><span class="op">(</span><span class="op">-</span><span class="num">2</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">expand</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">        <span class="nam">trunk_out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk</span><span class="op">(</span><span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">        <span class="nam">dot_cat</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cat</span><span class="op">(</span><span class="op">[</span><span class="nam">branch_out</span><span class="op">,</span> <span class="nam">trunk_out</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot</span><span class="op">(</span><span class="nam">dot_cat</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_dfcfe80011fec8d7_residual_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_neural_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_deep_neural_operator_py.html b/_static/codecov/d_93093ff38057b02c_deep_neural_operator_py.html
new file mode 100644
index 00000000..6999cdec
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_deep_neural_operator_py.html
@@ -0,0 +1,148 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/deep_neural_operator.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/deep_neural_operator.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">21 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">21<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_dot_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_o_fno_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">Optional</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">networks</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="nam">ResNet</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">operator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="key">class</span> <span class="nam">DeepNeuralOperator</span><span class="op">(</span><span class="nam">Operator</span><span class="op">,</span> <span class="nam">NeuralOperator</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">        <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">32</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">stride</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="nam">act</span><span class="op">:</span> <span class="nam">Optional</span><span class="op">[</span><span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">]</span> <span class="op">=</span> <span class="key">None</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">        <span class="key">if</span> <span class="nam">act</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">            <span class="nam">act</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Tanh</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">        <span class="nam">NeuralOperator</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">            <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">            <span class="nam">properties</span><span class="op">=</span><span class="op">{</span><span class="str">"width"</span><span class="op">:</span> <span class="nam">width</span><span class="op">,</span> <span class="str">"depth"</span><span class="op">:</span> <span class="nam">depth</span><span class="op">,</span> <span class="str">"stride"</span><span class="op">:</span> <span class="nam">stride</span><span class="op">,</span> <span class="str">"act"</span><span class="op">:</span> <span class="nam">act</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span><span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">x</span><span class="op">.</span><span class="nam">dim</span> <span class="op">*</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">x</span><span class="op">.</span><span class="nam">num</span> <span class="op">+</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">dim</span> <span class="op">*</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">num</span> <span class="op">+</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">y</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">depth</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">width</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">v</span><span class="op">.</span><span class="nam">dim</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">net</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">u</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="nam">u_repeated</span> <span class="op">=</span> <span class="nam">u</span><span class="op">.</span><span class="nam">flatten</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">2</span><span class="op">)</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">expand</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">        <span class="nam">x_repeated</span> <span class="op">=</span> <span class="nam">x</span><span class="op">.</span><span class="nam">flatten</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="num">2</span><span class="op">)</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">expand</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">        <span class="nam">net_input</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cat</span><span class="op">(</span><span class="op">[</span><span class="nam">x_repeated</span><span class="op">,</span> <span class="nam">u_repeated</span><span class="op">,</span> <span class="nam">y</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">net</span><span class="op">(</span><span class="nam">net_input</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_dot_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_o_fno_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_deep_o_fno_py.html b/_static/codecov/d_93093ff38057b02c_deep_o_fno_py.html
new file mode 100644
index 00000000..239d2bc0
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_deep_o_fno_py.html
@@ -0,0 +1,159 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/deep_o_fno.py: 47%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/deep_o_fno.py</b>:
+            <span class="pc_cov">47%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">17 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">8<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">9<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_neural_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_o_net_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">dataclasses</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">replace</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">    <span class="nam">DeepONet</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">    <span class="nam">FourierNeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">operator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="key">class</span> <span class="nam">DeepOFNO</span><span class="op">(</span><span class="nam">Operator</span><span class="op">,</span> <span class="nam">NeuralOperator</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="nam">branch_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">32</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">        <span class="nam">branch_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">trunk_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">32</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">trunk_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">basis_functions</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">8</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="nam">depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="nam">width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">        <span class="nam">act</span><span class="op">:</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Tanh</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">        <span class="nam">NeuralOperator</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">            <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">            <span class="nam">properties</span><span class="op">=</span><span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">                <span class="str">"branch_width"</span><span class="op">:</span> <span class="nam">branch_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">                <span class="str">"branch_depth"</span><span class="op">:</span> <span class="nam">branch_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">                <span class="str">"trunk_width"</span><span class="op">:</span> <span class="nam">trunk_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">                <span class="str">"trunk_depth"</span><span class="op">:</span> <span class="nam">trunk_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">                <span class="str">"basis_functions"</span><span class="op">:</span> <span class="nam">basis_functions</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">                <span class="str">"depth"</span><span class="op">:</span> <span class="nam">depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">                <span class="str">"width"</span><span class="op">:</span> <span class="nam">width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">                <span class="str">"act"</span><span class="op">:</span> <span class="nam">act</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">            <span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">deep_o_net</span> <span class="op">=</span> <span class="nam">DeepONet</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">            <span class="nam">branch_width</span><span class="op">=</span><span class="nam">branch_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">            <span class="nam">branch_depth</span><span class="op">=</span><span class="nam">branch_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">            <span class="nam">trunk_width</span><span class="op">=</span><span class="nam">trunk_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">            <span class="nam">trunk_depth</span><span class="op">=</span><span class="nam">trunk_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">            <span class="nam">basis_functions</span><span class="op">=</span><span class="nam">basis_functions</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">        <span class="nam">fno_shapes</span> <span class="op">=</span> <span class="nam">replace</span><span class="op">(</span><span class="nam">shapes</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">        <span class="nam">fno_shapes</span><span class="op">.</span><span class="nam">x</span> <span class="op">=</span> <span class="nam">fno_shapes</span><span class="op">.</span><span class="nam">y</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">        <span class="nam">fno_shapes</span><span class="op">.</span><span class="nam">u</span> <span class="op">=</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">v</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">fno</span> <span class="op">=</span> <span class="nam">FourierNeuralOperator</span><span class="op">(</span><span class="nam">shapes</span><span class="op">=</span><span class="nam">fno_shapes</span><span class="op">,</span> <span class="nam">width</span><span class="op">=</span><span class="nam">width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">u</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">        <span class="nam">out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">deep_o_net</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">fno</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">out</span><span class="op">,</span> <span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_neural_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_o_net_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_deep_o_net_py.html b/_static/codecov/d_93093ff38057b02c_deep_o_net_py.html
new file mode 100644
index 00000000..a1730c21
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_deep_o_net_py.html
@@ -0,0 +1,207 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/deep_o_net.py: 33%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/deep_o_net.py</b>:
+            <span class="pc_cov">33%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">33 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">11<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">22<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_o_fno_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_root_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">    <span class="nam">DeepONet</span> <span class="key">as</span> <span class="nam">DON</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">networks</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">ResNet</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">operator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="key">class</span> <span class="nam">DeepONet</span><span class="op">(</span><span class="nam">DON</span><span class="op">,</span> <span class="nam">NeuralOperator</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="nam">branch_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">32</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">        <span class="nam">branch_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">trunk_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">32</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">trunk_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">basis_functions</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">8</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">            <span class="nam">branch_width</span><span class="op">=</span><span class="nam">branch_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">            <span class="nam">branch_depth</span><span class="op">=</span><span class="nam">branch_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">            <span class="nam">trunk_width</span><span class="op">=</span><span class="nam">trunk_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">            <span class="nam">trunk_depth</span><span class="op">=</span><span class="nam">trunk_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">            <span class="nam">basis_functions</span><span class="op">=</span><span class="nam">basis_functions</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">        <span class="nam">NeuralOperator</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">            <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">            <span class="nam">properties</span><span class="op">=</span><span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">                <span class="str">"branch_width"</span><span class="op">:</span> <span class="nam">branch_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">                <span class="str">"branch_depth"</span><span class="op">:</span> <span class="nam">branch_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">                <span class="str">"trunk_width"</span><span class="op">:</span> <span class="nam">trunk_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">                <span class="str">"trunk_depth"</span><span class="op">:</span> <span class="nam">trunk_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">                <span class="str">"basis_functions"</span><span class="op">:</span> <span class="nam">basis_functions</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">            <span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"><span class="key">class</span> <span class="nam">MYDeepONet</span><span class="op">(</span><span class="nam">NeuralOperator</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">        <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">        <span class="nam">branch_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">32</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">        <span class="nam">branch_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">        <span class="nam">trunk_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">32</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">        <span class="nam">trunk_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">        <span class="nam">stride</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">        <span class="nam">basis_functions</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">8</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">        <span class="nam">act</span><span class="op">:</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span> <span class="op">=</span> <span class="key">None</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">        <span class="key">if</span> <span class="nam">act</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">            <span class="nam">act</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Tanh</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">        <span class="nam">NeuralOperator</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">            <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">            <span class="nam">properties</span><span class="op">=</span><span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">                <span class="str">"branch_width"</span><span class="op">:</span> <span class="nam">branch_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">                <span class="str">"branch_depth"</span><span class="op">:</span> <span class="nam">branch_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">                <span class="str">"trunk_width"</span><span class="op">:</span> <span class="nam">trunk_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">                <span class="str">"trunk_depth"</span><span class="op">:</span> <span class="nam">trunk_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">                <span class="str">"stride"</span><span class="op">:</span> <span class="nam">stride</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">                <span class="str">"basis_functions"</span><span class="op">:</span> <span class="nam">basis_functions</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">                <span class="str">"act"</span><span class="op">:</span> <span class="nam">act</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">            <span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">basis_functions</span> <span class="op">=</span> <span class="nam">basis_functions</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">dot_dim</span> <span class="op">=</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">v</span><span class="op">.</span><span class="nam">dim</span> <span class="op">*</span> <span class="nam">basis_functions</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">        <span class="com"># branch network</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">num</span> <span class="op">*</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">branch_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">branch_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">branch_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">branch_width</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">dot_dim</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">branch_lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t">        <span class="com"># trunk network</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">y</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">trunk_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">trunk_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">trunk_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">trunk_width</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">dot_dim</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">trunk_lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">_</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">u</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t">        <span class="com"># flatten inputs for both trunk and branch network</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t">        <span class="nam">u</span> <span class="op">=</span> <span class="nam">u</span><span class="op">.</span><span class="nam">flatten</span><span class="op">(</span><span class="num">1</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t">        <span class="nam">y</span> <span class="op">=</span> <span class="nam">y</span><span class="op">.</span><span class="nam">flatten</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t">        <span class="com"># Pass through branch and trunk networks</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t">        <span class="nam">b</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch</span><span class="op">(</span><span class="nam">u</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t">        <span class="nam">t</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk</span><span class="op">(</span><span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t">        <span class="com"># dot product</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t">        <span class="nam">b</span> <span class="op">=</span> <span class="nam">b</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">v</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">basis_functions</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t">        <span class="nam">t</span> <span class="op">=</span> <span class="nam">t</span><span class="op">.</span><span class="nam">reshape</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t">            <span class="nam">b</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">0</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t">            <span class="op">-</span><span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">v</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">basis_functions</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t">        <span class="key">return</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">einsum</span><span class="op">(</span><span class="str">"abcd,acd->abc"</span><span class="op">,</span> <span class="nam">t</span><span class="op">,</span> <span class="nam">b</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_o_fno_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_root_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_deep_root_operator_py.html b/_static/codecov/d_93093ff38057b02c_deep_root_operator_py.html
new file mode 100644
index 00000000..11e1507e
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_deep_root_operator_py.html
@@ -0,0 +1,186 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/deep_root_operator.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/deep_root_operator.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">36 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">36<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_o_net_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_fourier_neural_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">networks</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">    <span class="nam">ResNet</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">operator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">class</span> <span class="nam">DeepRootOperator</span><span class="op">(</span><span class="nam">Operator</span><span class="op">,</span> <span class="nam">NeuralOperator</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="nam">root_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">16</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">root_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="nam">branch_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">16</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">        <span class="nam">branch_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">trunk_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">16</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">trunk_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">dot_width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">16</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="nam">dot_depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="nam">act</span><span class="op">:</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Tanh</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">        <span class="nam">stride</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">        <span class="nam">NeuralOperator</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">            <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">            <span class="nam">properties</span><span class="op">=</span><span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">                <span class="str">"root_width"</span><span class="op">:</span> <span class="nam">root_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">                <span class="str">"root_depth"</span><span class="op">:</span> <span class="nam">root_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">                <span class="str">"branch_width"</span><span class="op">:</span> <span class="nam">branch_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">                <span class="str">"branch_depth"</span><span class="op">:</span> <span class="nam">branch_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">                <span class="str">"trunk_width"</span><span class="op">:</span> <span class="nam">trunk_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">                <span class="str">"trunk_depth"</span><span class="op">:</span> <span class="nam">trunk_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">                <span class="str">"dot_width"</span><span class="op">:</span> <span class="nam">dot_width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">                <span class="str">"dot_depth"</span><span class="op">:</span> <span class="nam">dot_depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">                <span class="str">"act"</span><span class="op">:</span> <span class="nam">act</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">                <span class="str">"stride"</span><span class="op">:</span> <span class="nam">stride</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">            <span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">shapes</span> <span class="op">=</span> <span class="nam">shapes</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">        <span class="com"># root network</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">        <span class="nam">dot_root_branch_width</span> <span class="op">=</span> <span class="nam">dot_width</span> <span class="op">//</span> <span class="num">2</span> <span class="op">+</span> <span class="nam">dot_depth</span> <span class="op">%</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">root_lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">x</span><span class="op">.</span><span class="nam">num</span> <span class="op">*</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">x</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">root_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">root_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">root_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">root_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">root_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">root_width</span><span class="op">,</span> <span class="nam">dot_root_branch_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">root</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">root_lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">root_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">root_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">        <span class="com"># branch network</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">num</span> <span class="op">*</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">branch_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">branch_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">branch_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">branch_width</span><span class="op">,</span> <span class="nam">dot_width</span> <span class="op">//</span> <span class="num">2</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">branch</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">branch_lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">        <span class="com"># root branch convolution</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">root_branch_conv</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Conv1d</span><span class="op">(</span><span class="num">2</span><span class="op">,</span> <span class="num">1</span><span class="op">,</span> <span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">        <span class="com"># trunk network</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">        <span class="nam">dot_trunk_width</span> <span class="op">=</span> <span class="nam">dot_width</span> <span class="op">//</span> <span class="num">2</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">y</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">trunk_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">trunk_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">trunk_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">trunk_width</span><span class="op">,</span> <span class="nam">dot_trunk_width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">trunk</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">trunk_lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">        <span class="com"># deep dot</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot_hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">dot_width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">dot_depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot_project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">dot_width</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">v</span><span class="op">.</span><span class="nam">dim</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot_hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot_project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">u</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">        <span class="nam">root_out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">root</span><span class="op">(</span><span class="nam">x</span><span class="op">.</span><span class="nam">flatten</span><span class="op">(</span><span class="op">-</span><span class="num">2</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">        <span class="nam">branch_out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">branch</span><span class="op">(</span><span class="nam">u</span><span class="op">.</span><span class="nam">flatten</span><span class="op">(</span><span class="op">-</span><span class="num">2</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t">        <span class="nam">root_branch_cat</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cat</span><span class="op">(</span><span class="op">[</span><span class="nam">root_out</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="op">-</span><span class="num">2</span><span class="op">)</span><span class="op">,</span> <span class="nam">branch_out</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="op">-</span><span class="num">2</span><span class="op">)</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="op">-</span><span class="num">2</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t">        <span class="nam">conv_out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">root_branch_conv</span><span class="op">(</span><span class="nam">root_branch_cat</span><span class="op">)</span><span class="op">.</span><span class="nam">expand</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t">        <span class="nam">trunk_out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">trunk</span><span class="op">(</span><span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t">        <span class="nam">dot_cat</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cat</span><span class="op">(</span><span class="op">[</span><span class="nam">conv_out</span><span class="op">,</span> <span class="nam">trunk_out</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">deep_dot</span><span class="op">(</span><span class="nam">dot_cat</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_o_net_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_fourier_neural_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_fourier_neural_operator_py.html b/_static/codecov/d_93093ff38057b02c_fourier_neural_operator_py.html
new file mode 100644
index 00000000..509ca241
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_fourier_neural_operator_py.html
@@ -0,0 +1,126 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/fourier_neural_operator.py: 78%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/fourier_neural_operator.py</b>:
+            <span class="pc_cov">78%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">9 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">7<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">2<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_root_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_mean_stack_neural_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">Optional</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">FourierNeuralOperator</span> <span class="key">as</span> <span class="nam">FNO</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">operator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">class</span> <span class="nam">FourierNeuralOperator</span><span class="op">(</span><span class="nam">FNO</span><span class="op">,</span> <span class="nam">NeuralOperator</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span><span class="op">,</span> <span class="nam">depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span> <span class="nam">width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">3</span><span class="op">,</span> <span class="nam">act</span><span class="op">:</span> <span class="nam">Optional</span><span class="op">[</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">]</span> <span class="op">=</span> <span class="key">None</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">depth</span><span class="op">,</span> <span class="nam">width</span><span class="op">=</span><span class="nam">width</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="nam">NeuralOperator</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">            <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">            <span class="nam">properties</span><span class="op">=</span><span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">                <span class="str">"depth"</span><span class="op">:</span> <span class="nam">depth</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">                <span class="str">"width"</span><span class="op">:</span> <span class="nam">width</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">                <span class="str">"act"</span><span class="op">:</span> <span class="nam">act</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">            <span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_deep_root_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_mean_stack_neural_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_mean_stack_neural_operator_py.html b/_static/codecov/d_93093ff38057b02c_mean_stack_neural_operator_py.html
new file mode 100644
index 00000000..a703963a
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_mean_stack_neural_operator_py.html
@@ -0,0 +1,179 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/mean_stack_neural_operator.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/mean_stack_neural_operator.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">22 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">22<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_fourier_neural_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="pln"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="str">"""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="str">`continuity.operators.deep_neural_operator`</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="str">The Deep Neural Operator architecture.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="str">"""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">networks</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">    <span class="nam">ResNet</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">operator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">class</span> <span class="nam">MeanStackNeuralOperator</span><span class="op">(</span><span class="nam">Operator</span><span class="op">,</span> <span class="nam">NeuralOperator</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="str">"""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="str">    The `MeanStackNeuralOperator` class integrates a deep residual network within a neural operator framework. It uses all</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"><span class="str">    scalar values of the input locations, input functions, and individual evaluation points as inputs for a deep</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="str">    residual network.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="str">    Args:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"><span class="str">        shapes: An instance of `DatasetShapes`.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"><span class="str">        width: The width of the Deep Residual Network, defining the number of neurons in each hidden layer.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="str">        depth: The depth of the Deep Residual Network, indicating the number of hidden layers in the network.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="str">    """</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span><span class="op">,</span> <span class="nam">width</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">32</span><span class="op">,</span> <span class="nam">depth</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">4</span><span class="op">,</span> <span class="nam">act</span><span class="op">:</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Tanh</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">stride</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="nam">NeuralOperator</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">            <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">            <span class="nam">properties</span><span class="op">=</span><span class="op">{</span><span class="str">"width"</span><span class="op">:</span> <span class="nam">width</span><span class="op">,</span> <span class="str">"depth"</span><span class="op">:</span> <span class="nam">depth</span><span class="op">,</span> <span class="str">"act"</span><span class="op">:</span> <span class="nam">act</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span><span class="op">,</span> <span class="str">"stride"</span><span class="op">:</span> <span class="nam">stride</span><span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">            <span class="nam">shapes</span><span class="op">=</span><span class="nam">shapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">width</span> <span class="op">=</span> <span class="nam">width</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">depth</span> <span class="op">=</span> <span class="nam">depth</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">lift</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">shapes</span><span class="op">.</span><span class="nam">x</span><span class="op">.</span><span class="nam">dim</span> <span class="op">+</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">y</span><span class="op">.</span><span class="nam">dim</span> <span class="op">+</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">dim</span><span class="op">,</span> <span class="nam">width</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">hidden</span> <span class="op">=</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">depth</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">,</span> <span class="nam">stride</span><span class="op">=</span><span class="nam">stride</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">project</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">width</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">.</span><span class="nam">v</span><span class="op">.</span><span class="nam">dim</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">net</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">lift</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">hidden</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">project</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">u</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">,</span> <span class="nam">y</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span> <span class="op">-></span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">        <span class="str">"""Forward pass through the operator.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t"><span class="str">        Performs the forward pass through the operator, processing the input function values `u` and input function</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t"><span class="str">        probe locations `x` by flattening them. They are then expanded to match the dimensions of the evaluation</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t"><span class="str">        coordinates y. The preprocessed x, preprocessed u, and y are stacked and passed through a deep residual network.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"><span class="str">        Args:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t"><span class="str">            x: Input coordinates of shape (batch_size, #sensors, x_dim), representing the points in space at</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t"><span class="str">                which the input function values are probed.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t"><span class="str">            u: Input function values of shape (batch_size, #sensors, u_dim), representing the values of the input</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t"><span class="str">                functions at different sensor locations.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"><span class="str">            y: Evaluation coordinates of shape (batch_size, #evaluations, y_dim), representing the points in space at</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t"><span class="str">                which the output function values are to be computed.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"><span class="str">        Returns:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"><span class="str">            The output of the operator, of shape (batch_size, #evaluations, v_dim), representing the computed function</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"><span class="str">                values at the specified evaluation coordinates.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t"><span class="str">        """</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">        <span class="nam">x_repeated</span> <span class="op">=</span> <span class="nam">x</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">expand</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">        <span class="nam">u_repeated</span> <span class="op">=</span> <span class="nam">u</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">.</span><span class="nam">expand</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">        <span class="nam">y_repeated</span> <span class="op">=</span> <span class="nam">y</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">2</span><span class="op">)</span><span class="op">.</span><span class="nam">expand</span><span class="op">(</span><span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">,</span> <span class="nam">x</span><span class="op">.</span><span class="nam">size</span><span class="op">(</span><span class="num">1</span><span class="op">)</span><span class="op">,</span> <span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">        <span class="nam">net_input</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cat</span><span class="op">(</span><span class="op">[</span><span class="nam">x_repeated</span><span class="op">,</span> <span class="nam">u_repeated</span><span class="op">,</span> <span class="nam">y_repeated</span><span class="op">]</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="op">-</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">        <span class="nam">output</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">net</span><span class="op">(</span><span class="nam">net_input</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">        <span class="key">return</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="nam">dim</span><span class="op">=</span><span class="op">-</span><span class="num">2</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_fourier_neural_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_operator_py.html b/_static/codecov/d_93093ff38057b02c_operator_py.html
new file mode 100644
index 00000000..fecebb66
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_operator_py.html
@@ -0,0 +1,120 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/operator.py: 89%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/operator.py</b>:
+            <span class="pc_cov">89%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">9 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">8<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">1<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_mean_stack_neural_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_utils_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">json</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">abc</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">ABC</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">class</span> <span class="nam">NeuralOperator</span><span class="op">(</span><span class="nam">ABC</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">    <span class="str">"""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="str">    Args:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="str">        properties: properties to fully describe the operator (used for serialization).</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="str">    """</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">properties</span><span class="op">:</span> <span class="nam">dict</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">:</span> <span class="nam">OperatorShapes</span> <span class="op">=</span> <span class="key">None</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">properties</span> <span class="op">=</span> <span class="nam">properties</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">shapes</span> <span class="op">=</span> <span class="nam">shapes</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">    <span class="key">def</span> <span class="nam">info</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="key">return</span> <span class="nam">json</span><span class="op">.</span><span class="nam">dumps</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">properties</span><span class="op">,</span> <span class="nam">sort_keys</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">indent</span><span class="op">=</span><span class="num">4</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_mean_stack_neural_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_utils_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_93093ff38057b02c_utils_py.html b/_static/codecov/d_93093ff38057b02c_utils_py.html
new file mode 100644
index 00000000..4268e867
--- /dev/null
+++ b/_static/codecov/d_93093ff38057b02c_utils_py.html
@@ -0,0 +1,191 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/operators/utils.py: 98%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/operators/utils.py</b>:
+            <span class="pc_cov">98%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">53 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">52<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">1<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_data_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">json</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">datetime</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">    <span class="nam">datetime</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span><span class="op">.</span><span class="nam">shape</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">    <span class="nam">OperatorShapes</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">TensorShape</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">import</span> <span class="nam">nos</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">utils</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">    <span class="nam">dataclass_to_dict</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">operator</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">def</span> <span class="nam">to_json</span><span class="op">(</span><span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">json_handle</span><span class="op">:</span> <span class="nam">str</span> <span class="op">=</span> <span class="str">"model_parameters.json"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="nam">json_path</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">json_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">    <span class="nam">properties</span> <span class="op">=</span> <span class="nam">operator</span><span class="op">.</span><span class="nam">properties</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">    <span class="nam">properties</span><span class="op">[</span><span class="str">"shapes"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">dataclass_to_dict</span><span class="op">(</span><span class="nam">operator</span><span class="op">.</span><span class="nam">shapes</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="nam">properties</span><span class="op">[</span><span class="str">"base_class"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">operator</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">    <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">json_path</span><span class="op">,</span> <span class="str">"w"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">file_handle</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="nam">json</span><span class="op">.</span><span class="nam">dump</span><span class="op">(</span><span class="nam">operator</span><span class="op">.</span><span class="nam">properties</span><span class="op">,</span> <span class="nam">file_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="key">def</span> <span class="nam">to_pt</span><span class="op">(</span><span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">pt_handle</span><span class="op">:</span> <span class="nam">str</span> <span class="op">=</span> <span class="str">"model.pt"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">    <span class="nam">pt_path</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">pt_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">    <span class="nam">torch</span><span class="op">.</span><span class="nam">save</span><span class="op">(</span><span class="nam">operator</span><span class="op">.</span><span class="nam">state_dict</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">pt_path</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t"><span class="key">def</span> <span class="nam">serialize</span><span class="op">(</span><span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span> <span class="op">=</span> <span class="key">None</span><span class="op">)</span> <span class="op">-></span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">    <span class="key">if</span> <span class="nam">out_dir</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">        <span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">.</span><span class="nam">cwd</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"out_models"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">    <span class="nam">time_stamp</span> <span class="op">=</span> <span class="nam">datetime</span><span class="op">.</span><span class="nam">now</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="nam">name</span> <span class="op">=</span> <span class="str">f"{operator.__class__.__name__}_{time_stamp.strftime('%Y_%m_%d_%H_%M_%S')}"</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">    <span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">    <span class="nam">i</span> <span class="op">=</span> <span class="num">0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">    <span class="key">while</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">is_dir</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">parent</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">f"{name}-{i}"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">        <span class="nam">i</span> <span class="op">+=</span> <span class="num">1</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">    <span class="nam">out_dir</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">parents</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">exist_ok</span><span class="op">=</span><span class="key">False</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">    <span class="nam">to_json</span><span class="op">(</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">    <span class="nam">to_pt</span><span class="op">(</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">    <span class="key">return</span> <span class="nam">out_dir</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t"><span class="key">def</span> <span class="nam">from_json</span><span class="op">(</span><span class="nam">model_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">json_handle</span><span class="op">:</span> <span class="nam">str</span> <span class="op">=</span> <span class="str">"model_parameters.json"</span><span class="op">)</span> <span class="op">-></span> <span class="nam">dict</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">    <span class="nam">json_path</span> <span class="op">=</span> <span class="nam">model_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">json_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">    <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">json_path</span><span class="op">,</span> <span class="str">"r"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">file_handle</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">        <span class="key">return</span> <span class="nam">json</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">file_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t"><span class="key">def</span> <span class="nam">from_pt</span><span class="op">(</span><span class="nam">model_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">pt_handle</span><span class="op">:</span> <span class="nam">str</span> <span class="op">=</span> <span class="str">"model.pt"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">    <span class="nam">pt_path</span> <span class="op">=</span> <span class="nam">model_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">pt_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">    <span class="key">return</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">pt_path</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t"><span class="key">def</span> <span class="nam">deserialize</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">    <span class="nam">model_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">    <span class="nam">model_base_class</span><span class="op">:</span> <span class="nam">type</span><span class="op">(</span><span class="nam">NeuralOperator</span><span class="op">)</span> <span class="op">=</span> <span class="key">None</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">    <span class="nam">json_handle</span><span class="op">:</span> <span class="nam">str</span> <span class="op">=</span> <span class="str">"model_parameters.json"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">    <span class="nam">pt_handle</span><span class="op">=</span><span class="str">"model.pt"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"><span class="op">)</span> <span class="op">-></span> <span class="nam">NeuralOperator</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">    <span class="nam">parameters</span> <span class="op">=</span> <span class="nam">from_json</span><span class="op">(</span><span class="nam">model_dir</span><span class="op">=</span><span class="nam">model_dir</span><span class="op">,</span> <span class="nam">json_handle</span><span class="op">=</span><span class="nam">json_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">    <span class="nam">shapes</span> <span class="op">=</span> <span class="nam">parameters</span><span class="op">[</span><span class="str">"shapes"</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">    <span class="nam">parameters</span><span class="op">[</span><span class="str">"shapes"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">OperatorShapes</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">        <span class="nam">x</span><span class="op">=</span><span class="nam">TensorShape</span><span class="op">(</span><span class="nam">shapes</span><span class="op">[</span><span class="str">"x"</span><span class="op">]</span><span class="op">[</span><span class="str">"num"</span><span class="op">]</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">[</span><span class="str">"x"</span><span class="op">]</span><span class="op">[</span><span class="str">"dim"</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t">        <span class="nam">u</span><span class="op">=</span><span class="nam">TensorShape</span><span class="op">(</span><span class="nam">shapes</span><span class="op">[</span><span class="str">"u"</span><span class="op">]</span><span class="op">[</span><span class="str">"num"</span><span class="op">]</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">[</span><span class="str">"u"</span><span class="op">]</span><span class="op">[</span><span class="str">"dim"</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">        <span class="nam">y</span><span class="op">=</span><span class="nam">TensorShape</span><span class="op">(</span><span class="nam">shapes</span><span class="op">[</span><span class="str">"y"</span><span class="op">]</span><span class="op">[</span><span class="str">"num"</span><span class="op">]</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">[</span><span class="str">"y"</span><span class="op">]</span><span class="op">[</span><span class="str">"dim"</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">        <span class="nam">v</span><span class="op">=</span><span class="nam">TensorShape</span><span class="op">(</span><span class="nam">shapes</span><span class="op">[</span><span class="str">"v"</span><span class="op">]</span><span class="op">[</span><span class="str">"num"</span><span class="op">]</span><span class="op">,</span> <span class="nam">shapes</span><span class="op">[</span><span class="str">"v"</span><span class="op">]</span><span class="op">[</span><span class="str">"dim"</span><span class="op">]</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">    <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">    <span class="key">if</span> <span class="str">"act"</span> <span class="key">in</span> <span class="nam">parameters</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">        <span class="nam">act</span> <span class="op">=</span> <span class="nam">parameters</span><span class="op">[</span><span class="str">"act"</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t">        <span class="nam">parameters</span><span class="op">[</span><span class="str">"act"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">getattr</span><span class="op">(</span><span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">,</span> <span class="nam">act</span><span class="op">)</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t">    <span class="key">if</span> <span class="nam">model_base_class</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t">        <span class="nam">model_base_class</span> <span class="op">=</span> <span class="nam">getattr</span><span class="op">(</span><span class="nam">nos</span><span class="op">.</span><span class="nam">operators</span><span class="op">,</span> <span class="nam">parameters</span><span class="op">[</span><span class="str">"base_class"</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">    <span class="key">del</span> <span class="nam">parameters</span><span class="op">[</span><span class="str">"base_class"</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t">    <span class="nam">operator</span> <span class="op">=</span> <span class="nam">model_base_class</span><span class="op">(</span><span class="op">**</span><span class="nam">parameters</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t">    <span class="nam">state_dict</span> <span class="op">=</span> <span class="nam">from_pt</span><span class="op">(</span><span class="nam">model_dir</span><span class="op">=</span><span class="nam">model_dir</span><span class="op">,</span> <span class="nam">pt_handle</span><span class="op">=</span><span class="nam">pt_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t">    <span class="nam">operator</span><span class="op">.</span><span class="nam">load_state_dict</span><span class="op">(</span><span class="nam">state_dict</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t">    <span class="key">return</span> <span class="nam">operator</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_operator_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_data_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_99aac0089c5f15d8_error_metrics_py.html b/_static/codecov/d_99aac0089c5f15d8_error_metrics_py.html
new file mode 100644
index 00000000..c87b36cb
--- /dev/null
+++ b/_static/codecov/d_99aac0089c5f15d8_error_metrics_py.html
@@ -0,0 +1,150 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/metrics/error_metrics.py: 71%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/metrics/error_metrics.py</b>:
+            <span class="pc_cov">71%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">21 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">15<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">6<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_wave_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_99aac0089c5f15d8_metric_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">Dict</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">metric</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">    <span class="nam">Metric</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">class</span> <span class="nam">Loss</span><span class="op">(</span><span class="nam">Metric</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="str">"""Class for evaluating error metrics.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="str">    Args:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"><span class="str">        name: The name of the metric.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="str">        loss: The loss function for calculating the metric.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="str">    """</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">name</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">loss</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="nam">name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">loss</span> <span class="op">=</span> <span class="nam">loss</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">    <span class="key">def</span> <span class="nam">__call__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">Operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Dict</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="nam">operator</span><span class="op">.</span><span class="nam">eval</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">        <span class="nam">prediction</span> <span class="op">=</span> <span class="nam">operator</span><span class="op">(</span><span class="nam">dataset</span><span class="op">.</span><span class="nam">x</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">u</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">        <span class="nam">value</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">loss</span><span class="op">(</span><span class="nam">prediction</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">v</span><span class="op">)</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">        <span class="nam">value</span> <span class="op">/=</span> <span class="nam">len</span><span class="op">(</span><span class="nam">dataset</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">        <span class="key">return</span> <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">            <span class="str">"Value"</span><span class="op">:</span> <span class="nam">value</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">            <span class="str">"Unit"</span><span class="op">:</span> <span class="str">"[1]"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">        <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t"><span class="key">class</span> <span class="nam">L1Error</span><span class="op">(</span><span class="nam">Loss</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">    <span class="str">"""L1 error metric (Mean Absolute Error)."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="str">"L1_error"</span><span class="op">,</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">L1Loss</span><span class="op">(</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t"><span class="key">class</span> <span class="nam">MSError</span><span class="op">(</span><span class="nam">Loss</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">    <span class="str">"""Mean square error metric (L2 Error)."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="str">"MS_error"</span><span class="op">,</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">MSELoss</span><span class="op">(</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_7e8216966b2e3943_transmission_loss_wave_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_99aac0089c5f15d8_metric_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_99aac0089c5f15d8_metric_py.html b/_static/codecov/d_99aac0089c5f15d8_metric_py.html
new file mode 100644
index 00000000..44d9c373
--- /dev/null
+++ b/_static/codecov/d_99aac0089c5f15d8_metric_py.html
@@ -0,0 +1,133 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/metrics/metric.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/metrics/metric.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">9 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">9<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">3<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_99aac0089c5f15d8_error_metrics_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_99aac0089c5f15d8_operator_metrics_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">abc</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">ABC</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">abstractmethod</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">    <span class="nam">Dict</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">class</span> <span class="nam">Metric</span><span class="op">(</span><span class="nam">ABC</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="str">"""Base class for all metrics."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">name</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">name</span> <span class="op">=</span> <span class="nam">name</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="exc show_exc"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">    <span class="op">@</span><span class="nam">abstractmethod</span>&nbsp;</span><span class="r"></span></p>
+    <p class="exc show_exc"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="key">def</span> <span class="nam">__call__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">Operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Dict</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="exc show_exc"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="str">"""Evaluates the metric.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="str">        Args:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"><span class="str">            operator: operator for which the metric is evaluated.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="str">            dataset: dataset on which the metric is evaluated.</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"><span class="str">        Returns:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="str">            dict containing the results of the metric (keys "value" and "unit" should be in the dict).</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t"><span class="str">        """</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">    <span class="key">def</span> <span class="nam">__str__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">name</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_99aac0089c5f15d8_error_metrics_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_99aac0089c5f15d8_operator_metrics_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_99aac0089c5f15d8_operator_metrics_py.html b/_static/codecov/d_99aac0089c5f15d8_operator_metrics_py.html
new file mode 100644
index 00000000..74b4ee73
--- /dev/null
+++ b/_static/codecov/d_99aac0089c5f15d8_operator_metrics_py.html
@@ -0,0 +1,139 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/metrics/operator_metrics.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/metrics/operator_metrics.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">22 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">22<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_99aac0089c5f15d8_metric_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_dfcfe80011fec8d7_residual_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">time</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">Dict</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">metric</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">    <span class="nam">Metric</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">class</span> <span class="nam">NumberOfParameters</span><span class="op">(</span><span class="nam">Metric</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="str">"""Number of parameters in the operator."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="str">"Number_of_parameters"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="key">def</span> <span class="nam">__call__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">Operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Dict</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">num_params</span> <span class="op">=</span> <span class="nam">sum</span><span class="op">(</span><span class="nam">p</span><span class="op">.</span><span class="nam">numel</span><span class="op">(</span><span class="op">)</span> <span class="key">for</span> <span class="nam">p</span> <span class="key">in</span> <span class="nam">operator</span><span class="op">.</span><span class="nam">parameters</span><span class="op">(</span><span class="op">)</span> <span class="key">if</span> <span class="nam">p</span><span class="op">.</span><span class="nam">requires_grad</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="key">return</span> <span class="op">{</span><span class="str">"Value"</span><span class="op">:</span> <span class="nam">num_params</span><span class="op">,</span> <span class="str">"Unit"</span><span class="op">:</span> <span class="str">"[1]"</span><span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="key">class</span> <span class="nam">SpeedOfEvaluation</span><span class="op">(</span><span class="nam">Metric</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">    <span class="str">"""Speed of a single evaluation in milliseconds."""</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="str">"Speed_of_evaluation"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">    <span class="key">def</span> <span class="nam">__call__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">Operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Dict</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">        <span class="nam">operator</span><span class="op">.</span><span class="nam">eval</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">        <span class="nam">start_time</span> <span class="op">=</span> <span class="nam">time</span><span class="op">.</span><span class="nam">time_ns</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">        <span class="nam">_</span> <span class="op">=</span> <span class="nam">operator</span><span class="op">(</span><span class="nam">dataset</span><span class="op">.</span><span class="nam">x</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">u</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">        <span class="nam">end_time</span> <span class="op">=</span> <span class="nam">time</span><span class="op">.</span><span class="nam">time_ns</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="nam">delta_time</span> <span class="op">=</span> <span class="op">(</span><span class="nam">end_time</span> <span class="op">-</span> <span class="nam">start_time</span><span class="op">)</span> <span class="op">*</span> <span class="num">1e-6</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">        <span class="nam">delta_time</span> <span class="op">=</span> <span class="nam">delta_time</span> <span class="op">/</span> <span class="nam">len</span><span class="op">(</span><span class="nam">dataset</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">        <span class="key">return</span> <span class="op">{</span><span class="str">"Value"</span><span class="op">:</span> <span class="nam">delta_time</span><span class="op">,</span> <span class="str">"Unit"</span><span class="op">:</span> <span class="str">"[ms]"</span><span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_99aac0089c5f15d8_metric_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_dfcfe80011fec8d7_residual_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_a94113ed293c43ea_benchmark_py.html b/_static/codecov/d_a94113ed293c43ea_benchmark_py.html
new file mode 100644
index 00000000..20744c57
--- /dev/null
+++ b/_static/codecov/d_a94113ed293c43ea_benchmark_py.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/benchmarks/benchmark.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/benchmarks/benchmark.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">9 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">9<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="index.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_8650266d82634dfb_c_shape_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">dataclasses</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">dataclass</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">field</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">    <span class="nam">List</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">metrics</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">    <span class="nam">L1Error</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">    <span class="nam">Metric</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">    <span class="nam">MSError</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">    <span class="nam">NumberOfParameters</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="nam">SpeedOfEvaluation</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t"><span class="op">@</span><span class="nam">dataclass</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">class</span> <span class="nam">Benchmark</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="nam">train_set</span><span class="op">:</span> <span class="nam">OperatorDataset</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">    <span class="nam">test_set</span><span class="op">:</span> <span class="nam">OperatorDataset</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">    <span class="nam">metrics</span><span class="op">:</span> <span class="nam">List</span><span class="op">[</span><span class="nam">Metric</span><span class="op">]</span> <span class="op">=</span> <span class="nam">field</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">default_factory</span><span class="op">=</span><span class="key">lambda</span><span class="op">:</span> <span class="op">[</span><span class="nam">L1Error</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">MSError</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">NumberOfParameters</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">SpeedOfEvaluation</span><span class="op">(</span><span class="op">)</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">    <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="index.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_8650266d82634dfb_c_shape_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_d726faacd801a058_data_py.html b/_static/codecov/d_d726faacd801a058_data_py.html
new file mode 100644
index 00000000..632f5199
--- /dev/null
+++ b/_static/codecov/d_d726faacd801a058_data_py.html
@@ -0,0 +1,193 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/plots/data.py: 99%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/plots/data.py</b>:
+            <span class="pc_cov">99%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">67 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">66<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">1<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_utils_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_metrics_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">json</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">dataclasses</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">    <span class="nam">dataclass</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">List</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">    <span class="nam">Self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">import</span> <span class="nam">yaml</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">    <span class="nam">deserialize</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="op">@</span><span class="nam">dataclass</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="key">class</span> <span class="nam">ModelData</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">    <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">    <span class="nam">name</span><span class="op">:</span> <span class="nam">str</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">    <span class="nam">checkpoint</span><span class="op">:</span> <span class="nam">dict</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="op">@</span><span class="nam">classmethod</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">    <span class="key">def</span> <span class="nam">from_dir</span><span class="op">(</span><span class="nam">cls</span><span class="op">,</span> <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Self</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="nam">operator</span> <span class="op">=</span> <span class="nam">deserialize</span><span class="op">(</span><span class="nam">path</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">        <span class="nam">checkpoint_path</span> <span class="op">=</span> <span class="nam">path</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"checkpoint.json"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">checkpoint_path</span><span class="op">,</span> <span class="str">"r"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">fh</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">            <span class="nam">checkpoint</span> <span class="op">=</span> <span class="nam">json</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">fh</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">        <span class="key">return</span> <span class="nam">cls</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">path</span><span class="op">.</span><span class="nam">name</span><span class="op">,</span> <span class="nam">operator</span><span class="op">,</span> <span class="nam">checkpoint</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"><span class="op">@</span><span class="nam">dataclass</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t"><span class="key">class</span> <span class="nam">RunData</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">    <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">    <span class="nam">name</span><span class="op">:</span> <span class="nam">str</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="nam">training</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">    <span class="nam">choices</span><span class="op">:</span> <span class="nam">dict</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">    <span class="nam">training_config</span><span class="op">:</span> <span class="nam">dict</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">    <span class="nam">models</span><span class="op">:</span> <span class="nam">List</span><span class="op">[</span><span class="nam">ModelData</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">    <span class="op">@</span><span class="nam">classmethod</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">    <span class="key">def</span> <span class="nam">from_dir</span><span class="op">(</span><span class="nam">cls</span><span class="op">,</span> <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Self</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">        <span class="nam">models</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">        <span class="nam">models_dir</span> <span class="op">=</span> <span class="nam">path</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"models"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">        <span class="key">for</span> <span class="nam">model_dir</span> <span class="key">in</span> <span class="nam">models_dir</span><span class="op">.</span><span class="nam">glob</span><span class="op">(</span><span class="str">"*_*_*_*_*_*"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">            <span class="nam">models</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">ModelData</span><span class="op">.</span><span class="nam">from_dir</span><span class="op">(</span><span class="nam">model_dir</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">        <span class="nam">choices_file</span> <span class="op">=</span> <span class="nam">models_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"choices.json"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">        <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">choices_file</span><span class="op">,</span> <span class="str">"r"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">fh</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">            <span class="nam">choices</span> <span class="op">=</span> <span class="nam">json</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">fh</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">        <span class="nam">name</span> <span class="op">=</span> <span class="nam">choices</span><span class="op">[</span><span class="str">"operator"</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">        <span class="nam">training_file</span> <span class="op">=</span> <span class="nam">models_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"training.csv"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">        <span class="nam">training</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">read_csv</span><span class="op">(</span><span class="nam">training_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">        <span class="nam">training_config_file</span> <span class="op">=</span> <span class="nam">models_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"training_config.json"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">        <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">training_config_file</span><span class="op">,</span> <span class="str">"r"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">fh</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">            <span class="nam">training_config</span> <span class="op">=</span> <span class="nam">json</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">fh</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">        <span class="key">return</span> <span class="nam">cls</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">training</span><span class="op">,</span> <span class="nam">choices</span><span class="op">,</span> <span class="nam">training_config</span><span class="op">,</span> <span class="nam">models</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t"><span class="op">@</span><span class="nam">dataclass</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t"><span class="key">class</span> <span class="nam">MultiRunData</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">    <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">    <span class="nam">name</span><span class="op">:</span> <span class="nam">str</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">    <span class="nam">runs</span><span class="op">:</span> <span class="nam">List</span><span class="op">[</span><span class="nam">RunData</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">    <span class="nam">results</span><span class="op">:</span> <span class="nam">dict</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">    <span class="nam">config</span><span class="op">:</span> <span class="nam">dict</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">    <span class="op">@</span><span class="nam">classmethod</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">    <span class="key">def</span> <span class="nam">from_dir</span><span class="op">(</span><span class="nam">cls</span><span class="op">,</span> <span class="nam">path</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span> <span class="op">-></span> <span class="nam">Self</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">        <span class="nam">runs</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">        <span class="key">for</span> <span class="nam">element</span> <span class="key">in</span> <span class="nam">path</span><span class="op">.</span><span class="nam">glob</span><span class="op">(</span><span class="str">"*"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">            <span class="key">if</span> <span class="nam">element</span><span class="op">.</span><span class="nam">is_file</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t">                <span class="key">continue</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t">            <span class="key">if</span> <span class="str">"plots"</span> <span class="key">in</span> <span class="nam">element</span><span class="op">.</span><span class="nam">name</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t">                <span class="key">continue</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t">            <span class="nam">runs</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">RunData</span><span class="op">.</span><span class="nam">from_dir</span><span class="op">(</span><span class="nam">element</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t">        <span class="nam">results_file</span> <span class="op">=</span> <span class="nam">path</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"results.json"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t">        <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">results_file</span><span class="op">,</span> <span class="str">"r"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">fh</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t">            <span class="nam">results</span> <span class="op">=</span> <span class="nam">json</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">fh</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t">        <span class="nam">config_file</span> <span class="op">=</span> <span class="nam">path</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"multirun.yaml"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t">        <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">config_file</span><span class="op">,</span> <span class="str">"r"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">fh</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t">            <span class="nam">config</span> <span class="op">=</span> <span class="nam">yaml</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">fh</span><span class="op">,</span> <span class="nam">Loader</span><span class="op">=</span><span class="nam">yaml</span><span class="op">.</span><span class="nam">FullLoader</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t">        <span class="key">return</span> <span class="nam">cls</span><span class="op">(</span><span class="nam">path</span><span class="op">,</span> <span class="nam">path</span><span class="op">.</span><span class="nam">name</span><span class="op">,</span> <span class="nam">runs</span><span class="op">,</span> <span class="nam">results</span><span class="op">,</span> <span class="nam">config</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_93093ff38057b02c_utils_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_metrics_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_d726faacd801a058_metrics_py.html b/_static/codecov/d_d726faacd801a058_metrics_py.html
new file mode 100644
index 00000000..7bb0cdc9
--- /dev/null
+++ b/_static/codecov/d_d726faacd801a058_metrics_py.html
@@ -0,0 +1,238 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/plots/metrics.py: 19%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/plots/metrics.py</b>:
+            <span class="pc_cov">19%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">96 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">18<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">78<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_data_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_training_curves_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">json</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">from</span> <span class="nam">collections</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">    <span class="nam">defaultdict</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">Tuple</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">import</span> <span class="nam">seaborn</span> <span class="key">as</span> <span class="nam">sns</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">from</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">utils</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="nam">DataLoader</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="key">from</span> <span class="nam">tqdm</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">    <span class="nam">tqdm</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">    <span class="nam">DeepDotOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="nam">MeanStackNeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">operators</span><span class="op">.</span><span class="nam">utils</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">    <span class="nam">deserialize</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">plots</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">    <span class="nam">MultiRunData</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">utils</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">    <span class="nam">eval_operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_multirun_metrics</span><span class="op">(</span><span class="nam">multirun</span><span class="op">:</span> <span class="nam">MultiRunData</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"metrics"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">    <span class="nam">out_dir</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">parents</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">exist_ok</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">    <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">    <span class="nam">pbar</span> <span class="op">=</span> <span class="nam">tqdm</span><span class="op">(</span><span class="nam">multirun</span><span class="op">.</span><span class="nam">runs</span><span class="op">,</span> <span class="nam">leave</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">position</span><span class="op">=</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">    <span class="key">for</span> <span class="nam">run</span> <span class="key">in</span> <span class="nam">pbar</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">        <span class="nam">pbar</span><span class="op">.</span><span class="nam">set_postfix_str</span><span class="op">(</span><span class="str">"processing metrics ..."</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">        <span class="nam">pbar2</span> <span class="op">=</span> <span class="nam">tqdm</span><span class="op">(</span><span class="nam">run</span><span class="op">.</span><span class="nam">models</span><span class="op">,</span> <span class="nam">leave</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">position</span><span class="op">=</span><span class="num">2</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">        <span class="key">for</span> <span class="nam">model</span> <span class="key">in</span> <span class="nam">pbar2</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">            <span class="nam">df_operator</span> <span class="op">=</span> <span class="nam">eval_operator</span><span class="op">(</span><span class="nam">model</span><span class="op">.</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="op">[</span><span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">MSELoss</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">L1Loss</span><span class="op">(</span><span class="op">)</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">            <span class="nam">df_operator</span><span class="op">[</span><span class="str">"Architecture"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">run</span><span class="op">.</span><span class="nam">name</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">            <span class="nam">df_operator</span><span class="op">[</span><span class="str">"Checkpoint"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">model</span><span class="op">.</span><span class="nam">name</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">            <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="op">[</span><span class="nam">df</span><span class="op">,</span> <span class="nam">df_operator</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">    <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">boxplot</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">"Architecture"</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">"MSELoss"</span><span class="op">,</span> <span class="nam">hue</span><span class="op">=</span><span class="str">"Checkpoint"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">set_yscale</span><span class="op">(</span><span class="str">"log"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">tight_layout</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"mse.png"</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="nam">fig</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">    <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">boxplot</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">"Architecture"</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">"L1Loss"</span><span class="op">,</span> <span class="nam">hue</span><span class="op">=</span><span class="str">"Checkpoint"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">set_yscale</span><span class="op">(</span><span class="str">"log"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">tight_layout</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"l1.png"</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="nam">fig</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_all_metrics</span><span class="op">(</span><span class="nam">run_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">data_tuple</span><span class="op">:</span> <span class="nam">Tuple</span><span class="op">[</span><span class="nam">str</span><span class="op">,</span> <span class="nam">OperatorDataset</span><span class="op">]</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">    <span class="nam">data_name</span><span class="op">,</span> <span class="nam">dataset</span> <span class="op">=</span> <span class="nam">data_tuple</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">    <span class="com"># initialize all operators</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">    <span class="nam">operators</span> <span class="op">=</span> <span class="nam">defaultdict</span><span class="op">(</span><span class="nam">dict</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">    <span class="key">for</span> <span class="nam">run_path</span> <span class="key">in</span> <span class="nam">run_dir</span><span class="op">.</span><span class="nam">glob</span><span class="op">(</span><span class="str">"*"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t">        <span class="key">if</span> <span class="nam">run_path</span><span class="op">.</span><span class="nam">is_file</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">            <span class="key">continue</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">        <span class="key">if</span> <span class="str">"plot"</span> <span class="key">in</span> <span class="nam">run_path</span><span class="op">.</span><span class="nam">name</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">            <span class="key">continue</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">        <span class="nam">model_dir</span> <span class="op">=</span> <span class="nam">run_path</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"models"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t">        <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">model_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"choices.json"</span><span class="op">)</span><span class="op">,</span> <span class="str">"r"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">file_handle</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t">            <span class="nam">choices</span> <span class="op">=</span> <span class="nam">json</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">file_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t">        <span class="nam">operator_name</span> <span class="op">=</span> <span class="nam">choices</span><span class="op">[</span><span class="str">"operator"</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t">        <span class="key">for</span> <span class="nam">operator_dir</span> <span class="key">in</span> <span class="nam">model_dir</span><span class="op">.</span><span class="nam">glob</span><span class="op">(</span><span class="str">"*_*_*"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t">            <span class="key">if</span> <span class="str">"DeepDot"</span> <span class="key">in</span> <span class="nam">operator_dir</span><span class="op">.</span><span class="nam">name</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t">                <span class="nam">operator_base_class</span> <span class="op">=</span> <span class="nam">DeepDotOperator</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t">            <span class="key">elif</span> <span class="str">"MeanStack"</span> <span class="key">in</span> <span class="nam">operator_dir</span><span class="op">.</span><span class="nam">name</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t">                <span class="nam">operator_base_class</span> <span class="op">=</span> <span class="nam">MeanStackNeuralOperator</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t">            <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t">                <span class="key">raise</span> <span class="nam">ValueError</span><span class="op">(</span><span class="str">f"Unknown operator in {operator_dir.name}"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t">            <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">operator_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"checkpoint.json"</span><span class="op">)</span><span class="op">,</span> <span class="str">"r"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">file_handle</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t">                <span class="nam">checkpoint</span> <span class="op">=</span> <span class="nam">json</span><span class="op">.</span><span class="nam">load</span><span class="op">(</span><span class="nam">file_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t">            <span class="nam">epoch</span> <span class="op">=</span> <span class="nam">checkpoint</span><span class="op">[</span><span class="str">"epoch"</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t">            <span class="nam">operator</span> <span class="op">=</span> <span class="nam">deserialize</span><span class="op">(</span><span class="nam">operator_dir</span><span class="op">,</span> <span class="nam">operator_base_class</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t">            <span class="nam">operators</span><span class="op">[</span><span class="nam">operator_name</span><span class="op">]</span><span class="op">[</span><span class="nam">epoch</span><span class="op">]</span> <span class="op">=</span> <span class="nam">operator</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t">    <span class="nam">eval_loader</span> <span class="op">=</span> <span class="nam">DataLoader</span><span class="op">(</span><span class="nam">dataset</span><span class="op">,</span> <span class="nam">batch_size</span><span class="op">=</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t">    <span class="nam">l1_err</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">L1Loss</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t">    <span class="nam">ms_err</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">MSELoss</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t">    <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t">    <span class="key">for</span> <span class="nam">operator_name</span><span class="op">,</span> <span class="nam">operator_snap</span> <span class="key">in</span> <span class="nam">operators</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t">        <span class="nam">local_performance</span> <span class="op">=</span> <span class="nam">defaultdict</span><span class="op">(</span><span class="nam">list</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t">        <span class="key">for</span> <span class="nam">epoch</span><span class="op">,</span> <span class="nam">operator</span> <span class="key">in</span> <span class="nam">operator_snap</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t">            <span class="nam">operator</span><span class="op">.</span><span class="nam">eval</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t">            <span class="key">for</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span> <span class="key">in</span> <span class="nam">eval_loader</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t">                <span class="nam">out</span> <span class="op">=</span> <span class="nam">operator</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t">                <span class="nam">l1</span> <span class="op">=</span> <span class="nam">l1_err</span><span class="op">(</span><span class="nam">out</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t">                <span class="nam">mse</span> <span class="op">=</span> <span class="nam">ms_err</span><span class="op">(</span><span class="nam">out</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t">                <span class="nam">local_performance</span><span class="op">[</span><span class="str">"Architecture"</span><span class="op">]</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">operator_name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t">                <span class="nam">local_performance</span><span class="op">[</span><span class="str">"Epoch"</span><span class="op">]</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">epoch</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t">                <span class="nam">local_performance</span><span class="op">[</span><span class="str">"l1"</span><span class="op">]</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">l1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t">                <span class="nam">local_performance</span><span class="op">[</span><span class="str">"mse"</span><span class="op">]</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">mse</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t">        <span class="nam">local_df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">local_performance</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="op">[</span><span class="nam">df</span><span class="op">,</span> <span class="nam">local_df</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t">    <span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">run_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"plots"</span><span class="op">,</span> <span class="nam">data_name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t">    <span class="nam">out_dir</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">parents</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">exist_ok</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t">    <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">boxplot</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">"Architecture"</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">"mse"</span><span class="op">,</span> <span class="nam">hue</span><span class="op">=</span><span class="str">"Epoch"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">set_yscale</span><span class="op">(</span><span class="str">"log"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">tight_layout</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"mse.png"</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="nam">fig</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t">    <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">boxplot</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">"Architecture"</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">"l1"</span><span class="op">,</span> <span class="nam">hue</span><span class="op">=</span><span class="str">"Epoch"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">set_yscale</span><span class="op">(</span><span class="str">"log"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">tight_layout</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"l1.png"</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="nam">fig</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_data_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_training_curves_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_d726faacd801a058_training_curves_py.html b/_static/codecov/d_d726faacd801a058_training_curves_py.html
new file mode 100644
index 00000000..bdc4eb02
--- /dev/null
+++ b/_static/codecov/d_d726faacd801a058_training_curves_py.html
@@ -0,0 +1,161 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/plots/training_curves.py: 22%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/plots/training_curves.py</b>:
+            <span class="pc_cov">22%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">40 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">9<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">31<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_metrics_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_transmission_loss_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">seaborn</span> <span class="key">as</span> <span class="nam">sns</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">from</span> <span class="nam">tqdm</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">    <span class="nam">tqdm</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">MultiRunData</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">    <span class="nam">RunData</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_multirun_curves</span><span class="op">(</span><span class="nam">multi_run</span><span class="op">:</span> <span class="nam">MultiRunData</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">    <span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"training_curves"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="nam">pbar</span> <span class="op">=</span> <span class="nam">tqdm</span><span class="op">(</span><span class="nam">multi_run</span><span class="op">.</span><span class="nam">runs</span><span class="op">,</span> <span class="nam">leave</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">position</span><span class="op">=</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">    <span class="key">for</span> <span class="nam">run</span> <span class="key">in</span> <span class="nam">pbar</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">        <span class="nam">run_out</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">run</span><span class="op">.</span><span class="nam">name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">        <span class="nam">run_out</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">parents</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">exist_ok</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">        <span class="nam">plot_run_curves</span><span class="op">(</span><span class="nam">run</span><span class="op">,</span> <span class="nam">run_out</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">run_df</span> <span class="op">=</span> <span class="nam">run</span><span class="op">.</span><span class="nam">training</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">run_df</span><span class="op">[</span><span class="str">"Architecture"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">run</span><span class="op">.</span><span class="nam">name</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="nam">df</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">concat</span><span class="op">(</span><span class="op">[</span><span class="nam">df</span><span class="op">,</span> <span class="nam">run_df</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"epoch_vs_mse.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">    <span class="nam">plot_xyz_vs_error</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">,</span> <span class="str">"Epochs"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"time_vs_mse.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">    <span class="nam">plot_xyz_vs_error</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">,</span> <span class="str">"time"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_run_curves</span><span class="op">(</span><span class="nam">run</span><span class="op">:</span> <span class="nam">RunData</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">    <span class="nam">run_df</span> <span class="op">=</span> <span class="nam">run</span><span class="op">.</span><span class="nam">training</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">    <span class="nam">run_df</span><span class="op">[</span><span class="str">"Architecture"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">run</span><span class="op">.</span><span class="nam">name</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"epoch_vs_mse.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">    <span class="nam">plot_xyz_vs_error</span><span class="op">(</span><span class="nam">run_df</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">,</span> <span class="str">"Epochs"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"time_vs_mse.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="nam">plot_xyz_vs_error</span><span class="op">(</span><span class="nam">run_df</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">,</span> <span class="str">"time"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_xyz_vs_error</span><span class="op">(</span><span class="nam">df_plot</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">str</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">    <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">10</span><span class="op">,</span> <span class="num">10</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span><span class="nam">df_plot</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">"Val_loss"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">linestyle</span><span class="op">=</span><span class="str">"--"</span><span class="op">,</span> <span class="nam">hue</span><span class="op">=</span><span class="str">"Architecture"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span><span class="nam">df_plot</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="nam">x</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">"Train_loss"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">hue</span><span class="op">=</span><span class="str">"Architecture"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">set_yscale</span><span class="op">(</span><span class="str">"log"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">    <span class="nam">lines_labels</span> <span class="op">=</span> <span class="op">[</span><span class="nam">ax</span><span class="op">.</span><span class="nam">get_legend_handles_labels</span><span class="op">(</span><span class="op">)</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">    <span class="nam">lines</span><span class="op">,</span> <span class="nam">labels</span> <span class="op">=</span> <span class="op">[</span><span class="nam">sum</span><span class="op">(</span><span class="nam">lol</span><span class="op">,</span> <span class="op">[</span><span class="op">]</span><span class="op">)</span> <span class="key">for</span> <span class="nam">lol</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="op">*</span><span class="nam">lines_labels</span><span class="op">)</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">    <span class="nam">by_label</span> <span class="op">=</span> <span class="nam">dict</span><span class="op">(</span><span class="nam">zip</span><span class="op">(</span><span class="nam">labels</span><span class="op">,</span> <span class="nam">lines</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">        <span class="nam">by_label</span><span class="op">.</span><span class="nam">values</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">        <span class="nam">by_label</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">        <span class="nam">loc</span><span class="op">=</span><span class="str">"upper center"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">        <span class="nam">bbox_to_anchor</span><span class="op">=</span><span class="op">(</span><span class="num">0.5</span><span class="op">,</span> <span class="num">1.05</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">        <span class="nam">ncol</span><span class="op">=</span><span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">        <span class="nam">fancybox</span><span class="op">=</span><span class="key">True</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">        <span class="nam">shadow</span><span class="op">=</span><span class="key">True</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">    <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">tight_layout</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="nam">fig</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_metrics_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_transmission_loss_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_d726faacd801a058_transmission_loss_py.html b/_static/codecov/d_d726faacd801a058_transmission_loss_py.html
new file mode 100644
index 00000000..c9d2a6f5
--- /dev/null
+++ b/_static/codecov/d_d726faacd801a058_transmission_loss_py.html
@@ -0,0 +1,321 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/plots/transmission_loss.py: 19%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/plots/transmission_loss.py</b>:
+            <span class="pc_cov">19%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">129 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">25<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">104<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_training_curves_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_utils_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">    <span class="nam">List</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">matplotlib</span><span class="op">.</span><span class="nam">pyplot</span> <span class="key">as</span> <span class="nam">plt</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">seaborn</span> <span class="key">as</span> <span class="nam">sns</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="key">from</span> <span class="nam">tqdm</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">    <span class="nam">tqdm</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">    <span class="nam">ModelData</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">    <span class="nam">MultiRunData</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="nam">RunData</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">utils</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="nam">eval_operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_multirun_transmission_loss</span><span class="op">(</span><span class="nam">multi_run</span><span class="op">:</span> <span class="nam">MultiRunData</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">    <span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"comparison"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">    <span class="nam">pbar</span> <span class="op">=</span> <span class="nam">tqdm</span><span class="op">(</span><span class="nam">multi_run</span><span class="op">.</span><span class="nam">runs</span><span class="op">,</span> <span class="nam">leave</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">position</span><span class="op">=</span><span class="num">1</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">    <span class="key">for</span> <span class="nam">run</span> <span class="key">in</span> <span class="nam">pbar</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">        <span class="nam">pbar</span><span class="op">.</span><span class="nam">set_postfix_str</span><span class="op">(</span><span class="str">f"... processing transmission loss for {run.name} ..."</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">        <span class="nam">run_out</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">run</span><span class="op">.</span><span class="nam">name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">        <span class="nam">plot_run_transmission_loss</span><span class="op">(</span><span class="nam">run</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">run_out</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_run_transmission_loss</span><span class="op">(</span><span class="nam">run</span><span class="op">:</span> <span class="nam">RunData</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="nam">run_out</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">run</span><span class="op">.</span><span class="nam">name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">    <span class="nam">pbar</span> <span class="op">=</span> <span class="nam">tqdm</span><span class="op">(</span><span class="nam">run</span><span class="op">.</span><span class="nam">models</span><span class="op">,</span> <span class="nam">leave</span><span class="op">=</span><span class="key">False</span><span class="op">,</span> <span class="nam">position</span><span class="op">=</span><span class="num">2</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">    <span class="key">for</span> <span class="nam">model</span> <span class="key">in</span> <span class="nam">pbar</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">        <span class="nam">pbar</span><span class="op">.</span><span class="nam">set_postfix_str</span><span class="op">(</span><span class="str">f"... processing transmission loss for {model.name} ..."</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="nam">model_out</span> <span class="op">=</span> <span class="nam">run_out</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="nam">model</span><span class="op">.</span><span class="nam">name</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">        <span class="nam">plot_model_transmission_loss</span><span class="op">(</span><span class="nam">run</span><span class="op">,</span> <span class="nam">model</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">model_out</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_model_transmission_loss</span><span class="op">(</span><span class="nam">run</span><span class="op">:</span> <span class="nam">RunData</span><span class="op">,</span> <span class="nam">model</span><span class="op">:</span> <span class="nam">ModelData</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">    <span class="nam">out_dir</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">parents</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">exist_ok</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">    <span class="nam">op</span> <span class="op">=</span> <span class="nam">model</span><span class="op">.</span><span class="nam">operator</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">    <span class="nam">df</span> <span class="op">=</span> <span class="nam">eval_operator</span><span class="op">(</span><span class="nam">op</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="op">[</span><span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">MSELoss</span><span class="op">(</span><span class="op">)</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">    <span class="com"># set axis names</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">    <span class="nam">df</span><span class="op">[</span><span class="str">"Radius [mm]"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">df</span><span class="op">[</span><span class="str">"u"</span><span class="op">]</span><span class="op">.</span><span class="nam">apply</span><span class="op">(</span><span class="key">lambda</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">x</span><span class="op">[</span><span class="num">0</span><span class="op">]</span> <span class="op">*</span> <span class="num">1e3</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">    <span class="nam">df</span><span class="op">[</span><span class="str">"Inner Radius [mm]"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">df</span><span class="op">[</span><span class="str">"u"</span><span class="op">]</span><span class="op">.</span><span class="nam">apply</span><span class="op">(</span><span class="key">lambda</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">x</span><span class="op">[</span><span class="num">1</span><span class="op">]</span> <span class="op">*</span> <span class="num">1e3</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">    <span class="nam">df</span><span class="op">[</span><span class="str">"Gap Width [mm]"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">df</span><span class="op">[</span><span class="str">"u"</span><span class="op">]</span><span class="op">.</span><span class="nam">apply</span><span class="op">(</span><span class="key">lambda</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">x</span><span class="op">[</span><span class="num">2</span><span class="op">]</span> <span class="op">*</span> <span class="num">1e3</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">    <span class="nam">plot_transmission_loss_best</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">op</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">    <span class="nam">plot_transmission_loss_mean</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">op</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">    <span class="nam">plot_transmission_loss_median</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">op</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">    <span class="nam">plot_transmission_loss_worst</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">op</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">    <span class="nam">plot_transmission_loss_hist</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">    <span class="nam">plot_transmission_loss_qtile</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">op</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">    <span class="key">if</span> <span class="nam">run</span><span class="op">.</span><span class="nam">training_config</span><span class="op">[</span><span class="str">"val_size"</span><span class="op">]</span> <span class="op">+</span> <span class="nam">run</span><span class="op">.</span><span class="nam">training_config</span><span class="op">[</span><span class="str">"train_size"</span><span class="op">]</span> <span class="op">==</span> <span class="nam">len</span><span class="op">(</span><span class="nam">dataset</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">        <span class="nam">val_indices</span> <span class="op">=</span> <span class="nam">run</span><span class="op">.</span><span class="nam">training_config</span><span class="op">[</span><span class="str">"val_indices"</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">    <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">        <span class="nam">val_indices</span> <span class="op">=</span> <span class="key">None</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">    <span class="nam">plot_transmission_loss_tile</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">,</span> <span class="nam">val_indices</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t"><span class="key">def</span> <span class="nam">_get_single_df</span><span class="op">(</span><span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">idx</span><span class="op">:</span> <span class="nam">int</span><span class="op">)</span> <span class="op">-></span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">    <span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span> <span class="op">=</span> <span class="nam">dataset</span><span class="op">[</span><span class="nam">idx</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">    <span class="nam">v_out</span> <span class="op">=</span> <span class="nam">operator</span><span class="op">(</span><span class="nam">x</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">0</span><span class="op">)</span><span class="op">,</span> <span class="nam">u</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">0</span><span class="op">)</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">unsqueeze</span><span class="op">(</span><span class="num">0</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">    <span class="nam">data</span> <span class="op">=</span> <span class="op">{</span><span class="str">"y"</span><span class="op">:</span> <span class="nam">y</span><span class="op">,</span> <span class="str">"v"</span><span class="op">:</span> <span class="nam">v</span><span class="op">,</span> <span class="str">"v_out"</span><span class="op">:</span> <span class="nam">v_out</span><span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">    <span class="key">for</span> <span class="nam">idf</span><span class="op">,</span> <span class="nam">tensor</span> <span class="key">in</span> <span class="nam">data</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t">        <span class="key">if</span> <span class="nam">idf</span> <span class="key">not</span> <span class="key">in</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">transform</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t">            <span class="key">continue</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t">        <span class="nam">data</span><span class="op">[</span><span class="nam">idf</span><span class="op">]</span> <span class="op">=</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">transform</span><span class="op">[</span><span class="nam">idf</span><span class="op">]</span><span class="op">.</span><span class="nam">undo</span><span class="op">(</span><span class="nam">tensor</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t">    <span class="key">if</span> <span class="str">"v"</span> <span class="key">in</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">transform</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">        <span class="nam">data</span><span class="op">[</span><span class="str">"v_out"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">transform</span><span class="op">[</span><span class="str">"v"</span><span class="op">]</span><span class="op">.</span><span class="nam">undo</span><span class="op">(</span><span class="nam">data</span><span class="op">[</span><span class="str">"v_out"</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t">    <span class="key">for</span> <span class="nam">idf</span><span class="op">,</span> <span class="nam">tensor</span> <span class="key">in</span> <span class="nam">data</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t">        <span class="nam">data</span><span class="op">[</span><span class="nam">idf</span><span class="op">]</span> <span class="op">=</span> <span class="nam">tensor</span><span class="op">.</span><span class="nam">squeeze</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">detach</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">numpy</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t">    <span class="key">return</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">data</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_transmission_loss_best</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t">    <span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t"><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"best.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t">    <span class="nam">best_idx</span> <span class="op">=</span> <span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">.</span><span class="nam">idxmin</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t">    <span class="nam">df_single</span> <span class="op">=</span> <span class="nam">_get_single_df</span><span class="op">(</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">best_idx</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t">    <span class="nam">plot_single</span><span class="op">(</span><span class="nam">df_single</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_transmission_loss_median</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t">    <span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t"><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t">    <span class="nam">median_idx</span> <span class="op">=</span> <span class="nam">df</span><span class="op">[</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span> <span class="op">==</span> <span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">.</span><span class="nam">quantile</span><span class="op">(</span><span class="nam">interpolation</span><span class="op">=</span><span class="str">"nearest"</span><span class="op">)</span><span class="op">]</span><span class="op">.</span><span class="nam">index</span><span class="op">[</span><span class="num">0</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"median.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t">    <span class="nam">df_single</span> <span class="op">=</span> <span class="nam">_get_single_df</span><span class="op">(</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">median_idx</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t">    <span class="nam">plot_single</span><span class="op">(</span><span class="nam">df_single</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_transmission_loss_mean</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t">    <span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t"><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t">    <span class="nam">mean_idx</span> <span class="op">=</span> <span class="nam">df</span><span class="op">.</span><span class="nam">iloc</span><span class="op">[</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span> <span class="op">-</span> <span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span><span class="op">)</span><span class="op">.</span><span class="nam">abs</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">argsort</span><span class="op">(</span><span class="op">)</span><span class="op">[</span><span class="op">:</span><span class="num">1</span><span class="op">]</span><span class="op">]</span><span class="op">.</span><span class="nam">index</span><span class="op">[</span><span class="num">0</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"mean.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t">    <span class="nam">df_single</span> <span class="op">=</span> <span class="nam">_get_single_df</span><span class="op">(</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">mean_idx</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t">    <span class="nam">plot_single</span><span class="op">(</span><span class="nam">df_single</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_transmission_loss_worst</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t">    <span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t"><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t">    <span class="nam">worst_idx</span> <span class="op">=</span> <span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">.</span><span class="nam">idxmax</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"worst.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t">    <span class="nam">df_single</span> <span class="op">=</span> <span class="nam">_get_single_df</span><span class="op">(</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">worst_idx</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t">    <span class="nam">plot_single</span><span class="op">(</span><span class="nam">df_single</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t"><span class="key">def</span> <span class="nam">_get_param_string</span><span class="op">(</span><span class="nam">u</span><span class="op">)</span> <span class="op">-></span> <span class="nam">str</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t">    <span class="nam">u_corr</span> <span class="op">=</span> <span class="nam">u</span><span class="op">.</span><span class="nam">squeeze</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">detach</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">numpy</span><span class="op">(</span><span class="op">)</span> <span class="op">*</span> <span class="num">1e3</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t">    <span class="key">return</span> <span class="str">f"R={u_corr[0]:.2f}mm, R_i={u_corr[1]:.2f}mm, b={u_corr[2]:.2f}mm"</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_transmission_loss_hist</span><span class="op">(</span><span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"hist.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t">    <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">histplot</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">"MSELoss"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">bins</span><span class="op">=</span><span class="num">31</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">axvline</span><span class="op">(</span><span class="nam">x</span><span class="op">=</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">.</span><span class="nam">median</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">c</span><span class="op">=</span><span class="str">"k"</span><span class="op">,</span> <span class="nam">ls</span><span class="op">=</span><span class="str">"-"</span><span class="op">,</span> <span class="nam">lw</span><span class="op">=</span><span class="num">2.5</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">"median"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">axvline</span><span class="op">(</span><span class="nam">x</span><span class="op">=</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">.</span><span class="nam">mean</span><span class="op">(</span><span class="op">)</span><span class="op">,</span> <span class="nam">c</span><span class="op">=</span><span class="str">"orange"</span><span class="op">,</span> <span class="nam">ls</span><span class="op">=</span><span class="str">"--"</span><span class="op">,</span> <span class="nam">lw</span><span class="op">=</span><span class="num">2.5</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">"mean"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">tight_layout</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="nam">fig</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_transmission_loss_qtile</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t">    <span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t"><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t152" href="#t152">152</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"qtile.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t">    <span class="nam">fig</span><span class="op">,</span> <span class="nam">axs</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="nam">nrows</span><span class="op">=</span><span class="num">3</span><span class="op">,</span> <span class="nam">ncols</span><span class="op">=</span><span class="num">3</span><span class="op">,</span> <span class="nam">figsize</span><span class="op">=</span><span class="op">(</span><span class="num">10</span><span class="op">,</span> <span class="num">10</span><span class="op">)</span><span class="op">,</span> <span class="nam">sharex</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">sharey</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t">    <span class="nam">quantiles</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">linspace</span><span class="op">(</span><span class="num">0.0</span><span class="op">,</span> <span class="num">1.0</span><span class="op">,</span> <span class="num">9</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t">    <span class="key">for</span> <span class="nam">i</span><span class="op">,</span> <span class="nam">quantile</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="nam">range</span><span class="op">(</span><span class="num">9</span><span class="op">)</span><span class="op">,</span> <span class="nam">quantiles</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t">        <span class="nam">row</span><span class="op">,</span> <span class="nam">col</span> <span class="op">=</span> <span class="nam">i</span> <span class="op">//</span> <span class="num">3</span><span class="op">,</span> <span class="nam">i</span> <span class="op">%</span> <span class="num">3</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t157" href="#t157">157</a></span><span class="t">        <span class="nam">q_idx</span> <span class="op">=</span> <span class="nam">df</span><span class="op">[</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span> <span class="op">==</span> <span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">.</span><span class="nam">quantile</span><span class="op">(</span><span class="nam">q</span><span class="op">=</span><span class="nam">quantile</span><span class="op">,</span> <span class="nam">interpolation</span><span class="op">=</span><span class="str">"nearest"</span><span class="op">)</span><span class="op">]</span><span class="op">.</span><span class="nam">index</span><span class="op">[</span><span class="num">0</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t">        <span class="nam">df_single</span> <span class="op">=</span> <span class="nam">_get_single_df</span><span class="op">(</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">,</span> <span class="nam">q_idx</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t">        <span class="nam">plot_ax</span><span class="op">(</span><span class="nam">ax</span><span class="op">=</span><span class="nam">axs</span><span class="op">[</span><span class="nam">row</span><span class="op">,</span> <span class="nam">col</span><span class="op">]</span><span class="op">,</span> <span class="nam">df</span><span class="op">=</span><span class="nam">df_single</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t">        <span class="nam">axs</span><span class="op">[</span><span class="nam">row</span><span class="op">,</span> <span class="nam">col</span><span class="op">]</span><span class="op">.</span><span class="nam">set_title</span><span class="op">(</span><span class="str">f"{i}/8 quantile"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t">        <span class="nam">axs</span><span class="op">[</span><span class="nam">row</span><span class="op">,</span> <span class="nam">col</span><span class="op">]</span><span class="op">.</span><span class="nam">set_ylabel</span><span class="op">(</span><span class="str">"Frequency [Hz]"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t162" href="#t162">162</a></span><span class="t">        <span class="nam">axs</span><span class="op">[</span><span class="nam">row</span><span class="op">,</span> <span class="nam">col</span><span class="op">]</span><span class="op">.</span><span class="nam">set_xlabel</span><span class="op">(</span><span class="str">"TL [dB]"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t">    <span class="com"># only use a single set of labels</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t">    <span class="nam">lines_labels</span> <span class="op">=</span> <span class="op">[</span><span class="nam">ax</span><span class="op">.</span><span class="nam">get_legend_handles_labels</span><span class="op">(</span><span class="op">)</span> <span class="key">for</span> <span class="nam">ax</span> <span class="key">in</span> <span class="nam">axs</span><span class="op">.</span><span class="nam">flatten</span><span class="op">(</span><span class="op">)</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t166" href="#t166">166</a></span><span class="t">    <span class="nam">lines</span><span class="op">,</span> <span class="nam">labels</span> <span class="op">=</span> <span class="op">[</span><span class="nam">sum</span><span class="op">(</span><span class="nam">lol</span><span class="op">,</span> <span class="op">[</span><span class="op">]</span><span class="op">)</span> <span class="key">for</span> <span class="nam">lol</span> <span class="key">in</span> <span class="nam">zip</span><span class="op">(</span><span class="op">*</span><span class="nam">lines_labels</span><span class="op">)</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t">    <span class="nam">by_label</span> <span class="op">=</span> <span class="nam">dict</span><span class="op">(</span><span class="nam">zip</span><span class="op">(</span><span class="nam">labels</span><span class="op">,</span> <span class="nam">lines</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t169" href="#t169">169</a></span><span class="t">        <span class="nam">by_label</span><span class="op">.</span><span class="nam">values</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t">        <span class="nam">by_label</span><span class="op">.</span><span class="nam">keys</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t">        <span class="nam">loc</span><span class="op">=</span><span class="str">"upper center"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t">        <span class="nam">bbox_to_anchor</span><span class="op">=</span><span class="op">(</span><span class="num">0.5</span><span class="op">,</span> <span class="num">1.05</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t">        <span class="nam">ncol</span><span class="op">=</span><span class="num">2</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t">        <span class="nam">fancybox</span><span class="op">=</span><span class="key">True</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t">        <span class="nam">shadow</span><span class="op">=</span><span class="key">True</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t">    <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">tight_layout</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="nam">fig</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_transmission_loss_tile</span><span class="op">(</span><span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">,</span> <span class="nam">val_indices</span><span class="op">:</span> <span class="nam">List</span><span class="op">[</span><span class="nam">int</span><span class="op">]</span> <span class="op">=</span> <span class="key">None</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t">    <span class="nam">out_file</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"tile.png"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t">    <span class="com"># create quantiles</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t">    <span class="nam">df</span><span class="op">[</span><span class="str">"quantile"</span><span class="op">]</span> <span class="op">=</span> <span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span> <span class="op">-</span> <span class="nam">min</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">)</span><span class="op">)</span> <span class="op">/</span> <span class="op">(</span><span class="nam">max</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">)</span> <span class="op">-</span> <span class="nam">min</span><span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"MSELoss"</span><span class="op">]</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t188" href="#t188">188</a></span><span class="t">    <span class="nam">df</span><span class="op">[</span><span class="str">"quantile"</span><span class="op">]</span> <span class="op">=</span> <span class="op">(</span><span class="nam">df</span><span class="op">[</span><span class="str">"quantile"</span><span class="op">]</span> <span class="op">*</span> <span class="num">10</span><span class="op">)</span><span class="op">.</span><span class="nam">round</span><span class="op">(</span><span class="op">)</span> <span class="op">/</span> <span class="num">10</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t189" href="#t189">189</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t190" href="#t190">190</a></span><span class="t">    <span class="com"># plot properties</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t191" href="#t191">191</a></span><span class="t">    <span class="nam">config</span> <span class="op">=</span> <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t192" href="#t192">192</a></span><span class="t">        <span class="str">"data"</span><span class="op">:</span> <span class="nam">df</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t193" href="#t193">193</a></span><span class="t">        <span class="str">"vars"</span><span class="op">:</span> <span class="op">[</span><span class="str">"MSELoss"</span><span class="op">,</span> <span class="str">"Radius [mm]"</span><span class="op">,</span> <span class="str">"Inner Radius [mm]"</span><span class="op">,</span> <span class="str">"Gap Width [mm]"</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t194" href="#t194">194</a></span><span class="t">        <span class="str">"hue"</span><span class="op">:</span> <span class="str">"quantile"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t195" href="#t195">195</a></span><span class="t">        <span class="str">"palette"</span><span class="op">:</span> <span class="str">"coolwarm"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t196" href="#t196">196</a></span><span class="t">        <span class="str">"diag_kind"</span><span class="op">:</span> <span class="str">"hist"</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t197" href="#t197">197</a></span><span class="t">        <span class="str">"diag_kws"</span><span class="op">:</span> <span class="op">{</span><span class="str">"multiple"</span><span class="op">:</span> <span class="str">"stack"</span><span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t198" href="#t198">198</a></span><span class="t">    <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t199" href="#t199">199</a></span><span class="t">    <span class="key">if</span> <span class="nam">val_indices</span> <span class="key">is</span> <span class="key">not</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t200" href="#t200">200</a></span><span class="t">        <span class="nam">df</span><span class="op">[</span><span class="str">"Is Validation"</span><span class="op">]</span> <span class="op">=</span> <span class="nam">df</span><span class="op">.</span><span class="nam">index</span><span class="op">.</span><span class="nam">isin</span><span class="op">(</span><span class="nam">val_indices</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t201" href="#t201">201</a></span><span class="t">        <span class="nam">config</span><span class="op">[</span><span class="str">"vars"</span><span class="op">]</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="str">"Is Validation"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t202" href="#t202">202</a></span><span class="t">        <span class="nam">config</span><span class="op">[</span><span class="str">"plot_kws"</span><span class="op">]</span> <span class="op">=</span> <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t203" href="#t203">203</a></span><span class="t">            <span class="str">"alpha"</span><span class="op">:</span> <span class="num">0.5</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t204" href="#t204">204</a></span><span class="t">            <span class="str">"style"</span><span class="op">:</span> <span class="nam">df</span><span class="op">[</span><span class="str">"Is Validation"</span><span class="op">]</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t205" href="#t205">205</a></span><span class="t">            <span class="str">"markers"</span><span class="op">:</span> <span class="op">{</span><span class="key">True</span><span class="op">:</span> <span class="str">"D"</span><span class="op">,</span> <span class="key">False</span><span class="op">:</span> <span class="str">"o"</span><span class="op">}</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t206" href="#t206">206</a></span><span class="t">        <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t207" href="#t207">207</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t208" href="#t208">208</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">pairplot</span><span class="op">(</span><span class="op">**</span><span class="nam">config</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t209" href="#t209">209</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t210" href="#t210">210</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t211" href="#t211">211</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t212" href="#t212">212</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t213" href="#t213">213</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_single</span><span class="op">(</span><span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">out_file</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t214" href="#t214">214</a></span><span class="t">    <span class="nam">fig</span><span class="op">,</span> <span class="nam">ax</span> <span class="op">=</span> <span class="nam">plt</span><span class="op">.</span><span class="nam">subplots</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t215" href="#t215">215</a></span><span class="t">    <span class="nam">plot_ax</span><span class="op">(</span><span class="nam">df</span><span class="op">,</span> <span class="nam">ax</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t216" href="#t216">216</a></span><span class="t">    <span class="nam">ax</span><span class="op">.</span><span class="nam">legend</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t217" href="#t217">217</a></span><span class="t">    <span class="nam">fig</span><span class="op">.</span><span class="nam">tight_layout</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t218" href="#t218">218</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">savefig</span><span class="op">(</span><span class="nam">out_file</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t219" href="#t219">219</a></span><span class="t">    <span class="nam">plt</span><span class="op">.</span><span class="nam">close</span><span class="op">(</span><span class="nam">fig</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t220" href="#t220">220</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t221" href="#t221">221</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t222" href="#t222">222</a></span><span class="t"><span class="key">def</span> <span class="nam">plot_ax</span><span class="op">(</span><span class="nam">df</span><span class="op">:</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">,</span> <span class="nam">ax</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t223" href="#t223">223</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">"v_out"</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">"y"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">"prediction"</span><span class="op">,</span> <span class="nam">orient</span><span class="op">=</span><span class="str">"y"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t224" href="#t224">224</a></span><span class="t">    <span class="nam">sns</span><span class="op">.</span><span class="nam">lineplot</span><span class="op">(</span><span class="nam">data</span><span class="op">=</span><span class="nam">df</span><span class="op">,</span> <span class="nam">x</span><span class="op">=</span><span class="str">"v"</span><span class="op">,</span> <span class="nam">y</span><span class="op">=</span><span class="str">"y"</span><span class="op">,</span> <span class="nam">ax</span><span class="op">=</span><span class="nam">ax</span><span class="op">,</span> <span class="nam">label</span><span class="op">=</span><span class="str">"FEM"</span><span class="op">,</span> <span class="nam">alpha</span><span class="op">=</span><span class="num">0.5</span><span class="op">,</span> <span class="nam">orient</span><span class="op">=</span><span class="str">"y"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_training_curves_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_d726faacd801a058_utils_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_d726faacd801a058_utils_py.html b/_static/codecov/d_d726faacd801a058_utils_py.html
new file mode 100644
index 00000000..5b0511b2
--- /dev/null
+++ b/_static/codecov/d_d726faacd801a058_utils_py.html
@@ -0,0 +1,142 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/plots/utils.py: 43%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/plots/utils.py</b>:
+            <span class="pc_cov">43%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">21 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">9<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">12<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_transmission_loss_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_8dbc7d2850ae11b9_low_pass_filter_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">collections</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">defaultdict</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">    <span class="nam">List</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="key">from</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">utils</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">    <span class="nam">DataLoader</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">    <span class="nam">NeuralOperator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">def</span> <span class="nam">eval_operator</span><span class="op">(</span><span class="nam">operator</span><span class="op">:</span> <span class="nam">NeuralOperator</span><span class="op">,</span> <span class="nam">dataset</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span> <span class="nam">losses</span><span class="op">:</span> <span class="nam">List</span><span class="op">[</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">]</span><span class="op">)</span> <span class="op">-></span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="nam">loader</span> <span class="op">=</span> <span class="nam">DataLoader</span><span class="op">(</span><span class="nam">dataset</span><span class="op">,</span> <span class="nam">batch_size</span><span class="op">=</span><span class="num">1</span><span class="op">,</span> <span class="nam">shuffle</span><span class="op">=</span><span class="key">False</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">    <span class="nam">cs</span> <span class="op">=</span> <span class="op">{</span><span class="nam">c</span><span class="op">.</span><span class="nam">__class__</span><span class="op">.</span><span class="nam">__name__</span><span class="op">:</span> <span class="nam">c</span> <span class="key">for</span> <span class="nam">c</span> <span class="key">in</span> <span class="nam">losses</span><span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">    <span class="nam">ls</span> <span class="op">=</span> <span class="nam">defaultdict</span><span class="op">(</span><span class="nam">list</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">    <span class="nam">operator</span><span class="op">.</span><span class="nam">eval</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">    <span class="key">with</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">no_grad</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">        <span class="key">for</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span> <span class="key">in</span> <span class="nam">loader</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">            <span class="nam">out</span> <span class="op">=</span> <span class="nam">operator</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">            <span class="key">for</span> <span class="nam">name</span><span class="op">,</span> <span class="nam">crit</span> <span class="key">in</span> <span class="nam">cs</span><span class="op">.</span><span class="nam">items</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">                <span class="nam">ls</span><span class="op">[</span><span class="nam">name</span><span class="op">]</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">crit</span><span class="op">(</span><span class="nam">out</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">    <span class="nam">values</span> <span class="op">=</span> <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">        <span class="str">"x"</span><span class="op">:</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">x</span><span class="op">.</span><span class="nam">squeeze</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">        <span class="str">"u"</span><span class="op">:</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">u</span><span class="op">.</span><span class="nam">squeeze</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="str">"y"</span><span class="op">:</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">y</span><span class="op">.</span><span class="nam">squeeze</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">        <span class="str">"v"</span><span class="op">:</span> <span class="nam">dataset</span><span class="op">.</span><span class="nam">v</span><span class="op">.</span><span class="nam">squeeze</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">    <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">    <span class="nam">values</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">ls</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">    <span class="key">return</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span><span class="nam">values</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_d726faacd801a058_transmission_loss_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_8dbc7d2850ae11b9_low_pass_filter_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_dfcfe80011fec8d7_residual_py.html b/_static/codecov/d_dfcfe80011fec8d7_residual_py.html
new file mode 100644
index 00000000..ad04314a
--- /dev/null
+++ b/_static/codecov/d_dfcfe80011fec8d7_residual_py.html
@@ -0,0 +1,144 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/networks/residual.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/networks/residual.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">27 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">27<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_99aac0089c5f15d8_operator_metrics_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_dot_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">from</span> <span class="nam">typing</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="nam">List</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span> <span class="key">as</span> <span class="nam">nn</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">class</span> <span class="nam">ResBlock</span><span class="op">(</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">width</span><span class="op">:</span> <span class="nam">int</span><span class="op">,</span> <span class="nam">depth</span><span class="op">:</span> <span class="nam">int</span><span class="op">,</span> <span class="nam">act</span><span class="op">:</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">net</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">        <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">depth</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">net</span><span class="op">.</span><span class="nam">add_module</span><span class="op">(</span><span class="str">f"linear_{i}"</span><span class="op">,</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Linear</span><span class="op">(</span><span class="nam">width</span><span class="op">,</span> <span class="nam">width</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">net</span><span class="op">.</span><span class="nam">add_module</span><span class="op">(</span><span class="str">f"Act_{i}"</span><span class="op">,</span> <span class="nam">act</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">        <span class="nam">out</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">net</span><span class="op">(</span><span class="nam">x</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="key">return</span> <span class="nam">out</span> <span class="op">+</span> <span class="nam">x</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">class</span> <span class="nam">ResNet</span><span class="op">(</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">width</span><span class="op">:</span> <span class="nam">int</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="nam">depth</span><span class="op">:</span> <span class="nam">int</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">        <span class="nam">act</span><span class="op">:</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t">        <span class="nam">stride</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t">        <span class="nam">transition_transformations</span><span class="op">:</span> <span class="nam">List</span><span class="op">[</span><span class="nam">nn</span><span class="op">.</span><span class="nam">Module</span><span class="op">]</span> <span class="op">=</span> <span class="key">None</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t">        <span class="nam">super</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">__init__</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">        <span class="key">if</span> <span class="nam">transition_transformations</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t">            <span class="nam">transition_transformations</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">        <span class="key">assert</span> <span class="nam">depth</span> <span class="op">%</span> <span class="nam">stride</span> <span class="op">==</span> <span class="num">0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">        <span class="nam">n_blocks</span> <span class="op">=</span> <span class="nam">depth</span> <span class="op">//</span> <span class="nam">stride</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">net</span> <span class="op">=</span> <span class="nam">nn</span><span class="op">.</span><span class="nam">Sequential</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">        <span class="key">for</span> <span class="nam">i</span> <span class="key">in</span> <span class="nam">range</span><span class="op">(</span><span class="nam">n_blocks</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">net</span><span class="op">.</span><span class="nam">add_module</span><span class="op">(</span><span class="str">f"ResBlock_{i}"</span><span class="op">,</span> <span class="nam">ResBlock</span><span class="op">(</span><span class="nam">width</span><span class="op">=</span><span class="nam">width</span><span class="op">,</span> <span class="nam">depth</span><span class="op">=</span><span class="nam">stride</span><span class="op">,</span> <span class="nam">act</span><span class="op">=</span><span class="nam">act</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">            <span class="key">for</span> <span class="nam">j</span><span class="op">,</span> <span class="nam">transformation</span> <span class="key">in</span> <span class="nam">enumerate</span><span class="op">(</span><span class="nam">transition_transformations</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">                <span class="nam">self</span><span class="op">.</span><span class="nam">net</span><span class="op">.</span><span class="nam">add_module</span><span class="op">(</span><span class="str">f"Transformation_{i}_{j}"</span><span class="op">,</span> <span class="nam">transformation</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">    <span class="key">def</span> <span class="nam">forward</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">x</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">Tensor</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">net</span><span class="op">(</span><span class="nam">x</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_99aac0089c5f15d8_operator_metrics_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_93093ff38057b02c_deep_dot_operator_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_e3bc015ca2131802_average_metric_py.html b/_static/codecov/d_e3bc015ca2131802_average_metric_py.html
new file mode 100644
index 00000000..862afc8d
--- /dev/null
+++ b/_static/codecov/d_e3bc015ca2131802_average_metric_py.html
@@ -0,0 +1,124 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/trainers/average_metric.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/trainers/average_metric.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">21 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">21<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_8dbc7d2850ae11b9_low_pass_filter_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_e3bc015ca2131802_trainer_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">class</span> <span class="nam">AverageMetric</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">name</span><span class="op">:</span> <span class="nam">str</span><span class="op">,</span> <span class="nam">fmt</span><span class="op">:</span> <span class="nam">str</span> <span class="op">=</span> <span class="str">":f"</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">name</span> <span class="op">=</span> <span class="nam">name</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">fmt</span> <span class="op">=</span> <span class="nam">fmt</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">val</span> <span class="op">=</span> <span class="num">0.0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">n_items</span> <span class="op">=</span> <span class="num">0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">avg</span> <span class="op">=</span> <span class="num">0.0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">    <span class="key">def</span> <span class="nam">__call__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">avg</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t">    <span class="key">def</span> <span class="nam">reset</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">val</span> <span class="op">=</span> <span class="num">0.0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">n_items</span> <span class="op">=</span> <span class="num">0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">avg</span> <span class="op">=</span> <span class="num">0.0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">    <span class="key">def</span> <span class="nam">update</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">val</span><span class="op">:</span> <span class="nam">float</span><span class="op">,</span> <span class="nam">n</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">n_items</span> <span class="op">+=</span> <span class="nam">n</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">val</span> <span class="op">+=</span> <span class="nam">val</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">avg</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">val</span> <span class="op">/</span> <span class="nam">self</span><span class="op">.</span><span class="nam">n_items</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">    <span class="key">def</span> <span class="nam">__str__</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">        <span class="key">return</span> <span class="str">f"{self.name}: {self.avg: {self.fmt}}"</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">    <span class="key">def</span> <span class="nam">to_dict</span><span class="op">(</span><span class="nam">self</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">        <span class="key">return</span> <span class="op">{</span><span class="str">"name"</span><span class="op">:</span> <span class="nam">self</span><span class="op">.</span><span class="nam">name</span><span class="op">,</span> <span class="str">"val"</span><span class="op">:</span> <span class="nam">self</span><span class="op">.</span><span class="nam">avg</span><span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_8dbc7d2850ae11b9_low_pass_filter_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_e3bc015ca2131802_trainer_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_e3bc015ca2131802_trainer_py.html b/_static/codecov/d_e3bc015ca2131802_trainer_py.html
new file mode 100644
index 00000000..f28809af
--- /dev/null
+++ b/_static/codecov/d_e3bc015ca2131802_trainer_py.html
@@ -0,0 +1,308 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/trainers/trainer.py: 93%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/trainers/trainer.py</b>:
+            <span class="pc_cov">93%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">97 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">90<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">7<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_e3bc015ca2131802_average_metric_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_e3bc015ca2131802_util_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">json</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">time</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">import</span> <span class="nam">mlflow</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t"><span class="key">import</span> <span class="nam">pandas</span> <span class="key">as</span> <span class="nam">pd</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">optim</span><span class="op">.</span><span class="nam">lr_scheduler</span> <span class="key">as</span> <span class="nam">sched</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t"><span class="key">import</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">utils</span><span class="op">.</span><span class="nam">data</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t">    <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="key">from</span> <span class="nam">continuity</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t"><span class="key">from</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">utils</span><span class="op">.</span><span class="nam">data</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">    <span class="nam">DataLoader</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">    <span class="nam">random_split</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t"><span class="key">from</span> <span class="nam">tqdm</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">    <span class="nam">tqdm</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">utils</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="nam">UniqueId</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">average_metric</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">    <span class="nam">AverageMetric</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t29" href="#t29">29</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t30" href="#t30">30</a></span><span class="t"><span class="key">from</span> <span class="op">.</span><span class="nam">util</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t31" href="#t31">31</a></span><span class="t">    <span class="nam">save_checkpoint</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t32" href="#t32">32</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t33" href="#t33">33</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t34" href="#t34">34</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t35" href="#t35">35</a></span><span class="t"><span class="key">class</span> <span class="nam">Trainer</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t36" href="#t36">36</a></span><span class="t">    <span class="key">def</span> <span class="nam">__init__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t37" href="#t37">37</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t38" href="#t38">38</a></span><span class="t">        <span class="nam">operator</span><span class="op">:</span> <span class="nam">Operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t39" href="#t39">39</a></span><span class="t">        <span class="nam">criterion</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t40" href="#t40">40</a></span><span class="t">        <span class="nam">optimizer</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t41" href="#t41">41</a></span><span class="t">        <span class="nam">lr_scheduler</span><span class="op">:</span> <span class="nam">sched</span><span class="op">.</span><span class="nam">LRScheduler</span> <span class="op">=</span> <span class="key">None</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t42" href="#t42">42</a></span><span class="t">        <span class="nam">max_epochs</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">1000</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t43" href="#t43">43</a></span><span class="t">        <span class="nam">batch_size</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">16</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t44" href="#t44">44</a></span><span class="t">        <span class="nam">max_n_logs</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">200</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t45" href="#t45">45</a></span><span class="t">        <span class="nam">max_n_saved_models</span><span class="op">:</span> <span class="nam">int</span> <span class="op">=</span> <span class="num">10</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t46" href="#t46">46</a></span><span class="t">        <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span> <span class="op">=</span> <span class="key">None</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t47" href="#t47">47</a></span><span class="t">    <span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t48" href="#t48">48</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">operator</span> <span class="op">=</span> <span class="nam">operator</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t49" href="#t49">49</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">criterion</span> <span class="op">=</span> <span class="nam">criterion</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t50" href="#t50">50</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">optimizer</span> <span class="op">=</span> <span class="nam">optimizer</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t51" href="#t51">51</a></span><span class="t">        <span class="key">if</span> <span class="nam">lr_scheduler</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t52" href="#t52">52</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">lr_scheduler</span> <span class="op">=</span> <span class="nam">sched</span><span class="op">.</span><span class="nam">ConstantLR</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">optimizer</span><span class="op">,</span> <span class="nam">factor</span><span class="op">=</span><span class="num">1.0</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t53" href="#t53">53</a></span><span class="t">        <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t54" href="#t54">54</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">lr_scheduler</span> <span class="op">=</span> <span class="nam">lr_scheduler</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t55" href="#t55">55</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t56" href="#t56">56</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">max_epochs</span> <span class="op">=</span> <span class="nam">max_epochs</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t57" href="#t57">57</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">batch_size</span> <span class="op">=</span> <span class="nam">batch_size</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t58" href="#t58">58</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">test_val_split</span> <span class="op">=</span> <span class="num">0.9</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t59" href="#t59">59</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t60" href="#t60">60</a></span><span class="t">        <span class="com"># logging and model serialization</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t61" href="#t61">61</a></span><span class="t">        <span class="key">if</span> <span class="nam">out_dir</span> <span class="key">is</span> <span class="key">None</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t62" href="#t62">62</a></span><span class="t">            <span class="nam">uid</span> <span class="op">=</span> <span class="nam">UniqueId</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t63" href="#t63">63</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">.</span><span class="nam">cwd</span><span class="op">(</span><span class="op">)</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"run"</span><span class="op">,</span> <span class="nam">str</span><span class="op">(</span><span class="nam">uid</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t64" href="#t64">64</a></span><span class="t">        <span class="key">else</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t65" href="#t65">65</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">out_dir</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t66" href="#t66">66</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">out_dir</span><span class="op">.</span><span class="nam">mkdir</span><span class="op">(</span><span class="nam">parents</span><span class="op">=</span><span class="key">True</span><span class="op">,</span> <span class="nam">exist_ok</span><span class="op">=</span><span class="key">True</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t67" href="#t67">67</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t68" href="#t68">68</a></span><span class="t">        <span class="nam">log_epochs</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">round</span><span class="op">(</span><span class="nam">torch</span><span class="op">.</span><span class="nam">linspace</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="nam">max_epochs</span><span class="op">,</span> <span class="nam">max_n_logs</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t69" href="#t69">69</a></span><span class="t">        <span class="nam">log_epochs</span> <span class="op">=</span> <span class="nam">log_epochs</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t70" href="#t70">70</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">log_epochs</span> <span class="op">=</span> <span class="op">[</span><span class="nam">int</span><span class="op">(</span><span class="nam">epoch</span><span class="op">)</span> <span class="key">for</span> <span class="nam">epoch</span> <span class="key">in</span> <span class="nam">log_epochs</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t71" href="#t71">71</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t72" href="#t72">72</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">max_n_saved_models</span> <span class="op">=</span> <span class="nam">max_n_saved_models</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t73" href="#t73">73</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t74" href="#t74">74</a></span><span class="t">    <span class="key">def</span> <span class="nam">__call__</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t75" href="#t75">75</a></span><span class="t">        <span class="nam">self</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t76" href="#t76">76</a></span><span class="t">        <span class="nam">data_set</span><span class="op">:</span> <span class="nam">OperatorDataset</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t77" href="#t77">77</a></span><span class="t">    <span class="op">)</span> <span class="op">-></span> <span class="nam">Operator</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t78" href="#t78">78</a></span><span class="t">        <span class="nam">device</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">device</span><span class="op">(</span><span class="str">"cuda"</span> <span class="key">if</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">cuda</span><span class="op">.</span><span class="nam">is_available</span><span class="op">(</span><span class="op">)</span> <span class="key">else</span> <span class="str">"cpu"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t79" href="#t79">79</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t80" href="#t80">80</a></span><span class="t">        <span class="com"># data</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t81" href="#t81">81</a></span><span class="t">        <span class="nam">train_set</span><span class="op">,</span> <span class="nam">val_set</span> <span class="op">=</span> <span class="nam">random_split</span><span class="op">(</span><span class="nam">data_set</span><span class="op">,</span> <span class="op">[</span><span class="nam">self</span><span class="op">.</span><span class="nam">test_val_split</span><span class="op">,</span> <span class="num">1</span> <span class="op">-</span> <span class="nam">self</span><span class="op">.</span><span class="nam">test_val_split</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t82" href="#t82">82</a></span><span class="t">        <span class="nam">train_loader</span> <span class="op">=</span> <span class="nam">DataLoader</span><span class="op">(</span><span class="nam">train_set</span><span class="op">,</span> <span class="nam">batch_size</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">batch_size</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t83" href="#t83">83</a></span><span class="t">        <span class="nam">val_loader</span> <span class="op">=</span> <span class="nam">DataLoader</span><span class="op">(</span><span class="nam">val_set</span><span class="op">,</span> <span class="nam">batch_size</span><span class="op">=</span><span class="nam">self</span><span class="op">.</span><span class="nam">batch_size</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t84" href="#t84">84</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t85" href="#t85">85</a></span><span class="t">        <span class="nam">training_config</span> <span class="op">=</span> <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t86" href="#t86">86</a></span><span class="t">            <span class="str">"val_indices"</span><span class="op">:</span> <span class="nam">val_set</span><span class="op">.</span><span class="nam">indices</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t87" href="#t87">87</a></span><span class="t">            <span class="str">"val_size"</span><span class="op">:</span> <span class="nam">len</span><span class="op">(</span><span class="nam">val_set</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t88" href="#t88">88</a></span><span class="t">            <span class="str">"train_indices"</span><span class="op">:</span> <span class="nam">train_set</span><span class="op">.</span><span class="nam">indices</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t89" href="#t89">89</a></span><span class="t">            <span class="str">"train_size"</span><span class="op">:</span> <span class="nam">len</span><span class="op">(</span><span class="nam">train_set</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t90" href="#t90">90</a></span><span class="t">        <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t91" href="#t91">91</a></span><span class="t">        <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"training_config.json"</span><span class="op">)</span><span class="op">,</span> <span class="str">"w"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">file_handle</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t92" href="#t92">92</a></span><span class="t">            <span class="nam">json</span><span class="op">.</span><span class="nam">dump</span><span class="op">(</span><span class="nam">training_config</span><span class="op">,</span> <span class="nam">file_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t93" href="#t93">93</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t94" href="#t94">94</a></span><span class="t">        <span class="com"># setup training</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t95" href="#t95">95</a></span><span class="t">        <span class="nam">self</span><span class="op">.</span><span class="nam">operator</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t96" href="#t96">96</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t97" href="#t97">97</a></span><span class="t">        <span class="nam">best_val_loss</span> <span class="op">=</span> <span class="nam">float</span><span class="op">(</span><span class="str">"inf"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t98" href="#t98">98</a></span><span class="t">        <span class="nam">last_best_update</span> <span class="op">=</span> <span class="num">0</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t99" href="#t99">99</a></span><span class="t">        <span class="nam">val_losses</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t100" href="#t100">100</a></span><span class="t">        <span class="nam">train_losses</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t101" href="#t101">101</a></span><span class="t">        <span class="nam">lrs</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t102" href="#t102">102</a></span><span class="t">        <span class="nam">times</span> <span class="op">=</span> <span class="op">[</span><span class="op">]</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t103" href="#t103">103</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t104" href="#t104">104</a></span><span class="t">        <span class="nam">pbar</span> <span class="op">=</span> <span class="nam">tqdm</span><span class="op">(</span><span class="nam">range</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">max_epochs</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t105" href="#t105">105</a></span><span class="t">        <span class="nam">train_loss</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">inf</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t106" href="#t106">106</a></span><span class="t">        <span class="nam">val_loss</span> <span class="op">=</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">inf</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t107" href="#t107">107</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t108" href="#t108">108</a></span><span class="t">        <span class="nam">start</span> <span class="op">=</span> <span class="nam">time</span><span class="op">.</span><span class="nam">time</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t109" href="#t109">109</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t110" href="#t110">110</a></span><span class="t">        <span class="key">with</span> <span class="nam">mlflow</span><span class="op">.</span><span class="nam">start_run</span><span class="op">(</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t111" href="#t111">111</a></span><span class="t">            <span class="nam">mlflow</span><span class="op">.</span><span class="nam">pytorch</span><span class="op">.</span><span class="nam">log_model</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">operator</span><span class="op">,</span> <span class="str">"operator"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t112" href="#t112">112</a></span><span class="t">            <span class="key">for</span> <span class="nam">epoch</span> <span class="key">in</span> <span class="nam">pbar</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t113" href="#t113">113</a></span><span class="t">                <span class="nam">pbar</span><span class="op">.</span><span class="nam">set_description</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t114" href="#t114">114</a></span><span class="t">                    <span class="str">f"Train Loss: {train_loss: .6f},\t Val Loss: {val_loss: .6f}, Lr: {self.optimizer.param_groups[0]['lr']}"</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t115" href="#t115">115</a></span><span class="t">                <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t116" href="#t116">116</a></span><span class="t">                <span class="nam">train_loss</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">train</span><span class="op">(</span><span class="nam">train_loader</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">epoch</span><span class="op">,</span> <span class="nam">device</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t117" href="#t117">117</a></span><span class="t">                <span class="nam">val_loss</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">eval</span><span class="op">(</span><span class="nam">val_loader</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">epoch</span><span class="op">,</span> <span class="nam">device</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t118" href="#t118">118</a></span><span class="t">                <span class="nam">self</span><span class="op">.</span><span class="nam">lr_scheduler</span><span class="op">.</span><span class="nam">step</span><span class="op">(</span><span class="nam">epoch</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t119" href="#t119">119</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t120" href="#t120">120</a></span><span class="t">                <span class="com"># update training parameters</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t121" href="#t121">121</a></span><span class="t">                <span class="nam">lrs</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">optimizer</span><span class="op">.</span><span class="nam">param_groups</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="str">"lr"</span><span class="op">]</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t122" href="#t122">122</a></span><span class="t">                <span class="nam">train_losses</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">train_loss</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t123" href="#t123">123</a></span><span class="t">                <span class="nam">val_losses</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">val_loss</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t124" href="#t124">124</a></span><span class="t">                <span class="nam">times</span><span class="op">.</span><span class="nam">append</span><span class="op">(</span><span class="nam">time</span><span class="op">.</span><span class="nam">time</span><span class="op">(</span><span class="op">)</span> <span class="op">-</span> <span class="nam">start</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t125" href="#t125">125</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t126" href="#t126">126</a></span><span class="t">                <span class="com"># log metrics</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t127" href="#t127">127</a></span><span class="t">                <span class="key">if</span> <span class="nam">epoch</span> <span class="key">in</span> <span class="nam">self</span><span class="op">.</span><span class="nam">log_epochs</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t128" href="#t128">128</a></span><span class="t">                    <span class="nam">mlflow</span><span class="op">.</span><span class="nam">log_metric</span><span class="op">(</span><span class="str">"Val loss"</span><span class="op">,</span> <span class="nam">val_loss</span><span class="op">,</span> <span class="nam">step</span><span class="op">=</span><span class="nam">epoch</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t129" href="#t129">129</a></span><span class="t">                    <span class="nam">mlflow</span><span class="op">.</span><span class="nam">log_metric</span><span class="op">(</span><span class="str">"Train loss"</span><span class="op">,</span> <span class="nam">train_loss</span><span class="op">,</span> <span class="nam">step</span><span class="op">=</span><span class="nam">epoch</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t130" href="#t130">130</a></span><span class="t">                    <span class="nam">mlflow</span><span class="op">.</span><span class="nam">log_metric</span><span class="op">(</span><span class="str">"LR"</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">optimizer</span><span class="op">.</span><span class="nam">param_groups</span><span class="op">[</span><span class="num">0</span><span class="op">]</span><span class="op">[</span><span class="str">"lr"</span><span class="op">]</span><span class="op">,</span> <span class="nam">step</span><span class="op">=</span><span class="nam">epoch</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t131" href="#t131">131</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t132" href="#t132">132</a></span><span class="t">                <span class="com"># save best model</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t133" href="#t133">133</a></span><span class="t">                <span class="key">if</span> <span class="nam">val_loss</span> <span class="op">&lt;</span> <span class="nam">best_val_loss</span> <span class="key">and</span> <span class="nam">epoch</span> <span class="op">-</span> <span class="nam">last_best_update</span> <span class="op">>=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">max_epochs</span> <span class="op">//</span> <span class="nam">self</span><span class="op">.</span><span class="nam">max_n_saved_models</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t134" href="#t134">134</a></span><span class="t">                    <span class="nam">save_checkpoint</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t135" href="#t135">135</a></span><span class="t">                        <span class="nam">self</span><span class="op">.</span><span class="nam">operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t136" href="#t136">136</a></span><span class="t">                        <span class="nam">val_loss</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t137" href="#t137">137</a></span><span class="t">                        <span class="nam">train_loss</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t138" href="#t138">138</a></span><span class="t">                        <span class="nam">epoch</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t139" href="#t139">139</a></span><span class="t">                        <span class="nam">start</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t140" href="#t140">140</a></span><span class="t">                        <span class="nam">self</span><span class="op">.</span><span class="nam">batch_size</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t141" href="#t141">141</a></span><span class="t">                        <span class="nam">train_set</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t142" href="#t142">142</a></span><span class="t">                        <span class="nam">val_set</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t143" href="#t143">143</a></span><span class="t">                        <span class="nam">self</span><span class="op">.</span><span class="nam">out_dir</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t144" href="#t144">144</a></span><span class="t">                    <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t145" href="#t145">145</a></span><span class="t">                    <span class="nam">last_best_update</span> <span class="op">=</span> <span class="nam">epoch</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t146" href="#t146">146</a></span><span class="t">                    <span class="nam">best_val_loss</span> <span class="op">=</span> <span class="nam">val_loss</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t147" href="#t147">147</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t148" href="#t148">148</a></span><span class="t">        <span class="nam">save_checkpoint</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t149" href="#t149">149</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">operator</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t150" href="#t150">150</a></span><span class="t">            <span class="nam">val_loss</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t151" href="#t151">151</a></span><span class="t">            <span class="nam">train_loss</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t152" href="#t152">152</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">max_epochs</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t153" href="#t153">153</a></span><span class="t">            <span class="nam">start</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t154" href="#t154">154</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">batch_size</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t155" href="#t155">155</a></span><span class="t">            <span class="nam">train_set</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t156" href="#t156">156</a></span><span class="t">            <span class="nam">val_set</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t157" href="#t157">157</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">out_dir</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t158" href="#t158">158</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t159" href="#t159">159</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t160" href="#t160">160</a></span><span class="t">        <span class="nam">training_curves</span> <span class="op">=</span> <span class="nam">pd</span><span class="op">.</span><span class="nam">DataFrame</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t161" href="#t161">161</a></span><span class="t">            <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t162" href="#t162">162</a></span><span class="t">                <span class="str">"Epochs"</span><span class="op">:</span> <span class="nam">torch</span><span class="op">.</span><span class="nam">arange</span><span class="op">(</span><span class="num">0</span><span class="op">,</span> <span class="nam">self</span><span class="op">.</span><span class="nam">max_epochs</span><span class="op">)</span><span class="op">.</span><span class="nam">tolist</span><span class="op">(</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t163" href="#t163">163</a></span><span class="t">                <span class="str">"Val_loss"</span><span class="op">:</span> <span class="nam">val_losses</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t164" href="#t164">164</a></span><span class="t">                <span class="str">"Train_loss"</span><span class="op">:</span> <span class="nam">train_losses</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t165" href="#t165">165</a></span><span class="t">                <span class="str">"Lr"</span><span class="op">:</span> <span class="nam">lrs</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t166" href="#t166">166</a></span><span class="t">                <span class="str">"time"</span><span class="op">:</span> <span class="nam">times</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t167" href="#t167">167</a></span><span class="t">            <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t168" href="#t168">168</a></span><span class="t">        <span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t169" href="#t169">169</a></span><span class="t">        <span class="nam">training_curves</span><span class="op">.</span><span class="nam">to_csv</span><span class="op">(</span><span class="nam">self</span><span class="op">.</span><span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"training.csv"</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t170" href="#t170">170</a></span><span class="t">        <span class="key">return</span> <span class="nam">self</span><span class="op">.</span><span class="nam">operator</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t171" href="#t171">171</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t172" href="#t172">172</a></span><span class="t">    <span class="key">def</span> <span class="nam">train</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">loader</span><span class="op">,</span> <span class="nam">model</span><span class="op">,</span> <span class="nam">epoch</span><span class="op">,</span> <span class="nam">device</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t173" href="#t173">173</a></span><span class="t">        <span class="nam">avg_loss</span> <span class="op">=</span> <span class="nam">AverageMetric</span><span class="op">(</span><span class="str">"Train-loss"</span><span class="op">,</span> <span class="str">":6.3f"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t174" href="#t174">174</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t175" href="#t175">175</a></span><span class="t">        <span class="com"># switch to train mode</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t176" href="#t176">176</a></span><span class="t">        <span class="nam">model</span><span class="op">.</span><span class="nam">train</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t177" href="#t177">177</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t178" href="#t178">178</a></span><span class="t">        <span class="key">for</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span> <span class="key">in</span> <span class="nam">loader</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t179" href="#t179">179</a></span><span class="t">            <span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span> <span class="op">=</span> <span class="nam">x</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span><span class="op">,</span> <span class="nam">u</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span><span class="op">,</span> <span class="nam">v</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t180" href="#t180">180</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t181" href="#t181">181</a></span><span class="t">            <span class="com"># compute output</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t182" href="#t182">182</a></span><span class="t">            <span class="nam">output</span> <span class="op">=</span> <span class="nam">model</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t183" href="#t183">183</a></span><span class="t">            <span class="nam">loss</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">criterion</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t184" href="#t184">184</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t185" href="#t185">185</a></span><span class="t">            <span class="com"># compute gradient</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t186" href="#t186">186</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">optimizer</span><span class="op">.</span><span class="nam">zero_grad</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t187" href="#t187">187</a></span><span class="t">            <span class="nam">loss</span><span class="op">.</span><span class="nam">backward</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t188" href="#t188">188</a></span><span class="t">            <span class="nam">self</span><span class="op">.</span><span class="nam">optimizer</span><span class="op">.</span><span class="nam">step</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t189" href="#t189">189</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t190" href="#t190">190</a></span><span class="t">            <span class="com"># update metrics</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t191" href="#t191">191</a></span><span class="t">            <span class="nam">avg_loss</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">loss</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t192" href="#t192">192</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t193" href="#t193">193</a></span><span class="t">        <span class="key">return</span> <span class="nam">avg_loss</span><span class="op">.</span><span class="nam">avg</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t194" href="#t194">194</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t195" href="#t195">195</a></span><span class="t">    <span class="key">def</span> <span class="nam">eval</span><span class="op">(</span><span class="nam">self</span><span class="op">,</span> <span class="nam">loader</span><span class="op">,</span> <span class="nam">model</span><span class="op">,</span> <span class="nam">epoch</span><span class="op">,</span> <span class="nam">device</span><span class="op">)</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t196" href="#t196">196</a></span><span class="t">        <span class="nam">avg_loss</span> <span class="op">=</span> <span class="nam">AverageMetric</span><span class="op">(</span><span class="str">"Eval-loss"</span><span class="op">,</span> <span class="str">":6.3f"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t197" href="#t197">197</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t198" href="#t198">198</a></span><span class="t">        <span class="com"># switch to train mode</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t199" href="#t199">199</a></span><span class="t">        <span class="nam">model</span><span class="op">.</span><span class="nam">eval</span><span class="op">(</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t200" href="#t200">200</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t201" href="#t201">201</a></span><span class="t">        <span class="key">for</span> <span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span> <span class="key">in</span> <span class="nam">loader</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t202" href="#t202">202</a></span><span class="t">            <span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">,</span> <span class="nam">v</span> <span class="op">=</span> <span class="nam">x</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span><span class="op">,</span> <span class="nam">u</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span><span class="op">,</span> <span class="nam">y</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span><span class="op">,</span> <span class="nam">v</span><span class="op">.</span><span class="nam">to</span><span class="op">(</span><span class="nam">device</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t203" href="#t203">203</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t204" href="#t204">204</a></span><span class="t">            <span class="com"># compute output</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t205" href="#t205">205</a></span><span class="t">            <span class="nam">output</span> <span class="op">=</span> <span class="nam">model</span><span class="op">(</span><span class="nam">x</span><span class="op">,</span> <span class="nam">u</span><span class="op">,</span> <span class="nam">y</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t206" href="#t206">206</a></span><span class="t">            <span class="nam">loss</span> <span class="op">=</span> <span class="nam">self</span><span class="op">.</span><span class="nam">criterion</span><span class="op">(</span><span class="nam">output</span><span class="op">,</span> <span class="nam">v</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t207" href="#t207">207</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t208" href="#t208">208</a></span><span class="t">            <span class="com"># update metrics</span>&nbsp;</span><span class="r"></span></p>
+    <p class="mis show_mis"><span class="n"><a id="t209" href="#t209">209</a></span><span class="t">            <span class="nam">avg_loss</span><span class="op">.</span><span class="nam">update</span><span class="op">(</span><span class="nam">loss</span><span class="op">.</span><span class="nam">item</span><span class="op">(</span><span class="op">)</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t210" href="#t210">210</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t211" href="#t211">211</a></span><span class="t">        <span class="key">return</span> <span class="nam">avg_loss</span><span class="op">.</span><span class="nam">avg</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_e3bc015ca2131802_average_metric_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_e3bc015ca2131802_util_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/d_e3bc015ca2131802_util_py.html b/_static/codecov/d_e3bc015ca2131802_util_py.html
new file mode 100644
index 00000000..f6ab2dd1
--- /dev/null
+++ b/_static/codecov/d_e3bc015ca2131802_util_py.html
@@ -0,0 +1,125 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage for src/nos/trainers/util.py: 100%</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="pyfile">
+<header>
+    <div class="content">
+        <h1>
+            <span class="text">Coverage for </span><b>src/nos/trainers/util.py</b>:
+            <span class="pc_cov">100%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>r</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        &nbsp; toggle line displays
+                    </p>
+                    <p>
+                        <kbd>j</kbd>
+                        <kbd>k</kbd>
+                        &nbsp; next/prev highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>0</kbd> &nbsp; (zero) top of page
+                    </p>
+                    <p>
+                        <kbd>1</kbd> &nbsp; (one) first highlighted chunk
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>u</kbd> &nbsp; up to the index
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <h2>
+            <span class="text">11 statements &nbsp;</span>
+            <button type="button" class="run button_toggle_run" value="run" data-shortcut="r" title="Toggle lines run">11<span class="text"> run</span></button>
+            <button type="button" class="mis show_mis button_toggle_mis" value="mis" data-shortcut="m" title="Toggle lines missing">0<span class="text"> missing</span></button>
+            <button type="button" class="exc show_exc button_toggle_exc" value="exc" data-shortcut="x" title="Toggle lines excluded">0<span class="text"> excluded</span></button>
+        </h2>
+        <p class="text">
+            <a id="prevFileLink" class="nav" href="d_e3bc015ca2131802_trainer_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_040e78c194e497af_scaling_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+        <aside class="hidden">
+            <button type="button" class="button_next_chunk" data-shortcut="j"/>
+            <button type="button" class="button_prev_chunk" data-shortcut="k"/>
+            <button type="button" class="button_top_of_page" data-shortcut="0"/>
+            <button type="button" class="button_first_chunk" data-shortcut="1"/>
+            <button type="button" class="button_prev_file" data-shortcut="["/>
+            <button type="button" class="button_next_file" data-shortcut="]"/>
+            <button type="button" class="button_to_index" data-shortcut="u"/>
+            <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+        </aside>
+    </div>
+</header>
+<main id="source">
+    <p class="run"><span class="n"><a id="t1" href="#t1">1</a></span><span class="t"><span class="key">import</span> <span class="nam">json</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t2" href="#t2">2</a></span><span class="t"><span class="key">import</span> <span class="nam">pathlib</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t3" href="#t3">3</a></span><span class="t"><span class="key">import</span> <span class="nam">time</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t4" href="#t4">4</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t5" href="#t5">5</a></span><span class="t"><span class="key">from</span> <span class="nam">nos</span><span class="op">.</span><span class="nam">operators</span> <span class="key">import</span> <span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t6" href="#t6">6</a></span><span class="t">    <span class="nam">serialize</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t7" href="#t7">7</a></span><span class="t"><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t8" href="#t8">8</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t9" href="#t9">9</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t10" href="#t10">10</a></span><span class="t"><span class="key">def</span> <span class="nam">save_checkpoint</span><span class="op">(</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t11" href="#t11">11</a></span><span class="t">    <span class="nam">operator</span><span class="op">,</span> <span class="nam">val_loss</span><span class="op">,</span> <span class="nam">train_loss</span><span class="op">,</span> <span class="nam">epoch</span><span class="op">,</span> <span class="nam">start</span><span class="op">,</span> <span class="nam">batch_size</span><span class="op">,</span> <span class="nam">train_set</span><span class="op">,</span> <span class="nam">val_set</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">:</span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span> <span class="op">=</span> <span class="key">None</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t12" href="#t12">12</a></span><span class="t"><span class="op">)</span> <span class="op">-></span> <span class="nam">pathlib</span><span class="op">.</span><span class="nam">Path</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t13" href="#t13">13</a></span><span class="t">    <span class="nam">checkpoint</span> <span class="op">=</span> <span class="op">{</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t14" href="#t14">14</a></span><span class="t">        <span class="str">"val_loss"</span><span class="op">:</span> <span class="nam">val_loss</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t15" href="#t15">15</a></span><span class="t">        <span class="str">"train_loss"</span><span class="op">:</span> <span class="nam">train_loss</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t16" href="#t16">16</a></span><span class="t">        <span class="str">"epoch"</span><span class="op">:</span> <span class="nam">epoch</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t17" href="#t17">17</a></span><span class="t">        <span class="str">"Time_trained"</span><span class="op">:</span> <span class="nam">time</span><span class="op">.</span><span class="nam">time</span><span class="op">(</span><span class="op">)</span> <span class="op">-</span> <span class="nam">start</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t18" href="#t18">18</a></span><span class="t">        <span class="str">"batch_size"</span><span class="op">:</span> <span class="nam">batch_size</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t19" href="#t19">19</a></span><span class="t">        <span class="str">"train_size"</span><span class="op">:</span> <span class="nam">len</span><span class="op">(</span><span class="nam">train_set</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t20" href="#t20">20</a></span><span class="t">        <span class="str">"val_size"</span><span class="op">:</span> <span class="nam">len</span><span class="op">(</span><span class="nam">val_set</span><span class="op">)</span><span class="op">,</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t21" href="#t21">21</a></span><span class="t">    <span class="op">}</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t22" href="#t22">22</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t23" href="#t23">23</a></span><span class="t">    <span class="nam">out_dir</span> <span class="op">=</span> <span class="nam">serialize</span><span class="op">(</span><span class="nam">operator</span><span class="op">=</span><span class="nam">operator</span><span class="op">,</span> <span class="nam">out_dir</span><span class="op">=</span><span class="nam">out_dir</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t24" href="#t24">24</a></span><span class="t">    <span class="nam">checkpoint_path</span> <span class="op">=</span> <span class="nam">out_dir</span><span class="op">.</span><span class="nam">joinpath</span><span class="op">(</span><span class="str">"checkpoint.json"</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t25" href="#t25">25</a></span><span class="t">    <span class="key">with</span> <span class="nam">open</span><span class="op">(</span><span class="nam">checkpoint_path</span><span class="op">,</span> <span class="str">"w"</span><span class="op">)</span> <span class="key">as</span> <span class="nam">file_handle</span><span class="op">:</span>&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t26" href="#t26">26</a></span><span class="t">        <span class="nam">json</span><span class="op">.</span><span class="nam">dump</span><span class="op">(</span><span class="nam">checkpoint</span><span class="op">,</span> <span class="nam">file_handle</span><span class="op">)</span>&nbsp;</span><span class="r"></span></p>
+    <p class="pln"><span class="n"><a id="t27" href="#t27">27</a></span><span class="t">&nbsp;</span><span class="r"></span></p>
+    <p class="run"><span class="n"><a id="t28" href="#t28">28</a></span><span class="t">    <span class="key">return</span> <span class="nam">out_dir</span>&nbsp;</span><span class="r"></span></p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a id="prevFileLink" class="nav" href="d_e3bc015ca2131802_trainer_py.html">&#xab; prev</a> &nbsp; &nbsp;
+            <a id="indexLink" class="nav" href="index.html">&Hat; index</a> &nbsp; &nbsp;
+            <a id="nextFileLink" class="nav" href="d_040e78c194e497af_scaling_py.html">&#xbb; next</a>
+            &nbsp; &nbsp; &nbsp;
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/favicon_32.png b/_static/codecov/favicon_32.png
new file mode 100644
index 0000000000000000000000000000000000000000..8649f0475d8d20793b2ec431fe25a186a414cf10
GIT binary patch
literal 1732
zcmV;#20QtQP)<h;3K|Lk000e1NJLTq001BW001Be0{{R3M5Kzw00093P)t-s00000
z0000005UZ&Q&LkqK{gy58Wj^10RR9200961000000001-ot_*G3LG989U2`30Rj*V
z4*&oFUteEdUSC5>K2KOkBOVxIZChq#W-v7@TU%U6P(wycKT1hUJUToW3ke1U1ONa4
z000000000000000bb)GRa9mqwR9|UWHy;^RUrt?IT__Y0JUcxmBP0(51q1>E00030
z|NrOz)aw7%8sJzM<5^g%z7^qE`}_Ot|JUUG(NUkWzR|7K?Zo%@_v-8G-1N%N=D$;;
zw;keH4dGY$`1t4M=HK_s*zm^0#KgqfwWhe3qO_HtvXYvtjgX>;-~C$L`&k>^R)9)7
zdPh2TL^pCnHC#0+_4D)M`p?qp!pq{jO_{8;$fbaflbx`Tn52n|n}8VFRTA1&ugOP<
zPd{uvFjz7t*Vot1&d$l-xWCk}s;sQL&#O(Bskh6gqNJv>#iB=ypG1e3K!K4yc7!~M
zfj4S*g^zZ7eP$+_Sl07Z646l;%urinP#D8a6TwRtnLIRcI!r4f@bK~9-`~;E(N?Lv
zSEst7s;rcxsi~}{Nsytfz@MtUoR*iFc8!#vvx}Umhm4blk(_~MdVD-@dW&>!Nn~ro
z_E~-ESVQAj6Wmn;(olz(O&_{U2*pZBc1aYjMh>Dq3z|6`jW`RDHV=t3I6yRKJ~LOX
zz_z!!vbVXPqob#=pj3^VMT?x6t(irRmSKsMo1~LLkB&=#j!=M%NP35mfqim$drWb9
zYIb>no_LUwc!r^NkDzs4YHu@=ZHRzrafWDZd1EhEVq=tGX?tK$pIa)DTh#bkvh!J-
z?^%@YS!U*0E8$q$_*aOTQ&)Ra64g>ep;BdcQgvlg8qQHrP*E$;P{-m=A*@axn@$bO
zO-Y4JzS&EAi%YG}N?cn?YFS7ivPY=EMV6~YH;+Xxu|tefLS|Aza)Cg6us#)=JW!uH
zQa?H>d^j+YHCtyjL^LulF*05|F$RG!AX_OHVI&MtA~_@=5_lU|0000rbW%=J06GH4
z^5LD8b8apw8vNh1ua1mF{{Hy)_U`NA;Nacc+sCpuHXa-V{r&yz?c(9#+}oX+NmiRW
z+W-IqK1oDDR5;6GfCDCOP5}iL5fK(cB~ET81`MFgF2kGa9AjhSIk~-E-<T0i36GGJ
zuahYR?9Gmj{x2cOgDkJYT;OR61vay@qO&3+vlST;^1||6aA_N-+2L7H;h7QHe8O=3
z@|{rGoZh4<Q||uC3V)Xw2~@!dwVxTPKPPGT1ba98@>4&*tPPKdiilQJ11k_J082ZS
z>@TvivP!5ZFG?t@{t+GpR3XR&@*hA_VE1|Lo8@L@)l*h(Z@=?c-NS$Fk&&61IzUU9
z*nPqBM=OBZ-6ka1SJgGAS-Us<ZK`<@wbqD<fm;UT|Cj?H`EGl+ZReUjEG;Z7EN`@x
z`lP()<6_|C1sSlh5-8te?^g97%+kW$0;FQeQXg|yO%4WuT#yBG+<@A*lvORZw6+Lq
zv<?fiws3DvHMe!(XHakkDk!O3SG2t^sj|*8J>5EN)r#dUX%>wQZLa2ytPCtMKp)Ob
z*xcu38Z&d5<-NBS)@jRD+*!W*cf-m_wmxDEqBf?czI%3U0J$Xik;lA`jg}VH?(S(V
zE!M3;X2B8w0TnnW&6(8;_Uc)WD;Ms6PKP+s(sFgO!}B!^ES~GDt4qLPxwYB)^7)XA
zZwo9zDy-B0B+jT6V=!=bo(zs_8{eBA78gT9GH$(DVhz;4VAYwz+bOIdZ-PNb|I&rl
z^XG=vFLF)1{&nT2*0vMz#}7^9hXzzf&ZdKlEj{LihP;|;Ywqn35ajP?H?7t|i-Un%
z&&kxee@9B{<Aoj|13n}>nwgv1+S-~0)E1{ob1^Wn`F2isurqThKK=3%&;`@{0{!D-
z&CSj80t;uPu&FaJFtSXKH#ajgGj}=sEad7US6jP0|Db@0j)?(5@sf<7`~a9>s;wCa
zm^)spe{uxGFmrJYI9cOh7s$>8Npkt-5EWB1UKc`{W{y5Ce$1+nM9C<Z2N8~Y`aRAJ
z0_?mU^JN*~$zBd(hPnTmIEYg3Vpl&|6GX;fWKNC+$;1XF`+#VdQolfEpne2U6VgtM
zwKcc1a|rf#H20nqD9H}7ACb2i*>r;);=Ju#N^62OSlJMn7omiUgP&ErsYzT~iGxcW
aE(`!K@+CXylaC4j0000<MNUMnLSTZc{uwd=

literal 0
HcmV?d00001

diff --git a/_static/codecov/index.html b/_static/codecov/index.html
new file mode 100644
index 00000000..5e327c0a
--- /dev/null
+++ b/_static/codecov/index.html
@@ -0,0 +1,327 @@
+<!DOCTYPE html>
+<html>
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+    <title>Coverage report</title>
+    <link rel="icon" sizes="32x32" href="favicon_32.png">
+    <link rel="stylesheet" href="style.css" type="text/css">
+    <script type="text/javascript" src="coverage_html.js" defer></script>
+</head>
+<body class="indexfile">
+<header>
+    <div class="content">
+        <h1>Coverage report:
+            <span class="pc_cov">74%</span>
+        </h1>
+        <aside id="help_panel_wrapper">
+            <input id="help_panel_state" type="checkbox">
+            <label for="help_panel_state">
+                <img id="keyboard_icon" src="keybd_closed.png" alt="Show/hide keyboard shortcuts" />
+            </label>
+            <div id="help_panel">
+                <p class="legend">Shortcuts on this page</p>
+                <div class="keyhelp">
+                    <p>
+                        <kbd>n</kbd>
+                        <kbd>s</kbd>
+                        <kbd>m</kbd>
+                        <kbd>x</kbd>
+                        <kbd>c</kbd>
+                        &nbsp; change column sorting
+                    </p>
+                    <p>
+                        <kbd>[</kbd>
+                        <kbd>]</kbd>
+                        &nbsp; prev/next file
+                    </p>
+                    <p>
+                        <kbd>?</kbd> &nbsp; show/hide this help
+                    </p>
+                </div>
+            </div>
+        </aside>
+        <form id="filter_container">
+            <input id="filter" type="text" value="" placeholder="filter..." />
+        </form>
+        <p class="text">
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+</header>
+<main id="index">
+    <table class="index" data-sortable>
+        <thead>
+            <tr class="tablehead" title="Click to sort">
+                <th class="name left" aria-sort="none" data-shortcut="n">Module</th>
+                <th aria-sort="none" data-default-sort-order="descending" data-shortcut="s">statements</th>
+                <th aria-sort="none" data-default-sort-order="descending" data-shortcut="m">missing</th>
+                <th aria-sort="none" data-default-sort-order="descending" data-shortcut="x">excluded</th>
+                <th class="right" aria-sort="none" data-shortcut="c">coverage</th>
+            </tr>
+        </thead>
+        <tbody>
+            <tr class="file">
+                <td class="name left"><a href="d_a94113ed293c43ea_benchmark_py.html">src/nos/benchmarks/benchmark.py</a></td>
+                <td>9</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="9 9">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_8650266d82634dfb_c_shape_py.html">src/nos/data/indicator_function/c_shape.py</a></td>
+                <td>34</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="34 34">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_8650266d82634dfb_indicator_to_tl_py.html">src/nos/data/indicator_function/indicator_to_tl.py</a></td>
+                <td>18</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="18 18">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_8650266d82634dfb_params_to_indicator_py.html">src/nos/data/indicator_function/params_to_indicator.py</a></td>
+                <td>12</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="12 12">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_7e8216966b2e3943_transmission_loss_py.html">src/nos/data/transmission_loss/transmission_loss.py</a></td>
+                <td>51</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="51 51">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_7e8216966b2e3943_transmission_loss_compact_py.html">src/nos/data/transmission_loss/transmission_loss_compact.py</a></td>
+                <td>23</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="23 23">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_7e8216966b2e3943_transmission_loss_exp_py.html">src/nos/data/transmission_loss/transmission_loss_exp.py</a></td>
+                <td>16</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="16 16">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_7e8216966b2e3943_transmission_loss_wave_py.html">src/nos/data/transmission_loss/transmission_loss_wave.py</a></td>
+                <td>35</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="35 35">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_99aac0089c5f15d8_error_metrics_py.html">src/nos/metrics/error_metrics.py</a></td>
+                <td>21</td>
+                <td>6</td>
+                <td>0</td>
+                <td class="right" data-ratio="15 21">71%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_99aac0089c5f15d8_metric_py.html">src/nos/metrics/metric.py</a></td>
+                <td>9</td>
+                <td>0</td>
+                <td>3</td>
+                <td class="right" data-ratio="9 9">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_99aac0089c5f15d8_operator_metrics_py.html">src/nos/metrics/operator_metrics.py</a></td>
+                <td>22</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="22 22">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_dfcfe80011fec8d7_residual_py.html">src/nos/networks/residual.py</a></td>
+                <td>27</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="27 27">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_deep_dot_operator_py.html">src/nos/operators/deep_dot_operator.py</a></td>
+                <td>28</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="28 28">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_deep_neural_operator_py.html">src/nos/operators/deep_neural_operator.py</a></td>
+                <td>21</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="21 21">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_deep_o_fno_py.html">src/nos/operators/deep_o_fno.py</a></td>
+                <td>17</td>
+                <td>9</td>
+                <td>0</td>
+                <td class="right" data-ratio="8 17">47%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_deep_o_net_py.html">src/nos/operators/deep_o_net.py</a></td>
+                <td>33</td>
+                <td>22</td>
+                <td>0</td>
+                <td class="right" data-ratio="11 33">33%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_deep_root_operator_py.html">src/nos/operators/deep_root_operator.py</a></td>
+                <td>36</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="36 36">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_fourier_neural_operator_py.html">src/nos/operators/fourier_neural_operator.py</a></td>
+                <td>9</td>
+                <td>2</td>
+                <td>0</td>
+                <td class="right" data-ratio="7 9">78%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_mean_stack_neural_operator_py.html">src/nos/operators/mean_stack_neural_operator.py</a></td>
+                <td>22</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="22 22">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_operator_py.html">src/nos/operators/operator.py</a></td>
+                <td>9</td>
+                <td>1</td>
+                <td>0</td>
+                <td class="right" data-ratio="8 9">89%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_93093ff38057b02c_utils_py.html">src/nos/operators/utils.py</a></td>
+                <td>53</td>
+                <td>1</td>
+                <td>0</td>
+                <td class="right" data-ratio="52 53">98%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_d726faacd801a058_data_py.html">src/nos/plots/data.py</a></td>
+                <td>67</td>
+                <td>1</td>
+                <td>0</td>
+                <td class="right" data-ratio="66 67">99%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_d726faacd801a058_metrics_py.html">src/nos/plots/metrics.py</a></td>
+                <td>96</td>
+                <td>78</td>
+                <td>0</td>
+                <td class="right" data-ratio="18 96">19%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_d726faacd801a058_training_curves_py.html">src/nos/plots/training_curves.py</a></td>
+                <td>40</td>
+                <td>31</td>
+                <td>0</td>
+                <td class="right" data-ratio="9 40">22%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_d726faacd801a058_transmission_loss_py.html">src/nos/plots/transmission_loss.py</a></td>
+                <td>129</td>
+                <td>104</td>
+                <td>0</td>
+                <td class="right" data-ratio="25 129">19%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_d726faacd801a058_utils_py.html">src/nos/plots/utils.py</a></td>
+                <td>21</td>
+                <td>12</td>
+                <td>0</td>
+                <td class="right" data-ratio="9 21">43%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_8dbc7d2850ae11b9_low_pass_filter_py.html">src/nos/preprocessing/low_pass_filter.py</a></td>
+                <td>28</td>
+                <td>1</td>
+                <td>0</td>
+                <td class="right" data-ratio="27 28">96%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_e3bc015ca2131802_average_metric_py.html">src/nos/trainers/average_metric.py</a></td>
+                <td>21</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="21 21">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_e3bc015ca2131802_trainer_py.html">src/nos/trainers/trainer.py</a></td>
+                <td>97</td>
+                <td>7</td>
+                <td>0</td>
+                <td class="right" data-ratio="90 97">93%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_e3bc015ca2131802_util_py.html">src/nos/trainers/util.py</a></td>
+                <td>11</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="11 11">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_040e78c194e497af_scaling_py.html">src/nos/transforms/scaling.py</a></td>
+                <td>15</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="15 15">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html">src/nos/utils/nested_dataclass_to_dict.py</a></td>
+                <td>14</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="14 14">100%</td>
+            </tr>
+            <tr class="file">
+                <td class="name left"><a href="d_431cb39dc9496c7d_unique_id_py.html">src/nos/utils/unique_id.py</a></td>
+                <td>8</td>
+                <td>0</td>
+                <td>0</td>
+                <td class="right" data-ratio="8 8">100%</td>
+            </tr>
+        </tbody>
+        <tfoot>
+            <tr class="total">
+                <td class="name left">Total</td>
+                <td>1052</td>
+                <td>275</td>
+                <td>3</td>
+                <td class="right" data-ratio="777 1052">74%</td>
+            </tr>
+        </tfoot>
+    </table>
+    <p id="no_rows">
+        No items found using the specified filter.
+    </p>
+        <p>4 empty files skipped.</p>
+</main>
+<footer>
+    <div class="content">
+        <p>
+            <a class="nav" href="https://coverage.readthedocs.io/en/7.4.4">coverage.py v7.4.4</a>,
+            created at 2024-03-26 12:00 +0000
+        </p>
+    </div>
+    <aside class="hidden">
+        <a id="prevFileLink" class="nav" href="d_431cb39dc9496c7d_unique_id_py.html"/>
+        <a id="nextFileLink" class="nav" href="d_a94113ed293c43ea_benchmark_py.html"/>
+        <button type="button" class="button_prev_file" data-shortcut="["/>
+        <button type="button" class="button_next_file" data-shortcut="]"/>
+        <button type="button" class="button_show_hide_help" data-shortcut="?"/>
+    </aside>
+</footer>
+</body>
+</html>
diff --git a/_static/codecov/keybd_closed.png b/_static/codecov/keybd_closed.png
new file mode 100644
index 0000000000000000000000000000000000000000..ba119c47df81ed2bbd27a06988abf700139c4f99
GIT binary patch
literal 9004
zcmeHLc{tSF+aIY=A^R4_poB4tZAN2XC;O7M(inrW3}(h&Q4}dl*&-65$i9^&vW6_#
zcM4g`Qix=GhkBl;=lwnJ@Ap2}^}hc-b6vBXb3XUyzR%~}_c`-Dw+!?&>5p(90RRB>
zXe~7($~PP3eT?=X<@3~Q1w8<O>4vX~IoSx~1#~02+TopXK(db;4v6!{+W`RHLkkHO
zo;+s?)puc`+$yOwHv>I$5^8v^F3<|$44HA8AFnFB0cAP|C`p}aSMJK*-CUB{eQ!;K
z-9Ju3OQ+xVPr3P#o4>_lNBT;M+1vgV&B~6!naOGHb-LFA9TkfHv1IFA1Y!Iz!Zl3)
z%c#-^zNWPq7U_}6I7aHSmFWi125RZrNBKyvnV^?64)zviS;E!UD%LaGRl6@zn!3E{
zJ`B$5``cH_3a)t1#6I7d==JeB_IcSU%=I#DrRCBGm8GvCmA=+XHEvC2SIfsNa0(h9
z7P^C<nyh;mT$VHAWI&yfeEHJfC-Ji)|9Zsd+qcKt=3j3&%kz8HO-H=(*;<spJ?NLz
zTN3GpFX#Abo_cknHvG-YvDk0TTN(=X+nHOes%s1?3h37Mj{IJ^+CrE7ZkdXOu5}E}
z$-~djPmh)<KbkWCGI&mQ3m0M<$zO3{tykYVWCU3G@bO|B`?D3(B*H*#eK#?^=$M@_
z+nvfS9z_Vvkd@JxrMsQSN3nV0y@U4!?nasAf`Fci%OY8U{EGa$==1VScRo(n9vJTJ
zI4(bQ=DAQr<>4U`W@@`9p>2f^zyb5B=lpc*RZMn-%%IqrxSWQF8{ec3i?-AB(_IVe
z)XgT>Y^u41MwOMFvU=I4?!^#jaS-%<N-`z0ib;%0X8BaG3PZ^(HUyS&AA3u>bjnx@
zmL44yVEslR_ynm18F!u}Ru#moEn3EE?1=9@$B1Z5aLi5b8{&?V(IAYBzIar!SiY3<
z`l0V)djHtrImy}(!7x-Pmq+njM)JFQ9mx*(C+9a3M)(_SW|lrN=gfxFhStu^zvynS
zm@gl;>d8i8wpUkX42vS3BEzE3-yctH%t0#N%s+6-&_<*Fe7+h=`=FM?DOg1)eGL~~
zQvIFm$D*lqEh07XrXY=jb%hdyP4)`wyMCb$=-z9(lOme9=tirVkb)_GOl2MJn;=Ky
z^0pV1owR7KP-BSxhI@@@+gG0roD-kXE1;!#R7KY1QiUbyDdTElm|ul7{mMdF1%UDJ
z_vp=Vo!TCF?D<NrT%!GCi@aqQ7B90)zK-f5CF<A+FZs*9n!LKwO~tqVAerIwi}5XT
z!0YYlC)B7#Sw-G=?$sM}fQZdDeVT8(sPAon?V)rf`&0%K5XYI}6|&EIWdDfR>*?u%
zk~}4!xK2MSQd-QKC0${G=ZRv2x8%8ZqdfR!?Dv=5Mj^8WU)?iH;C?o6rSQy*^YwQb
zf@5V)q=xah#a3UEIBC~N7on(p4jQd4K$|i7k`d8mw|M{Mxapl46Z^X^9U}JgqH#;T
z`CTzafpMD+J-LjzF+3Xau>xM_sXisRj6m-287~i9g|%gHc}v77>n_+p7ZgmJszx!b
zSmL4wV;&*5Z|zaCk`rOYFdOjZLLQr!WSV6AlaqYh_OE)>rYdtx`gk$yAMO=-E1b~J
zIZY6gM*}1UWsJ)TW(pf1=h?lJy_0TFOr|nALGW>$IE1E7z+$`^2WJY+>$$nJo8Rs`
z)xS>AH{N~X3+b=2+8Q_|n(1JoGv55r>TuwBV~MXE&9?3Zw>cIxnOPNs#gh~C4Zo=k
z&!s;5)^6UG>!`<PoijiAxN|bq2VL3g<aA=`J#0=Y!7#Hq#ERx&!q#c7t<Iu$xd#c<
z7z2(s%u=s8jSKZVHsUPoE@oJ~*6zP|*|DM^JKpJS2veX&l6Zgd0c4V1XXEJivR9Ha
zREf{2)NGr2Yn3_gZV1o4J2k=orQ2#%i}msQXI+6QJnr-tt_P(hwhD;&egTQ1oq3}U
z=y)WHBzGrD%`p@`>?hh0Q|r|Qbm>}pgtOt23Vh!NSibozH$`#LSiYL)HR4bkfEJMa
zBHwC3TaHx|BzD|MXAr>mm&FbZXeEX-=W}Ji&!pji4sO$#0Wk^Q7j%{8#bJPn$C=E%
zPlB}0)@Ti^r_HMJrTMN?9~4LQbIiUiOKBVNm_QjABKY4;zC88yVjvB>ZETNzr%^(~
zI3U&Ont?P`<Qw(S&o{$fFgm~Bk(S^OKHPuez5&PNrgt)f%Q@Jxgl<#9<xnw4?>r&4
z#Bp)jcVV_N_{c1_qW}_`dQm)D`NG?h{+S!YOaUgWna4i8SuoLcXAZ|#Jh&GNn7B}3
z?vZ8I{LpmCYT=@6)dLPd@|(;d<08ufov%+V?$mgUYQHYTrc%eA=CDUzK}v|G&9}yJ
z)|g*=+RH1IQ>rvkY9UIam=fkxWDyGIKQ2RU{GqOQjD8nG#sl+$V=?wpzJdT=wlNWr
z1%lw&+;kVs(z?e=YRWRA&jc7<v^cocvM}t?D($SvDa?_=LXA45aq!EQX2Lq`%vHW$
zNM=Siu1Dj?JA9{YH72Z<Wd!kbCYtdA$5Ckc3$(`uYk|@oeCT!Cm9q!vEgf*_Dj@*n
zOeZFlMoG2+1C_N2s_Q9VO(e7we8%9@tv3*#x<T@@+XQh#!Ql#86}>5rQ~({*TS<<r
zz%j+N<QwshM}=f2viqc(_=9vb7BHd)@3@JyCmPXJ28Kh)o-nt=w<ZU4JFl@$m5{>(
z8X!j>B}?Bxrrp%wEE7yBefQ?*nM20~+ZoQK(NO_wA`RNhsqVkXHy|sod@mqen=B#@
zmLi=x2*o9rWqTMWoB&qdZph$~qkJJTVNc*8^hU?gH_fY{GYPEBE8Q{j0Y$tvjMv%3
z)j#EyBf^7n)2d8IXDYX2O0S%ZTnGhg4Ss#sEIATKpE_E4TU=GimrD5F6K(%*+T-!o
z?Se7^Vm`$ZKDwq+=~jf?w0qC$Kr&R-;IF#{iLF*8zK<RXJ#oTZzH>u8(=#chRO;>x
zdM;h{i{RLpJgS!B-ueTFs8&4U4+D8|7nP~UZ@P`J;*0sj^#f_WqT#xpA?@qHonGB&
zQ<^;OLtOG1w#)N~&@b0caUL7syAsAxV#R`n>-+eVL9aZwnlklzE>-6!1#!tVA`uNo
z>G<RmQ*~PMGkP1F3YVsY8hDf>v^P)sohc~g_1YMC;^f(N<{2y5C^;QCEXo;LQ^#$0
zr>jCrdoeXuff!dJ^`#=Wy2Gumo^Qt7BZrI~G+Pyl_kL>is3P0^JlE;Sjm-YfF~I>t
z_KeNpK|5U&F4;v?WS&#l(jxUWDarfcIcl=-6!8>^S`57!M6;hZea5IFA@)2+*Rt85
zi-MBs_b^DU8LygXXQGkG+86N7<%M|baM(orG*ASffC`p!?@m{qd}IcYmZyi^d}#Q&
zNjk-0@CajpUI-gPm20ERVDO!L8@p`tMJ69FD(ASIkdoLdiRV6h9TPKRz>2WK4upHd
z6OZK33EP?`GoJkXh)S035}uLUO$;TlXwNdMg-WOhLB)7a`-%*a9lFmjf6n+4ZmIHN
z<gC6$9&<a*7dDyY`YY;ghVrEzYJF#xH|wuhyvUx9-%QY-GCPRgqE|LOvLa5?sww}7
zI2*OdI_G}VPx#1e@#f2u-XhlpX%uc#C6AkYXjwX!?jG}kzV#Z*Fu2GWVos+=>-V@$
z8PXsoR4*`5RwXz=A8|5;aXKtSHFccj%dG7cO~UBJnt)61K>-uPX)`vu{7fcX6_>zZ
zw_2V&Li+7mxbf!f7{Rk&VVyY!UtZywac%g!cH+xh#j$a`uf?XWl<``t`36W;p7=_*
zO6uf~2{sAdkZn=Ts@p0>8N8rzw2ZLS@$ibV-c-QmG@%|3gUUrRxu=e*ekhTa+f?8q
z3$JVGPr9w$VQG~QCq~Y=2ThLIH!T@(>{NihJ6nj*HA_C#Popv)CBa)<?J`vp-X+Rb
zTR{2G(S%gdn%$reN3;3l^V6y2nK)RlYR|G@vS_O<vtDtkL>+UI-bx8u8zfCT^*1|k
z&N9oFYsZEijPn31Yx_yO5pFs>0tOAV=oRx~Wpy5ie&S_449m4R^{LWQMA~}vocV1O
zIf#1ZV85E>tvZE4mz~zn{hs!pkIQM;EvZMimqiPAJu-9P@mId&nb$lsrICS=)zU3~
zn>a#9>}5*3N)9;PTMZ<UIk}YMHP|w0<bZ(mPV`yUjJsPq65V&46VWbXb6+nEUBj_2
zJ-_3u^!Ofgejx*TP1##!6nRJhhpbUl=ZcQM$#5|sG|TJc@l3lcSm;9z(D;>)$`5k}
z?iG}Rwj$>Y*|(D3S3e&fxhaPHma8@vwu(cw<po@Y^_j`2Pc*798REa0zkhGie^%TD
zh?HFA8PdoX;&^>dlaCjX+NIK6=$H4U`rfzcWQVOhp{fnzu<EDb;CqmdSDQ_)o6Nu0
zk38`B9oUMv#wnJR$IpIg7*!z{$HJ9Ju=8tVmXUQW7oNOTgo`u1)|*N>ZhgCCGpw|p
zTi`>cv~xVzdx|^`C0vXdlMwPae3S?>3|7v$e*Bs6-5gS>>FMHk_r2M(ADOV{KV7+6
zA@5Q(mdx%7J}MY}K461iuQ}5GwDGI=Yc&g0MZHu)7gC3{5@QZj6SJl*o0MS2Cl_ia
zyK?9QmC9tJ6yn{EA-erJ4wk$+!E#X(s~9h^HOmQ_|6V_s1)k;%9Q6Niw}SyT?jxl4
z;HYz2$Nj$8Q_*Xo`TW<z;rEX}7DiHWYUo=(IK--w4Y;ejHmk4##vH(CH{^;B;Wo0$
zIWAmcs_mI|&S)2|O{(f+>EUx^Q9b+ik@$o39`mlY&P}G8wnjdE+Dlj?uL;$aB$n;x
zWoh-M_u>9}_Ok@d_uidMqz10zJc}RQijPW3Fs&~1am=j*+A$QWTvxf9)6n;n8zTQW
z!Q_J1%apTsJzLF`#^P_#mRv2Ya_keUE7iMSP!ha-WQoo0vZZG?gyR;+4q8F6tL#u<
zRj8Hu5f-p1$J;)4?WpGL{4@HmJ6&tF9A5Tc8Tr<bo4G+4UUl`<Z5vnlD5fTz43rig
zq2+&eAm>p>;Y>{^s?Q1&bam}?OjsnKd?|Z82aix26wUOLxbEW~E)|CgJ#)MLf_me#
zv4?F$o@A~Um)6>HlM0=3Bd-vc91EM}D+t6-@!}O%i*&Wl%@#C8X+?5+nv`oPu!!=5
znbL+Fk_#J_%8vOq^FIv~5N(nk03kyo1p@l|1c+rO^zCG3bk2?|%AF;*|4si1XM<`a
z1NY0-8$wv?&129!(g_A1lXR!+pD*1*cF?T~e1d6*G1Fz)jcSaZoKpxtA%FNnKP2jo
zLXn@OR#1z@6zuH%mMB9<X3Yq6^)W{c`tKZ-wpBs(g39Nr{fnM1;;<d-m!6<F@KyQ&
z2c2%gXc2J1n`%+&wd}G7I^$-5$jn8LexIyHb$daLXhD_-qDa1@-{Lynt=hkHT&B*g
znF|D5yF)+!CNAbke2^vkXHM@`Ch?U(2Se&|ixho}lJ8%YKXsE#xjv)tF}$=_`b70D
zsh)+jYAv%Bo*e(4$uhB+$M7sBiNrcJ%O28H7?UIsoWWhh=u`Dp{zCAWNXHJI2I^F7
zLf*Lt0cW<V(L*!mo?xrmqs9Z9$JWQ1w&&L;ACDtE=ezJRA7;FDS3RR%4%v~S>8}-t
zHJqClsZ!G5xMSgIs_=<8sBePXxfoXsuvy`|buON9BX%s-o>OVLA)k3W=wKnw1?so$
zEjm0aS=zu@Xu#;{A)QTjJ$a9_={++ACkRY*sk3jLk&Fu}RxR<-DXR<`5`$VNG*wJE
zidM6VzaQ!M0gbQM98@x@;#0qUS8O)p6mrYwTk*;8J~!ovbY6jon^Ki}uggd3#J5G8
z>awvtF85Y<9yE{Iag}J7O7)1O=ylk^255@XmV5J06-{xaaSNASZoTKKp~$tSxdUI~
zU1RZ&UuW37Ro&_ryj^cSt$Jd&pt|+h!A&dwcr&`S=R5E`=6Tm`+(qGm@$YZ8(8@a$
zXfo@Rwtvm7N3RMmVCb7radAs-@QtCXx^CQ-<)V>QPLZy@jH{<xd6(~q)+>#dc4#(y
zV)6Hp{ZMz!|NG8!>i01gZMy)G<U;7tp6@;Y0F^LaRn-8ks`}f74CNXoF)6a(Y@Gq?
z&FaQf(8p9ni0WaQxa$m_#LOcpkB&PXdTi|5Z3DX{fIeMy%{7&=Tlx59YHOvM!Ceg+
znj-J_pZ!m?Z|wR(5CrFYsbxpemeUvWSk50dTdd{LHFY1rK%~_BzHGBNcFc&;KZAfj
zol{(&iI2E><8Hf2X7e&LH_gOaajW<<^Xi55@OnlY*|S|*TS8;u_nHbv7lgmmZ+Q<5
zi!*lLCJmdpyzl(L${$C?(pVo|oR%r~x_B_ocPePa_);27^=n4L=`toZ;xdBut9rSv
z?wDQ7j2I3WQBdhz%X<su!nfvM-LKG|)z;W3esm?@u`M&PlXi?BBOFj-Z(g3;Y`L{v
znh@_Pz0x6jmFmDH1LE>7`2YaG_y|wA!7|s?k;A&WNMLMTZEzCaE^d??E&u?f=<SBV
zI^oDb8=O6!AP-uqs0IP?w(=k|X<ewUn<~x$ujNa`8T;y)V11piNL!Gi!V#3W9EHFI
zN5%lXU7QIdId6H;KCc|*_g*&y1l)&^o#a90x&}a1S0WB5B_SmN1*?1GJ>ejQBR~|<
z)=thyP2(p8r6mt?Ad}tXAP_GvF9|P630I;$1cpQ+Ay7C34hK^ZV3H4kjPV8&NP>G5
zKRDEIBrFl{M#j4mfP0)68&?mqJP1S?2mU0djAGTjDV;wZ?6vplNn~3Hn$nP>%!dMi
zz@bnC7zzi&k&s{QDWkf&zgrVXKUJjY3Gv3bL0}S4h>OdgEJ$Q^&p-VAr3J}^a*+rz
z!jW7(h*+GuCyqcC{MD(Ovj^!{pB^OKUe|uy&bD?CN>KZrf3?v>>l*xSvnQiH-o<U-
zVh{Z*(iZzW&dr19ypOTPLU7JF7fK)`3N!3acrxDZj|KYEeD+5EB@l|c-}(Q9{!Op_
zSoU?5Q**_7>^ViN$%FRdm9url;%(*jf5H$*S)8;i0xWHdl>$p);nH9v0)YfW?Vz$!
zNCeUbi9`NEg(i^57y=fzM@1o*z*Bf6?QCV>2p9}(BLlYsOCfMjFv1pw1mlo)Py{8v
zppw{MDfEeWN+n>Ne~oI7%9cU}mz0r3!es2gNF0t5jkGipjIo2lz;-e)7}Ul_#!eDv
zw;#>kI>;#-pyfeu3Fsd^2F@6=oh#8r9;A!G0`-mm7%{=S;Ec(bJ=I_`FodKGQVNEY
zmXwr4{9<m3Ba$dtzDEj!O2Fa!=C)Wl4GJZOl5Kbwj6DwGMzG%>*jpDl%4{ggQZ5Ac
z%wYTdl*!1c5^)%^E78Q&)ma|27c6j(a=)g4sGrp$r{jv<H{1u~Z1)Q8XUVBx>>>M2
z6y)E5|Aooe!PSfKzvKA>`a6p<k?iG4bkZm4+c@H|<bTieSK!~7j3}EOiA?lC|A$Ha
zHyr9mzG_iyU5P%w_&3J6|7iW#k(}}SQUNIs7nEH<4ukz6KMCWBv)x|;ijF^qunri4
zJ&v;7{;aj%`tg5}$5<&_TP##Y1}tp@qa>fK3=E8vL14ksP&f=>gOP?}rG6ye@9ZR3
zJF*vsh*P$w<N#%zDYdn~&OnhL>390i!FV~~_Hv6t2Zl<4VUi|rNja#boFt{%q~xGb
z(2petq9A*_>~B*>?d?Olx^lmYg4)}s<j{NBXzbzU=8VS?|18#T$@4$pezE_VsQ=0Q
zSJ)40RaZA3N+mmx^}PuH*8N`qe=z9au{Z+B_1}g5E98ePzZ^!Cn1A$94mrx13Hkld
z{Fy3y)%5@P`k8|Nj~*!0|2X+u`u-!=KXUyo1^yQJpX~ZauD_+g-va-WUH@lt9r@$2
z8%Lo0`SYSYRQFL+)lweF57=mHssVO`BU-B|Ejl+X3laculx6Qt1xQHbq;%4d(Yoq1
z9}Y55Q=ekNW=2uE^wDa{CL$eJ+ix98LYFW=Bd{Pf3pF*hs+_7E`?6#xEw$Qd&sVoG
zi~cseuMW5aC_{BRH_6#TY7BYQoKN2Yf^f&&wC^UVh|xfq`3nFbCyu#R;no%kH2|%y
Lr<SX7>H2>G42RE;

literal 0
HcmV?d00001

diff --git a/_static/codecov/keybd_open.png b/_static/codecov/keybd_open.png
new file mode 100644
index 0000000000000000000000000000000000000000..a8bac6c9de256626c680f9e9e3f8ee81d9713ecd
GIT binary patch
literal 9003
zcmeHLc{tST+n?-2i>)FxMv|DtSZA{DOOu_57&BjtZI~H*ma;_1l4LIxB9dJQ*|TO#
zN!sjLvQy+8>YUSgf9L)E-g8~=``>Y0!#wx%xj*;)e4hJ$zP?Ym-Z>3679JK52*jqP
zscJy|%SHXLGSN|g3$@6f1Az_(`xu?47+^iYt|X!@!3h9Uyj=k>;6<<nfxL!hlg&JM
z&lIU`i(TVUzRMUI<dL8JjMsmb=>(w94t$&Tmv4vUI0Y(72z4p-=52qQm)ibdMG{Lq
zK-QAXj0ngGo#r{-=KfvMuhjI#;F3ml_v?vI<2-B3E&Sb83IPcet8E#VcMLMbDBXp(
zietxGS0^|mhd<rgPy1wPya}=)JAZjvF2-{r_$i~kotbH_V6Bz1)x=iKc11>OuNU*!
z>lxhuyJ~5HC9jEu^6wu9yggaJEILLJFELe{&yOk3uY^_mY(J*EdTA{CbDHru&S*s5
zFHGCrim@r19P**ASiJAew_7dD+e>cSOtls3Z#(>lZx1iINjrV7NNt%PDNcMkXlA*W
z`Bs*%ezf4U5NxJm__K5P?GEB7`Q`04T`~MTc=Sf&%qHuFd;!rn3}>8+-@yEidsy4J
zwgV$+ymZ>vxo%s!H&}(*({B{M0j#!`Lt5GDbvmkji<_pajk9^n5DO(1Q=&m;TJ!?&
z?dI<G%c}|T<tC|SX<u2YQcvu$)f^qY`H(5>ZM5vQ>Gv(&EdlJNx^(v{pFFPfSP@r^
zUhRTD7bv*AYH`?Gq11M%nz2r;gHNp42jVLD`5tDqtqX8m!12pRUB0&T%w5?UN8u2$
z{33ra^&{S8?zu^Udrw+}HTUH(`Hi#oxx_~8z^KjV88Ir*uZL|Sg~!j^L_s$=4bBRW
zop?W3)Xm?LO6n3E9KHt6XpGZ_HN~5oyARM_FU(4I%qcBvz8@9K>nRPh&##*Eoh-~w
z_nj&&SNa->_^2rmZKKZTTsb8qBi7eZ+<|^m6k%kJZMtc45f~Vd$|>90cV@0+305_?
z$}Q=5?!3a*rg#60fWtWf!9(Na58NEPqWSacwBi#FiX9R?*v-C&eMqb0k&TM0y0Va%
zz~=|oCLbfUU9)b69enmUFXBy2)12vO`bS&kb^YOC0g}4%8d0@NbMm6<9C^4VY$)DE
z97dE-HVFOL-)`t{@mQPechUcK@>Nbm7<c>VqtmzZyM5U<`U@;RjksVMF8R*E>VhuI
zkJSj=K$J!b9wLT59DZFvicVNQpWLaC2991nDs<!g^Kb9izEr&1qy)BXjc3!!&Pglq
zy?3kKm;yzA>(piR8YcRq>puA}_3int5bZCnSnDDDBIyC`&DN%_Rawgsxlzfrw!$YU
zk697D5ny@b<xxWBQ<E!Bd3=meP6<o2*P43rW}^Rm2`9wI$<M+ezau@7H3pX}e8}y7
zLq;asRr^m2sblcOi0~x0`cJxgT&#dT)0HW&dD`nGNoQ>5%eg+G2F&np#M_QkwT<~o
z=20^H-;eo=m3|I#91GRY0$TY@>nd$|*Y@6PiI*+2I$KO&NY?@M466>Gt%~L<B6=QP
zN=)^A+wd^uVX54t(2L|ZmpDc0NP~_|Z&{}zmvX|dHXlJq9z+pEZn|qEsy!JMP2b;Q
z=y>gowk~^JM_8wk%ghs}g}t}vM}#g;++DAjY#7oR5>!9Zb&%tZ@Av?{`s6b=pUPf&
z`Ej0w!tuWT?VOSJ(s^!$)o|_8JY0RAMH30nz=QERTWUx%i<ysV-(u;Sy7}9)#|=5<
zdps&9PuGZ>6hBP9(PAp{ZQXvk!u}#Vab<|7#n<aBI?C3_0r~Oe<?NFI+6)29dBt5>
z<BEs-n~LZ<#hT-1`pDmbgrr-9mkYh6CvFe9h&qn*NZ2&q(HCl$%vU^@ZCK(~?hpGC
zi2+SGgAN`cmAW2K$NOuc*TdH}HkY~O*qiLvbC<0r)h$$Rf%%1n$V}HRR)=Y`Uud}x
zGJGr4HX$K|scgubC{0aDJ>{maX?O+c&it?=GMZ6-mCiq1b`jrvnH%AIwV(c=)Y+Ng
zV<#loBasaSDG>p~!~6DW%DmIwBgLM5kIpGHr(+-C2oq1L_i5|QlNU`n4xG_p4P3X+
zRb3J0k2659ugVF3jbY3g*#hm^+qFWErnuOPd#1_kH{$GKT=$ySdOG<2GJTTZieX8-
z?SgdRq&e6K0~#g8LaMO>bF{p3>QU`28P6mcPxd#h%a3HMTriHT*5N2RdHdrvo)Hl(
z`U&a1G+qKp7@qqMO*C~Dy@6-;0(yrivn$>oJm|n&YNs2%lFk?#rUv7N=CbY!26_#`
zOwy)}i?Rp4nN$r%&5zU9O^|X|`}0gh4dooTajuqYy@fN0lYu~6li4||>k%x%XO;xj
z5hh><cSg)ZXiSB3LfbQ4`%gno33odfgFEYtHe5?R8v+hn^0a==0A3x58evk@2$5#d
zu6h#|=SX-HJNxC-0sWY$HiuRf-rf*~ScgRV%oy<|y9ac5=5Vnavze^7Um7#t2njB@
zxH){&C<6=(tre%El492rsyj8!X$JIdndo#4bPv&}lp!=bi#2-XURTE{263C4<s5)0
z>P?#m$1I$s2gk=e^$N7Mm%F()PB*<g5=G|k`dXs7-=~&Wr@wU-b|r>mBjl8#GTm}V
z$n>4H{Zn?>tRb54D4B<nY>SNiH}riISvV^~kJ4Oqi-Q}*uV!1arYe1u@i3%->Aj(r
zIL(E2nn^nhc3)1$LG?M!Z0P!8{kc7jVZ|z31Z9vW;zWG03+N<Fl+*G>wSV4)_v?8U
zWzJng#k|hYcWf&`>pXSb$1J+|*RC+y0H1PLZGt#e<M<Qc9Zyb%G;UIW{qLQwz6!FY
z*XgNz2)izjA(B&IyoMqMWIEqw##h<wHSm!0T4Y@Vg6zv@A?*iZE-HqPPW2xD-s?Gj
zYblKFz4ozuor^aH@KXsXA~~bekHau^M4hbwQK2Q1{9_M<o==${K90lc=UUo5fMW1i
z6?MZ{(+FV9F%ao2S*WN~cgZqqkETYF>5IB@{-e@rJo$|6ec*b&%(FN6?k>rN1-Nr$
z4m|s8prjrxoFseZy3M8c%nY<;8djgwW?!ntbr_BuPh)z_r$EZ(kbFfHIe-m~a@%)q
zLHUZt{_ImXka>hsv7(tXD6IvCnD*Y9=OgFxoLemASErKGmb*^Vr}f(jx0bPl+I)E&
zdgR_RtTV3aL1y$Y0L5%R`aCZ_j3{hDnOKUvJ-^B&r*-n!H1{M-gxge|1@AvCd1;LQ
z&gyHGB7uzB5-;A*PN28V&l6{zV&ytnvv49kQD;x-Jcw{TPutVpBdI*~r2kQt;9y9}
zrm;uL{ueR+pCY~(GsbF5WOLs1yA+{d<vV^07wMISVqyv0-_4I1rVw7pOmZn=bX6iV
z>^Nmfm{aCu^(uKBHuPP3>NOHZQeGCtO_(B6)e%e38$iS+A2@EuwaM3TExzF}i&|u$
zKssx-vZFF{(!fLzv#fm`hUWZG5W_HwZrHcibZGYIaTr8bF#XA~Yf^ke%h&0u3Dx%!
z^ibu!hA$rmFDYFLiIR1*I%r`O?aUXua(z?Y&59c);yYe5&auIz#2%m$bF*Hyeb18q
z{s%|D-an(}lltLeI1PH%zkvDJwfC);yKU+wq>Y~}`Wh1~1YKy!?;AbZMc?c-xx!ID
zGU@t4XMu&;EzIlDe3)0mJ*~+gZ-I|7lWVH7XtQ^*7s@OAG%rXhF&W2i7^~4ZIjANP
z)iqZodK~wkV=H<3sb9XbJmqa^_fu6Md2TL+@V@LjyB!gdKL)fcuy|X!v>b{(24;h6
zJWY9Lv8*x1KY;xnwHPyvsD<w5oV%R-@*cP0Tg$P*n(p%=$nMFqFqn2O!$!THw{uii
zO*EtBbGhC=nN+z?bmZuJM@PMneyCVGvUsLHWcyK=`~_}p<we$M4g$zzEj4m6#cVp}
zq|8Jok-I}<V9#B6y)iZjXP|a$MuVnDglp)~7W-G##MAW!38xXEFHSU=vjy1S^IJ{b
z7;;DQFjT5W&&2@(&j3rE7rp82B<7+$o)JuCMI6p8uh{ys+I$#8lp-BpK1UaDYj>J@
za=nD?=lf8HdL|ib^6{~*M~Z^@X6f4_vccD5U;FmpEMP#m#3a{Hv(<sbw~mXbC$WTA
zYz7=q388XcJ9oOA<9ycIEAZB%eCq0YS^6P_$NQKR36wbY5W<Pt+I9&6UOR&nPanTq
z9@a@s-=G4#FCN^d%ga-V^E;4^@jR!bX?E_5u08{hl@WC4&fV!WX4Tvzhse7VA+4Ub
zePZlH%J6ylObU3Pc=`al_4!$;@(<ekYD8i^1^kZaE{WW+id?ygiLEHqQ#Im|H}R4g
zC}r2-)$C&33N1S*`n<_)AXbC%`h$`eB{L(An*}FoHiUS#MZ$^SjXuG1aS@{tl~%}`
zU@qTvj{9||yxJ2|<(jo8K3}DOCDlFGI;P5yo$@-pFu1cb#pSuzN2k}B#@3~i_dz$(
zm!qb*d!0>qAR7jbY4j^jmY1_kGt2jCr9Hcns@ad#dkAiH(87OC%{OL&%A8E67dds4
zUUa(por`Wt!CH3Hh4y+T!9&*HuNopp&DuC!EBsu2>zv#{TDK;p*zGdw3Q}{Qa3l3P
z;<bFgR8Slnz<P6?_jOMmrR`dNN3R4$v;+_KywbI0Qb30?Rmr=RIYgkEtyitQM~hWD
zJdcI<jnnW>iD#9LF=sx7%v`;5kM(4uz1BHUXiwju?VgYWB8vDMa+TeebP^R`85D{{
zc$n4X&Z!+bAB>Phr{s{sU9$^T=t{2+HO8<@oNBifmQ0|Km;F^;iwj#gXkI1ur>(!Z
zG@-if3==No%Idh?cck)-zRX2RqlFtoV`vrn=qyc?4xL}sirUxBJ4r!#F?aOvj)juB
z%{tu=P8ttd5+4}c=Ud{6@wDYv&cB^kki63NIG@ATX%<^s?;CRDcEa1`cD0Wo0dd{Y
z6qjdr3O;ft)T>4e(3iLm_u`QvGhKad%P9zU^Lh8<(*A{x4mEG2wo)t&m&#+lvgmgT
zX=0eA>sxXaMJ9`9ydOiNS4<9P-1gH31Wp9bo%!tP$g@wsOnW*#!un#WK&N2z$F93%
z)7XXFa=YT;W;+I0qF=FN_Dr$}{`Q67WG7Phqm*HvlkJb*IdK?p`G_u_U_TMccM}%Z
z9o(j&Lzg2pl<l<O3k$lq$T)2s#zJB%)4UGBGu<h553_(72Z^Vt8a&+Q)g2E0ys{|C
z$lFi69;6QU<A45YP@cBq^U<p+$Bd_v!Lo_?E;5Z@t51i)J=H6@X65?jT9wfP8qrFF
zEA1!lb<d2jvS*OEy(8JP7V+`PjXk(tcu=x_(06)x5}bcQQ*U7YooKG_>sL#1uY|kR
zlIJ<V&&+LDX|8vK@%P|kA2&rQE{~x!&*l2Qbx+TA>v<h^aICd4OZ$2Y&G#{JnXMxg
z$(w<Wu3y25U>xnYMIcl8WJUtLEW<HBy7o=5d4Hgb$)ur4zQ5m#ugj^%46?fB0HgBl
z(zY8Wb*CZXahF2!o|pSi2UmQ1*x&$69HmE9(nE@zfb8~+oaPyobT~zKFhjbnIACZ`
z2M?4ht#(vL=d`#!?OBJfQ;7vjqifbhYfq&~3g5QYC#A3RRZ+}=4b(-Br*H8EWv`C{
zD%LaFZd_-s!DD*paS3TRyDKeLIgFEP2gl%nuc|d{jK@`KGRwz~FvMIE%Trb0zdWNp
z2r4N?_BB^evxf<?T6<oT>Z=Jc)J-!GUhx*adO`KdDYV3eE|sbm38a(2si#4)I#TQ{
zu?Gg4M4z6{uc>!WZ(Z|4?1_ml(CD!lWvQIf+81z4K0o}Pq{RyyL8J8^KU+axA#4qy
zQ_Hf5_<Yzs<;2r%TT;21`fMDOO;Y<oU$GhM>NC-tOOi9sMZFnv)U{y8i$_y>bVIjd
zYdd_eZZ%qsKW*^;2wxh(DlFXEIM5O>17AA*?E6crapNmn`L!Jn>AqbENHS$!E&q-T
zFo+4DLWSrzdaYa`rye_*o~K22kByy4JzG;|#gQ7C@QCI9JkMy#2(2Fr`Ks(a7O@xQ
zvrGC5UmLAPFdMG#Z`W+kDtZAXOA0bEMIr=*Q!fa#N06YRqNk;z^4on3^%f>IEv8Vr
zL60-Ew)rk(`mRiv3IpS<EBic1IV>4>4mi@^GxX`R5ew(n60W&Syt}_o>A)pgE5&E8
zx78ULi@iR42{_udvF!_&adC>f`(&?{`S`^G4hsg;xq4oViQ6kITte;T!WM@^_k;-B
zLpb!avBKI!QgmoYY?o2a^F?+Z#*eEd9ik7<*Uqk8Z`^Mqt=+4+d1B;xTx-$WS;2+I
zO|PLhqWk+I$Zt%YKlF@o9>2ARqq#A@<bDpirR4Q3pV8o9L+kruDl1vZ!cPuzkrrh*
zSJWyom=W8X6CwaOy0F@*o-bV1`Pgbe?Vx;DZfA3|=-#Er4xKrvJxn9Vv4Vl6cIPV}
zJvZOnDoalCkX-7P_TNKetw&nirqF;u`|l8_7g*;pXVEyKGYpF-+5j*wXIJV47YHP)
z;N^<NIRX^04PZxbk%P=v)k44oyd1<-5`)0FssQ!`O&=0q=yT2p=i`V&;UNn0EV5o`
zDuFXV!GgV<om|LhFFD9AFPi#&#|(#ncOeu<Immg89$1A)0>Bb52^a#Z=0)&8LgZP%
zvLw7M+CWwPCk1sR2eGG6T+wj2r>7^(lX?k3vV)7EP$)P82}dHKR0Ndl?LxtNL0!lK
zI}|@SQ~@%ML~x}Lh%VqAPOJ^logxQ;Q0Kuv$*HqAH7~01XMmmYE<Krohig#>64doj
z0dOP&Ap=Dqp-2?`SAXg(2J^eO3;CytR6XHdSXa0h3;}m`{*wopqUP~Oyub7y8&U5O
z;RXPi=uW}`Y94?KMc~(<u1@acUt_wHfgRIs-cER1I5nx=$iMn%Xkqkz_t}xrj^OON
z>#>9W6^Y0Fj&pS<IqhQbI5^-0I8zfLQ<=s7gr^W}|Ja~Et!HQEUlO5)`<?$!=->3(
z&1F|tv?>wjz7teSRSvR~FB(t85%B2UuQo^=N&+ci3&lwQc&G#dB?U#Ha9F4<9xr7h
zBPD@Dps>GCX}ORoSQi|yLq#Qr5vV*UoEQ=zjTM7RN}<G|61FHYs0>ch1}Y<IgF}i*
zA!YC~$X_UQNd#&qV4Z%=YKIC>r4mQkNTZ}}B%l(~;?mS?Yyqf^gft3@K-mCDtb{mq
zUTl|YXCKf?dRlT2Bn<I~Mb8OKu_cn6<scX=4y<eV$BYrd88D<^cT^LT5|a^^LP>~8
zNJ`0wBY$x>0Z3$OmG6*>Az;WKS>thNbt)y6T5SYptQ`P%b+Oy!-Psp3bv0CFu{+H{
zW!|+@7lT$I0ayx=WJDx7$w79K1@BPq_7qt5XSblw5^=kZyI=sn({MjqP8n+l-yO=r
z{~h>Wm<;WSo-Y48o<E?!vnY`$o<x$PE=kwM0l-oIJ<nf(e`hkF9(H63$y@6`Eb71E
zWPjAFCe@cn^8O{hA>j67^y5TwBJ4^92JfB%Xe{oB{A8>LfZyE$s*XRVaQ0XiJAiuJ
z{_M5i?1aClV_U2g4k1M?Txn@MwF0GZQcxRdF#w7}NFk8o(kPUK)Q?*Eot;dyrFddV
zfRY`x2B`Z??XBH?2A}#-e!_oF#?v0ysVxLj42qC|iisN`#nA|Hw73Lyh(;hFKeik!
z3*R|qe_OKb&N+m^pnnxbcITWzYwc8{p}VWA69FLoS*+iR=YPQc;{UTy|C9T#upizk
zL|1QWC)-nWJzf57_`d-DU^q*_0WM_Xzf1jB$PZb5c^FZ1{$Zm&<fzX~`0o$RpQW<X
zP5+NSKTGicF#?tPpCErr-+$!#N3Or6z~2J@Q(gba^|uuGTi}1H>;FtHmOoy*0T=2&
zf1cErYE6u!67_|g#zsd&6|{Xdx}%mlVs_OuBZEMDId(pKK*_0xsYXVM7DkP6jBXz-
zEd<AGd6a6>)lyY5I@OKCuXih+u*QN7paQfUw6wG;XcaW~qWCo?T2*0>x(MuCfDK<A
zjT?wM)o?bHl6OLNUjgmm2k$|_0IRD`Y?`tNBZB>SAqe7lXsSc7qm4=p(o#F8`bgRO
G%6|bpD&^7u

literal 0
HcmV?d00001

diff --git a/_static/codecov/status.json b/_static/codecov/status.json
new file mode 100644
index 00000000..c67af025
--- /dev/null
+++ b/_static/codecov/status.json
@@ -0,0 +1 @@
+{"note":"This file is an internal implementation detail to speed up HTML report generation. Its format can change at any time. You might be looking for the JSON report: https://coverage.rtfd.io/cmd.html#cmd-json","format":2,"version":"7.4.4","globals":"c523d690cf03cd5bf7d50ae4a9f6e51b","files":{"d_a94113ed293c43ea_benchmark_py":{"hash":"66d3ea60fc4745975c6a9ff6a972ca3c","index":{"nums":[0,1,9,0,0,0,0,0],"html_filename":"d_a94113ed293c43ea_benchmark_py.html","relative_filename":"src/nos/benchmarks/benchmark.py"}},"d_8650266d82634dfb_c_shape_py":{"hash":"cbd51fdeb22c6e6dc5ded835704d9e22","index":{"nums":[0,1,34,0,0,0,0,0],"html_filename":"d_8650266d82634dfb_c_shape_py.html","relative_filename":"src/nos/data/indicator_function/c_shape.py"}},"d_8650266d82634dfb_indicator_to_tl_py":{"hash":"68e96f8a4e3febf282d81304b9f7eb43","index":{"nums":[0,1,18,0,0,0,0,0],"html_filename":"d_8650266d82634dfb_indicator_to_tl_py.html","relative_filename":"src/nos/data/indicator_function/indicator_to_tl.py"}},"d_8650266d82634dfb_params_to_indicator_py":{"hash":"11c034c7494fcdb0b985d32adca87fa1","index":{"nums":[0,1,12,0,0,0,0,0],"html_filename":"d_8650266d82634dfb_params_to_indicator_py.html","relative_filename":"src/nos/data/indicator_function/params_to_indicator.py"}},"d_7e8216966b2e3943_transmission_loss_py":{"hash":"bf5528fa2668cce9675ee2befdf11279","index":{"nums":[0,1,51,0,0,0,0,0],"html_filename":"d_7e8216966b2e3943_transmission_loss_py.html","relative_filename":"src/nos/data/transmission_loss/transmission_loss.py"}},"d_7e8216966b2e3943_transmission_loss_compact_py":{"hash":"744e87a68454d6a7e35982fe29b73aab","index":{"nums":[0,1,23,0,0,0,0,0],"html_filename":"d_7e8216966b2e3943_transmission_loss_compact_py.html","relative_filename":"src/nos/data/transmission_loss/transmission_loss_compact.py"}},"d_7e8216966b2e3943_transmission_loss_exp_py":{"hash":"f436fafa07ce98b3ca45cbbe02c71313","index":{"nums":[0,1,16,0,0,0,0,0],"html_filename":"d_7e8216966b2e3943_transmission_loss_exp_py.html","relative_filename":"src/nos/data/transmission_loss/transmission_loss_exp.py"}},"d_7e8216966b2e3943_transmission_loss_wave_py":{"hash":"30d7d251173381043b7b92440526a5d9","index":{"nums":[0,1,35,0,0,0,0,0],"html_filename":"d_7e8216966b2e3943_transmission_loss_wave_py.html","relative_filename":"src/nos/data/transmission_loss/transmission_loss_wave.py"}},"d_99aac0089c5f15d8_error_metrics_py":{"hash":"5fc8bae6736fbdacd38e02dd7d91962b","index":{"nums":[0,1,21,0,6,0,0,0],"html_filename":"d_99aac0089c5f15d8_error_metrics_py.html","relative_filename":"src/nos/metrics/error_metrics.py"}},"d_99aac0089c5f15d8_metric_py":{"hash":"914233c3e8d365ef18ed0636c3e858f5","index":{"nums":[0,1,9,3,0,0,0,0],"html_filename":"d_99aac0089c5f15d8_metric_py.html","relative_filename":"src/nos/metrics/metric.py"}},"d_99aac0089c5f15d8_operator_metrics_py":{"hash":"9d35ece251dd9b71a0be4938d2fbe518","index":{"nums":[0,1,22,0,0,0,0,0],"html_filename":"d_99aac0089c5f15d8_operator_metrics_py.html","relative_filename":"src/nos/metrics/operator_metrics.py"}},"d_dfcfe80011fec8d7_residual_py":{"hash":"3804554b3ceb8e2be9f91239ff52f39a","index":{"nums":[0,1,27,0,0,0,0,0],"html_filename":"d_dfcfe80011fec8d7_residual_py.html","relative_filename":"src/nos/networks/residual.py"}},"d_93093ff38057b02c_deep_dot_operator_py":{"hash":"8b769f958984b249b193dd6a79b10cd8","index":{"nums":[0,1,28,0,0,0,0,0],"html_filename":"d_93093ff38057b02c_deep_dot_operator_py.html","relative_filename":"src/nos/operators/deep_dot_operator.py"}},"d_93093ff38057b02c_deep_neural_operator_py":{"hash":"d584d7350345b94be922d463e10df7c7","index":{"nums":[0,1,21,0,0,0,0,0],"html_filename":"d_93093ff38057b02c_deep_neural_operator_py.html","relative_filename":"src/nos/operators/deep_neural_operator.py"}},"d_93093ff38057b02c_deep_o_fno_py":{"hash":"3afdf777229b04525d610f1be0dc4626","index":{"nums":[0,1,17,0,9,0,0,0],"html_filename":"d_93093ff38057b02c_deep_o_fno_py.html","relative_filename":"src/nos/operators/deep_o_fno.py"}},"d_93093ff38057b02c_deep_o_net_py":{"hash":"afde481acb7fce417037bba1a8499cc7","index":{"nums":[0,1,33,0,22,0,0,0],"html_filename":"d_93093ff38057b02c_deep_o_net_py.html","relative_filename":"src/nos/operators/deep_o_net.py"}},"d_93093ff38057b02c_deep_root_operator_py":{"hash":"dd0b1e53fc5d65c8fc9cc7c5bb1bb148","index":{"nums":[0,1,36,0,0,0,0,0],"html_filename":"d_93093ff38057b02c_deep_root_operator_py.html","relative_filename":"src/nos/operators/deep_root_operator.py"}},"d_93093ff38057b02c_fourier_neural_operator_py":{"hash":"261f9e8c81657ea8b6bbbac9f00d0e2e","index":{"nums":[0,1,9,0,2,0,0,0],"html_filename":"d_93093ff38057b02c_fourier_neural_operator_py.html","relative_filename":"src/nos/operators/fourier_neural_operator.py"}},"d_93093ff38057b02c_mean_stack_neural_operator_py":{"hash":"64da2359f007f92d20e631f9f07ad3e9","index":{"nums":[0,1,22,0,0,0,0,0],"html_filename":"d_93093ff38057b02c_mean_stack_neural_operator_py.html","relative_filename":"src/nos/operators/mean_stack_neural_operator.py"}},"d_93093ff38057b02c_operator_py":{"hash":"65f74b4587699ea5f87ecd19f05ca50b","index":{"nums":[0,1,9,0,1,0,0,0],"html_filename":"d_93093ff38057b02c_operator_py.html","relative_filename":"src/nos/operators/operator.py"}},"d_93093ff38057b02c_utils_py":{"hash":"c406f472e1253eeb916e2568561284a4","index":{"nums":[0,1,53,0,1,0,0,0],"html_filename":"d_93093ff38057b02c_utils_py.html","relative_filename":"src/nos/operators/utils.py"}},"d_d726faacd801a058_data_py":{"hash":"8128e29d57fbf194801c2021a9986422","index":{"nums":[0,1,67,0,1,0,0,0],"html_filename":"d_d726faacd801a058_data_py.html","relative_filename":"src/nos/plots/data.py"}},"d_d726faacd801a058_metrics_py":{"hash":"18df869204d8ad16af66c08d5085941a","index":{"nums":[0,1,96,0,78,0,0,0],"html_filename":"d_d726faacd801a058_metrics_py.html","relative_filename":"src/nos/plots/metrics.py"}},"d_d726faacd801a058_training_curves_py":{"hash":"27f2e5ec98d900618a9a07449b21a834","index":{"nums":[0,1,40,0,31,0,0,0],"html_filename":"d_d726faacd801a058_training_curves_py.html","relative_filename":"src/nos/plots/training_curves.py"}},"d_d726faacd801a058_transmission_loss_py":{"hash":"96abed1df1f4ad723b67f96512e41d82","index":{"nums":[0,1,129,0,104,0,0,0],"html_filename":"d_d726faacd801a058_transmission_loss_py.html","relative_filename":"src/nos/plots/transmission_loss.py"}},"d_d726faacd801a058_utils_py":{"hash":"ae5b065b96725ba5a0413ec1c0eeba2a","index":{"nums":[0,1,21,0,12,0,0,0],"html_filename":"d_d726faacd801a058_utils_py.html","relative_filename":"src/nos/plots/utils.py"}},"d_8dbc7d2850ae11b9_low_pass_filter_py":{"hash":"874f6870b1c8303db10ac160870341f4","index":{"nums":[0,1,28,0,1,0,0,0],"html_filename":"d_8dbc7d2850ae11b9_low_pass_filter_py.html","relative_filename":"src/nos/preprocessing/low_pass_filter.py"}},"d_e3bc015ca2131802_average_metric_py":{"hash":"1a535b65da823f543bdd524767fd2f2a","index":{"nums":[0,1,21,0,0,0,0,0],"html_filename":"d_e3bc015ca2131802_average_metric_py.html","relative_filename":"src/nos/trainers/average_metric.py"}},"d_e3bc015ca2131802_trainer_py":{"hash":"7bcb5cf23d708cf8fa6a5c604679159c","index":{"nums":[0,1,97,0,7,0,0,0],"html_filename":"d_e3bc015ca2131802_trainer_py.html","relative_filename":"src/nos/trainers/trainer.py"}},"d_e3bc015ca2131802_util_py":{"hash":"aa91396277bab8d77a7303bb5c4c245c","index":{"nums":[0,1,11,0,0,0,0,0],"html_filename":"d_e3bc015ca2131802_util_py.html","relative_filename":"src/nos/trainers/util.py"}},"d_040e78c194e497af_scaling_py":{"hash":"6ccf019d75b857d5ed9c157d40023ec2","index":{"nums":[0,1,15,0,0,0,0,0],"html_filename":"d_040e78c194e497af_scaling_py.html","relative_filename":"src/nos/transforms/scaling.py"}},"d_431cb39dc9496c7d_nested_dataclass_to_dict_py":{"hash":"91258dd545455b3e8a49b2cdc86142d8","index":{"nums":[0,1,14,0,0,0,0,0],"html_filename":"d_431cb39dc9496c7d_nested_dataclass_to_dict_py.html","relative_filename":"src/nos/utils/nested_dataclass_to_dict.py"}},"d_431cb39dc9496c7d_unique_id_py":{"hash":"a8b098867d813d82618acfeb3726f42f","index":{"nums":[0,1,8,0,0,0,0,0],"html_filename":"d_431cb39dc9496c7d_unique_id_py.html","relative_filename":"src/nos/utils/unique_id.py"}}}}
\ No newline at end of file
diff --git a/_static/codecov/style.css b/_static/codecov/style.css
new file mode 100644
index 00000000..aec9cbef
--- /dev/null
+++ b/_static/codecov/style.css
@@ -0,0 +1,309 @@
+@charset "UTF-8";
+/* Licensed under the Apache License: http://www.apache.org/licenses/LICENSE-2.0 */
+/* For details: https://github.com/nedbat/coveragepy/blob/master/NOTICE.txt */
+/* Don't edit this .css file. Edit the .scss file instead! */
+html, body, h1, h2, h3, p, table, td, th { margin: 0; padding: 0; border: 0; font-weight: inherit; font-style: inherit; font-size: 100%; font-family: inherit; vertical-align: baseline; }
+
+body { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; font-size: 1em; background: #fff; color: #000; }
+
+@media (prefers-color-scheme: dark) { body { background: #1e1e1e; } }
+
+@media (prefers-color-scheme: dark) { body { color: #eee; } }
+
+html > body { font-size: 16px; }
+
+a:active, a:focus { outline: 2px dashed #007acc; }
+
+p { font-size: .875em; line-height: 1.4em; }
+
+table { border-collapse: collapse; }
+
+td { vertical-align: top; }
+
+table tr.hidden { display: none !important; }
+
+p#no_rows { display: none; font-size: 1.2em; }
+
+a.nav { text-decoration: none; color: inherit; }
+
+a.nav:hover { text-decoration: underline; color: inherit; }
+
+.hidden { display: none; }
+
+header { background: #f8f8f8; width: 100%; z-index: 2; border-bottom: 1px solid #ccc; }
+
+@media (prefers-color-scheme: dark) { header { background: black; } }
+
+@media (prefers-color-scheme: dark) { header { border-color: #333; } }
+
+header .content { padding: 1rem 3.5rem; }
+
+header h2 { margin-top: .5em; font-size: 1em; }
+
+header p.text { margin: .5em 0 -.5em; color: #666; font-style: italic; }
+
+@media (prefers-color-scheme: dark) { header p.text { color: #aaa; } }
+
+header.sticky { position: fixed; left: 0; right: 0; height: 2.5em; }
+
+header.sticky .text { display: none; }
+
+header.sticky h1, header.sticky h2 { font-size: 1em; margin-top: 0; display: inline-block; }
+
+header.sticky .content { padding: 0.5rem 3.5rem; }
+
+header.sticky .content p { font-size: 1em; }
+
+header.sticky ~ #source { padding-top: 6.5em; }
+
+main { position: relative; z-index: 1; }
+
+footer { margin: 1rem 3.5rem; }
+
+footer .content { padding: 0; color: #666; font-style: italic; }
+
+@media (prefers-color-scheme: dark) { footer .content { color: #aaa; } }
+
+#index { margin: 1rem 0 0 3.5rem; }
+
+h1 { font-size: 1.25em; display: inline-block; }
+
+#filter_container { float: right; margin: 0 2em 0 0; }
+
+#filter_container input { width: 10em; padding: 0.2em 0.5em; border: 2px solid #ccc; background: #fff; color: #000; }
+
+@media (prefers-color-scheme: dark) { #filter_container input { border-color: #444; } }
+
+@media (prefers-color-scheme: dark) { #filter_container input { background: #1e1e1e; } }
+
+@media (prefers-color-scheme: dark) { #filter_container input { color: #eee; } }
+
+#filter_container input:focus { border-color: #007acc; }
+
+header button { font-family: inherit; font-size: inherit; border: 1px solid; border-radius: .2em; color: inherit; padding: .1em .5em; margin: 1px calc(.1em + 1px); cursor: pointer; border-color: #ccc; }
+
+@media (prefers-color-scheme: dark) { header button { border-color: #444; } }
+
+header button:active, header button:focus { outline: 2px dashed #007acc; }
+
+header button.run { background: #eeffee; }
+
+@media (prefers-color-scheme: dark) { header button.run { background: #373d29; } }
+
+header button.run.show_run { background: #dfd; border: 2px solid #00dd00; margin: 0 .1em; }
+
+@media (prefers-color-scheme: dark) { header button.run.show_run { background: #373d29; } }
+
+header button.mis { background: #ffeeee; }
+
+@media (prefers-color-scheme: dark) { header button.mis { background: #4b1818; } }
+
+header button.mis.show_mis { background: #fdd; border: 2px solid #ff0000; margin: 0 .1em; }
+
+@media (prefers-color-scheme: dark) { header button.mis.show_mis { background: #4b1818; } }
+
+header button.exc { background: #f7f7f7; }
+
+@media (prefers-color-scheme: dark) { header button.exc { background: #333; } }
+
+header button.exc.show_exc { background: #eee; border: 2px solid #808080; margin: 0 .1em; }
+
+@media (prefers-color-scheme: dark) { header button.exc.show_exc { background: #333; } }
+
+header button.par { background: #ffffd5; }
+
+@media (prefers-color-scheme: dark) { header button.par { background: #650; } }
+
+header button.par.show_par { background: #ffa; border: 2px solid #bbbb00; margin: 0 .1em; }
+
+@media (prefers-color-scheme: dark) { header button.par.show_par { background: #650; } }
+
+#help_panel, #source p .annotate.long { display: none; position: absolute; z-index: 999; background: #ffffcc; border: 1px solid #888; border-radius: .2em; color: #333; padding: .25em .5em; }
+
+#source p .annotate.long { white-space: normal; float: right; top: 1.75em; right: 1em; height: auto; }
+
+#help_panel_wrapper { float: right; position: relative; }
+
+#keyboard_icon { margin: 5px; }
+
+#help_panel_state { display: none; }
+
+#help_panel { top: 25px; right: 0; padding: .75em; border: 1px solid #883; color: #333; }
+
+#help_panel .keyhelp p { margin-top: .75em; }
+
+#help_panel .legend { font-style: italic; margin-bottom: 1em; }
+
+.indexfile #help_panel { width: 25em; }
+
+.pyfile #help_panel { width: 18em; }
+
+#help_panel_state:checked ~ #help_panel { display: block; }
+
+kbd { border: 1px solid black; border-color: #888 #333 #333 #888; padding: .1em .35em; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-weight: bold; background: #eee; border-radius: 3px; }
+
+#source { padding: 1em 0 1em 3.5rem; font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; }
+
+#source p { position: relative; white-space: pre; }
+
+#source p * { box-sizing: border-box; }
+
+#source p .n { float: left; text-align: right; width: 3.5rem; box-sizing: border-box; margin-left: -3.5rem; padding-right: 1em; color: #999; user-select: none; }
+
+@media (prefers-color-scheme: dark) { #source p .n { color: #777; } }
+
+#source p .n.highlight { background: #ffdd00; }
+
+#source p .n a { scroll-margin-top: 6em; text-decoration: none; color: #999; }
+
+@media (prefers-color-scheme: dark) { #source p .n a { color: #777; } }
+
+#source p .n a:hover { text-decoration: underline; color: #999; }
+
+@media (prefers-color-scheme: dark) { #source p .n a:hover { color: #777; } }
+
+#source p .t { display: inline-block; width: 100%; box-sizing: border-box; margin-left: -.5em; padding-left: 0.3em; border-left: 0.2em solid #fff; }
+
+@media (prefers-color-scheme: dark) { #source p .t { border-color: #1e1e1e; } }
+
+#source p .t:hover { background: #f2f2f2; }
+
+@media (prefers-color-scheme: dark) { #source p .t:hover { background: #282828; } }
+
+#source p .t:hover ~ .r .annotate.long { display: block; }
+
+#source p .t .com { color: #008000; font-style: italic; line-height: 1px; }
+
+@media (prefers-color-scheme: dark) { #source p .t .com { color: #6a9955; } }
+
+#source p .t .key { font-weight: bold; line-height: 1px; }
+
+#source p .t .str { color: #0451a5; }
+
+@media (prefers-color-scheme: dark) { #source p .t .str { color: #9cdcfe; } }
+
+#source p.mis .t { border-left: 0.2em solid #ff0000; }
+
+#source p.mis.show_mis .t { background: #fdd; }
+
+@media (prefers-color-scheme: dark) { #source p.mis.show_mis .t { background: #4b1818; } }
+
+#source p.mis.show_mis .t:hover { background: #f2d2d2; }
+
+@media (prefers-color-scheme: dark) { #source p.mis.show_mis .t:hover { background: #532323; } }
+
+#source p.run .t { border-left: 0.2em solid #00dd00; }
+
+#source p.run.show_run .t { background: #dfd; }
+
+@media (prefers-color-scheme: dark) { #source p.run.show_run .t { background: #373d29; } }
+
+#source p.run.show_run .t:hover { background: #d2f2d2; }
+
+@media (prefers-color-scheme: dark) { #source p.run.show_run .t:hover { background: #404633; } }
+
+#source p.exc .t { border-left: 0.2em solid #808080; }
+
+#source p.exc.show_exc .t { background: #eee; }
+
+@media (prefers-color-scheme: dark) { #source p.exc.show_exc .t { background: #333; } }
+
+#source p.exc.show_exc .t:hover { background: #e2e2e2; }
+
+@media (prefers-color-scheme: dark) { #source p.exc.show_exc .t:hover { background: #3c3c3c; } }
+
+#source p.par .t { border-left: 0.2em solid #bbbb00; }
+
+#source p.par.show_par .t { background: #ffa; }
+
+@media (prefers-color-scheme: dark) { #source p.par.show_par .t { background: #650; } }
+
+#source p.par.show_par .t:hover { background: #f2f2a2; }
+
+@media (prefers-color-scheme: dark) { #source p.par.show_par .t:hover { background: #6d5d0c; } }
+
+#source p .r { position: absolute; top: 0; right: 2.5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; }
+
+#source p .annotate { font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; color: #666; padding-right: .5em; }
+
+@media (prefers-color-scheme: dark) { #source p .annotate { color: #ddd; } }
+
+#source p .annotate.short:hover ~ .long { display: block; }
+
+#source p .annotate.long { width: 30em; right: 2.5em; }
+
+#source p input { display: none; }
+
+#source p input ~ .r label.ctx { cursor: pointer; border-radius: .25em; }
+
+#source p input ~ .r label.ctx::before { content: "▶ "; }
+
+#source p input ~ .r label.ctx:hover { background: #e8f4ff; color: #666; }
+
+@media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { background: #0f3a42; } }
+
+@media (prefers-color-scheme: dark) { #source p input ~ .r label.ctx:hover { color: #aaa; } }
+
+#source p input:checked ~ .r label.ctx { background: #d0e8ff; color: #666; border-radius: .75em .75em 0 0; padding: 0 .5em; margin: -.25em 0; }
+
+@media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { background: #056; } }
+
+@media (prefers-color-scheme: dark) { #source p input:checked ~ .r label.ctx { color: #aaa; } }
+
+#source p input:checked ~ .r label.ctx::before { content: "▼ "; }
+
+#source p input:checked ~ .ctxs { padding: .25em .5em; overflow-y: scroll; max-height: 10.5em; }
+
+#source p label.ctx { color: #999; display: inline-block; padding: 0 .5em; font-size: .8333em; }
+
+@media (prefers-color-scheme: dark) { #source p label.ctx { color: #777; } }
+
+#source p .ctxs { display: block; max-height: 0; overflow-y: hidden; transition: all .2s; padding: 0 .5em; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; white-space: nowrap; background: #d0e8ff; border-radius: .25em; margin-right: 1.75em; text-align: right; }
+
+@media (prefers-color-scheme: dark) { #source p .ctxs { background: #056; } }
+
+#index { font-family: SFMono-Regular, Menlo, Monaco, Consolas, monospace; font-size: 0.875em; }
+
+#index table.index { margin-left: -.5em; }
+
+#index td, #index th { text-align: right; width: 5em; padding: .25em .5em; border-bottom: 1px solid #eee; }
+
+@media (prefers-color-scheme: dark) { #index td, #index th { border-color: #333; } }
+
+#index td.name, #index th.name { text-align: left; width: auto; }
+
+#index th { font-style: italic; color: #333; cursor: pointer; }
+
+@media (prefers-color-scheme: dark) { #index th { color: #ddd; } }
+
+#index th:hover { background: #eee; }
+
+@media (prefers-color-scheme: dark) { #index th:hover { background: #333; } }
+
+#index th[aria-sort="ascending"], #index th[aria-sort="descending"] { white-space: nowrap; background: #eee; padding-left: .5em; }
+
+@media (prefers-color-scheme: dark) { #index th[aria-sort="ascending"], #index th[aria-sort="descending"] { background: #333; } }
+
+#index th[aria-sort="ascending"]::after { font-family: sans-serif; content: " ↑"; }
+
+#index th[aria-sort="descending"]::after { font-family: sans-serif; content: " ↓"; }
+
+#index td.name a { text-decoration: none; color: inherit; }
+
+#index tr.total td, #index tr.total_dynamic td { font-weight: bold; border-top: 1px solid #ccc; border-bottom: none; }
+
+#index tr.file:hover { background: #eee; }
+
+@media (prefers-color-scheme: dark) { #index tr.file:hover { background: #333; } }
+
+#index tr.file:hover td.name { text-decoration: underline; color: inherit; }
+
+#scroll_marker { position: fixed; z-index: 3; right: 0; top: 0; width: 16px; height: 100%; background: #fff; border-left: 1px solid #eee; will-change: transform; }
+
+@media (prefers-color-scheme: dark) { #scroll_marker { background: #1e1e1e; } }
+
+@media (prefers-color-scheme: dark) { #scroll_marker { border-color: #333; } }
+
+#scroll_marker .marker { background: #ccc; position: absolute; min-height: 3px; width: 100%; }
+
+@media (prefers-color-scheme: dark) { #scroll_marker .marker { background: #444; } }
diff --git a/_static/custom.css b/_static/custom.css
new file mode 100644
index 00000000..2a924f1d
--- /dev/null
+++ b/_static/custom.css
@@ -0,0 +1 @@
+/* This file intentionally left blank. */
diff --git a/_static/doctools.js b/_static/doctools.js
new file mode 100644
index 00000000..d06a71d7
--- /dev/null
+++ b/_static/doctools.js
@@ -0,0 +1,156 @@
+/*
+ * doctools.js
+ * ~~~~~~~~~~~
+ *
+ * Base JavaScript utilities for all Sphinx HTML documentation.
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+"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/_static/documentation_options.js b/_static/documentation_options.js
new file mode 100644
index 00000000..7e4c114f
--- /dev/null
+++ b/_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: '.txt',
+    NAVIGATION_WITH_KEYS: false,
+    SHOW_SEARCH_SUMMARY: true,
+    ENABLE_SEARCH_SHORTCUTS: true,
+};
\ No newline at end of file
diff --git a/_static/file.png b/_static/file.png
new file mode 100644
index 0000000000000000000000000000000000000000..a858a410e4faa62ce324d814e4b816fff83a6fb3
GIT binary patch
literal 286
zcmV+(0pb3MP)<h;3K|Lk000e1NJLTq000mG000mO1^@s6AM^iV0002xNkl<Zcmb`G
zgHi?o6ovOGdxdP*AltSE*&JruJwUGI3!FN?xxO>s`hMrGg#P~ix$^RISR_I47Y|r1
z_CyJOe}D1){SET-^Amu_i71Lt6eYfZjRyw@I6OQAIXXHD<M{a4P!N^sPbQKi=?mBx
zoos%BSoiGXjr-;%$QixXMOVNSUNp6L0a1Oz&cgu)wqE?07u5I7qrQIu4Fij)Y3c&0
z@0u_#NH6I?Mk(n;dT}d~^J<WkTLqp|RW-hV56tKpXqu)k@V{?amI+5DOlEU@funz+
kySsbM>fiX^GbOlHe=Ae4>0m)d(f|Me07*qoM6N<$f}vM^LjV8(

literal 0
HcmV?d00001

diff --git a/_static/language_data.js b/_static/language_data.js
new file mode 100644
index 00000000..250f5665
--- /dev/null
+++ b/_static/language_data.js
@@ -0,0 +1,199 @@
+/*
+ * language_data.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * This script contains the language-specific data used by searchtools.js,
+ * namely the list of stopwords, stemmer, scorer and splitter.
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+
+var stopwords = ["a", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", "into", "is", "it", "near", "no", "not", "of", "on", "or", "such", "that", "the", "their", "then", "there", "these", "they", "this", "to", "was", "will", "with"];
+
+
+/* Non-minified version is copied as a separate JS file, is available */
+
+/**
+ * Porter Stemmer
+ */
+var Stemmer = function() {
+
+  var step2list = {
+    ational: 'ate',
+    tional: 'tion',
+    enci: 'ence',
+    anci: 'ance',
+    izer: 'ize',
+    bli: 'ble',
+    alli: 'al',
+    entli: 'ent',
+    eli: 'e',
+    ousli: 'ous',
+    ization: 'ize',
+    ation: 'ate',
+    ator: 'ate',
+    alism: 'al',
+    iveness: 'ive',
+    fulness: 'ful',
+    ousness: 'ous',
+    aliti: 'al',
+    iviti: 'ive',
+    biliti: 'ble',
+    logi: 'log'
+  };
+
+  var step3list = {
+    icate: 'ic',
+    ative: '',
+    alize: 'al',
+    iciti: 'ic',
+    ical: 'ic',
+    ful: '',
+    ness: ''
+  };
+
+  var c = "[^aeiou]";          // consonant
+  var v = "[aeiouy]";          // vowel
+  var C = c + "[^aeiouy]*";    // consonant sequence
+  var V = v + "[aeiou]*";      // vowel sequence
+
+  var mgr0 = "^(" + C + ")?" + V + C;                      // [C]VC... is m>0
+  var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$";    // [C]VC[V] is m=1
+  var mgr1 = "^(" + C + ")?" + V + C + V + C;              // [C]VCVC... is m>1
+  var s_v   = "^(" + C + ")?" + v;                         // vowel in stem
+
+  this.stemWord = function (w) {
+    var stem;
+    var suffix;
+    var firstch;
+    var origword = w;
+
+    if (w.length < 3)
+      return w;
+
+    var re;
+    var re2;
+    var re3;
+    var re4;
+
+    firstch = w.substr(0,1);
+    if (firstch == "y")
+      w = firstch.toUpperCase() + w.substr(1);
+
+    // Step 1a
+    re = /^(.+?)(ss|i)es$/;
+    re2 = /^(.+?)([^s])s$/;
+
+    if (re.test(w))
+      w = w.replace(re,"$1$2");
+    else if (re2.test(w))
+      w = w.replace(re2,"$1$2");
+
+    // Step 1b
+    re = /^(.+?)eed$/;
+    re2 = /^(.+?)(ed|ing)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      re = new RegExp(mgr0);
+      if (re.test(fp[1])) {
+        re = /.$/;
+        w = w.replace(re,"");
+      }
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1];
+      re2 = new RegExp(s_v);
+      if (re2.test(stem)) {
+        w = stem;
+        re2 = /(at|bl|iz)$/;
+        re3 = new RegExp("([^aeiouylsz])\\1$");
+        re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+        if (re2.test(w))
+          w = w + "e";
+        else if (re3.test(w)) {
+          re = /.$/;
+          w = w.replace(re,"");
+        }
+        else if (re4.test(w))
+          w = w + "e";
+      }
+    }
+
+    // Step 1c
+    re = /^(.+?)y$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(s_v);
+      if (re.test(stem))
+        w = stem + "i";
+    }
+
+    // Step 2
+    re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step2list[suffix];
+    }
+
+    // Step 3
+    re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      suffix = fp[2];
+      re = new RegExp(mgr0);
+      if (re.test(stem))
+        w = stem + step3list[suffix];
+    }
+
+    // Step 4
+    re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
+    re2 = /^(.+?)(s|t)(ion)$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      if (re.test(stem))
+        w = stem;
+    }
+    else if (re2.test(w)) {
+      var fp = re2.exec(w);
+      stem = fp[1] + fp[2];
+      re2 = new RegExp(mgr1);
+      if (re2.test(stem))
+        w = stem;
+    }
+
+    // Step 5
+    re = /^(.+?)e$/;
+    if (re.test(w)) {
+      var fp = re.exec(w);
+      stem = fp[1];
+      re = new RegExp(mgr1);
+      re2 = new RegExp(meq1);
+      re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
+      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
+        w = stem;
+    }
+    re = /ll$/;
+    re2 = new RegExp(mgr1);
+    if (re.test(w) && re2.test(w)) {
+      re = /.$/;
+      w = w.replace(re,"");
+    }
+
+    // and turn initial Y back to y
+    if (firstch == "y")
+      w = firstch.toLowerCase() + w.substr(1);
+    return w;
+  }
+}
+
diff --git a/_static/minus.png b/_static/minus.png
new file mode 100644
index 0000000000000000000000000000000000000000..d96755fdaf8bb2214971e0db9c1fd3077d7c419d
GIT binary patch
literal 90
zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu=nj
kDsEF_5m^0CR;1wuP-*O&G^0G}KYk!hp00i_>zopr08q^qX#fBK

literal 0
HcmV?d00001

diff --git a/_static/plus.png b/_static/plus.png
new file mode 100644
index 0000000000000000000000000000000000000000..7107cec93a979b9a5f64843235a16651d563ce2d
GIT binary patch
literal 90
zcmeAS@N?(olHy`uVBq!ia0vp^+#t*WBp7;*Yy1LIik>cxAr*|t7R?Mi>2?kWtu>-2
m3q%Vub%g%s<8sJhVPMczOq}xhg9DJoz~JfX=d#Wzp$Pyb1r*Kz

literal 0
HcmV?d00001

diff --git a/_static/pygments.css b/_static/pygments.css
new file mode 100644
index 00000000..04a41742
--- /dev/null
+++ b/_static/pygments.css
@@ -0,0 +1,84 @@
+pre { line-height: 125%; }
+td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
+td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
+.highlight .hll { background-color: #ffffcc }
+.highlight { background: #f8f8f8; }
+.highlight .c { color: #8f5902; font-style: italic } /* Comment */
+.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
+.highlight .g { color: #000000 } /* Generic */
+.highlight .k { color: #004461; font-weight: bold } /* Keyword */
+.highlight .l { color: #000000 } /* Literal */
+.highlight .n { color: #000000 } /* Name */
+.highlight .o { color: #582800 } /* Operator */
+.highlight .x { color: #000000 } /* Other */
+.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
+.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
+.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
+.highlight .cp { color: #8f5902 } /* Comment.Preproc */
+.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
+.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
+.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
+.highlight .gd { color: #a40000 } /* Generic.Deleted */
+.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
+.highlight .ges { color: #000000 } /* Generic.EmphStrong */
+.highlight .gr { color: #ef2929 } /* Generic.Error */
+.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.highlight .gi { color: #00A000 } /* Generic.Inserted */
+.highlight .go { color: #888888 } /* Generic.Output */
+.highlight .gp { color: #745334 } /* Generic.Prompt */
+.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
+.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
+.highlight .kc { color: #004461; font-weight: bold } /* Keyword.Constant */
+.highlight .kd { color: #004461; font-weight: bold } /* Keyword.Declaration */
+.highlight .kn { color: #004461; font-weight: bold } /* Keyword.Namespace */
+.highlight .kp { color: #004461; font-weight: bold } /* Keyword.Pseudo */
+.highlight .kr { color: #004461; font-weight: bold } /* Keyword.Reserved */
+.highlight .kt { color: #004461; font-weight: bold } /* Keyword.Type */
+.highlight .ld { color: #000000 } /* Literal.Date */
+.highlight .m { color: #990000 } /* Literal.Number */
+.highlight .s { color: #4e9a06 } /* Literal.String */
+.highlight .na { color: #c4a000 } /* Name.Attribute */
+.highlight .nb { color: #004461 } /* Name.Builtin */
+.highlight .nc { color: #000000 } /* Name.Class */
+.highlight .no { color: #000000 } /* Name.Constant */
+.highlight .nd { color: #888888 } /* Name.Decorator */
+.highlight .ni { color: #ce5c00 } /* Name.Entity */
+.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
+.highlight .nf { color: #000000 } /* Name.Function */
+.highlight .nl { color: #f57900 } /* Name.Label */
+.highlight .nn { color: #000000 } /* Name.Namespace */
+.highlight .nx { color: #000000 } /* Name.Other */
+.highlight .py { color: #000000 } /* Name.Property */
+.highlight .nt { color: #004461; font-weight: bold } /* Name.Tag */
+.highlight .nv { color: #000000 } /* Name.Variable */
+.highlight .ow { color: #004461; font-weight: bold } /* Operator.Word */
+.highlight .pm { color: #000000; font-weight: bold } /* Punctuation.Marker */
+.highlight .w { color: #f8f8f8 } /* Text.Whitespace */
+.highlight .mb { color: #990000 } /* Literal.Number.Bin */
+.highlight .mf { color: #990000 } /* Literal.Number.Float */
+.highlight .mh { color: #990000 } /* Literal.Number.Hex */
+.highlight .mi { color: #990000 } /* Literal.Number.Integer */
+.highlight .mo { color: #990000 } /* Literal.Number.Oct */
+.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
+.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
+.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
+.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
+.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
+.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
+.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
+.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
+.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
+.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
+.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
+.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
+.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
+.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #000000 } /* Name.Function.Magic */
+.highlight .vc { color: #000000 } /* Name.Variable.Class */
+.highlight .vg { color: #000000 } /* Name.Variable.Global */
+.highlight .vi { color: #000000 } /* Name.Variable.Instance */
+.highlight .vm { color: #000000 } /* Name.Variable.Magic */
+.highlight .il { color: #990000 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/_static/searchtools.js b/_static/searchtools.js
new file mode 100644
index 00000000..7918c3fa
--- /dev/null
+++ b/_static/searchtools.js
@@ -0,0 +1,574 @@
+/*
+ * searchtools.js
+ * ~~~~~~~~~~~~~~~~
+ *
+ * Sphinx JavaScript utilities for the full-text search.
+ *
+ * :copyright: Copyright 2007-2023 by the Sphinx team, see AUTHORS.
+ * :license: BSD, see LICENSE for details.
+ *
+ */
+"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] = 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,
+  };
+}
+
+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 _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] = item;
+
+  let listItem = document.createElement("li");
+  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 = title;
+  if (descr) {
+    listItem.appendChild(document.createElement("span")).innerHTML =
+      " (" + descr + ")";
+    // highlight search terms in the description
+    if (SPHINX_HIGHLIGHT_ENABLED)  // 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)
+          );
+        // highlight search terms in the summary
+        if (SPHINX_HIGHLIGHT_ENABLED)  // 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 = _(
+      `Search finished, found ${resultCount} page(s) matching the search query.`
+    );
+};
+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);
+};
+
+/**
+ * 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) => {
+    const htmlElement = new DOMParser().parseFromString(htmlString, 'text/html');
+    htmlElement.querySelectorAll(".headerlink").forEach((el) => { el.remove() });
+    const docContent = htmlElement.querySelector('[role="main"]');
+    if (docContent !== undefined) return docContent.textContent;
+    console.warn(
+      "Content block not found. Sphinx search tries to obtain it via '[role=main]'. Could you 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.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);
+  },
+
+  /**
+   * execute search (requires search index to be loaded)
+   */
+  query: (query) => {
+    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;
+
+    // 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 array is from language_data.js
+      if (
+        stopwords.indexOf(queryTermLower) !== -1 ||
+        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) {  // 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]);
+
+    // array of [docname, title, anchor, descr, score, filename]
+    let results = [];
+    _removeChildren(document.getElementById("search-progress"));
+
+    const queryLower = query.toLowerCase();
+    for (const [title, foundTitles] of Object.entries(allTitles)) {
+      if (title.toLowerCase().includes(queryLower) && (queryLower.length >= title.length/2)) {
+        for (const [file, id] of foundTitles) {
+          let score = Math.round(100 * queryLower.length / title.length)
+          results.push([
+            docNames[file],
+            titles[file] !== title ? `${titles[file]} > ${title}` : title,
+            id !== null ? "#" + id : "",
+            null,
+            score,
+            filenames[file],
+          ]);
+        }
+      }
+    }
+
+    // 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] of foundEntries) {
+          let score = Math.round(100 * queryLower.length / entry.length)
+          results.push([
+            docNames[file],
+            titles[file],
+            id ? "#" + id : "",
+            null,
+            score,
+            filenames[file],
+          ]);
+        }
+      }
+    }
+
+    // lookup as object
+    objectTerms.forEach((term) =>
+      results.push(...Search.performObjectSearch(term, objectTerms))
+    );
+
+    // lookup as search terms in fulltext
+    results.push(...Search.performTermsSearch(searchTerms, excludedTerms));
+
+    // let the scorer override scores with a custom scoring function
+    if (Scorer.score) results.forEach((item) => (item[4] = Scorer.score(item)));
+
+    // now sort the results by score (in opposite order of appearance, since the
+    // display function below uses pop() to retrieve items) and then
+    // alphabetically
+    results.sort((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;
+    });
+
+    // 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;
+    }, []);
+
+    results = results.reverse();
+
+    // 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]],
+      ]);
+    };
+    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 = [];
+      const arr = [
+        { files: terms[word], score: Scorer.term },
+        { files: titleTerms[word], score: Scorer.title },
+      ];
+      // add support for partial matches
+      if (word.length > 2) {
+        const escapedWord = _escapeRegExp(word);
+        Object.keys(terms).forEach((term) => {
+          if (term.match(escapedWord) && !terms[word])
+            arr.push({ files: terms[term], score: Scorer.partialTerm });
+        });
+        Object.keys(titleTerms).forEach((term) => {
+          if (term.match(escapedWord) && !titleTerms[word])
+            arr.push({ files: titleTerms[word], 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, {});
+          scoreMap.get(file)[word] = record.score;
+        });
+      });
+
+      // create the mapping
+      files.forEach((file) => {
+        if (fileMap.has(file) && fileMap.get(file).indexOf(word) === -1)
+          fileMap.get(file).push(word);
+        else fileMap.set(file, [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)[w]));
+      // add result to the result list
+      results.push([
+        docNames[file],
+        titles[file],
+        "",
+        null,
+        score,
+        filenames[file],
+      ]);
+    }
+    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) => {
+    const text = Search.htmlToText(htmlText);
+    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/_static/sphinx_highlight.js b/_static/sphinx_highlight.js
new file mode 100644
index 00000000..8a96c69a
--- /dev/null
+++ b/_static/sphinx_highlight.js
@@ -0,0 +1,154 @@
+/* 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")
+    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/coverage.html b/coverage.html
new file mode 100644
index 00000000..524be95d
--- /dev/null
+++ b/coverage.html
@@ -0,0 +1,112 @@
+<!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>Code Coverage &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos" href="modules.html" />
+    <link rel="prev" title="Neural Operators for Helmholtz Equation" href="index.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="code-coverage">
+<h1>Code Coverage<a class="headerlink" href="#code-coverage" title="Link to this heading">¶</a></h1>
+<blockquote>
+<div><p>For an in detail report on the code coverage <a class="reference external" href="_static/codecov/index.html">click here</a>.</p>
+</div></blockquote>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Code Coverage</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">nos</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+      <li>Previous: <a href="index.html" title="previous chapter">Neural Operators for Helmholtz Equation</a></li>
+      <li>Next: <a href="modules.html" title="next chapter">nos</a></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/coverage.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/examples.html b/examples.html
new file mode 100644
index 00000000..15a03b37
--- /dev/null
+++ b/examples.html
@@ -0,0 +1,107 @@
+<!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>Examples &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="prev" title="nos.utils package" href="nos.utils.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="examples">
+<h1>Examples<a class="headerlink" href="#examples" title="Link to this heading">¶</a></h1>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">nos</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+      <li>Previous: <a href="nos.utils.html" title="previous chapter">nos.utils package</a></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/examples.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/genindex.html b/genindex.html
new file mode 100644
index 00000000..22e12067
--- /dev/null
+++ b/genindex.html
@@ -0,0 +1,1155 @@
+<!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; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+
+<h1 id="index">Index</h1>
+
+<div class="genindex-jumpbox">
+ <a href="#_"><strong>_</strong></a>
+ | <a href="#B"><strong>B</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="#G"><strong>G</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="#N"><strong>N</strong></a>
+ | <a href="#O"><strong>O</strong></a>
+ | <a href="#P"><strong>P</strong></a>
+ | <a href="#R"><strong>R</strong></a>
+ | <a href="#S"><strong>S</strong></a>
+ | <a href="#T"><strong>T</strong></a>
+ | <a href="#U"><strong>U</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="nos.metrics.html#nos.metrics.Metric.__call__">__call__() (nos.metrics.Metric method)</a>
+
+      <ul>
+        <li><a href="nos.metrics.html#nos.metrics.metric.Metric.__call__">(nos.metrics.metric.Metric method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="B">B</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.benchmarks.html#nos.benchmarks.Benchmark">Benchmark (class in nos.benchmarks)</a>
+
+      <ul>
+        <li><a href="nos.benchmarks.html#nos.benchmarks.benchmark.Benchmark">(class in nos.benchmarks.benchmark)</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="nos.plots.html#nos.plots.data.ModelData.checkpoint">checkpoint (nos.plots.data.ModelData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.ModelData.checkpoint">(nos.plots.ModelData attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.data.RunData.choices">choices (nos.plots.data.RunData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.RunData.choices">(nos.plots.RunData attribute)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.plots.html#nos.plots.data.MultiRunData.config">config (nos.plots.data.MultiRunData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.MultiRunData.config">(nos.plots.MultiRunData attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.indicator_function.html#nos.data.indicator_function.CShape">CShape (class in nos.data.indicator_function)</a>
+
+      <ul>
+        <li><a href="nos.data.indicator_function.html#nos.data.indicator_function.c_shape.CShape">(class in nos.data.indicator_function.c_shape)</a>
+</li>
+      </ul></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="nos.utils.html#nos.utils.dataclass_to_dict">dataclass_to_dict() (in module nos.utils)</a>
+
+      <ul>
+        <li><a href="nos.utils.html#nos.utils.nested_dataclass_to_dict.dataclass_to_dict">(in module nos.utils.nested_dataclass_to_dict)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.DeepDotOperator">DeepDotOperator (class in nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.deep_dot_operator.DeepDotOperator">(class in nos.operators.deep_dot_operator)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.DeepNeuralOperator">DeepNeuralOperator (class in nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.deep_neural_operator.DeepNeuralOperator">(class in nos.operators.deep_neural_operator)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.operators.html#nos.operators.DeepOFNO">DeepOFNO (class in nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.deep_o_fno.DeepOFNO">(class in nos.operators.deep_o_fno)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.DeepONet">DeepONet (class in nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.deep_o_net.DeepONet">(class in nos.operators.deep_o_net)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.deep_root_operator.DeepRootOperator">DeepRootOperator (class in nos.operators.deep_root_operator)</a>
+</li>
+      <li><a href="nos.operators.html#nos.operators.deserialize">deserialize() (in module nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.utils.deserialize">(in module nos.operators.utils)</a>
+</li>
+      </ul></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="nos.plots.html#nos.plots.utils.eval_operator">eval_operator() (in module nos.plots.utils)</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="nos.networks.html#nos.networks.ResBlock.forward">forward() (nos.networks.ResBlock method)</a>
+
+      <ul>
+        <li><a href="nos.networks.html#nos.networks.residual.ResBlock.forward">(nos.networks.residual.ResBlock method)</a>
+</li>
+        <li><a href="nos.networks.html#nos.networks.residual.ResNet.forward">(nos.networks.residual.ResNet method)</a>
+</li>
+        <li><a href="nos.networks.html#nos.networks.ResNet.forward">(nos.networks.ResNet method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.deep_dot_operator.DeepDotOperator.forward">(nos.operators.deep_dot_operator.DeepDotOperator method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.deep_neural_operator.DeepNeuralOperator.forward">(nos.operators.deep_neural_operator.DeepNeuralOperator method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.deep_o_fno.DeepOFNO.forward">(nos.operators.deep_o_fno.DeepOFNO method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.deep_o_net.MYDeepONet.forward">(nos.operators.deep_o_net.MYDeepONet method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.deep_root_operator.DeepRootOperator.forward">(nos.operators.deep_root_operator.DeepRootOperator method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.DeepDotOperator.forward">(nos.operators.DeepDotOperator method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.DeepNeuralOperator.forward">(nos.operators.DeepNeuralOperator method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.DeepOFNO.forward">(nos.operators.DeepOFNO method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator.forward">(nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator method)</a>
+</li>
+        <li><a href="nos.operators.html#nos.operators.MeanStackNeuralOperator.forward">(nos.operators.MeanStackNeuralOperator method)</a>
+</li>
+        <li><a href="nos.preprocessing.html#nos.preprocessing.low_pass_filter.LowPassFilter1D.forward">(nos.preprocessing.low_pass_filter.LowPassFilter1D method)</a>
+</li>
+        <li><a href="nos.preprocessing.html#nos.preprocessing.LowPassFilter1D.forward">(nos.preprocessing.LowPassFilter1D method)</a>
+</li>
+        <li><a href="nos.transforms.html#nos.transforms.MinMaxScale.forward">(nos.transforms.MinMaxScale method)</a>
+</li>
+        <li><a href="nos.transforms.html#nos.transforms.scaling.MinMaxScale.forward">(nos.transforms.scaling.MinMaxScale method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.operators.html#nos.operators.FourierNeuralOperator">FourierNeuralOperator (class in nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.fourier_neural_operator.FourierNeuralOperator">(class in nos.operators.fourier_neural_operator)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.data.ModelData.from_dir">from_dir() (nos.plots.data.ModelData class method)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.data.MultiRunData.from_dir">(nos.plots.data.MultiRunData class method)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.data.RunData.from_dir">(nos.plots.data.RunData class method)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.ModelData.from_dir">(nos.plots.ModelData class method)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.MultiRunData.from_dir">(nos.plots.MultiRunData class method)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.RunData.from_dir">(nos.plots.RunData class method)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.from_json">from_json() (in module nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.utils.from_json">(in module nos.operators.utils)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.from_pt">from_pt() (in module nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.utils.from_pt">(in module nos.operators.utils)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="G">G</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_wave.gaussian_modulated_sine_encoding">gaussian_modulated_sine_encoding() (in module nos.data.transmission_loss.transmission_loss_wave)</a>
+</li>
+      <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_n_unique">get_n_unique() (in module nos.data.transmission_loss)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_n_unique">(in module nos.data.transmission_loss.transmission_loss)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_tl_compact">get_tl_compact() (in module nos.data.transmission_loss)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_compact.get_tl_compact">(in module nos.data.transmission_loss.transmission_loss_compact)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_tl_frame">get_tl_frame() (in module nos.data.transmission_loss)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_tl_frame">(in module nos.data.transmission_loss.transmission_loss)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_tl_from_path">get_tl_from_path() (in module nos.data.transmission_loss)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_tl_from_path">(in module nos.data.transmission_loss.transmission_loss)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_transformations">get_transformations() (in module nos.data.transmission_loss)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_transformations">(in module nos.data.transmission_loss.transmission_loss)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_unique_crystals">get_unique_crystals() (in module nos.data.transmission_loss)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_unique_crystals">(in module nos.data.transmission_loss.transmission_loss)</a>
+</li>
+      </ul></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="nos.data.indicator_function.html#nos.data.indicator_function.IndicatorTLDataset">IndicatorTLDataset (class in nos.data.indicator_function)</a>
+
+      <ul>
+        <li><a href="nos.data.indicator_function.html#nos.data.indicator_function.indicator_to_tl.IndicatorTLDataset">(class in nos.data.indicator_function.indicator_to_tl)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.operators.html#nos.operators.NeuralOperator.info">info() (nos.operators.NeuralOperator method)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.operator.NeuralOperator.info">(nos.operators.operator.NeuralOperator method)</a>
+</li>
+      </ul></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="nos.metrics.html#nos.metrics.L1Error">L1Error (class in nos.metrics)</a>
+
+      <ul>
+        <li><a href="nos.metrics.html#nos.metrics.error_metrics.L1Error">(class in nos.metrics.error_metrics)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.metrics.html#nos.metrics.error_metrics.Loss">Loss (class in nos.metrics.error_metrics)</a>
+</li>
+      <li><a href="nos.preprocessing.html#nos.preprocessing.LowPassFilter1D">LowPassFilter1D (class in nos.preprocessing)</a>
+
+      <ul>
+        <li><a href="nos.preprocessing.html#nos.preprocessing.low_pass_filter.LowPassFilter1D">(class in nos.preprocessing.low_pass_filter)</a>
+</li>
+      </ul></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><a href="nos.operators.html#nos.operators.MeanStackNeuralOperator">MeanStackNeuralOperator (class in nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator">(class in nos.operators.mean_stack_neural_operator)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.metrics.html#nos.metrics.Metric">Metric (class in nos.metrics)</a>
+
+      <ul>
+        <li><a href="nos.metrics.html#nos.metrics.metric.Metric">(class in nos.metrics.metric)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.benchmarks.html#nos.benchmarks.Benchmark.metrics">metrics (nos.benchmarks.Benchmark attribute)</a>
+
+      <ul>
+        <li><a href="nos.benchmarks.html#nos.benchmarks.benchmark.Benchmark.metrics">(nos.benchmarks.benchmark.Benchmark attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.transforms.html#nos.transforms.MinMaxScale">MinMaxScale (class in nos.transforms)</a>
+
+      <ul>
+        <li><a href="nos.transforms.html#nos.transforms.scaling.MinMaxScale">(class in nos.transforms.scaling)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.ModelData">ModelData (class in nos.plots)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.data.ModelData">(class in nos.plots.data)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.data.RunData.models">models (nos.plots.data.RunData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.RunData.models">(nos.plots.RunData attribute)</a>
+</li>
+      </ul></li>
+      <li>
+    module
+
+      <ul>
+        <li><a href="nos.html#module-nos">nos</a>
+</li>
+        <li><a href="nos.benchmarks.html#module-nos.benchmarks">nos.benchmarks</a>
+</li>
+        <li><a href="nos.benchmarks.html#module-nos.benchmarks.benchmark">nos.benchmarks.benchmark</a>
+</li>
+        <li><a href="nos.data.html#module-nos.data">nos.data</a>
+</li>
+        <li><a href="nos.data.indicator_function.html#module-nos.data.indicator_function">nos.data.indicator_function</a>
+</li>
+        <li><a href="nos.data.indicator_function.html#module-nos.data.indicator_function.c_shape">nos.data.indicator_function.c_shape</a>
+</li>
+        <li><a href="nos.data.indicator_function.html#module-nos.data.indicator_function.indicator_to_tl">nos.data.indicator_function.indicator_to_tl</a>
+</li>
+        <li><a href="nos.data.indicator_function.html#module-nos.data.indicator_function.params_to_indicator">nos.data.indicator_function.params_to_indicator</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss">nos.data.transmission_loss</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss">nos.data.transmission_loss.transmission_loss</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_compact">nos.data.transmission_loss.transmission_loss_compact</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_exp">nos.data.transmission_loss.transmission_loss_exp</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_wave">nos.data.transmission_loss.transmission_loss_wave</a>
+</li>
+        <li><a href="nos.metrics.html#module-nos.metrics">nos.metrics</a>
+</li>
+        <li><a href="nos.metrics.html#module-nos.metrics.error_metrics">nos.metrics.error_metrics</a>
+</li>
+        <li><a href="nos.metrics.html#module-nos.metrics.metric">nos.metrics.metric</a>
+</li>
+        <li><a href="nos.metrics.html#module-nos.metrics.operator_metrics">nos.metrics.operator_metrics</a>
+</li>
+        <li><a href="nos.networks.html#module-nos.networks">nos.networks</a>
+</li>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention">nos.networks.attention</a>
+</li>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention.cross_attention">nos.networks.attention.cross_attention</a>
+</li>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention.linear_cross_attention">nos.networks.attention.linear_cross_attention</a>
+</li>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention.linear_self_attention">nos.networks.attention.linear_self_attention</a>
+</li>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention.self_attention">nos.networks.attention.self_attention</a>
+</li>
+        <li><a href="nos.networks.html#module-nos.networks.residual">nos.networks.residual</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators">nos.operators</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.deep_dot_operator">nos.operators.deep_dot_operator</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.deep_neural_operator">nos.operators.deep_neural_operator</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.deep_o_fno">nos.operators.deep_o_fno</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.deep_o_net">nos.operators.deep_o_net</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.deep_root_operator">nos.operators.deep_root_operator</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.fourier_neural_operator">nos.operators.fourier_neural_operator</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.mean_stack_neural_operator">nos.operators.mean_stack_neural_operator</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.operator">nos.operators.operator</a>
+</li>
+        <li><a href="nos.operators.html#module-nos.operators.utils">nos.operators.utils</a>
+</li>
+        <li><a href="nos.plots.html#module-nos.plots">nos.plots</a>
+</li>
+        <li><a href="nos.plots.html#module-nos.plots.data">nos.plots.data</a>
+</li>
+        <li><a href="nos.plots.html#module-nos.plots.metrics">nos.plots.metrics</a>
+</li>
+        <li><a href="nos.plots.html#module-nos.plots.training_curves">nos.plots.training_curves</a>
+</li>
+        <li><a href="nos.plots.html#module-nos.plots.transmission_loss">nos.plots.transmission_loss</a>
+</li>
+        <li><a href="nos.plots.html#module-nos.plots.utils">nos.plots.utils</a>
+</li>
+        <li><a href="nos.preprocessing.html#module-nos.preprocessing">nos.preprocessing</a>
+</li>
+        <li><a href="nos.preprocessing.html#module-nos.preprocessing.low_pass_filter">nos.preprocessing.low_pass_filter</a>
+</li>
+        <li><a href="nos.transforms.html#module-nos.transforms">nos.transforms</a>
+</li>
+        <li><a href="nos.transforms.html#module-nos.transforms.scaling">nos.transforms.scaling</a>
+</li>
+        <li><a href="nos.utils.html#module-nos.utils">nos.utils</a>
+</li>
+        <li><a href="nos.utils.html#module-nos.utils.nested_dataclass_to_dict">nos.utils.nested_dataclass_to_dict</a>
+</li>
+        <li><a href="nos.utils.html#module-nos.utils.unique_id">nos.utils.unique_id</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.metrics.html#nos.metrics.MSError">MSError (class in nos.metrics)</a>
+
+      <ul>
+        <li><a href="nos.metrics.html#nos.metrics.error_metrics.MSError">(class in nos.metrics.error_metrics)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.MultiRunData">MultiRunData (class in nos.plots)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.data.MultiRunData">(class in nos.plots.data)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.deep_o_net.MYDeepONet">MYDeepONet (class in nos.operators.deep_o_net)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="N">N</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.plots.html#nos.plots.data.ModelData.name">name (nos.plots.data.ModelData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.data.MultiRunData.name">(nos.plots.data.MultiRunData attribute)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.data.RunData.name">(nos.plots.data.RunData attribute)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.ModelData.name">(nos.plots.ModelData attribute)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.MultiRunData.name">(nos.plots.MultiRunData attribute)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.RunData.name">(nos.plots.RunData attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.NeuralOperator">NeuralOperator (class in nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.operator.NeuralOperator">(class in nos.operators.operator)</a>
+</li>
+      </ul></li>
+      <li>
+    nos
+
+      <ul>
+        <li><a href="nos.html#module-nos">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.benchmarks
+
+      <ul>
+        <li><a href="nos.benchmarks.html#module-nos.benchmarks">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.benchmarks.benchmark
+
+      <ul>
+        <li><a href="nos.benchmarks.html#module-nos.benchmarks.benchmark">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data
+
+      <ul>
+        <li><a href="nos.data.html#module-nos.data">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.indicator_function
+
+      <ul>
+        <li><a href="nos.data.indicator_function.html#module-nos.data.indicator_function">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.indicator_function.c_shape
+
+      <ul>
+        <li><a href="nos.data.indicator_function.html#module-nos.data.indicator_function.c_shape">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.indicator_function.indicator_to_tl
+
+      <ul>
+        <li><a href="nos.data.indicator_function.html#module-nos.data.indicator_function.indicator_to_tl">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.indicator_function.params_to_indicator
+
+      <ul>
+        <li><a href="nos.data.indicator_function.html#module-nos.data.indicator_function.params_to_indicator">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.transmission_loss
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.transmission_loss.transmission_loss
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.transmission_loss.transmission_loss_compact
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_compact">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.transmission_loss.transmission_loss_exp
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_exp">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.data.transmission_loss.transmission_loss_wave
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_wave">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.metrics
+
+      <ul>
+        <li><a href="nos.metrics.html#module-nos.metrics">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.metrics.error_metrics
+
+      <ul>
+        <li><a href="nos.metrics.html#module-nos.metrics.error_metrics">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.metrics.metric
+
+      <ul>
+        <li><a href="nos.metrics.html#module-nos.metrics.metric">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.metrics.operator_metrics
+
+      <ul>
+        <li><a href="nos.metrics.html#module-nos.metrics.operator_metrics">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.networks
+
+      <ul>
+        <li><a href="nos.networks.html#module-nos.networks">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.networks.attention
+
+      <ul>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.networks.attention.cross_attention
+
+      <ul>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention.cross_attention">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.networks.attention.linear_cross_attention
+
+      <ul>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention.linear_cross_attention">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.networks.attention.linear_self_attention
+
+      <ul>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention.linear_self_attention">module</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li>
+    nos.networks.attention.self_attention
+
+      <ul>
+        <li><a href="nos.networks.attention.html#module-nos.networks.attention.self_attention">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.networks.residual
+
+      <ul>
+        <li><a href="nos.networks.html#module-nos.networks.residual">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.deep_dot_operator
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.deep_dot_operator">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.deep_neural_operator
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.deep_neural_operator">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.deep_o_fno
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.deep_o_fno">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.deep_o_net
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.deep_o_net">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.deep_root_operator
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.deep_root_operator">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.fourier_neural_operator
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.fourier_neural_operator">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.mean_stack_neural_operator
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.mean_stack_neural_operator">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.operator
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.operator">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.operators.utils
+
+      <ul>
+        <li><a href="nos.operators.html#module-nos.operators.utils">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.plots
+
+      <ul>
+        <li><a href="nos.plots.html#module-nos.plots">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.plots.data
+
+      <ul>
+        <li><a href="nos.plots.html#module-nos.plots.data">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.plots.metrics
+
+      <ul>
+        <li><a href="nos.plots.html#module-nos.plots.metrics">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.plots.training_curves
+
+      <ul>
+        <li><a href="nos.plots.html#module-nos.plots.training_curves">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.plots.transmission_loss
+
+      <ul>
+        <li><a href="nos.plots.html#module-nos.plots.transmission_loss">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.plots.utils
+
+      <ul>
+        <li><a href="nos.plots.html#module-nos.plots.utils">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.preprocessing
+
+      <ul>
+        <li><a href="nos.preprocessing.html#module-nos.preprocessing">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.preprocessing.low_pass_filter
+
+      <ul>
+        <li><a href="nos.preprocessing.html#module-nos.preprocessing.low_pass_filter">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.transforms
+
+      <ul>
+        <li><a href="nos.transforms.html#module-nos.transforms">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.transforms.scaling
+
+      <ul>
+        <li><a href="nos.transforms.html#module-nos.transforms.scaling">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.utils
+
+      <ul>
+        <li><a href="nos.utils.html#module-nos.utils">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.utils.nested_dataclass_to_dict
+
+      <ul>
+        <li><a href="nos.utils.html#module-nos.utils.nested_dataclass_to_dict">module</a>
+</li>
+      </ul></li>
+      <li>
+    nos.utils.unique_id
+
+      <ul>
+        <li><a href="nos.utils.html#module-nos.utils.unique_id">module</a>
+</li>
+      </ul></li>
+      <li><a href="nos.metrics.html#nos.metrics.NumberOfParameters">NumberOfParameters (class in nos.metrics)</a>
+
+      <ul>
+        <li><a href="nos.metrics.html#nos.metrics.operator_metrics.NumberOfParameters">(class in nos.metrics.operator_metrics)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="O">O</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.plots.html#nos.plots.data.ModelData.operator">operator (nos.plots.data.ModelData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.ModelData.operator">(nos.plots.ModelData attribute)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="P">P</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.data.indicator_function.html#nos.data.indicator_function.params_to_indicator.params_to_indicator">params_to_indicator() (in module nos.data.indicator_function.params_to_indicator)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.data.ModelData.path">path (nos.plots.data.ModelData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.data.MultiRunData.path">(nos.plots.data.MultiRunData attribute)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.data.RunData.path">(nos.plots.data.RunData attribute)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.ModelData.path">(nos.plots.ModelData attribute)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.MultiRunData.path">(nos.plots.MultiRunData attribute)</a>
+</li>
+        <li><a href="nos.plots.html#nos.plots.RunData.path">(nos.plots.RunData attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.metrics.plot_all_metrics">plot_all_metrics() (in module nos.plots.metrics)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_ax">plot_ax() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_model_transmission_loss">plot_model_transmission_loss() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.plot_multirun_curves">plot_multirun_curves() (in module nos.plots)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.training_curves.plot_multirun_curves">(in module nos.plots.training_curves)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.plot_multirun_metrics">plot_multirun_metrics() (in module nos.plots)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.metrics.plot_multirun_metrics">(in module nos.plots.metrics)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.plots.html#nos.plots.plot_multirun_transmission_loss">plot_multirun_transmission_loss() (in module nos.plots)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_multirun_transmission_loss">(in module nos.plots.transmission_loss)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.training_curves.plot_run_curves">plot_run_curves() (in module nos.plots.training_curves)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_run_transmission_loss">plot_run_transmission_loss() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_single">plot_single() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_best">plot_transmission_loss_best() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_hist">plot_transmission_loss_hist() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_mean">plot_transmission_loss_mean() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_median">plot_transmission_loss_median() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_qtile">plot_transmission_loss_qtile() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_tile">plot_transmission_loss_tile() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_worst">plot_transmission_loss_worst() (in module nos.plots.transmission_loss)</a>
+</li>
+      <li><a href="nos.plots.html#nos.plots.training_curves.plot_xyz_vs_error">plot_xyz_vs_error() (in module nos.plots.training_curves)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="R">R</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.networks.html#nos.networks.ResBlock">ResBlock (class in nos.networks)</a>
+
+      <ul>
+        <li><a href="nos.networks.html#nos.networks.residual.ResBlock">(class in nos.networks.residual)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.networks.html#nos.networks.ResNet">ResNet (class in nos.networks)</a>
+
+      <ul>
+        <li><a href="nos.networks.html#nos.networks.residual.ResNet">(class in nos.networks.residual)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.data.MultiRunData.results">results (nos.plots.data.MultiRunData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.MultiRunData.results">(nos.plots.MultiRunData attribute)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.plots.html#nos.plots.RunData">RunData (class in nos.plots)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.data.RunData">(class in nos.plots.data)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.data.MultiRunData.runs">runs (nos.plots.data.MultiRunData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.MultiRunData.runs">(nos.plots.MultiRunData attribute)</a>
+</li>
+      </ul></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="nos.operators.html#nos.operators.serialize">serialize() (in module nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.utils.serialize">(in module nos.operators.utils)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_wave.simple_sine_encoding">simple_sine_encoding() (in module nos.data.transmission_loss.transmission_loss_wave)</a>
+</li>
+      <li><a href="nos.metrics.html#nos.metrics.SpeedOfEvaluation">SpeedOfEvaluation (class in nos.metrics)</a>
+
+      <ul>
+        <li><a href="nos.metrics.html#nos.metrics.operator_metrics.SpeedOfEvaluation">(class in nos.metrics.operator_metrics)</a>
+</li>
+      </ul></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="nos.benchmarks.html#nos.benchmarks.Benchmark.test_set">test_set (nos.benchmarks.Benchmark attribute)</a>
+
+      <ul>
+        <li><a href="nos.benchmarks.html#nos.benchmarks.benchmark.Benchmark.test_set">(nos.benchmarks.benchmark.Benchmark attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.html#nos.data.TLDataset">TLDataset (class in nos.data)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.TLDataset">(class in nos.data.transmission_loss)</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.TLDataset">(class in nos.data.transmission_loss.transmission_loss)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.html#nos.data.TLDatasetCompact">TLDatasetCompact (class in nos.data)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.TLDatasetCompact">(class in nos.data.transmission_loss)</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_compact.TLDatasetCompact">(class in nos.data.transmission_loss.transmission_loss_compact)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.html#nos.data.TLDatasetCompactExp">TLDatasetCompactExp (class in nos.data)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.TLDatasetCompactExp">(class in nos.data.transmission_loss)</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_exp.TLDatasetCompactExp">(class in nos.data.transmission_loss.transmission_loss_exp)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.data.html#nos.data.TLDatasetCompactWave">TLDatasetCompactWave (class in nos.data)</a>
+
+      <ul>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.TLDatasetCompactWave">(class in nos.data.transmission_loss)</a>
+</li>
+        <li><a href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_wave.TLDatasetCompactWave">(class in nos.data.transmission_loss.transmission_loss_wave)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.operators.html#nos.operators.to_json">to_json() (in module nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.utils.to_json">(in module nos.operators.utils)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.operators.html#nos.operators.to_pt">to_pt() (in module nos.operators)</a>
+
+      <ul>
+        <li><a href="nos.operators.html#nos.operators.utils.to_pt">(in module nos.operators.utils)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.benchmarks.html#nos.benchmarks.Benchmark.train_set">train_set (nos.benchmarks.Benchmark attribute)</a>
+
+      <ul>
+        <li><a href="nos.benchmarks.html#nos.benchmarks.benchmark.Benchmark.train_set">(nos.benchmarks.benchmark.Benchmark attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.data.RunData.training">training (nos.plots.data.RunData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.RunData.training">(nos.plots.RunData attribute)</a>
+</li>
+      </ul></li>
+      <li><a href="nos.plots.html#nos.plots.data.RunData.training_config">training_config (nos.plots.data.RunData attribute)</a>
+
+      <ul>
+        <li><a href="nos.plots.html#nos.plots.RunData.training_config">(nos.plots.RunData attribute)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+<h2 id="U">U</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.transforms.html#nos.transforms.MinMaxScale.undo">undo() (nos.transforms.MinMaxScale method)</a>
+
+      <ul>
+        <li><a href="nos.transforms.html#nos.transforms.scaling.MinMaxScale.undo">(nos.transforms.scaling.MinMaxScale method)</a>
+</li>
+      </ul></li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="nos.utils.html#nos.utils.UniqueId">UniqueId (class in nos.utils)</a>
+
+      <ul>
+        <li><a href="nos.utils.html#nos.utils.unique_id.UniqueId">(class in nos.utils.unique_id)</a>
+</li>
+      </ul></li>
+  </ul></td>
+</tr></table>
+
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">nos</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/index.html b/index.html
new file mode 100644
index 00000000..a47e5309
--- /dev/null
+++ b/index.html
@@ -0,0 +1,133 @@
+<!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>Neural Operators for Helmholtz Equation &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Code Coverage" href="coverage.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="neural-operators-for-helmholtz-equation">
+<h1>Neural Operators for Helmholtz Equation<a class="headerlink" href="#neural-operators-for-helmholtz-equation" title="Link to this heading">¶</a></h1>
+<p>Welcome to the documentation for the Neural Operators for Helmholtz Equation project! This project focuses on the application of advanced neural operator techniques to solve the Helmholtz equation in various parameterized geometries. The approach integrates deep learning with physical modeling of domains.</p>
+<section id="contents">
+<h2>Contents<a class="headerlink" href="#contents" title="Link to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">nos</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+</div>
+</section>
+<section id="introduction">
+<h2>Introduction<a class="headerlink" href="#introduction" title="Link to this heading">¶</a></h2>
+<p>The Helmholtz equation is a fundamental partial differential equation in physics, particularly in the fields of acoustics, electromagnetics, and quantum mechanics. In this project, we develop and utilize neural operators, a form of deep learning model, to solve the Helmholtz equation across different parameterized geometries. This approach aims to overcome the limitations of traditional numerical methods, offering speed and flexibility for complex geometries.</p>
+</section>
+<section id="api-reference">
+<h2>API Reference<a class="headerlink" href="#api-reference" title="Link to this heading">¶</a></h2>
+<p>The <a class="reference internal" href="modules.html"><span class="doc">nos</span></a> section offers detailed descriptions of the functions, classes, and methods available in this project.</p>
+</section>
+<section id="examples">
+<h2>Examples<a class="headerlink" href="#examples" title="Link to this heading">¶</a></h2>
+<p>Explore practical applications and see the neural operators in action in the <a class="reference internal" href="examples.html"><span class="doc">Examples</span></a> section.</p>
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="#">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">nos</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="#">Documentation overview</a><ul>
+      <li>Next: <a href="coverage.html" title="next chapter">Code Coverage</a></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/index.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/modules.html b/modules.html
new file mode 100644
index 00000000..85426fc2
--- /dev/null
+++ b/modules.html
@@ -0,0 +1,200 @@
+<!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>nos &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos package" href="nos.html" />
+    <link rel="prev" title="Code Coverage" href="coverage.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos">
+<h1>nos<a class="headerlink" href="#nos" title="Link to this heading">¶</a></h1>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nos.html">nos package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.benchmarks.html">nos.benchmarks package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#module-nos.benchmarks.benchmark">nos.benchmarks.benchmark module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#module-nos.benchmarks">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.html">nos.data package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.html#subpackages">Subpackages</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.html#module-nos.data">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html">nos.metrics package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.metrics.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.metrics.html#module-nos.metrics.error_metrics">nos.metrics.error_metrics module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.metrics.html#module-nos.metrics.metric">nos.metrics.metric module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.metrics.html#module-nos.metrics.operator_metrics">nos.metrics.operator_metrics module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.metrics.html#module-nos.metrics">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.networks.html">nos.networks package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.html#subpackages">Subpackages</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.html#module-nos.networks.residual">nos.networks.residual module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.html#module-nos.networks">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html">nos.operators package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_dot_operator">nos.operators.deep_dot_operator module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_neural_operator">nos.operators.deep_neural_operator module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_o_fno">nos.operators.deep_o_fno module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_o_net">nos.operators.deep_o_net module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_root_operator">nos.operators.deep_root_operator module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.fourier_neural_operator">nos.operators.fourier_neural_operator module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.mean_stack_neural_operator">nos.operators.mean_stack_neural_operator module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.operator">nos.operators.operator module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators.utils">nos.operators.utils module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#module-nos.operators">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html">nos.plots package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#module-nos.plots.data">nos.plots.data module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#module-nos.plots.metrics">nos.plots.metrics module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#module-nos.plots.training_curves">nos.plots.training_curves module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#module-nos.plots.transmission_loss">nos.plots.transmission_loss module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#module-nos.plots.utils">nos.plots.utils module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#module-nos.plots">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.preprocessing.html">nos.preprocessing package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.preprocessing.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.preprocessing.html#module-nos.preprocessing.low_pass_filter">nos.preprocessing.low_pass_filter module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.preprocessing.html#module-nos.preprocessing">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.trainers.html">nos.trainers package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.trainers.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.trainers.html#nos-trainers-average-metric-module">nos.trainers.average_metric module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.trainers.html#nos-trainers-trainer-module">nos.trainers.trainer module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.trainers.html#nos-trainers-util-module">nos.trainers.util module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.trainers.html#module-contents">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.transforms.html">nos.transforms package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.transforms.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.transforms.html#module-nos.transforms.scaling">nos.transforms.scaling module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.transforms.html#module-nos.transforms">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.utils.html">nos.utils package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.utils.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.utils.html#module-nos.utils.nested_dataclass_to_dict">nos.utils.nested_dataclass_to_dict module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.utils.html#module-nos.utils.unique_id">nos.utils.unique_id module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.utils.html#module-nos.utils">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.html#module-nos">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="current reference internal" href="#">nos</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+      <li>Previous: <a href="coverage.html" title="previous chapter">Code Coverage</a></li>
+      <li>Next: <a href="nos.html" title="next chapter">nos package</a></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/modules.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.benchmarks.html b/nos.benchmarks.html
new file mode 100644
index 00000000..e302f66c
--- /dev/null
+++ b/nos.benchmarks.html
@@ -0,0 +1,167 @@
+<!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>nos.benchmarks package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.data package" href="nos.data.html" />
+    <link rel="prev" title="nos package" href="nos.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-benchmarks-package">
+<h1>nos.benchmarks package<a class="headerlink" href="#nos-benchmarks-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.benchmarks.benchmark">
+<span id="nos-benchmarks-benchmark-module"></span><h2>nos.benchmarks.benchmark module<a class="headerlink" href="#module-nos.benchmarks.benchmark" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.benchmarks.benchmark.Benchmark">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.benchmarks.benchmark.</span></span><span class="sig-name descname"><span class="pre">Benchmark</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">train_set:</span> <span class="pre">continuity.data.dataset.OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">test_set:</span> <span class="pre">continuity.data.dataset.OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">metrics:</span> <span class="pre">List[nos.metrics.metric.Metric]</span> <span class="pre">=</span> <span class="pre">&lt;factory&gt;</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.benchmarks.benchmark.Benchmark" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.benchmarks.benchmark.Benchmark.metrics">
+<span class="sig-name descname"><span class="pre">metrics</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="nos.metrics.html#nos.metrics.metric.Metric" title="nos.metrics.metric.Metric"><span class="pre">Metric</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#nos.benchmarks.benchmark.Benchmark.metrics" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.benchmarks.benchmark.Benchmark.test_set">
+<span class="sig-name descname"><span class="pre">test_set</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">OperatorDataset</span></em><a class="headerlink" href="#nos.benchmarks.benchmark.Benchmark.test_set" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.benchmarks.benchmark.Benchmark.train_set">
+<span class="sig-name descname"><span class="pre">train_set</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">OperatorDataset</span></em><a class="headerlink" href="#nos.benchmarks.benchmark.Benchmark.train_set" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.benchmarks">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.benchmarks" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.benchmarks.Benchmark">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.benchmarks.</span></span><span class="sig-name descname"><span class="pre">Benchmark</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">train_set:</span> <span class="pre">continuity.data.dataset.OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">test_set:</span> <span class="pre">continuity.data.dataset.OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">metrics:</span> <span class="pre">List[nos.metrics.metric.Metric]</span> <span class="pre">=</span> <span class="pre">&lt;factory&gt;</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.benchmarks.Benchmark" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.benchmarks.Benchmark.metrics">
+<span class="sig-name descname"><span class="pre">metrics</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="nos.metrics.html#nos.metrics.metric.Metric" title="nos.metrics.metric.Metric"><span class="pre">Metric</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#nos.benchmarks.Benchmark.metrics" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.benchmarks.Benchmark.test_set">
+<span class="sig-name descname"><span class="pre">test_set</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">OperatorDataset</span></em><a class="headerlink" href="#nos.benchmarks.Benchmark.test_set" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.benchmarks.Benchmark.train_set">
+<span class="sig-name descname"><span class="pre">train_set</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">OperatorDataset</span></em><a class="headerlink" href="#nos.benchmarks.Benchmark.train_set" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.html" title="previous chapter">nos package</a></li>
+      <li>Next: <a href="nos.data.html" title="next chapter">nos.data package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.benchmarks.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.data.html b/nos.data.html
new file mode 100644
index 00000000..7a25e288
--- /dev/null
+++ b/nos.data.html
@@ -0,0 +1,215 @@
+<!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>nos.data package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.data.indicator_function package" href="nos.data.indicator_function.html" />
+    <link rel="prev" title="nos.benchmarks package" href="nos.benchmarks.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-data-package">
+<h1>nos.data package<a class="headerlink" href="#nos-data-package" title="Link to this heading">¶</a></h1>
+<section id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Link to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nos.data.indicator_function.html">nos.data.indicator_function package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.indicator_function.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.indicator_function.html#module-nos.data.indicator_function.c_shape">nos.data.indicator_function.c_shape module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.indicator_function.html#nos.data.indicator_function.c_shape.CShape"><code class="docutils literal notranslate"><span class="pre">CShape</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.indicator_function.html#module-nos.data.indicator_function.indicator_to_tl">nos.data.indicator_function.indicator_to_tl module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.indicator_function.html#nos.data.indicator_function.indicator_to_tl.IndicatorTLDataset"><code class="docutils literal notranslate"><span class="pre">IndicatorTLDataset</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.indicator_function.html#module-nos.data.indicator_function.params_to_indicator">nos.data.indicator_function.params_to_indicator module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.indicator_function.html#nos.data.indicator_function.params_to_indicator.params_to_indicator"><code class="docutils literal notranslate"><span class="pre">params_to_indicator()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.indicator_function.html#module-nos.data.indicator_function">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.indicator_function.html#nos.data.indicator_function.CShape"><code class="docutils literal notranslate"><span class="pre">CShape</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.indicator_function.html#nos.data.indicator_function.IndicatorTLDataset"><code class="docutils literal notranslate"><span class="pre">IndicatorTLDataset</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.data.transmission_loss.html">nos.data.transmission_loss package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.transmission_loss.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss">nos.data.transmission_loss.transmission_loss module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.TLDataset"><code class="docutils literal notranslate"><span class="pre">TLDataset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_n_unique"><code class="docutils literal notranslate"><span class="pre">get_n_unique()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_tl_frame"><code class="docutils literal notranslate"><span class="pre">get_tl_frame()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_tl_from_path"><code class="docutils literal notranslate"><span class="pre">get_tl_from_path()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_transformations"><code class="docutils literal notranslate"><span class="pre">get_transformations()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss.get_unique_crystals"><code class="docutils literal notranslate"><span class="pre">get_unique_crystals()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_compact">nos.data.transmission_loss.transmission_loss_compact module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_compact.TLDatasetCompact"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompact</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_compact.get_tl_compact"><code class="docutils literal notranslate"><span class="pre">get_tl_compact()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_exp">nos.data.transmission_loss.transmission_loss_exp module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_exp.TLDatasetCompactExp"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompactExp</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_wave">nos.data.transmission_loss.transmission_loss_wave module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_wave.TLDatasetCompactWave"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompactWave</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_wave.gaussian_modulated_sine_encoding"><code class="docutils literal notranslate"><span class="pre">gaussian_modulated_sine_encoding()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.transmission_loss_wave.simple_sine_encoding"><code class="docutils literal notranslate"><span class="pre">simple_sine_encoding()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.TLDataset"><code class="docutils literal notranslate"><span class="pre">TLDataset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.TLDatasetCompact"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompact</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.TLDatasetCompactExp"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompactExp</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.TLDatasetCompactWave"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompactWave</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_n_unique"><code class="docutils literal notranslate"><span class="pre">get_n_unique()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_tl_compact"><code class="docutils literal notranslate"><span class="pre">get_tl_compact()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_tl_frame"><code class="docutils literal notranslate"><span class="pre">get_tl_frame()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_tl_from_path"><code class="docutils literal notranslate"><span class="pre">get_tl_from_path()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_transformations"><code class="docutils literal notranslate"><span class="pre">get_transformations()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html#nos.data.transmission_loss.get_unique_crystals"><code class="docutils literal notranslate"><span class="pre">get_unique_crystals()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</section>
+<section id="module-nos.data">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.data" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.TLDataset">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.</span></span><span class="sig-name descname"><span class="pre">TLDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.TLDataset" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.TLDatasetCompact">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompact</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.TLDatasetCompact" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, with bigger evaluation space.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.TLDatasetCompactExp">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompactExp</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.TLDatasetCompactExp" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, with bigger evaluation space.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.TLDatasetCompactWave">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompactWave</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path:</span> <span class="pre">~pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples:</span> <span class="pre">int</span> <span class="pre">=</span> <span class="pre">-1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">wave_encoding:</span> <span class="pre">~typing.Callable</span> <span class="pre">=</span> <span class="pre">&lt;function</span> <span class="pre">simple_sine_encoding&gt;</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.TLDatasetCompactWave" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, for use with FNO.</p>
+</dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.benchmarks.html" title="previous chapter">nos.benchmarks package</a></li>
+      <li>Next: <a href="nos.data.indicator_function.html" title="next chapter">nos.data.indicator_function package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.data.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.data.indicator_function.html b/nos.data.indicator_function.html
new file mode 100644
index 00000000..f6b01396
--- /dev/null
+++ b/nos.data.indicator_function.html
@@ -0,0 +1,162 @@
+<!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>nos.data.indicator_function package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.data.transmission_loss package" href="nos.data.transmission_loss.html" />
+    <link rel="prev" title="nos.data package" href="nos.data.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-data-indicator-function-package">
+<h1>nos.data.indicator_function package<a class="headerlink" href="#nos-data-indicator-function-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.data.indicator_function.c_shape">
+<span id="nos-data-indicator-function-c-shape-module"></span><h2>nos.data.indicator_function.c_shape module<a class="headerlink" href="#module-nos.data.indicator_function.c_shape" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.indicator_function.c_shape.CShape">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.indicator_function.c_shape.</span></span><span class="sig-name descname"><span class="pre">CShape</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">outer_radius</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tensor</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">tensor([0.0065])</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inner_radius</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tensor</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">tensor([0.0050])</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">gap_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tensor</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">tensor([0.0040])</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">grid_size</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tensor</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">tensor([0.0220])</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_circle_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1000</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_gap_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.indicator_function.c_shape.CShape" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+</dd></dl>
+
+</section>
+<section id="module-nos.data.indicator_function.indicator_to_tl">
+<span id="nos-data-indicator-function-indicator-to-tl-module"></span><h2>nos.data.indicator_function.indicator_to_tl module<a class="headerlink" href="#module-nos.data.indicator_function.indicator_to_tl" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.indicator_function.indicator_to_tl.IndicatorTLDataset">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.indicator_function.indicator_to_tl.</span></span><span class="sig-name descname"><span class="pre">IndicatorTLDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sampler</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BoxSampler</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_box_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1024</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.indicator_function.indicator_to_tl.IndicatorTLDataset" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+</dd></dl>
+
+</section>
+<section id="module-nos.data.indicator_function.params_to_indicator">
+<span id="nos-data-indicator-function-params-to-indicator-module"></span><h2>nos.data.indicator_function.params_to_indicator module<a class="headerlink" href="#module-nos.data.indicator_function.params_to_indicator" title="Link to this heading">¶</a></h2>
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.indicator_function.params_to_indicator.params_to_indicator">
+<span class="sig-prename descclassname"><span class="pre">nos.data.indicator_function.params_to_indicator.</span></span><span class="sig-name descname"><span class="pre">params_to_indicator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sampler</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BoxSampler</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1024</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">Tensor</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Tensor</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#nos.data.indicator_function.params_to_indicator.params_to_indicator" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.data.indicator_function">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.data.indicator_function" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.indicator_function.CShape">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.indicator_function.</span></span><span class="sig-name descname"><span class="pre">CShape</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">outer_radius</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tensor</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">tensor([0.0065])</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">inner_radius</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tensor</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">tensor([0.0050])</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">gap_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tensor</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">tensor([0.0040])</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">grid_size</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">tensor</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">tensor([0.0220])</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_circle_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1000</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_gap_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">100</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.indicator_function.CShape" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.indicator_function.IndicatorTLDataset">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.indicator_function.</span></span><span class="sig-name descname"><span class="pre">IndicatorTLDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sampler</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">BoxSampler</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_box_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1024</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.indicator_function.IndicatorTLDataset" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+</dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+  <li><a href="nos.data.html">nos.data package</a><ul>
+      <li>Previous: <a href="nos.data.html" title="previous chapter">nos.data package</a></li>
+      <li>Next: <a href="nos.data.transmission_loss.html" title="next chapter">nos.data.transmission_loss package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.data.indicator_function.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.data.transmission_loss.html b/nos.data.transmission_loss.html
new file mode 100644
index 00000000..bb508425
--- /dev/null
+++ b/nos.data.transmission_loss.html
@@ -0,0 +1,260 @@
+<!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>nos.data.transmission_loss package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.metrics package" href="nos.metrics.html" />
+    <link rel="prev" title="nos.data.indicator_function package" href="nos.data.indicator_function.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-data-transmission-loss-package">
+<h1>nos.data.transmission_loss package<a class="headerlink" href="#nos-data-transmission-loss-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.data.transmission_loss.transmission_loss">
+<span id="nos-data-transmission-loss-transmission-loss-module"></span><h2>nos.data.transmission_loss.transmission_loss module<a class="headerlink" href="#module-nos.data.transmission_loss.transmission_loss" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss.TLDataset">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">TLDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss.TLDataset" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss.get_n_unique">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_n_unique</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss.get_n_unique" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss.get_tl_frame">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_tl_frame</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss.get_tl_frame" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss.get_tl_from_path">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_tl_from_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss.get_tl_from_path" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss.get_transformations">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_transformations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">v</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Transform</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss.get_transformations" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss.get_unique_crystals">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_unique_crystals</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">DataFrame</span></span></span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss.get_unique_crystals" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.data.transmission_loss.transmission_loss_compact">
+<span id="nos-data-transmission-loss-transmission-loss-compact-module"></span><h2>nos.data.transmission_loss.transmission_loss_compact module<a class="headerlink" href="#module-nos.data.transmission_loss.transmission_loss_compact" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss_compact.TLDatasetCompact">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss_compact.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompact</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss_compact.TLDatasetCompact" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, with bigger evaluation space.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss_compact.get_tl_compact">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss_compact.</span></span><span class="sig-name descname"><span class="pre">get_tl_compact</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss_compact.get_tl_compact" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.data.transmission_loss.transmission_loss_exp">
+<span id="nos-data-transmission-loss-transmission-loss-exp-module"></span><h2>nos.data.transmission_loss.transmission_loss_exp module<a class="headerlink" href="#module-nos.data.transmission_loss.transmission_loss_exp" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss_exp.TLDatasetCompactExp">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss_exp.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompactExp</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss_exp.TLDatasetCompactExp" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, with bigger evaluation space.</p>
+</dd></dl>
+
+</section>
+<section id="module-nos.data.transmission_loss.transmission_loss_wave">
+<span id="nos-data-transmission-loss-transmission-loss-wave-module"></span><h2>nos.data.transmission_loss.transmission_loss_wave module<a class="headerlink" href="#module-nos.data.transmission_loss.transmission_loss_wave" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss_wave.TLDatasetCompactWave">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss_wave.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompactWave</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path:</span> <span class="pre">~pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples:</span> <span class="pre">int</span> <span class="pre">=</span> <span class="pre">-1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">wave_encoding:</span> <span class="pre">~typing.Callable</span> <span class="pre">=</span> <span class="pre">&lt;function</span> <span class="pre">simple_sine_encoding&gt;</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss_wave.TLDatasetCompactWave" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, for use with FNO.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss_wave.gaussian_modulated_sine_encoding">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss_wave.</span></span><span class="sig-name descname"><span class="pre">gaussian_modulated_sine_encoding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">u</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss_wave.gaussian_modulated_sine_encoding" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.transmission_loss_wave.simple_sine_encoding">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.transmission_loss_wave.</span></span><span class="sig-name descname"><span class="pre">simple_sine_encoding</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">u</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.transmission_loss_wave.simple_sine_encoding" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.data.transmission_loss">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.data.transmission_loss" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.TLDataset">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">TLDataset</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.TLDataset" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.TLDatasetCompact">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompact</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.TLDatasetCompact" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, with bigger evaluation space.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.TLDatasetCompactExp">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompactExp</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.TLDatasetCompactExp" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, with bigger evaluation space.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.TLDatasetCompactWave">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">TLDatasetCompactWave</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path:</span> <span class="pre">~pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples:</span> <span class="pre">int</span> <span class="pre">=</span> <span class="pre">-1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">wave_encoding:</span> <span class="pre">~typing.Callable</span> <span class="pre">=</span> <span class="pre">&lt;function</span> <span class="pre">simple_sine_encoding&gt;</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.TLDatasetCompactWave" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">OperatorDataset</span></code></p>
+<p>Transmission loss dataset, for use with FNO.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.get_n_unique">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_n_unique</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.get_n_unique" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.get_tl_compact">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_tl_compact</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.get_tl_compact" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.get_tl_frame">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_tl_frame</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">n_samples</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">-1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.get_tl_frame" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.get_tl_from_path">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_tl_from_path</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.data.transmission_loss.get_tl_from_path" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.get_transformations">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_transformations</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">v</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">Transform</span><span class="p"><span class="pre">]</span></span></span></span><a class="headerlink" href="#nos.data.transmission_loss.get_transformations" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.data.transmission_loss.get_unique_crystals">
+<span class="sig-prename descclassname"><span class="pre">nos.data.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">get_unique_crystals</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">DataFrame</span></span></span><a class="headerlink" href="#nos.data.transmission_loss.get_unique_crystals" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+  <li><a href="nos.data.html">nos.data package</a><ul>
+      <li>Previous: <a href="nos.data.indicator_function.html" title="previous chapter">nos.data.indicator_function package</a></li>
+      <li>Next: <a href="nos.metrics.html" title="next chapter">nos.metrics package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.data.transmission_loss.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.html b/nos.html
new file mode 100644
index 00000000..1130f796
--- /dev/null
+++ b/nos.html
@@ -0,0 +1,505 @@
+<!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>nos package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.benchmarks package" href="nos.benchmarks.html" />
+    <link rel="prev" title="nos" href="modules.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-package">
+<h1>nos package<a class="headerlink" href="#nos-package" title="Link to this heading">¶</a></h1>
+<section id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Link to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nos.benchmarks.html">nos.benchmarks package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.benchmarks.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.benchmarks.html#module-nos.benchmarks.benchmark">nos.benchmarks.benchmark module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.benchmarks.html#nos.benchmarks.benchmark.Benchmark"><code class="docutils literal notranslate"><span class="pre">Benchmark</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#nos.benchmarks.benchmark.Benchmark.metrics"><code class="docutils literal notranslate"><span class="pre">Benchmark.metrics</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#nos.benchmarks.benchmark.Benchmark.test_set"><code class="docutils literal notranslate"><span class="pre">Benchmark.test_set</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#nos.benchmarks.benchmark.Benchmark.train_set"><code class="docutils literal notranslate"><span class="pre">Benchmark.train_set</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.benchmarks.html#module-nos.benchmarks">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.benchmarks.html#nos.benchmarks.Benchmark"><code class="docutils literal notranslate"><span class="pre">Benchmark</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#nos.benchmarks.Benchmark.metrics"><code class="docutils literal notranslate"><span class="pre">Benchmark.metrics</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#nos.benchmarks.Benchmark.test_set"><code class="docutils literal notranslate"><span class="pre">Benchmark.test_set</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.benchmarks.html#nos.benchmarks.Benchmark.train_set"><code class="docutils literal notranslate"><span class="pre">Benchmark.train_set</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.data.html">nos.data package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.indicator_function.html">nos.data.indicator_function package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.indicator_function.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.indicator_function.html#module-nos.data.indicator_function.c_shape">nos.data.indicator_function.c_shape module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.indicator_function.html#module-nos.data.indicator_function.indicator_to_tl">nos.data.indicator_function.indicator_to_tl module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.indicator_function.html#module-nos.data.indicator_function.params_to_indicator">nos.data.indicator_function.params_to_indicator module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.indicator_function.html#module-nos.data.indicator_function">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.transmission_loss.html">nos.data.transmission_loss package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.transmission_loss.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss">nos.data.transmission_loss.transmission_loss module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_compact">nos.data.transmission_loss.transmission_loss_compact module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_exp">nos.data.transmission_loss.transmission_loss_exp module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_wave">nos.data.transmission_loss.transmission_loss_wave module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.data.transmission_loss.html#module-nos.data.transmission_loss">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.data.html#module-nos.data">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.html#nos.data.TLDataset"><code class="docutils literal notranslate"><span class="pre">TLDataset</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.html#nos.data.TLDatasetCompact"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompact</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.html#nos.data.TLDatasetCompactExp"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompactExp</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.data.html#nos.data.TLDatasetCompactWave"><code class="docutils literal notranslate"><span class="pre">TLDatasetCompactWave</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.metrics.html">nos.metrics package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.metrics.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.metrics.html#module-nos.metrics.error_metrics">nos.metrics.error_metrics module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.error_metrics.L1Error"><code class="docutils literal notranslate"><span class="pre">L1Error</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.error_metrics.Loss"><code class="docutils literal notranslate"><span class="pre">Loss</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.error_metrics.MSError"><code class="docutils literal notranslate"><span class="pre">MSError</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.metrics.html#module-nos.metrics.metric">nos.metrics.metric module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.metric.Metric"><code class="docutils literal notranslate"><span class="pre">Metric</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.metrics.html#nos.metrics.metric.Metric.__call__"><code class="docutils literal notranslate"><span class="pre">Metric.__call__()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.metrics.html#module-nos.metrics.operator_metrics">nos.metrics.operator_metrics module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.operator_metrics.NumberOfParameters"><code class="docutils literal notranslate"><span class="pre">NumberOfParameters</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.operator_metrics.SpeedOfEvaluation"><code class="docutils literal notranslate"><span class="pre">SpeedOfEvaluation</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.metrics.html#module-nos.metrics">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.L1Error"><code class="docutils literal notranslate"><span class="pre">L1Error</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.MSError"><code class="docutils literal notranslate"><span class="pre">MSError</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.Metric"><code class="docutils literal notranslate"><span class="pre">Metric</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.metrics.html#nos.metrics.Metric.__call__"><code class="docutils literal notranslate"><span class="pre">Metric.__call__()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.NumberOfParameters"><code class="docutils literal notranslate"><span class="pre">NumberOfParameters</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.metrics.html#nos.metrics.SpeedOfEvaluation"><code class="docutils literal notranslate"><span class="pre">SpeedOfEvaluation</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.networks.html">nos.networks package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.html#subpackages">Subpackages</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.networks.attention.html">nos.networks.attention package</a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.attention.html#submodules">Submodules</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention.cross_attention">nos.networks.attention.cross_attention module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention.linear_cross_attention">nos.networks.attention.linear_cross_attention module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention.linear_self_attention">nos.networks.attention.linear_self_attention module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention.self_attention">nos.networks.attention.self_attention module</a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.html#module-nos.networks.residual">nos.networks.residual module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.networks.html#nos.networks.residual.ResBlock"><code class="docutils literal notranslate"><span class="pre">ResBlock</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.html#nos.networks.residual.ResBlock.forward"><code class="docutils literal notranslate"><span class="pre">ResBlock.forward()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.networks.html#nos.networks.residual.ResNet"><code class="docutils literal notranslate"><span class="pre">ResNet</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.html#nos.networks.residual.ResNet.forward"><code class="docutils literal notranslate"><span class="pre">ResNet.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.html#module-nos.networks">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.networks.html#nos.networks.ResBlock"><code class="docutils literal notranslate"><span class="pre">ResBlock</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.html#nos.networks.ResBlock.forward"><code class="docutils literal notranslate"><span class="pre">ResBlock.forward()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.networks.html#nos.networks.ResNet"><code class="docutils literal notranslate"><span class="pre">ResNet</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.networks.html#nos.networks.ResNet.forward"><code class="docutils literal notranslate"><span class="pre">ResNet.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.operators.html">nos.operators package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_dot_operator">nos.operators.deep_dot_operator module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.deep_dot_operator.DeepDotOperator"><code class="docutils literal notranslate"><span class="pre">DeepDotOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.deep_dot_operator.DeepDotOperator.forward"><code class="docutils literal notranslate"><span class="pre">DeepDotOperator.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_neural_operator">nos.operators.deep_neural_operator module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.deep_neural_operator.DeepNeuralOperator"><code class="docutils literal notranslate"><span class="pre">DeepNeuralOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.deep_neural_operator.DeepNeuralOperator.forward"><code class="docutils literal notranslate"><span class="pre">DeepNeuralOperator.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_o_fno">nos.operators.deep_o_fno module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.deep_o_fno.DeepOFNO"><code class="docutils literal notranslate"><span class="pre">DeepOFNO</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.deep_o_fno.DeepOFNO.forward"><code class="docutils literal notranslate"><span class="pre">DeepOFNO.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_o_net">nos.operators.deep_o_net module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.deep_o_net.DeepONet"><code class="docutils literal notranslate"><span class="pre">DeepONet</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.deep_o_net.MYDeepONet"><code class="docutils literal notranslate"><span class="pre">MYDeepONet</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.deep_o_net.MYDeepONet.forward"><code class="docutils literal notranslate"><span class="pre">MYDeepONet.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.deep_root_operator">nos.operators.deep_root_operator module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.deep_root_operator.DeepRootOperator"><code class="docutils literal notranslate"><span class="pre">DeepRootOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.deep_root_operator.DeepRootOperator.forward"><code class="docutils literal notranslate"><span class="pre">DeepRootOperator.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.fourier_neural_operator">nos.operators.fourier_neural_operator module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.fourier_neural_operator.FourierNeuralOperator"><code class="docutils literal notranslate"><span class="pre">FourierNeuralOperator</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.mean_stack_neural_operator">nos.operators.mean_stack_neural_operator module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator"><code class="docutils literal notranslate"><span class="pre">MeanStackNeuralOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator.forward"><code class="docutils literal notranslate"><span class="pre">MeanStackNeuralOperator.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.operator">nos.operators.operator module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator"><code class="docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator.info"><code class="docutils literal notranslate"><span class="pre">NeuralOperator.info()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators.utils">nos.operators.utils module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.utils.deserialize"><code class="docutils literal notranslate"><span class="pre">deserialize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.utils.from_json"><code class="docutils literal notranslate"><span class="pre">from_json()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.utils.from_pt"><code class="docutils literal notranslate"><span class="pre">from_pt()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.utils.serialize"><code class="docutils literal notranslate"><span class="pre">serialize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.utils.to_json"><code class="docutils literal notranslate"><span class="pre">to_json()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.utils.to_pt"><code class="docutils literal notranslate"><span class="pre">to_pt()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.operators.html#module-nos.operators">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.DeepDotOperator"><code class="docutils literal notranslate"><span class="pre">DeepDotOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.DeepDotOperator.forward"><code class="docutils literal notranslate"><span class="pre">DeepDotOperator.forward()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.DeepNeuralOperator"><code class="docutils literal notranslate"><span class="pre">DeepNeuralOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.DeepNeuralOperator.forward"><code class="docutils literal notranslate"><span class="pre">DeepNeuralOperator.forward()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.DeepOFNO"><code class="docutils literal notranslate"><span class="pre">DeepOFNO</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.DeepOFNO.forward"><code class="docutils literal notranslate"><span class="pre">DeepOFNO.forward()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.DeepONet"><code class="docutils literal notranslate"><span class="pre">DeepONet</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.FourierNeuralOperator"><code class="docutils literal notranslate"><span class="pre">FourierNeuralOperator</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.MeanStackNeuralOperator"><code class="docutils literal notranslate"><span class="pre">MeanStackNeuralOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.MeanStackNeuralOperator.forward"><code class="docutils literal notranslate"><span class="pre">MeanStackNeuralOperator.forward()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.NeuralOperator"><code class="docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.operators.html#nos.operators.NeuralOperator.info"><code class="docutils literal notranslate"><span class="pre">NeuralOperator.info()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.deserialize"><code class="docutils literal notranslate"><span class="pre">deserialize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.from_json"><code class="docutils literal notranslate"><span class="pre">from_json()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.from_pt"><code class="docutils literal notranslate"><span class="pre">from_pt()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.serialize"><code class="docutils literal notranslate"><span class="pre">serialize()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.to_json"><code class="docutils literal notranslate"><span class="pre">to_json()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.operators.html#nos.operators.to_pt"><code class="docutils literal notranslate"><span class="pre">to_pt()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.plots.html">nos.plots package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.plots.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.plots.html#module-nos.plots.data">nos.plots.data module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.data.ModelData"><code class="docutils literal notranslate"><span class="pre">ModelData</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.ModelData.checkpoint"><code class="docutils literal notranslate"><span class="pre">ModelData.checkpoint</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.ModelData.from_dir"><code class="docutils literal notranslate"><span class="pre">ModelData.from_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.ModelData.name"><code class="docutils literal notranslate"><span class="pre">ModelData.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.ModelData.operator"><code class="docutils literal notranslate"><span class="pre">ModelData.operator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.ModelData.path"><code class="docutils literal notranslate"><span class="pre">ModelData.path</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.data.MultiRunData"><code class="docutils literal notranslate"><span class="pre">MultiRunData</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.MultiRunData.config"><code class="docutils literal notranslate"><span class="pre">MultiRunData.config</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.MultiRunData.from_dir"><code class="docutils literal notranslate"><span class="pre">MultiRunData.from_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.MultiRunData.name"><code class="docutils literal notranslate"><span class="pre">MultiRunData.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.MultiRunData.path"><code class="docutils literal notranslate"><span class="pre">MultiRunData.path</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.MultiRunData.results"><code class="docutils literal notranslate"><span class="pre">MultiRunData.results</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.MultiRunData.runs"><code class="docutils literal notranslate"><span class="pre">MultiRunData.runs</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.data.RunData"><code class="docutils literal notranslate"><span class="pre">RunData</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.RunData.choices"><code class="docutils literal notranslate"><span class="pre">RunData.choices</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.RunData.from_dir"><code class="docutils literal notranslate"><span class="pre">RunData.from_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.RunData.models"><code class="docutils literal notranslate"><span class="pre">RunData.models</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.RunData.name"><code class="docutils literal notranslate"><span class="pre">RunData.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.RunData.path"><code class="docutils literal notranslate"><span class="pre">RunData.path</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.RunData.training"><code class="docutils literal notranslate"><span class="pre">RunData.training</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.data.RunData.training_config"><code class="docutils literal notranslate"><span class="pre">RunData.training_config</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.plots.html#module-nos.plots.metrics">nos.plots.metrics module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.metrics.plot_all_metrics"><code class="docutils literal notranslate"><span class="pre">plot_all_metrics()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.metrics.plot_multirun_metrics"><code class="docutils literal notranslate"><span class="pre">plot_multirun_metrics()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.plots.html#module-nos.plots.training_curves">nos.plots.training_curves module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.training_curves.plot_multirun_curves"><code class="docutils literal notranslate"><span class="pre">plot_multirun_curves()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.training_curves.plot_run_curves"><code class="docutils literal notranslate"><span class="pre">plot_run_curves()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.training_curves.plot_xyz_vs_error"><code class="docutils literal notranslate"><span class="pre">plot_xyz_vs_error()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.plots.html#module-nos.plots.transmission_loss">nos.plots.transmission_loss module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_ax"><code class="docutils literal notranslate"><span class="pre">plot_ax()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_model_transmission_loss"><code class="docutils literal notranslate"><span class="pre">plot_model_transmission_loss()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_multirun_transmission_loss"><code class="docutils literal notranslate"><span class="pre">plot_multirun_transmission_loss()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_run_transmission_loss"><code class="docutils literal notranslate"><span class="pre">plot_run_transmission_loss()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_single"><code class="docutils literal notranslate"><span class="pre">plot_single()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_best"><code class="docutils literal notranslate"><span class="pre">plot_transmission_loss_best()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_hist"><code class="docutils literal notranslate"><span class="pre">plot_transmission_loss_hist()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_mean"><code class="docutils literal notranslate"><span class="pre">plot_transmission_loss_mean()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_median"><code class="docutils literal notranslate"><span class="pre">plot_transmission_loss_median()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_qtile"><code class="docutils literal notranslate"><span class="pre">plot_transmission_loss_qtile()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_tile"><code class="docutils literal notranslate"><span class="pre">plot_transmission_loss_tile()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.transmission_loss.plot_transmission_loss_worst"><code class="docutils literal notranslate"><span class="pre">plot_transmission_loss_worst()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.plots.html#module-nos.plots.utils">nos.plots.utils module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.utils.eval_operator"><code class="docutils literal notranslate"><span class="pre">eval_operator()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.plots.html#module-nos.plots">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.ModelData"><code class="docutils literal notranslate"><span class="pre">ModelData</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.ModelData.checkpoint"><code class="docutils literal notranslate"><span class="pre">ModelData.checkpoint</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.ModelData.from_dir"><code class="docutils literal notranslate"><span class="pre">ModelData.from_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.ModelData.name"><code class="docutils literal notranslate"><span class="pre">ModelData.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.ModelData.operator"><code class="docutils literal notranslate"><span class="pre">ModelData.operator</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.ModelData.path"><code class="docutils literal notranslate"><span class="pre">ModelData.path</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.MultiRunData"><code class="docutils literal notranslate"><span class="pre">MultiRunData</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.MultiRunData.config"><code class="docutils literal notranslate"><span class="pre">MultiRunData.config</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.MultiRunData.from_dir"><code class="docutils literal notranslate"><span class="pre">MultiRunData.from_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.MultiRunData.name"><code class="docutils literal notranslate"><span class="pre">MultiRunData.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.MultiRunData.path"><code class="docutils literal notranslate"><span class="pre">MultiRunData.path</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.MultiRunData.results"><code class="docutils literal notranslate"><span class="pre">MultiRunData.results</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.MultiRunData.runs"><code class="docutils literal notranslate"><span class="pre">MultiRunData.runs</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.RunData"><code class="docutils literal notranslate"><span class="pre">RunData</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.RunData.choices"><code class="docutils literal notranslate"><span class="pre">RunData.choices</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.RunData.from_dir"><code class="docutils literal notranslate"><span class="pre">RunData.from_dir()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.RunData.models"><code class="docutils literal notranslate"><span class="pre">RunData.models</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.RunData.name"><code class="docutils literal notranslate"><span class="pre">RunData.name</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.RunData.path"><code class="docutils literal notranslate"><span class="pre">RunData.path</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.RunData.training"><code class="docutils literal notranslate"><span class="pre">RunData.training</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.plots.html#nos.plots.RunData.training_config"><code class="docutils literal notranslate"><span class="pre">RunData.training_config</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.plot_multirun_curves"><code class="docutils literal notranslate"><span class="pre">plot_multirun_curves()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.plot_multirun_metrics"><code class="docutils literal notranslate"><span class="pre">plot_multirun_metrics()</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.plots.html#nos.plots.plot_multirun_transmission_loss"><code class="docutils literal notranslate"><span class="pre">plot_multirun_transmission_loss()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.preprocessing.html">nos.preprocessing package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.preprocessing.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.preprocessing.html#module-nos.preprocessing.low_pass_filter">nos.preprocessing.low_pass_filter module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.preprocessing.html#nos.preprocessing.low_pass_filter.LowPassFilter1D"><code class="docutils literal notranslate"><span class="pre">LowPassFilter1D</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.preprocessing.html#nos.preprocessing.low_pass_filter.LowPassFilter1D.forward"><code class="docutils literal notranslate"><span class="pre">LowPassFilter1D.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.preprocessing.html#module-nos.preprocessing">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.preprocessing.html#nos.preprocessing.LowPassFilter1D"><code class="docutils literal notranslate"><span class="pre">LowPassFilter1D</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.preprocessing.html#nos.preprocessing.LowPassFilter1D.forward"><code class="docutils literal notranslate"><span class="pre">LowPassFilter1D.forward()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.trainers.html">nos.trainers package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.trainers.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.trainers.html#nos-trainers-average-metric-module">nos.trainers.average_metric module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.trainers.html#nos-trainers-trainer-module">nos.trainers.trainer module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.trainers.html#nos-trainers-util-module">nos.trainers.util module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.trainers.html#module-contents">Module contents</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.transforms.html">nos.transforms package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.transforms.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.transforms.html#module-nos.transforms.scaling">nos.transforms.scaling module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.transforms.html#nos.transforms.scaling.MinMaxScale"><code class="docutils literal notranslate"><span class="pre">MinMaxScale</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.transforms.html#nos.transforms.scaling.MinMaxScale.forward"><code class="docutils literal notranslate"><span class="pre">MinMaxScale.forward()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.transforms.html#nos.transforms.scaling.MinMaxScale.undo"><code class="docutils literal notranslate"><span class="pre">MinMaxScale.undo()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.transforms.html#module-nos.transforms">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.transforms.html#nos.transforms.MinMaxScale"><code class="docutils literal notranslate"><span class="pre">MinMaxScale</span></code></a><ul>
+<li class="toctree-l4"><a class="reference internal" href="nos.transforms.html#nos.transforms.MinMaxScale.forward"><code class="docutils literal notranslate"><span class="pre">MinMaxScale.forward()</span></code></a></li>
+<li class="toctree-l4"><a class="reference internal" href="nos.transforms.html#nos.transforms.MinMaxScale.undo"><code class="docutils literal notranslate"><span class="pre">MinMaxScale.undo()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="nos.utils.html">nos.utils package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.utils.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.utils.html#module-nos.utils.nested_dataclass_to_dict">nos.utils.nested_dataclass_to_dict module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.utils.html#nos.utils.nested_dataclass_to_dict.dataclass_to_dict"><code class="docutils literal notranslate"><span class="pre">dataclass_to_dict()</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.utils.html#module-nos.utils.unique_id">nos.utils.unique_id module</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.utils.html#nos.utils.unique_id.UniqueId"><code class="docutils literal notranslate"><span class="pre">UniqueId</span></code></a></li>
+</ul>
+</li>
+<li class="toctree-l2"><a class="reference internal" href="nos.utils.html#module-nos.utils">Module contents</a><ul>
+<li class="toctree-l3"><a class="reference internal" href="nos.utils.html#nos.utils.UniqueId"><code class="docutils literal notranslate"><span class="pre">UniqueId</span></code></a></li>
+<li class="toctree-l3"><a class="reference internal" href="nos.utils.html#nos.utils.dataclass_to_dict"><code class="docutils literal notranslate"><span class="pre">dataclass_to_dict()</span></code></a></li>
+</ul>
+</li>
+</ul>
+</li>
+</ul>
+</div>
+</section>
+<section id="module-nos">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos" title="Link to this heading">¶</a></h2>
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="current reference internal" href="#">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+      <li>Previous: <a href="modules.html" title="previous chapter">nos</a></li>
+      <li>Next: <a href="nos.benchmarks.html" title="next chapter">nos.benchmarks package</a></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.metrics.html b/nos.metrics.html
new file mode 100644
index 00000000..76df6801
--- /dev/null
+++ b/nos.metrics.html
@@ -0,0 +1,250 @@
+<!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>nos.metrics package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.networks package" href="nos.networks.html" />
+    <link rel="prev" title="nos.data.transmission_loss package" href="nos.data.transmission_loss.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-metrics-package">
+<h1>nos.metrics package<a class="headerlink" href="#nos-metrics-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.metrics.error_metrics">
+<span id="nos-metrics-error-metrics-module"></span><h2>nos.metrics.error_metrics module<a class="headerlink" href="#module-nos.metrics.error_metrics" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.error_metrics.L1Error">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.error_metrics.</span></span><span class="sig-name descname"><span class="pre">L1Error</span></span><a class="headerlink" href="#nos.metrics.error_metrics.L1Error" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.error_metrics.Loss" title="nos.metrics.error_metrics.Loss"><code class="xref py py-class docutils literal notranslate"><span class="pre">Loss</span></code></a></p>
+<p>L1 error metric (Mean Absolute Error).</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.error_metrics.Loss">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.error_metrics.</span></span><span class="sig-name descname"><span class="pre">Loss</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">loss</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.metrics.error_metrics.Loss" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.metric.Metric" title="nos.metrics.metric.Metric"><code class="xref py py-class docutils literal notranslate"><span class="pre">Metric</span></code></a></p>
+<p>Class for evaluating error metrics.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>name</strong> – The name of the metric.</p></li>
+<li><p><strong>loss</strong> – The loss function for calculating the metric.</p></li>
+</ul>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.error_metrics.MSError">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.error_metrics.</span></span><span class="sig-name descname"><span class="pre">MSError</span></span><a class="headerlink" href="#nos.metrics.error_metrics.MSError" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.error_metrics.Loss" title="nos.metrics.error_metrics.Loss"><code class="xref py py-class docutils literal notranslate"><span class="pre">Loss</span></code></a></p>
+<p>Mean square error metric (L2 Error).</p>
+</dd></dl>
+
+</section>
+<section id="module-nos.metrics.metric">
+<span id="nos-metrics-metric-module"></span><h2>nos.metrics.metric module<a class="headerlink" href="#module-nos.metrics.metric" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.metric.Metric">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.metric.</span></span><span class="sig-name descname"><span class="pre">Metric</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.metrics.metric.Metric" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
+<p>Base class for all metrics.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.metrics.metric.Metric.__call__">
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">__call__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Operator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span></span></span><a class="headerlink" href="#nos.metrics.metric.Metric.__call__" title="Link to this definition">¶</a></dt>
+<dd><p>Evaluates the metric.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>operator</strong> – operator for which the metric is evaluated.</p></li>
+<li><p><strong>dataset</strong> – dataset on which the metric is evaluated.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>dict containing the results of the metric (keys “value” and “unit” should be in the dict).</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.metrics.operator_metrics">
+<span id="nos-metrics-operator-metrics-module"></span><h2>nos.metrics.operator_metrics module<a class="headerlink" href="#module-nos.metrics.operator_metrics" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.operator_metrics.NumberOfParameters">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.operator_metrics.</span></span><span class="sig-name descname"><span class="pre">NumberOfParameters</span></span><a class="headerlink" href="#nos.metrics.operator_metrics.NumberOfParameters" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.metric.Metric" title="nos.metrics.metric.Metric"><code class="xref py py-class docutils literal notranslate"><span class="pre">Metric</span></code></a></p>
+<p>Number of parameters in the operator.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.operator_metrics.SpeedOfEvaluation">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.operator_metrics.</span></span><span class="sig-name descname"><span class="pre">SpeedOfEvaluation</span></span><a class="headerlink" href="#nos.metrics.operator_metrics.SpeedOfEvaluation" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.metric.Metric" title="nos.metrics.metric.Metric"><code class="xref py py-class docutils literal notranslate"><span class="pre">Metric</span></code></a></p>
+<p>Speed of a single evaluation in milliseconds.</p>
+</dd></dl>
+
+</section>
+<section id="module-nos.metrics">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.metrics" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.L1Error">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.</span></span><span class="sig-name descname"><span class="pre">L1Error</span></span><a class="headerlink" href="#nos.metrics.L1Error" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.error_metrics.Loss" title="nos.metrics.error_metrics.Loss"><code class="xref py py-class docutils literal notranslate"><span class="pre">Loss</span></code></a></p>
+<p>L1 error metric (Mean Absolute Error).</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.MSError">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.</span></span><span class="sig-name descname"><span class="pre">MSError</span></span><a class="headerlink" href="#nos.metrics.MSError" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.error_metrics.Loss" title="nos.metrics.error_metrics.Loss"><code class="xref py py-class docutils literal notranslate"><span class="pre">Loss</span></code></a></p>
+<p>Mean square error metric (L2 Error).</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.Metric">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.</span></span><span class="sig-name descname"><span class="pre">Metric</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.metrics.Metric" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
+<p>Base class for all metrics.</p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.metrics.Metric.__call__">
+<em class="property"><span class="pre">abstract</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">__call__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Operator</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Dict</span></span></span><a class="headerlink" href="#nos.metrics.Metric.__call__" title="Link to this definition">¶</a></dt>
+<dd><p>Evaluates the metric.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>operator</strong> – operator for which the metric is evaluated.</p></li>
+<li><p><strong>dataset</strong> – dataset on which the metric is evaluated.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>dict containing the results of the metric (keys “value” and “unit” should be in the dict).</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.NumberOfParameters">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.</span></span><span class="sig-name descname"><span class="pre">NumberOfParameters</span></span><a class="headerlink" href="#nos.metrics.NumberOfParameters" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.metric.Metric" title="nos.metrics.metric.Metric"><code class="xref py py-class docutils literal notranslate"><span class="pre">Metric</span></code></a></p>
+<p>Number of parameters in the operator.</p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.metrics.SpeedOfEvaluation">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.metrics.</span></span><span class="sig-name descname"><span class="pre">SpeedOfEvaluation</span></span><a class="headerlink" href="#nos.metrics.SpeedOfEvaluation" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.metrics.metric.Metric" title="nos.metrics.metric.Metric"><code class="xref py py-class docutils literal notranslate"><span class="pre">Metric</span></code></a></p>
+<p>Speed of a single evaluation in milliseconds.</p>
+</dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.data.transmission_loss.html" title="previous chapter">nos.data.transmission_loss package</a></li>
+      <li>Next: <a href="nos.networks.html" title="next chapter">nos.networks package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.metrics.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.networks.attention.html b/nos.networks.attention.html
new file mode 100644
index 00000000..3b4ba8f7
--- /dev/null
+++ b/nos.networks.attention.html
@@ -0,0 +1,136 @@
+<!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>nos.networks.attention package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.operators package" href="nos.operators.html" />
+    <link rel="prev" title="nos.networks package" href="nos.networks.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-networks-attention-package">
+<h1>nos.networks.attention package<a class="headerlink" href="#nos-networks-attention-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.networks.attention.cross_attention">
+<span id="nos-networks-attention-cross-attention-module"></span><h2>nos.networks.attention.cross_attention module<a class="headerlink" href="#module-nos.networks.attention.cross_attention" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.networks.attention.linear_cross_attention">
+<span id="nos-networks-attention-linear-cross-attention-module"></span><h2>nos.networks.attention.linear_cross_attention module<a class="headerlink" href="#module-nos.networks.attention.linear_cross_attention" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.networks.attention.linear_self_attention">
+<span id="nos-networks-attention-linear-self-attention-module"></span><h2>nos.networks.attention.linear_self_attention module<a class="headerlink" href="#module-nos.networks.attention.linear_self_attention" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.networks.attention.self_attention">
+<span id="nos-networks-attention-self-attention-module"></span><h2>nos.networks.attention.self_attention module<a class="headerlink" href="#module-nos.networks.attention.self_attention" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.networks.attention">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.networks.attention" title="Link to this heading">¶</a></h2>
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+  <li><a href="nos.networks.html">nos.networks package</a><ul>
+      <li>Previous: <a href="nos.networks.html" title="previous chapter">nos.networks package</a></li>
+      <li>Next: <a href="nos.operators.html" title="next chapter">nos.operators package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.networks.attention.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.networks.html b/nos.networks.html
new file mode 100644
index 00000000..4f49ebb4
--- /dev/null
+++ b/nos.networks.html
@@ -0,0 +1,221 @@
+<!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>nos.networks package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.networks.attention package" href="nos.networks.attention.html" />
+    <link rel="prev" title="nos.metrics package" href="nos.metrics.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-networks-package">
+<h1>nos.networks package<a class="headerlink" href="#nos-networks-package" title="Link to this heading">¶</a></h1>
+<section id="subpackages">
+<h2>Subpackages<a class="headerlink" href="#subpackages" title="Link to this heading">¶</a></h2>
+<div class="toctree-wrapper compound">
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="nos.networks.attention.html">nos.networks.attention package</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.attention.html#submodules">Submodules</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention.cross_attention">nos.networks.attention.cross_attention module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention.linear_cross_attention">nos.networks.attention.linear_cross_attention module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention.linear_self_attention">nos.networks.attention.linear_self_attention module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention.self_attention">nos.networks.attention.self_attention module</a></li>
+<li class="toctree-l2"><a class="reference internal" href="nos.networks.attention.html#module-nos.networks.attention">Module contents</a></li>
+</ul>
+</li>
+</ul>
+</div>
+</section>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.networks.residual">
+<span id="nos-networks-residual-module"></span><h2>nos.networks.residual module<a class="headerlink" href="#module-nos.networks.residual" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.networks.residual.ResBlock">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.networks.residual.</span></span><span class="sig-name descname"><span class="pre">ResBlock</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.networks.residual.ResBlock" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.networks.residual.ResBlock.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.networks.residual.ResBlock.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Define the computation performed at every call.</p>
+<p>Should be overridden by all subclasses.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Although the recipe for forward pass needs to be defined within
+this function, one should call the <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code> instance afterwards
+instead of this since the former takes care of running the
+registered hooks while the latter silently ignores them.</p>
+</div>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.networks.residual.ResNet">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.networks.residual.</span></span><span class="sig-name descname"><span class="pre">ResNet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">transition_transformations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">Module</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.networks.residual.ResNet" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.networks.residual.ResNet.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.networks.residual.ResNet.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Define the computation performed at every call.</p>
+<p>Should be overridden by all subclasses.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Although the recipe for forward pass needs to be defined within
+this function, one should call the <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code> instance afterwards
+instead of this since the former takes care of running the
+registered hooks while the latter silently ignores them.</p>
+</div>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.networks">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.networks" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.networks.ResBlock">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.networks.</span></span><span class="sig-name descname"><span class="pre">ResBlock</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.networks.ResBlock" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.networks.ResBlock.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.networks.ResBlock.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Define the computation performed at every call.</p>
+<p>Should be overridden by all subclasses.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Although the recipe for forward pass needs to be defined within
+this function, one should call the <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code> instance afterwards
+instead of this since the former takes care of running the
+registered hooks while the latter silently ignores them.</p>
+</div>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.networks.ResNet">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.networks.</span></span><span class="sig-name descname"><span class="pre">ResNet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">transition_transformations</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">Module</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.networks.ResNet" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.networks.ResNet.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.networks.ResNet.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Define the computation performed at every call.</p>
+<p>Should be overridden by all subclasses.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Although the recipe for forward pass needs to be defined within
+this function, one should call the <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code> instance afterwards
+instead of this since the former takes care of running the
+registered hooks while the latter silently ignores them.</p>
+</div>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.metrics.html" title="previous chapter">nos.metrics package</a></li>
+      <li>Next: <a href="nos.networks.attention.html" title="next chapter">nos.networks.attention package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.networks.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.operators.html b/nos.operators.html
new file mode 100644
index 00000000..6c485963
--- /dev/null
+++ b/nos.operators.html
@@ -0,0 +1,538 @@
+<!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>nos.operators package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.plots package" href="nos.plots.html" />
+    <link rel="prev" title="nos.networks.attention package" href="nos.networks.attention.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-operators-package">
+<h1>nos.operators package<a class="headerlink" href="#nos-operators-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.operators.deep_dot_operator">
+<span id="nos-operators-deep-dot-operator-module"></span><h2>nos.operators.deep_dot_operator module<a class="headerlink" href="#module-nos.operators.deep_dot_operator" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.deep_dot_operator.DeepDotOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.deep_dot_operator.</span></span><span class="sig-name descname"><span class="pre">DeepDotOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dot_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dot_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Tanh()</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.deep_dot_operator.DeepDotOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.deep_dot_operator.DeepDotOperator.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.deep_dot_operator.DeepDotOperator.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Sensor positions of shape (batch_size, num_sensors, x_dim)</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, num_sensors, u_dim)</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, num_evaluations, y_dim)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Evaluations of the mapped function with shape (batch_size, num_evaluations, v_dim)</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.operators.deep_neural_operator">
+<span id="nos-operators-deep-neural-operator-module"></span><h2>nos.operators.deep_neural_operator module<a class="headerlink" href="#module-nos.operators.deep_neural_operator" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.deep_neural_operator.DeepNeuralOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.deep_neural_operator.</span></span><span class="sig-name descname"><span class="pre">DeepNeuralOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.deep_neural_operator.DeepNeuralOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.deep_neural_operator.DeepNeuralOperator.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.deep_neural_operator.DeepNeuralOperator.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Sensor positions of shape (batch_size, num_sensors, x_dim)</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, num_sensors, u_dim)</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, num_evaluations, y_dim)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Evaluations of the mapped function with shape (batch_size, num_evaluations, v_dim)</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.operators.deep_o_fno">
+<span id="nos-operators-deep-o-fno-module"></span><h2>nos.operators.deep_o_fno module<a class="headerlink" href="#module-nos.operators.deep_o_fno" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.deep_o_fno.DeepOFNO">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.deep_o_fno.</span></span><span class="sig-name descname"><span class="pre">DeepOFNO</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">basis_functions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">8</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Tanh()</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.deep_o_fno.DeepOFNO" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.deep_o_fno.DeepOFNO.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.deep_o_fno.DeepOFNO.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Sensor positions of shape (batch_size, num_sensors, x_dim)</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, num_sensors, u_dim)</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, num_evaluations, y_dim)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Evaluations of the mapped function with shape (batch_size, num_evaluations, v_dim)</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.operators.deep_o_net">
+<span id="nos-operators-deep-o-net-module"></span><h2>nos.operators.deep_o_net module<a class="headerlink" href="#module-nos.operators.deep_o_net" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.deep_o_net.DeepONet">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.deep_o_net.</span></span><span class="sig-name descname"><span class="pre">DeepONet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">basis_functions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">8</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.deep_o_net.DeepONet" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">DeepONet</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.deep_o_net.MYDeepONet">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.deep_o_net.</span></span><span class="sig-name descname"><span class="pre">MYDeepONet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">basis_functions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">8</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.deep_o_net.MYDeepONet" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.deep_o_net.MYDeepONet.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">_</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.deep_o_net.MYDeepONet.forward" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.operators.deep_root_operator">
+<span id="nos-operators-deep-root-operator-module"></span><h2>nos.operators.deep_root_operator module<a class="headerlink" href="#module-nos.operators.deep_root_operator" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.deep_root_operator.DeepRootOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.deep_root_operator.</span></span><span class="sig-name descname"><span class="pre">DeepRootOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">root_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">root_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dot_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dot_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Tanh()</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.deep_root_operator.DeepRootOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.deep_root_operator.DeepRootOperator.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.deep_root_operator.DeepRootOperator.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Sensor positions of shape (batch_size, num_sensors, x_dim)</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, num_sensors, u_dim)</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, num_evaluations, y_dim)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Evaluations of the mapped function with shape (batch_size, num_evaluations, v_dim)</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.operators.fourier_neural_operator">
+<span id="nos-operators-fourier-neural-operator-module"></span><h2>nos.operators.fourier_neural_operator module<a class="headerlink" href="#module-nos.operators.fourier_neural_operator" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.fourier_neural_operator.FourierNeuralOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.fourier_neural_operator.</span></span><span class="sig-name descname"><span class="pre">FourierNeuralOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.fourier_neural_operator.FourierNeuralOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">FourierNeuralOperator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+</dd></dl>
+
+</section>
+<section id="module-nos.operators.mean_stack_neural_operator">
+<span id="nos-operators-mean-stack-neural-operator-module"></span><h2>nos.operators.mean_stack_neural_operator module<a class="headerlink" href="#module-nos.operators.mean_stack_neural_operator" title="Link to this heading">¶</a></h2>
+<p><cite>continuity.operators.deep_neural_operator</cite></p>
+<p>The Deep Neural Operator architecture.</p>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.mean_stack_neural_operator.</span></span><span class="sig-name descname"><span class="pre">MeanStackNeuralOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Tanh()</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<p>The <cite>MeanStackNeuralOperator</cite> class integrates a deep residual network within a neural operator framework. It uses all
+scalar values of the input locations, input functions, and individual evaluation points as inputs for a deep
+residual network.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>shapes</strong> – An instance of <cite>DatasetShapes</cite>.</p></li>
+<li><p><strong>width</strong> – The width of the Deep Residual Network, defining the number of neurons in each hidden layer.</p></li>
+<li><p><strong>depth</strong> – The depth of the Deep Residual Network, indicating the number of hidden layers in the network.</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<p>Performs the forward pass through the operator, processing the input function values <cite>u</cite> and input function
+probe locations <cite>x</cite> by flattening them. They are then expanded to match the dimensions of the evaluation
+coordinates y. The preprocessed x, preprocessed u, and y are stacked and passed through a deep residual network.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Input coordinates of shape (batch_size, #sensors, x_dim), representing the points in space at
+which the input function values are probed.</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, #sensors, u_dim), representing the values of the input
+functions at different sensor locations.</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, #evaluations, y_dim), representing the points in space at
+which the output function values are to be computed.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><dl class="simple">
+<dt>The output of the operator, of shape (batch_size, #evaluations, v_dim), representing the computed function</dt><dd><p>values at the specified evaluation coordinates.</p>
+</dd>
+</dl>
+</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.operators.operator">
+<span id="nos-operators-operator-module"></span><h2>nos.operators.operator module<a class="headerlink" href="#module-nos.operators.operator" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.operator.NeuralOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.operator.</span></span><span class="sig-name descname"><span class="pre">NeuralOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">properties</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.operator.NeuralOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>properties</strong> – properties to fully describe the operator (used for serialization).</p>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.operator.NeuralOperator.info">
+<span class="sig-name descname"><span class="pre">info</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.operator.NeuralOperator.info" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.operators.utils">
+<span id="nos-operators-utils-module"></span><h2>nos.operators.utils module<a class="headerlink" href="#module-nos.operators.utils" title="Link to this heading">¶</a></h2>
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.utils.deserialize">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.utils.</span></span><span class="sig-name descname"><span class="pre">deserialize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">model_base_class</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ABCMeta</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">json_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model_parameters.json'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pt_handle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'model.pt'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></span><a class="headerlink" href="#nos.operators.utils.deserialize" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.utils.from_json">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.utils.</span></span><span class="sig-name descname"><span class="pre">from_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">json_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model_parameters.json'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span></span></span><a class="headerlink" href="#nos.operators.utils.from_json" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.utils.from_pt">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.utils.</span></span><span class="sig-name descname"><span class="pre">from_pt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pt_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model.pt'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.utils.from_pt" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.utils.serialize">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.utils.</span></span><span class="sig-name descname"><span class="pre">serialize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Path</span></span></span><a class="headerlink" href="#nos.operators.utils.serialize" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.utils.to_json">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.utils.</span></span><span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">json_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model_parameters.json'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.utils.to_json" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.utils.to_pt">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.utils.</span></span><span class="sig-name descname"><span class="pre">to_pt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pt_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model.pt'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.utils.to_pt" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.operators">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.operators" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.DeepDotOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">DeepDotOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dot_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">16</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">dot_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">2</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Tanh()</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.DeepDotOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.DeepDotOperator.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.DeepDotOperator.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Sensor positions of shape (batch_size, num_sensors, x_dim)</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, num_sensors, u_dim)</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, num_evaluations, y_dim)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Evaluations of the mapped function with shape (batch_size, num_evaluations, v_dim)</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.DeepNeuralOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">DeepNeuralOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.DeepNeuralOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.DeepNeuralOperator.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.DeepNeuralOperator.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Sensor positions of shape (batch_size, num_sensors, x_dim)</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, num_sensors, u_dim)</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, num_evaluations, y_dim)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Evaluations of the mapped function with shape (batch_size, num_evaluations, v_dim)</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.DeepOFNO">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">DeepOFNO</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">basis_functions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">8</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Tanh()</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.DeepOFNO" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.DeepOFNO.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.DeepOFNO.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Sensor positions of shape (batch_size, num_sensors, x_dim)</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, num_sensors, u_dim)</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, num_evaluations, y_dim)</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Evaluations of the mapped function with shape (batch_size, num_evaluations, v_dim)</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.DeepONet">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">DeepONet</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">branch_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">trunk_depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">basis_functions</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">8</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.DeepONet" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">DeepONet</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.FourierNeuralOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">FourierNeuralOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span><span class="w"> </span><span class="p"><span class="pre">|</span></span><span class="w"> </span><span class="pre">None</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.FourierNeuralOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">FourierNeuralOperator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.MeanStackNeuralOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">MeanStackNeuralOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">width</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">32</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">depth</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">act</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Module</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">Tanh()</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">stride</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">int</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">1</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.MeanStackNeuralOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Operator</span></code>, <a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><code class="xref py py-class docutils literal notranslate"><span class="pre">NeuralOperator</span></code></a></p>
+<p>The <cite>MeanStackNeuralOperator</cite> class integrates a deep residual network within a neural operator framework. It uses all
+scalar values of the input locations, input functions, and individual evaluation points as inputs for a deep
+residual network.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>shapes</strong> – An instance of <cite>DatasetShapes</cite>.</p></li>
+<li><p><strong>width</strong> – The width of the Deep Residual Network, defining the number of neurons in each hidden layer.</p></li>
+<li><p><strong>depth</strong> – The depth of the Deep Residual Network, indicating the number of hidden layers in the network.</p></li>
+</ul>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.MeanStackNeuralOperator.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">u</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">y</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.operators.MeanStackNeuralOperator.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Forward pass through the operator.</p>
+<p>Performs the forward pass through the operator, processing the input function values <cite>u</cite> and input function
+probe locations <cite>x</cite> by flattening them. They are then expanded to match the dimensions of the evaluation
+coordinates y. The preprocessed x, preprocessed u, and y are stacked and passed through a deep residual network.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><ul class="simple">
+<li><p><strong>x</strong> – Input coordinates of shape (batch_size, #sensors, x_dim), representing the points in space at
+which the input function values are probed.</p></li>
+<li><p><strong>u</strong> – Input function values of shape (batch_size, #sensors, u_dim), representing the values of the input
+functions at different sensor locations.</p></li>
+<li><p><strong>y</strong> – Evaluation coordinates of shape (batch_size, #evaluations, y_dim), representing the points in space at
+which the output function values are to be computed.</p></li>
+</ul>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p><dl class="simple">
+<dt>The output of the operator, of shape (batch_size, #evaluations, v_dim), representing the computed function</dt><dd><p>values at the specified evaluation coordinates.</p>
+</dd>
+</dl>
+</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.operators.NeuralOperator">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">NeuralOperator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">properties</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">shapes</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorShapes</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.NeuralOperator" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">ABC</span></code></p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>properties</strong> – properties to fully describe the operator (used for serialization).</p>
+</dd>
+</dl>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.operators.NeuralOperator.info">
+<span class="sig-name descname"><span class="pre">info</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.NeuralOperator.info" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.deserialize">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">deserialize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">model_base_class</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">ABCMeta</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">json_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model_parameters.json'</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pt_handle</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'model.pt'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></span><a class="headerlink" href="#nos.operators.deserialize" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.from_json">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">from_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">json_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model_parameters.json'</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">dict</span></span></span><a class="headerlink" href="#nos.operators.from_json" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.from_pt">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">from_pt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">model_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pt_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model.pt'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.from_pt" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.serialize">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">serialize</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Path</span></span></span><a class="headerlink" href="#nos.operators.serialize" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.to_json">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">to_json</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">json_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model_parameters.json'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.to_json" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.operators.to_pt">
+<span class="sig-prename descclassname"><span class="pre">nos.operators.</span></span><span class="sig-name descname"><span class="pre">to_pt</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">pt_handle</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">'model.pt'</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.operators.to_pt" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.networks.attention.html" title="previous chapter">nos.networks.attention package</a></li>
+      <li>Next: <a href="nos.plots.html" title="next chapter">nos.plots package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.operators.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.plots.html b/nos.plots.html
new file mode 100644
index 00000000..7de84851
--- /dev/null
+++ b/nos.plots.html
@@ -0,0 +1,458 @@
+<!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>nos.plots package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.preprocessing package" href="nos.preprocessing.html" />
+    <link rel="prev" title="nos.operators package" href="nos.operators.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-plots-package">
+<h1>nos.plots package<a class="headerlink" href="#nos-plots-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.plots.data">
+<span id="nos-plots-data-module"></span><h2>nos.plots.data module<a class="headerlink" href="#module-nos.plots.data" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.plots.data.ModelData">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.plots.data.</span></span><span class="sig-name descname"><span class="pre">ModelData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">nos.operators.operator.NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">checkpoint</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.data.ModelData" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.ModelData.checkpoint">
+<span class="sig-name descname"><span class="pre">checkpoint</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.data.ModelData.checkpoint" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.plots.data.ModelData.from_dir">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_dir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Self</span></span></span><a class="headerlink" href="#nos.plots.data.ModelData.from_dir" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.ModelData.name">
+<span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#nos.plots.data.ModelData.name" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.ModelData.operator">
+<span class="sig-name descname"><span class="pre">operator</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></em><a class="headerlink" href="#nos.plots.data.ModelData.operator" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.ModelData.path">
+<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Path</span></em><a class="headerlink" href="#nos.plots.data.ModelData.path" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.plots.data.MultiRunData">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.plots.data.</span></span><span class="sig-name descname"><span class="pre">MultiRunData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">runs</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#nos.plots.data.RunData" title="nos.plots.data.RunData"><span class="pre">nos.plots.data.RunData</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">results</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">config</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.data.MultiRunData" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.MultiRunData.config">
+<span class="sig-name descname"><span class="pre">config</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.data.MultiRunData.config" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.plots.data.MultiRunData.from_dir">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_dir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Self</span></span></span><a class="headerlink" href="#nos.plots.data.MultiRunData.from_dir" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.MultiRunData.name">
+<span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#nos.plots.data.MultiRunData.name" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.MultiRunData.path">
+<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Path</span></em><a class="headerlink" href="#nos.plots.data.MultiRunData.path" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.MultiRunData.results">
+<span class="sig-name descname"><span class="pre">results</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.data.MultiRunData.results" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.MultiRunData.runs">
+<span class="sig-name descname"><span class="pre">runs</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#nos.plots.data.RunData" title="nos.plots.data.RunData"><span class="pre">RunData</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#nos.plots.data.MultiRunData.runs" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.plots.data.RunData">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.plots.data.</span></span><span class="sig-name descname"><span class="pre">RunData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pandas.core.frame.DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">choices</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">training_config</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">models</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#nos.plots.data.ModelData" title="nos.plots.data.ModelData"><span class="pre">nos.plots.data.ModelData</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.data.RunData" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.RunData.choices">
+<span class="sig-name descname"><span class="pre">choices</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.data.RunData.choices" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.plots.data.RunData.from_dir">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_dir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Self</span></span></span><a class="headerlink" href="#nos.plots.data.RunData.from_dir" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.RunData.models">
+<span class="sig-name descname"><span class="pre">models</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#nos.plots.data.ModelData" title="nos.plots.data.ModelData"><span class="pre">ModelData</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#nos.plots.data.RunData.models" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.RunData.name">
+<span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#nos.plots.data.RunData.name" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.RunData.path">
+<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Path</span></em><a class="headerlink" href="#nos.plots.data.RunData.path" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.RunData.training">
+<span class="sig-name descname"><span class="pre">training</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">DataFrame</span></em><a class="headerlink" href="#nos.plots.data.RunData.training" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.data.RunData.training_config">
+<span class="sig-name descname"><span class="pre">training_config</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.data.RunData.training_config" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.plots.metrics">
+<span id="nos-plots-metrics-module"></span><h2>nos.plots.metrics module<a class="headerlink" href="#module-nos.plots.metrics" title="Link to this heading">¶</a></h2>
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.metrics.plot_all_metrics">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.metrics.</span></span><span class="sig-name descname"><span class="pre">plot_all_metrics</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">run_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">data_tuple</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tuple</span><span class="p"><span class="pre">[</span></span><span class="pre">str</span><span class="p"><span class="pre">,</span></span><span class="w"> </span><span class="pre">OperatorDataset</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.metrics.plot_all_metrics" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.metrics.plot_multirun_metrics">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.metrics.</span></span><span class="sig-name descname"><span class="pre">plot_multirun_metrics</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">multirun</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.MultiRunData" title="nos.plots.data.MultiRunData"><span class="pre">MultiRunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.metrics.plot_multirun_metrics" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.plots.training_curves">
+<span id="nos-plots-training-curves-module"></span><h2>nos.plots.training_curves module<a class="headerlink" href="#module-nos.plots.training_curves" title="Link to this heading">¶</a></h2>
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.training_curves.plot_multirun_curves">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.training_curves.</span></span><span class="sig-name descname"><span class="pre">plot_multirun_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">multi_run</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.MultiRunData" title="nos.plots.data.MultiRunData"><span class="pre">MultiRunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.training_curves.plot_multirun_curves" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.training_curves.plot_run_curves">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.training_curves.</span></span><span class="sig-name descname"><span class="pre">plot_run_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">run</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.RunData" title="nos.plots.data.RunData"><span class="pre">RunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.training_curves.plot_run_curves" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.training_curves.plot_xyz_vs_error">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.training_curves.</span></span><span class="sig-name descname"><span class="pre">plot_xyz_vs_error</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df_plot</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_file</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">x</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.training_curves.plot_xyz_vs_error" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.plots.transmission_loss">
+<span id="nos-plots-transmission-loss-module"></span><h2>nos.plots.transmission_loss module<a class="headerlink" href="#module-nos.plots.transmission_loss" title="Link to this heading">¶</a></h2>
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_ax">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_ax</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">ax</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_ax" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_model_transmission_loss">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_model_transmission_loss</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">run</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.RunData" title="nos.plots.data.RunData"><span class="pre">RunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">model</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.ModelData" title="nos.plots.data.ModelData"><span class="pre">ModelData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_model_transmission_loss" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_multirun_transmission_loss">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_multirun_transmission_loss</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">multi_run</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.MultiRunData" title="nos.plots.data.MultiRunData"><span class="pre">MultiRunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_multirun_transmission_loss" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_run_transmission_loss">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_run_transmission_loss</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">run</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.RunData" title="nos.plots.data.RunData"><span class="pre">RunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_run_transmission_loss" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_single">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_single</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_file</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_single" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_transmission_loss_best">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_transmission_loss_best</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_transmission_loss_best" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_transmission_loss_hist">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_transmission_loss_hist</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_transmission_loss_hist" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_transmission_loss_mean">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_transmission_loss_mean</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_transmission_loss_mean" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_transmission_loss_median">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_transmission_loss_median</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_transmission_loss_median" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_transmission_loss_qtile">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_transmission_loss_qtile</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_transmission_loss_qtile" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_transmission_loss_tile">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_transmission_loss_tile</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">val_indices</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">int</span><span class="p"><span class="pre">]</span></span></span><span class="w"> </span><span class="o"><span class="pre">=</span></span><span class="w"> </span><span class="default_value"><span class="pre">None</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_transmission_loss_tile" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.transmission_loss.plot_transmission_loss_worst">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.transmission_loss.</span></span><span class="sig-name descname"><span class="pre">plot_transmission_loss_worst</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">df</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.transmission_loss.plot_transmission_loss_worst" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.plots.utils">
+<span id="nos-plots-utils-module"></span><h2>nos.plots.utils module<a class="headerlink" href="#module-nos.plots.utils" title="Link to this heading">¶</a></h2>
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.utils.eval_operator">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.utils.</span></span><span class="sig-name descname"><span class="pre">eval_operator</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">losses</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><span class="pre">Module</span><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">DataFrame</span></span></span><a class="headerlink" href="#nos.plots.utils.eval_operator" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+<section id="module-nos.plots">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.plots" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.plots.ModelData">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.plots.</span></span><span class="sig-name descname"><span class="pre">ModelData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">operator</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">nos.operators.operator.NeuralOperator</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">checkpoint</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.ModelData" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.ModelData.checkpoint">
+<span class="sig-name descname"><span class="pre">checkpoint</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.ModelData.checkpoint" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.plots.ModelData.from_dir">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_dir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Self</span></span></span><a class="headerlink" href="#nos.plots.ModelData.from_dir" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.ModelData.name">
+<span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#nos.plots.ModelData.name" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.ModelData.operator">
+<span class="sig-name descname"><span class="pre">operator</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><a class="reference internal" href="nos.operators.html#nos.operators.operator.NeuralOperator" title="nos.operators.operator.NeuralOperator"><span class="pre">NeuralOperator</span></a></em><a class="headerlink" href="#nos.plots.ModelData.operator" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.ModelData.path">
+<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Path</span></em><a class="headerlink" href="#nos.plots.ModelData.path" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.plots.MultiRunData">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.plots.</span></span><span class="sig-name descname"><span class="pre">MultiRunData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">runs</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#nos.plots.data.RunData" title="nos.plots.data.RunData"><span class="pre">nos.plots.data.RunData</span></a><span class="p"><span class="pre">]</span></span></span></em>, <em class="sig-param"><span class="n"><span class="pre">results</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">config</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.MultiRunData" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.MultiRunData.config">
+<span class="sig-name descname"><span class="pre">config</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.MultiRunData.config" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.plots.MultiRunData.from_dir">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_dir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Self</span></span></span><a class="headerlink" href="#nos.plots.MultiRunData.from_dir" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.MultiRunData.name">
+<span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#nos.plots.MultiRunData.name" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.MultiRunData.path">
+<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Path</span></em><a class="headerlink" href="#nos.plots.MultiRunData.path" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.MultiRunData.results">
+<span class="sig-name descname"><span class="pre">results</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.MultiRunData.results" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.MultiRunData.runs">
+<span class="sig-name descname"><span class="pre">runs</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#nos.plots.data.RunData" title="nos.plots.data.RunData"><span class="pre">RunData</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#nos.plots.MultiRunData.runs" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.plots.RunData">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.plots.</span></span><span class="sig-name descname"><span class="pre">RunData</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pathlib.Path</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">name</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">str</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">training</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">pandas.core.frame.DataFrame</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">choices</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">training_config</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">dict</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">models</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#nos.plots.data.ModelData" title="nos.plots.data.ModelData"><span class="pre">nos.plots.data.ModelData</span></a><span class="p"><span class="pre">]</span></span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.RunData" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.RunData.choices">
+<span class="sig-name descname"><span class="pre">choices</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.RunData.choices" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.plots.RunData.from_dir">
+<em class="property"><span class="pre">classmethod</span><span class="w"> </span></em><span class="sig-name descname"><span class="pre">from_dir</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">path</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Self</span></span></span><a class="headerlink" href="#nos.plots.RunData.from_dir" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.RunData.models">
+<span class="sig-name descname"><span class="pre">models</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">List</span><span class="p"><span class="pre">[</span></span><a class="reference internal" href="#nos.plots.data.ModelData" title="nos.plots.data.ModelData"><span class="pre">ModelData</span></a><span class="p"><span class="pre">]</span></span></em><a class="headerlink" href="#nos.plots.RunData.models" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.RunData.name">
+<span class="sig-name descname"><span class="pre">name</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">str</span></em><a class="headerlink" href="#nos.plots.RunData.name" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.RunData.path">
+<span class="sig-name descname"><span class="pre">path</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">Path</span></em><a class="headerlink" href="#nos.plots.RunData.path" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.RunData.training">
+<span class="sig-name descname"><span class="pre">training</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">DataFrame</span></em><a class="headerlink" href="#nos.plots.RunData.training" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py attribute">
+<dt class="sig sig-object py" id="nos.plots.RunData.training_config">
+<span class="sig-name descname"><span class="pre">training_config</span></span><em class="property"><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="pre">dict</span></em><a class="headerlink" href="#nos.plots.RunData.training_config" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.plot_multirun_curves">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.</span></span><span class="sig-name descname"><span class="pre">plot_multirun_curves</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">multi_run</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.MultiRunData" title="nos.plots.data.MultiRunData"><span class="pre">MultiRunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.plot_multirun_curves" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.plot_multirun_metrics">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.</span></span><span class="sig-name descname"><span class="pre">plot_multirun_metrics</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">multirun</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.MultiRunData" title="nos.plots.data.MultiRunData"><span class="pre">MultiRunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.plot_multirun_metrics" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.plots.plot_multirun_transmission_loss">
+<span class="sig-prename descclassname"><span class="pre">nos.plots.</span></span><span class="sig-name descname"><span class="pre">plot_multirun_transmission_loss</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">multi_run</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><a class="reference internal" href="#nos.plots.data.MultiRunData" title="nos.plots.data.MultiRunData"><span class="pre">MultiRunData</span></a></span></em>, <em class="sig-param"><span class="n"><span class="pre">dataset</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">OperatorDataset</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">out_dir</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Path</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.plots.plot_multirun_transmission_loss" title="Link to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.operators.html" title="previous chapter">nos.operators package</a></li>
+      <li>Next: <a href="nos.preprocessing.html" title="next chapter">nos.preprocessing package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.plots.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.preprocessing.html b/nos.preprocessing.html
new file mode 100644
index 00000000..87f99749
--- /dev/null
+++ b/nos.preprocessing.html
@@ -0,0 +1,165 @@
+<!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>nos.preprocessing package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.trainers package" href="nos.trainers.html" />
+    <link rel="prev" title="nos.plots package" href="nos.plots.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-preprocessing-package">
+<h1>nos.preprocessing package<a class="headerlink" href="#nos-preprocessing-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.preprocessing.low_pass_filter">
+<span id="nos-preprocessing-low-pass-filter-module"></span><h2>nos.preprocessing.low_pass_filter module<a class="headerlink" href="#module-nos.preprocessing.low_pass_filter" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.preprocessing.low_pass_filter.LowPassFilter1D">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.preprocessing.low_pass_filter.</span></span><span class="sig-name descname"><span class="pre">LowPassFilter1D</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">kernel_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cutoff_frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sampling_rate</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.preprocessing.low_pass_filter.LowPassFilter1D" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.preprocessing.low_pass_filter.LowPassFilter1D.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.preprocessing.low_pass_filter.LowPassFilter1D.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Define the computation performed at every call.</p>
+<p>Should be overridden by all subclasses.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Although the recipe for forward pass needs to be defined within
+this function, one should call the <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code> instance afterwards
+instead of this since the former takes care of running the
+registered hooks while the latter silently ignores them.</p>
+</div>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.preprocessing">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.preprocessing" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.preprocessing.LowPassFilter1D">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.preprocessing.</span></span><span class="sig-name descname"><span class="pre">LowPassFilter1D</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">kernel_size</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">cutoff_frequency</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">sampling_rate</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.preprocessing.LowPassFilter1D" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.preprocessing.LowPassFilter1D.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">x</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.preprocessing.LowPassFilter1D.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Define the computation performed at every call.</p>
+<p>Should be overridden by all subclasses.</p>
+<div class="admonition note">
+<p class="admonition-title">Note</p>
+<p>Although the recipe for forward pass needs to be defined within
+this function, one should call the <code class="xref py py-class docutils literal notranslate"><span class="pre">Module</span></code> instance afterwards
+instead of this since the former takes care of running the
+registered hooks while the latter silently ignores them.</p>
+</div>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.plots.html" title="previous chapter">nos.plots package</a></li>
+      <li>Next: <a href="nos.trainers.html" title="next chapter">nos.trainers package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.preprocessing.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.trainers.html b/nos.trainers.html
new file mode 100644
index 00000000..4890ce56
--- /dev/null
+++ b/nos.trainers.html
@@ -0,0 +1,131 @@
+<!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>nos.trainers package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.transforms package" href="nos.transforms.html" />
+    <link rel="prev" title="nos.preprocessing package" href="nos.preprocessing.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-trainers-package">
+<h1>nos.trainers package<a class="headerlink" href="#nos-trainers-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="nos-trainers-average-metric-module">
+<h2>nos.trainers.average_metric module<a class="headerlink" href="#nos-trainers-average-metric-module" title="Link to this heading">¶</a></h2>
+</section>
+<section id="nos-trainers-trainer-module">
+<h2>nos.trainers.trainer module<a class="headerlink" href="#nos-trainers-trainer-module" title="Link to this heading">¶</a></h2>
+</section>
+<section id="nos-trainers-util-module">
+<h2>nos.trainers.util module<a class="headerlink" href="#nos-trainers-util-module" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-contents">
+<h2>Module contents<a class="headerlink" href="#module-contents" title="Link to this heading">¶</a></h2>
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.preprocessing.html" title="previous chapter">nos.preprocessing package</a></li>
+      <li>Next: <a href="nos.transforms.html" title="next chapter">nos.transforms package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.trainers.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.transforms.html b/nos.transforms.html
new file mode 100644
index 00000000..c7328bd5
--- /dev/null
+++ b/nos.transforms.html
@@ -0,0 +1,199 @@
+<!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>nos.transforms package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="nos.utils package" href="nos.utils.html" />
+    <link rel="prev" title="nos.trainers package" href="nos.trainers.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-transforms-package">
+<h1>nos.transforms package<a class="headerlink" href="#nos-transforms-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.transforms.scaling">
+<span id="nos-transforms-scaling-module"></span><h2>nos.transforms.scaling module<a class="headerlink" href="#module-nos.transforms.scaling" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.transforms.scaling.MinMaxScale">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.transforms.scaling.</span></span><span class="sig-name descname"><span class="pre">MinMaxScale</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">min_value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.transforms.scaling.MinMaxScale" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Transform</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.transforms.scaling.MinMaxScale.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tensor</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.transforms.scaling.MinMaxScale.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Applies the transformation.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>tensor</strong> – Tensor that should be transformed.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Transformed tensor.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.transforms.scaling.MinMaxScale.undo">
+<span class="sig-name descname"><span class="pre">undo</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tensor</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.transforms.scaling.MinMaxScale.undo" title="Link to this definition">¶</a></dt>
+<dd><p>Applies the inverse of the transformation (if it exists).</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>tensor</strong> – Transformed tensor.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Tensor with the transformation undone.</p>
+</dd>
+<dt class="field-odd">Raises<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>NotImplementedError</strong> – If the inverse of the transformation is not implemented.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+<section id="module-nos.transforms">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.transforms" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.transforms.MinMaxScale">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.transforms.</span></span><span class="sig-name descname"><span class="pre">MinMaxScale</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">min_value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">max_value</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.transforms.MinMaxScale" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Transform</span></code></p>
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.transforms.MinMaxScale.forward">
+<span class="sig-name descname"><span class="pre">forward</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tensor</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.transforms.MinMaxScale.forward" title="Link to this definition">¶</a></dt>
+<dd><p>Applies the transformation.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>tensor</strong> – Tensor that should be transformed.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Transformed tensor.</p>
+</dd>
+</dl>
+</dd></dl>
+
+<dl class="py method">
+<dt class="sig sig-object py" id="nos.transforms.MinMaxScale.undo">
+<span class="sig-name descname"><span class="pre">undo</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">tensor</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Tensor</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Tensor</span></span></span><a class="headerlink" href="#nos.transforms.MinMaxScale.undo" title="Link to this definition">¶</a></dt>
+<dd><p>Applies the inverse of the transformation (if it exists).</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>tensor</strong> – Transformed tensor.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>Tensor with the transformation undone.</p>
+</dd>
+<dt class="field-odd">Raises<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>NotImplementedError</strong> – If the inverse of the transformation is not implemented.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.trainers.html" title="previous chapter">nos.trainers package</a></li>
+      <li>Next: <a href="nos.utils.html" title="next chapter">nos.utils package</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.transforms.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/nos.utils.html b/nos.utils.html
new file mode 100644
index 00000000..3b679f7b
--- /dev/null
+++ b/nos.utils.html
@@ -0,0 +1,170 @@
+<!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>nos.utils package &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+    <link rel="next" title="Examples" href="examples.html" />
+    <link rel="prev" title="nos.transforms package" href="nos.transforms.html" />
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <section id="nos-utils-package">
+<h1>nos.utils package<a class="headerlink" href="#nos-utils-package" title="Link to this heading">¶</a></h1>
+<section id="submodules">
+<h2>Submodules<a class="headerlink" href="#submodules" title="Link to this heading">¶</a></h2>
+</section>
+<section id="module-nos.utils.nested_dataclass_to_dict">
+<span id="nos-utils-nested-dataclass-to-dict-module"></span><h2>nos.utils.nested_dataclass_to_dict module<a class="headerlink" href="#module-nos.utils.nested_dataclass_to_dict" title="Link to this heading">¶</a></h2>
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.utils.nested_dataclass_to_dict.dataclass_to_dict">
+<span class="sig-prename descclassname"><span class="pre">nos.utils.nested_dataclass_to_dict.</span></span><span class="sig-name descname"><span class="pre">dataclass_to_dict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">obj</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Any</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Any</span></span></span><a class="headerlink" href="#nos.utils.nested_dataclass_to_dict.dataclass_to_dict" title="Link to this definition">¶</a></dt>
+<dd><p>Recursively converts a nested dataclass into a dictionary.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>obj</strong> – The dataclass instance to convert.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>A dictionary representation of the dataclass, including nested dataclasses.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+<section id="module-nos.utils.unique_id">
+<span id="nos-utils-unique-id-module"></span><h2>nos.utils.unique_id module<a class="headerlink" href="#module-nos.utils.unique_id" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.utils.unique_id.UniqueId">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.utils.unique_id.</span></span><span class="sig-name descname"><span class="pre">UniqueId</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">time_stamp:</span> <span class="pre">~.datetime.time</span> <span class="pre">=</span> <span class="pre">datetime.datetime(2024</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">26</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">12</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">20</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">762905)</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.utils.unique_id.UniqueId" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<p>Unique ID.</p>
+</dd></dl>
+
+</section>
+<section id="module-nos.utils">
+<span id="module-contents"></span><h2>Module contents<a class="headerlink" href="#module-nos.utils" title="Link to this heading">¶</a></h2>
+<dl class="py class">
+<dt class="sig sig-object py" id="nos.utils.UniqueId">
+<em class="property"><span class="pre">class</span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">nos.utils.</span></span><span class="sig-name descname"><span class="pre">UniqueId</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">time_stamp:</span> <span class="pre">~.datetime.time</span> <span class="pre">=</span> <span class="pre">datetime.datetime(2024</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">3</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">26</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">12</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">4</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">20</span></span></em>, <em class="sig-param"><span class="n"><span class="pre">762905)</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#nos.utils.UniqueId" title="Link to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
+<p>Unique ID.</p>
+</dd></dl>
+
+<dl class="py function">
+<dt class="sig sig-object py" id="nos.utils.dataclass_to_dict">
+<span class="sig-prename descclassname"><span class="pre">nos.utils.</span></span><span class="sig-name descname"><span class="pre">dataclass_to_dict</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">obj</span></span><span class="p"><span class="pre">:</span></span><span class="w"> </span><span class="n"><span class="pre">Any</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">Any</span></span></span><a class="headerlink" href="#nos.utils.dataclass_to_dict" title="Link to this definition">¶</a></dt>
+<dd><p>Recursively converts a nested dataclass into a dictionary.</p>
+<dl class="field-list simple">
+<dt class="field-odd">Parameters<span class="colon">:</span></dt>
+<dd class="field-odd"><p><strong>obj</strong> – The dataclass instance to convert.</p>
+</dd>
+<dt class="field-even">Returns<span class="colon">:</span></dt>
+<dd class="field-even"><p>A dictionary representation of the dataclass, including nested dataclasses.</p>
+</dd>
+</dl>
+</dd></dl>
+
+</section>
+</section>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul class="current">
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1 current"><a class="reference internal" href="modules.html">nos</a><ul class="current">
+<li class="toctree-l2 current"><a class="reference internal" href="nos.html">nos package</a></li>
+</ul>
+</li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  <li><a href="modules.html">nos</a><ul>
+  <li><a href="nos.html">nos package</a><ul>
+      <li>Previous: <a href="nos.transforms.html" title="previous chapter">nos.transforms package</a></li>
+      <li>Next: <a href="examples.html" title="next chapter">Examples</a></li>
+  </ul></li>
+  </ul></li>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+      |
+      <a href="_sources/nos.utils.rst.txt"
+          rel="nofollow">Page source</a>
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/objects.inv b/objects.inv
new file mode 100644
index 0000000000000000000000000000000000000000..933b931b2085fb38ee093d3d5c1006409f30f22d
GIT binary patch
literal 1973
zcmV;m2TJ%OAX9K?X>NERX>N99Zgg*Qc_4OWa&u{KZXhxWBOp+6Z)#;@bUGkTWp#34
zY#>i?WpZJ3Z*p@ABOq2~a&u{KZaN?eBOp|0Wgv28ZDDC{WMy(7Z)PBLXlZjGW@&6?
zAZc?TV{dJ6a%FRKWn>_Ab7^j8AbM<RVlE1J+Ra?ca^xly-TNz4m2BM=Z)Z7UPsLT^
zM~#z8Wkq3$b`vAe0P<tLJ|HAD0@RW~a<XxE1Ls`sg9}1n%0yPZe=1o~6O{dyQ6_c=
zS(0B&$@#C@`I#<zL^MB?kU#s)k5v=M-RJJB=Ew;YBD)AuoWkx(BstETen6?dKGqV&
z@JJ*i5J;vIafoRG)1z&cNYnOTlZ+f-Ni=teG12fr$`}_EP(sh-x-e+$rs9upm+GUH
zV;lDf3%CEm$_nPOu&cK!68RT=K{KJ47C48Jaj>sxE-|BF<M{2y?G<SI<>3IUaG%DQ
zrzo$xqSNk)rO$!ry1cqITJ9~Zax9VzNU}-y9T{7DqJkWjLd)taH&H7fXH0fKR+g%#
zQWg~@7D816!h{HG;x!vr#BX}q3nSEXIZvgub*RVE-a71~sWFcJ2}wXfP4SN!jRi(L
zvm_ut+Iw~Gy^3wL5i=`61?6D_c3rw>yo8!ltS`Vg6Xg6|NJv%|@DbzxV=}@=j)jkm
z;E#^!{~*f$4{>iNwyop8leOh6HZF9_MD9yPX7=3Nq)N`lGq*4EwVk^+S56DsdgU-8
z^$FIh2vX4W9ZFOHfhhv&X_gh3K5ZR8O(z5{D}q)LY;7bA+}4%{{nXWcySU=qEVyl>
z51=mQ<{<*pd`3Wa0OXJm02=j>Jg{O8__i(|5x?8t>xT;@5f_VOKU4@6cl)asNNU(U
zvCl>$Z61)~mH|VQlN^S2859YR@p##Le6jZCGbUyR$jH!P72?e^W{Lw{lGK3o_~Igz
zBKgWfd(B-%P^rH1I})D>%e@`YA$k<HQ>(34$P3RO)A(C|VLb~JD-ueHXmG2}Z*tmZ
z$7VU#*?$XWqGl1u!R7)4BKuAFS0?62;G%{kGR!-8Y`lB;*eJA#mX81jy|5Eq#_@AS
zUlX+AvGx+7>XOO3w!rPZLo<mV?f)#ITU2vMlKL{FNbAns*W0_OPH14F=s+Y*0>84F
zW5g4!c!MB)kT8GVh9}-GiT!c9f$5$t??a({0}3Vqv$_#A@I0pEp*YDHZ~BIsHU?Zt
zbBAn=;Xji%(FzRgDNED6p@`2g0ghyyD3Yl<DT?^iWpUj6y)H|lZ8%$Pv=68nTYYD#
z<NY*eitYk&3<>@j+E<>0@6A-STFw~ZTWQK`wzU5dW>LFX)n-3j#z0FoMFOGc$khxr
zPPy8|zFb6n7$)1J?^>eLBRrAIh@`P4S#+!_Xk4V$5|j9cj0T;WQVdDbP_-x$%&=QQ
zjRYU|1WQz?2$R15n$n=}OwA1|5V>p*irK@(0*)Yd`2pq66~i=mDs2Wq<E8?0Z*<MT
z()M*|gjhS{M8LZjqw}FPk@$N}mzmiD?Q%x<_$gXwjG=A#a$DQzBzx)I6ZKOh5Y%)T
zda0*+Cmk5hQIxC*2X)9&$7P(*#cqxEXa{VLv9@p6qQM|yGz5>rPUXhtrQh-dIfTV#
zNrz>5fH(w;o$cVGlBUD4IBpC+CVhIyU1ZdxCQ_dx(i2H3)u)Kbs{xj!$+e+~a%M`J
z9S}tNFd^X%@Nw=>^L$eN4Kl<e;jtIFQ+c?1g{pr6{U+HWa@NLEvJFS6Ls*4w4AGDv
zulWl~z$bSgc*=4v)zO)~8jBp`;FE0=<Xe&I?foZs5dd|EC>D@S9A%whDd*^r3Ffz?
zZnOs12`M=cg3N10S%`cqUZK2B&<aHUiLpl{<R-)iyb-b9$lHjxz#CEjka#2iZASdc
z_%a8EH`}JNh}joHFU~IV451uVoT*ilXea-nSi3eXe$e6@d%ahywy&5-#4j$rWt>kp
zi)VBTc{U+oub@(lVBb(CE9&sAruYPJj3N3{^nO$wtAZ+9)i;>lz_*7S67Tr0OL7`L
zs=-2<niedELnw48(&w9^Wk@thfF;E=A-Y8-3a1^DRze0bHGekOC9VtC02Xct&`%6a
zLw%dDz`?5kqhP8gSyX@^$D(eJ5v6sny*q-7#r^4#a}Aoa7nS6nP$p#YsbG0_evx%$
zO{?sSTKcI!rsxd4L4BBA*zLPA)BdXcb@qhR;<!L>O;Z9N5z&piQq%Zae?2=kYZ<K;
z=0#a{*B?<+A(#D*NO@pH{>-j^m?N=gr9M{gNvqz^y9z^hW2|Z98WRq5X^Tu_WiM@8
zyT1G14*E-0!Tebp#rfwBPIKq#eCGZu2#ciILUiE$P4nz{-`;_QuAPTiM()&RC$F!&
zvi$XQNL2V9Lw4%st|h2@WObPBbI#e|I)sJo&pkWf!O_QTctSb=w~hsm5e-kMW@Cqn
zE%M_*ONVp#zAbYOWm*j84V;5MuEsL!EuD=Ttj%1sH{)l4^_<1lJoh4BiLU&}(YJKq
z-7>-_u&0#FU36F^W|ndA$J~}#Gf|7OQo%%yxPMpE937?#fgsNhL!c=$m<LmTuO<Bp
H279|XfyA~f

literal 0
HcmV?d00001

diff --git a/py-modindex.html b/py-modindex.html
new file mode 100644
index 00000000..550d26b3
--- /dev/null
+++ b/py-modindex.html
@@ -0,0 +1,349 @@
+<!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; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
+
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+
+   <h1>Python Module Index</h1>
+
+   <div class="modindex-jumpbox">
+   <a href="#cap-n"><strong>n</strong></a>
+   </div>
+
+   <table class="indextable modindextable">
+     <tr class="pcap"><td></td><td>&#160;</td><td></td></tr>
+     <tr class="cap" id="cap-n"><td></td><td>
+       <strong>n</strong></td><td></td></tr>
+     <tr>
+       <td><img src="_static/minus.png" class="toggler"
+              id="toggle-1" style="display: none" alt="-" /></td>
+       <td>
+       <a href="nos.html#module-nos"><code class="xref">nos</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.benchmarks.html#module-nos.benchmarks"><code class="xref">nos.benchmarks</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.benchmarks.html#module-nos.benchmarks.benchmark"><code class="xref">nos.benchmarks.benchmark</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.html#module-nos.data"><code class="xref">nos.data</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.indicator_function.html#module-nos.data.indicator_function"><code class="xref">nos.data.indicator_function</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.indicator_function.html#module-nos.data.indicator_function.c_shape"><code class="xref">nos.data.indicator_function.c_shape</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.indicator_function.html#module-nos.data.indicator_function.indicator_to_tl"><code class="xref">nos.data.indicator_function.indicator_to_tl</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.indicator_function.html#module-nos.data.indicator_function.params_to_indicator"><code class="xref">nos.data.indicator_function.params_to_indicator</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss"><code class="xref">nos.data.transmission_loss</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss"><code class="xref">nos.data.transmission_loss.transmission_loss</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_compact"><code class="xref">nos.data.transmission_loss.transmission_loss_compact</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_exp"><code class="xref">nos.data.transmission_loss.transmission_loss_exp</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.data.transmission_loss.html#module-nos.data.transmission_loss.transmission_loss_wave"><code class="xref">nos.data.transmission_loss.transmission_loss_wave</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.metrics.html#module-nos.metrics"><code class="xref">nos.metrics</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.metrics.html#module-nos.metrics.error_metrics"><code class="xref">nos.metrics.error_metrics</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.metrics.html#module-nos.metrics.metric"><code class="xref">nos.metrics.metric</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.metrics.html#module-nos.metrics.operator_metrics"><code class="xref">nos.metrics.operator_metrics</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.networks.html#module-nos.networks"><code class="xref">nos.networks</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.networks.attention.html#module-nos.networks.attention"><code class="xref">nos.networks.attention</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.networks.attention.html#module-nos.networks.attention.cross_attention"><code class="xref">nos.networks.attention.cross_attention</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.networks.attention.html#module-nos.networks.attention.linear_cross_attention"><code class="xref">nos.networks.attention.linear_cross_attention</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.networks.attention.html#module-nos.networks.attention.linear_self_attention"><code class="xref">nos.networks.attention.linear_self_attention</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.networks.attention.html#module-nos.networks.attention.self_attention"><code class="xref">nos.networks.attention.self_attention</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.networks.html#module-nos.networks.residual"><code class="xref">nos.networks.residual</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators"><code class="xref">nos.operators</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.deep_dot_operator"><code class="xref">nos.operators.deep_dot_operator</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.deep_neural_operator"><code class="xref">nos.operators.deep_neural_operator</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.deep_o_fno"><code class="xref">nos.operators.deep_o_fno</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.deep_o_net"><code class="xref">nos.operators.deep_o_net</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.deep_root_operator"><code class="xref">nos.operators.deep_root_operator</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.fourier_neural_operator"><code class="xref">nos.operators.fourier_neural_operator</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.mean_stack_neural_operator"><code class="xref">nos.operators.mean_stack_neural_operator</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.operator"><code class="xref">nos.operators.operator</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.operators.html#module-nos.operators.utils"><code class="xref">nos.operators.utils</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.plots.html#module-nos.plots"><code class="xref">nos.plots</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.plots.html#module-nos.plots.data"><code class="xref">nos.plots.data</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.plots.html#module-nos.plots.metrics"><code class="xref">nos.plots.metrics</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.plots.html#module-nos.plots.training_curves"><code class="xref">nos.plots.training_curves</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.plots.html#module-nos.plots.transmission_loss"><code class="xref">nos.plots.transmission_loss</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.plots.html#module-nos.plots.utils"><code class="xref">nos.plots.utils</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.preprocessing.html#module-nos.preprocessing"><code class="xref">nos.preprocessing</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.preprocessing.html#module-nos.preprocessing.low_pass_filter"><code class="xref">nos.preprocessing.low_pass_filter</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.transforms.html#module-nos.transforms"><code class="xref">nos.transforms</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.transforms.html#module-nos.transforms.scaling"><code class="xref">nos.transforms.scaling</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.utils.html#module-nos.utils"><code class="xref">nos.utils</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.utils.html#module-nos.utils.nested_dataclass_to_dict"><code class="xref">nos.utils.nested_dataclass_to_dict</code></a></td><td>
+       <em></em></td></tr>
+     <tr class="cg-1">
+       <td></td>
+       <td>&#160;&#160;&#160;
+       <a href="nos.utils.html#module-nos.utils.unique_id"><code class="xref">nos.utils.unique_id</code></a></td><td>
+       <em></em></td></tr>
+   </table>
+
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">nos</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+<div id="searchbox" style="display: none" role="search">
+  <h3 id="searchlabel">Quick search</h3>
+    <div class="searchformwrapper">
+    <form class="search" action="search.html" method="get">
+      <input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+      <input type="submit" value="Go" />
+    </form>
+    </div>
+</div>
+<script>document.getElementById('searchbox').style.display = "block"</script>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/search.html b/search.html
new file mode 100644
index 00000000..195c7f05
--- /dev/null
+++ b/search.html
@@ -0,0 +1,123 @@
+<!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>Search &#8212; Neural Operators  documentation</title>
+    <link rel="stylesheet" type="text/css" href="_static/pygments.css?v=d1102ebc" />
+    <link rel="stylesheet" type="text/css" href="_static/alabaster.css?v=12dfc556" />
+    
+    <script src="_static/documentation_options.js?v=5929fcd5"></script>
+    <script src="_static/doctools.js?v=888ff710"></script>
+    <script src="_static/sphinx_highlight.js?v=dc90522c"></script>
+    <script src="_static/searchtools.js"></script>
+    <script src="_static/language_data.js"></script>
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="#" />
+  <script src="searchindex.js" defer></script>
+  
+   
+  <link rel="stylesheet" href="_static/custom.css" type="text/css" />
+  
+
+  
+  
+
+
+  </head><body>
+  
+
+    <div class="document">
+      <div class="documentwrapper">
+        <div class="bodywrapper">
+          
+
+          <div class="body" role="main">
+            
+  <h1 id="search-documentation">Search</h1>
+  
+  <noscript>
+  <div class="admonition warning">
+  <p>
+    Please activate JavaScript to enable the search
+    functionality.
+  </p>
+  </div>
+  </noscript>
+  
+  
+  <p>
+    Searching for multiple words only shows matches that contain
+    all words.
+  </p>
+  
+  
+  <form action="" method="get">
+    <input type="text" name="q" aria-labelledby="search-documentation" value="" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
+    <input type="submit" value="search" />
+    <span id="search-progress" style="padding-left: 10px"></span>
+  </form>
+  
+  
+  
+  <div id="search-results">
+  
+  </div>
+  
+
+          </div>
+          
+        </div>
+      </div>
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+        <div class="sphinxsidebarwrapper">
+<h1 class="logo"><a href="index.html">Neural Operators</a></h1>
+
+
+
+
+
+
+
+
+<h3>Navigation</h3>
+<ul>
+<li class="toctree-l1"><a class="reference internal" href="coverage.html">Code Coverage</a></li>
+<li class="toctree-l1"><a class="reference internal" href="modules.html">nos</a></li>
+<li class="toctree-l1"><a class="reference internal" href="examples.html">Examples</a></li>
+</ul>
+
+<div class="relations">
+<h3>Related Topics</h3>
+<ul>
+  <li><a href="index.html">Documentation overview</a><ul>
+  </ul></li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+        </div>
+      </div>
+      <div class="clearer"></div>
+    </div>
+    <div class="footer">
+      &#169;2023, Jakob Wagner.
+      
+      |
+      Powered by <a href="https://www.sphinx-doc.org/">Sphinx 7.2.6</a>
+      &amp; <a href="https://alabaster.readthedocs.io">Alabaster 0.7.16</a>
+      
+    </div>
+
+    
+
+    
+  </body>
+</html>
\ No newline at end of file
diff --git a/searchindex.js b/searchindex.js
new file mode 100644
index 00000000..50dc8747
--- /dev/null
+++ b/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({"docnames": ["coverage", "examples", "index", "modules", "nos", "nos.benchmarks", "nos.data", "nos.data.indicator_function", "nos.data.transmission_loss", "nos.metrics", "nos.networks", "nos.networks.attention", "nos.operators", "nos.plots", "nos.preprocessing", "nos.trainers", "nos.transforms", "nos.utils"], "filenames": ["coverage.rst", "examples.rst", "index.rst", "modules.rst", "nos.rst", "nos.benchmarks.rst", "nos.data.rst", "nos.data.indicator_function.rst", "nos.data.transmission_loss.rst", "nos.metrics.rst", "nos.networks.rst", "nos.networks.attention.rst", "nos.operators.rst", "nos.plots.rst", "nos.preprocessing.rst", "nos.trainers.rst", "nos.transforms.rst", "nos.utils.rst"], "titles": ["Code Coverage", "Examples", "Neural Operators for Helmholtz Equation", "nos", "nos package", "nos.benchmarks package", "nos.data package", "nos.data.indicator_function package", "nos.data.transmission_loss package", "nos.metrics package", "nos.networks package", "nos.networks.attention package", "nos.operators package", "nos.plots package", "nos.preprocessing package", "nos.trainers package", "nos.transforms package", "nos.utils package"], "terms": {"For": 0, "an": [0, 12], "detail": [0, 2], "report": 0, "click": 0, "here": 0, "welcom": 2, "document": 2, "project": 2, "thi": [2, 10, 14], "focus": 2, "applic": 2, "advanc": 2, "techniqu": 2, "solv": 2, "variou": 2, "parameter": 2, "geometri": 2, "The": [2, 9, 12, 17], "approach": 2, "integr": [2, 12], "deep": [2, 12], "learn": 2, "physic": 2, "model": [2, 4, 12, 13], "domain": 2, "code": 2, "coverag": 2, "nos": 2, "packag": [2, 3], "i": [2, 9, 16], "fundament": 2, "partial": 2, "differenti": 2, "particularli": 2, "field": 2, "acoust": 2, "electromagnet": 2, "quantum": 2, "mechan": 2, "In": 2, "we": 2, "develop": 2, "util": [2, 3, 4], "form": 2, "across": 2, "differ": [2, 12], "aim": 2, "overcom": 2, "limit": 2, "tradit": 2, "numer": 2, "method": 2, "offer": 2, "speed": [2, 9], "flexibl": 2, "complex": 2, "section": 2, "descript": 2, "function": [2, 6, 8, 9, 10, 12, 14], "class": [2, 5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 17], "avail": 2, "explor": 2, "practic": 2, "see": 2, "action": 2, "subpackag": 3, "benchmark": [3, 4], "submodul": [3, 4, 6], "modul": 3, "content": 3, "data": [3, 4, 5], "metric": [3, 4, 5], "error_metr": [3, 4], "operator_metr": [3, 4], "network": [3, 4, 12], "residu": [3, 4, 12], "oper": [3, 4, 9, 13], "deep_dot_oper": [3, 4], "deep_neural_oper": [3, 4], "deep_o_fno": [3, 4], "deep_o_net": [3, 4], "deep_root_oper": [3, 4], "fourier_neural_oper": [3, 4], "mean_stack_neural_oper": [3, 4], "plot": [3, 4], "training_curv": [3, 4], "transmission_loss": [3, 4, 6], "preprocess": [3, 4, 12], "low_pass_filt": [3, 4], "trainer": [3, 4], "average_metr": [3, 4], "transform": [3, 4, 8], "scale": [3, 4], "nested_dataclass_to_dict": [3, 4], "unique_id": [3, 4], "test_set": [4, 5], "train_set": [4, 5], "indicator_funct": [4, 6], "c_shape": [4, 6], "indicator_to_tl": [4, 6], "params_to_ind": [4, 6], "transmission_loss_compact": [4, 6], "transmission_loss_exp": [4, 6], "transmission_loss_wav": [4, 6], "tldataset": [4, 6, 8], "tldatasetcompact": [4, 6, 8], "tldatasetcompactexp": [4, 6, 8], "tldatasetcompactwav": [4, 6, 8], "l1error": [4, 9], "loss": [4, 6, 8, 9, 13], "mserror": [4, 9], "__call__": [4, 9], "numberofparamet": [4, 9], "speedofevalu": [4, 9], "attent": [4, 10], "cross_attent": [4, 10], "linear_cross_attent": [4, 10], "linear_self_attent": [4, 10], "self_attent": [4, 10], "resblock": [4, 10], "forward": [4, 10, 12, 14, 16], "resnet": [4, 10], "deepdotoper": [4, 12], "deepneuraloper": [4, 12], "deepofno": [4, 12], "deeponet": [4, 12], "mydeeponet": [4, 12], "deeprootoper": [4, 12], "fourierneuraloper": [4, 12], "meanstackneuraloper": [4, 12], "neuraloper": [4, 12, 13], "info": [4, 12], "deseri": [4, 12], "from_json": [4, 12], "from_pt": [4, 12], "serial": [4, 12], "to_json": [4, 12], "to_pt": [4, 12], "modeldata": [4, 13], "checkpoint": [4, 13], "from_dir": [4, 13], "name": [4, 9, 13], "path": [4, 6, 7, 8, 12, 13], "multirundata": [4, 13], "config": [4, 13], "result": [4, 9, 13], "run": [4, 10, 13, 14], "rundata": [4, 13], "choic": [4, 13], "train": [4, 13], "training_config": [4, 13], "plot_all_metr": [4, 13], "plot_multirun_metr": [4, 13], "plot_multirun_curv": [4, 13], "plot_run_curv": [4, 13], "plot_xyz_vs_error": [4, 13], "plot_ax": [4, 13], "plot_model_transmission_loss": [4, 13], "plot_multirun_transmission_loss": [4, 13], "plot_run_transmission_loss": [4, 13], "plot_singl": [4, 13], "plot_transmission_loss_best": [4, 13], "plot_transmission_loss_hist": [4, 13], "plot_transmission_loss_mean": [4, 13], "plot_transmission_loss_median": [4, 13], "plot_transmission_loss_qtil": [4, 13], "plot_transmission_loss_til": [4, 13], "plot_transmission_loss_worst": [4, 13], "eval_oper": [4, 13], "lowpassfilter1d": [4, 14], "minmaxscal": [4, 16], "undo": [4, 16], "dataclass_to_dict": [4, 17], "uniqueid": [4, 17], "continu": [5, 12], "dataset": [5, 6, 8, 9, 13], "operatordataset": [5, 6, 7, 8, 9, 13], "list": [5, 10, 13], "factori": 5, "base": [5, 6, 7, 8, 9, 10, 12, 13, 14, 16, 17], "object": [5, 7, 13, 17], "cshape": [6, 7], "indicatortldataset": [6, 7], "get_n_uniqu": [6, 8], "get_tl_fram": [6, 8], "get_tl_from_path": [6, 8], "get_transform": [6, 8], "get_unique_cryst": [6, 8], "get_tl_compact": [6, 8], "gaussian_modulated_sine_encod": [6, 8], "simple_sine_encod": [6, 8], "n_sampl": [6, 7, 8], "int": [6, 7, 8, 10, 12, 13], "1": [6, 7, 8, 10, 12], "transmiss": [6, 8], "bigger": [6, 8], "evalu": [6, 8, 9, 12], "space": [6, 8, 12], "pathlib": [6, 8, 13], "wave_encod": [6, 8], "type": [6, 8], "callabl": [6, 8], "us": [6, 8, 12], "fno": [6, 8], "outer_radiu": 7, "tensor": [7, 8, 10, 12, 16], "0": 7, "0065": 7, "inner_radiu": 7, "0050": 7, "gap_width": 7, "0040": 7, "grid_siz": 7, "0220": 7, "n_circle_sampl": 7, "1000": 7, "n_gap_sampl": 7, "100": 7, "sampler": 7, "boxsampl": 7, "none": [7, 10, 12, 13], "n_box_sampl": 7, "1024": 7, "u": [7, 8, 12], "tupl": [7, 13], "df": [8, 13], "datafram": [8, 13], "x": [8, 10, 12, 13, 14], "y": [8, 12], "v": 8, "dict": [8, 9, 12, 13], "str": [8, 9, 12, 13], "l1": 9, "error": 9, "mean": 9, "absolut": 9, "paramet": [9, 12, 16, 17], "calcul": 9, "squar": 9, "l2": 9, "abc": [9, 12], "all": [9, 10, 12, 14], "abstract": 9, "which": [9, 12], "return": [9, 12, 16, 17], "contain": 9, "kei": 9, "valu": [9, 12], "unit": 9, "should": [9, 10, 14, 16], "number": [9, 12], "singl": 9, "millisecond": 9, "width": [10, 12], "depth": [10, 12], "act": [10, 12], "defin": [10, 12, 14], "comput": [10, 12, 14], "perform": [10, 12, 14], "everi": [10, 14], "call": [10, 14], "overridden": [10, 14], "subclass": [10, 14], "although": [10, 14], "recip": [10, 14], "pass": [10, 12, 14], "need": [10, 14], "within": [10, 12, 14], "one": [10, 14], "instanc": [10, 12, 14, 17], "afterward": [10, 14], "instead": [10, 14], "sinc": [10, 14], "former": [10, 14], "take": [10, 14], "care": [10, 14], "regist": [10, 14], "hook": [10, 14], "while": [10, 14], "latter": [10, 14], "silent": [10, 14], "ignor": [10, 14], "them": [10, 12, 14], "stride": [10, 12], "transition_transform": 10, "shape": 12, "operatorshap": 12, "branch_width": 12, "16": 12, "branch_depth": 12, "2": 12, "trunk_width": 12, "trunk_depth": 12, "dot_width": 12, "dot_depth": 12, "tanh": 12, "through": 12, "sensor": 12, "posit": 12, "batch_siz": 12, "num_sensor": 12, "x_dim": 12, "input": 12, "u_dim": 12, "coordin": 12, "num_evalu": 12, "y_dim": 12, "map": 12, "v_dim": 12, "32": 12, "3": [12, 17], "basis_funct": 12, "8": 12, "_": 12, "root_width": 12, "root_depth": 12, "neural": 12, "architectur": 12, "4": [12, 17], "framework": 12, "It": 12, "scalar": 12, "locat": 12, "individu": 12, "point": 12, "datasetshap": 12, "neuron": 12, "each": 12, "hidden": 12, "layer": 12, "indic": 12, "process": 12, "probe": 12, "flatten": 12, "thei": 12, "ar": 12, "expand": 12, "match": 12, "dimens": 12, "stack": 12, "repres": 12, "output": 12, "specifi": 12, "properti": 12, "fulli": 12, "describ": 12, "model_dir": 12, "model_base_class": 12, "abcmeta": 12, "json_handl": 12, "model_paramet": 12, "json": 12, "pt_handl": 12, "pt": 12, "out_dir": [12, 13], "classmethod": 13, "self": 13, "panda": 13, "core": 13, "frame": 13, "run_dir": 13, "data_tupl": 13, "multirun": 13, "multi_run": 13, "df_plot": 13, "out_fil": 13, "ax": 13, "val_indic": 13, "kernel_s": 14, "cutoff_frequ": 14, "sampling_r": 14, "min_valu": 16, "max_valu": 16, "appli": 16, "invers": 16, "exist": 16, "undon": 16, "rais": 16, "notimplementederror": 16, "If": 16, "implement": 16, "obj": 17, "ani": 17, "recurs": 17, "convert": 17, "nest": 17, "dataclass": 17, "dictionari": 17, "A": 17, "represent": 17, "includ": 17, "time_stamp": 17, "datetim": 17, "time": 17, "2024": 17, "26": 17, "12": 17, "20": 17, "762905": 17, "uniqu": 17, "id": 17}, "objects": {"": [[4, 0, 0, "-", "nos"]], "nos": [[5, 0, 0, "-", "benchmarks"], [6, 0, 0, "-", "data"], [9, 0, 0, "-", "metrics"], [10, 0, 0, "-", "networks"], [12, 0, 0, "-", "operators"], [13, 0, 0, "-", "plots"], [14, 0, 0, "-", "preprocessing"], [16, 0, 0, "-", "transforms"], [17, 0, 0, "-", "utils"]], "nos.benchmarks": [[5, 1, 1, "", "Benchmark"], [5, 0, 0, "-", "benchmark"]], "nos.benchmarks.Benchmark": [[5, 2, 1, "", "metrics"], [5, 2, 1, "", "test_set"], [5, 2, 1, "", "train_set"]], "nos.benchmarks.benchmark": [[5, 1, 1, "", "Benchmark"]], "nos.benchmarks.benchmark.Benchmark": [[5, 2, 1, "", "metrics"], [5, 2, 1, "", "test_set"], [5, 2, 1, "", "train_set"]], "nos.data": [[6, 1, 1, "", "TLDataset"], [6, 1, 1, "", "TLDatasetCompact"], [6, 1, 1, "", "TLDatasetCompactExp"], [6, 1, 1, "", "TLDatasetCompactWave"], [7, 0, 0, "-", "indicator_function"], [8, 0, 0, "-", "transmission_loss"]], "nos.data.indicator_function": [[7, 1, 1, "", "CShape"], [7, 1, 1, "", "IndicatorTLDataset"], [7, 0, 0, "-", "c_shape"], [7, 0, 0, "-", "indicator_to_tl"], [7, 0, 0, "-", "params_to_indicator"]], "nos.data.indicator_function.c_shape": [[7, 1, 1, "", "CShape"]], "nos.data.indicator_function.indicator_to_tl": [[7, 1, 1, "", "IndicatorTLDataset"]], "nos.data.indicator_function.params_to_indicator": [[7, 3, 1, "", "params_to_indicator"]], "nos.data.transmission_loss": [[8, 1, 1, "", "TLDataset"], [8, 1, 1, "", "TLDatasetCompact"], [8, 1, 1, "", "TLDatasetCompactExp"], [8, 1, 1, "", "TLDatasetCompactWave"], [8, 3, 1, "", "get_n_unique"], [8, 3, 1, "", "get_tl_compact"], [8, 3, 1, "", "get_tl_frame"], [8, 3, 1, "", "get_tl_from_path"], [8, 3, 1, "", "get_transformations"], [8, 3, 1, "", "get_unique_crystals"], [8, 0, 0, "-", "transmission_loss"], [8, 0, 0, "-", "transmission_loss_compact"], [8, 0, 0, "-", "transmission_loss_exp"], [8, 0, 0, "-", "transmission_loss_wave"]], "nos.data.transmission_loss.transmission_loss": [[8, 1, 1, "", "TLDataset"], [8, 3, 1, "", "get_n_unique"], [8, 3, 1, "", "get_tl_frame"], [8, 3, 1, "", "get_tl_from_path"], [8, 3, 1, "", "get_transformations"], [8, 3, 1, "", "get_unique_crystals"]], "nos.data.transmission_loss.transmission_loss_compact": [[8, 1, 1, "", "TLDatasetCompact"], [8, 3, 1, "", "get_tl_compact"]], "nos.data.transmission_loss.transmission_loss_exp": [[8, 1, 1, "", "TLDatasetCompactExp"]], "nos.data.transmission_loss.transmission_loss_wave": [[8, 1, 1, "", "TLDatasetCompactWave"], [8, 3, 1, "", "gaussian_modulated_sine_encoding"], [8, 3, 1, "", "simple_sine_encoding"]], "nos.metrics": [[9, 1, 1, "", "L1Error"], [9, 1, 1, "", "MSError"], [9, 1, 1, "", "Metric"], [9, 1, 1, "", "NumberOfParameters"], [9, 1, 1, "", "SpeedOfEvaluation"], [9, 0, 0, "-", "error_metrics"], [9, 0, 0, "-", "metric"], [9, 0, 0, "-", "operator_metrics"]], "nos.metrics.Metric": [[9, 4, 1, "", "__call__"]], "nos.metrics.error_metrics": [[9, 1, 1, "", "L1Error"], [9, 1, 1, "", "Loss"], [9, 1, 1, "", "MSError"]], "nos.metrics.metric": [[9, 1, 1, "", "Metric"]], "nos.metrics.metric.Metric": [[9, 4, 1, "", "__call__"]], "nos.metrics.operator_metrics": [[9, 1, 1, "", "NumberOfParameters"], [9, 1, 1, "", "SpeedOfEvaluation"]], "nos.networks": [[10, 1, 1, "", "ResBlock"], [10, 1, 1, "", "ResNet"], [11, 0, 0, "-", "attention"], [10, 0, 0, "-", "residual"]], "nos.networks.ResBlock": [[10, 4, 1, "", "forward"]], "nos.networks.ResNet": [[10, 4, 1, "", "forward"]], "nos.networks.attention": [[11, 0, 0, "-", "cross_attention"], [11, 0, 0, "-", "linear_cross_attention"], [11, 0, 0, "-", "linear_self_attention"], [11, 0, 0, "-", "self_attention"]], "nos.networks.residual": [[10, 1, 1, "", "ResBlock"], [10, 1, 1, "", "ResNet"]], "nos.networks.residual.ResBlock": [[10, 4, 1, "", "forward"]], "nos.networks.residual.ResNet": [[10, 4, 1, "", "forward"]], "nos.operators": [[12, 1, 1, "", "DeepDotOperator"], [12, 1, 1, "", "DeepNeuralOperator"], [12, 1, 1, "", "DeepOFNO"], [12, 1, 1, "", "DeepONet"], [12, 1, 1, "", "FourierNeuralOperator"], [12, 1, 1, "", "MeanStackNeuralOperator"], [12, 1, 1, "", "NeuralOperator"], [12, 0, 0, "-", "deep_dot_operator"], [12, 0, 0, "-", "deep_neural_operator"], [12, 0, 0, "-", "deep_o_fno"], [12, 0, 0, "-", "deep_o_net"], [12, 0, 0, "-", "deep_root_operator"], [12, 3, 1, "", "deserialize"], [12, 0, 0, "-", "fourier_neural_operator"], [12, 3, 1, "", "from_json"], [12, 3, 1, "", "from_pt"], [12, 0, 0, "-", "mean_stack_neural_operator"], [12, 0, 0, "-", "operator"], [12, 3, 1, "", "serialize"], [12, 3, 1, "", "to_json"], [12, 3, 1, "", "to_pt"], [12, 0, 0, "-", "utils"]], "nos.operators.DeepDotOperator": [[12, 4, 1, "", "forward"]], "nos.operators.DeepNeuralOperator": [[12, 4, 1, "", "forward"]], "nos.operators.DeepOFNO": [[12, 4, 1, "", "forward"]], "nos.operators.MeanStackNeuralOperator": [[12, 4, 1, "", "forward"]], "nos.operators.NeuralOperator": [[12, 4, 1, "", "info"]], "nos.operators.deep_dot_operator": [[12, 1, 1, "", "DeepDotOperator"]], "nos.operators.deep_dot_operator.DeepDotOperator": [[12, 4, 1, "", "forward"]], "nos.operators.deep_neural_operator": [[12, 1, 1, "", "DeepNeuralOperator"]], "nos.operators.deep_neural_operator.DeepNeuralOperator": [[12, 4, 1, "", "forward"]], "nos.operators.deep_o_fno": [[12, 1, 1, "", "DeepOFNO"]], "nos.operators.deep_o_fno.DeepOFNO": [[12, 4, 1, "", "forward"]], "nos.operators.deep_o_net": [[12, 1, 1, "", "DeepONet"], [12, 1, 1, "", "MYDeepONet"]], "nos.operators.deep_o_net.MYDeepONet": [[12, 4, 1, "", "forward"]], "nos.operators.deep_root_operator": [[12, 1, 1, "", "DeepRootOperator"]], "nos.operators.deep_root_operator.DeepRootOperator": [[12, 4, 1, "", "forward"]], "nos.operators.fourier_neural_operator": [[12, 1, 1, "", "FourierNeuralOperator"]], "nos.operators.mean_stack_neural_operator": [[12, 1, 1, "", "MeanStackNeuralOperator"]], "nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator": [[12, 4, 1, "", "forward"]], "nos.operators.operator": [[12, 1, 1, "", "NeuralOperator"]], "nos.operators.operator.NeuralOperator": [[12, 4, 1, "", "info"]], "nos.operators.utils": [[12, 3, 1, "", "deserialize"], [12, 3, 1, "", "from_json"], [12, 3, 1, "", "from_pt"], [12, 3, 1, "", "serialize"], [12, 3, 1, "", "to_json"], [12, 3, 1, "", "to_pt"]], "nos.plots": [[13, 1, 1, "", "ModelData"], [13, 1, 1, "", "MultiRunData"], [13, 1, 1, "", "RunData"], [13, 0, 0, "-", "data"], [13, 0, 0, "-", "metrics"], [13, 3, 1, "", "plot_multirun_curves"], [13, 3, 1, "", "plot_multirun_metrics"], [13, 3, 1, "", "plot_multirun_transmission_loss"], [13, 0, 0, "-", "training_curves"], [13, 0, 0, "-", "transmission_loss"], [13, 0, 0, "-", "utils"]], "nos.plots.ModelData": [[13, 2, 1, "", "checkpoint"], [13, 4, 1, "", "from_dir"], [13, 2, 1, "", "name"], [13, 2, 1, "", "operator"], [13, 2, 1, "", "path"]], "nos.plots.MultiRunData": [[13, 2, 1, "", "config"], [13, 4, 1, "", "from_dir"], [13, 2, 1, "", "name"], [13, 2, 1, "", "path"], [13, 2, 1, "", "results"], [13, 2, 1, "", "runs"]], "nos.plots.RunData": [[13, 2, 1, "", "choices"], [13, 4, 1, "", "from_dir"], [13, 2, 1, "", "models"], [13, 2, 1, "", "name"], [13, 2, 1, "", "path"], [13, 2, 1, "", "training"], [13, 2, 1, "", "training_config"]], "nos.plots.data": [[13, 1, 1, "", "ModelData"], [13, 1, 1, "", "MultiRunData"], [13, 1, 1, "", "RunData"]], "nos.plots.data.ModelData": [[13, 2, 1, "", "checkpoint"], [13, 4, 1, "", "from_dir"], [13, 2, 1, "", "name"], [13, 2, 1, "", "operator"], [13, 2, 1, "", "path"]], "nos.plots.data.MultiRunData": [[13, 2, 1, "", "config"], [13, 4, 1, "", "from_dir"], [13, 2, 1, "", "name"], [13, 2, 1, "", "path"], [13, 2, 1, "", "results"], [13, 2, 1, "", "runs"]], "nos.plots.data.RunData": [[13, 2, 1, "", "choices"], [13, 4, 1, "", "from_dir"], [13, 2, 1, "", "models"], [13, 2, 1, "", "name"], [13, 2, 1, "", "path"], [13, 2, 1, "", "training"], [13, 2, 1, "", "training_config"]], "nos.plots.metrics": [[13, 3, 1, "", "plot_all_metrics"], [13, 3, 1, "", "plot_multirun_metrics"]], "nos.plots.training_curves": [[13, 3, 1, "", "plot_multirun_curves"], [13, 3, 1, "", "plot_run_curves"], [13, 3, 1, "", "plot_xyz_vs_error"]], "nos.plots.transmission_loss": [[13, 3, 1, "", "plot_ax"], [13, 3, 1, "", "plot_model_transmission_loss"], [13, 3, 1, "", "plot_multirun_transmission_loss"], [13, 3, 1, "", "plot_run_transmission_loss"], [13, 3, 1, "", "plot_single"], [13, 3, 1, "", "plot_transmission_loss_best"], [13, 3, 1, "", "plot_transmission_loss_hist"], [13, 3, 1, "", "plot_transmission_loss_mean"], [13, 3, 1, "", "plot_transmission_loss_median"], [13, 3, 1, "", "plot_transmission_loss_qtile"], [13, 3, 1, "", "plot_transmission_loss_tile"], [13, 3, 1, "", "plot_transmission_loss_worst"]], "nos.plots.utils": [[13, 3, 1, "", "eval_operator"]], "nos.preprocessing": [[14, 1, 1, "", "LowPassFilter1D"], [14, 0, 0, "-", "low_pass_filter"]], "nos.preprocessing.LowPassFilter1D": [[14, 4, 1, "", "forward"]], "nos.preprocessing.low_pass_filter": [[14, 1, 1, "", "LowPassFilter1D"]], "nos.preprocessing.low_pass_filter.LowPassFilter1D": [[14, 4, 1, "", "forward"]], "nos.transforms": [[16, 1, 1, "", "MinMaxScale"], [16, 0, 0, "-", "scaling"]], "nos.transforms.MinMaxScale": [[16, 4, 1, "", "forward"], [16, 4, 1, "", "undo"]], "nos.transforms.scaling": [[16, 1, 1, "", "MinMaxScale"]], "nos.transforms.scaling.MinMaxScale": [[16, 4, 1, "", "forward"], [16, 4, 1, "", "undo"]], "nos.utils": [[17, 1, 1, "", "UniqueId"], [17, 3, 1, "", "dataclass_to_dict"], [17, 0, 0, "-", "nested_dataclass_to_dict"], [17, 0, 0, "-", "unique_id"]], "nos.utils.nested_dataclass_to_dict": [[17, 3, 1, "", "dataclass_to_dict"]], "nos.utils.unique_id": [[17, 1, 1, "", "UniqueId"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:attribute", "3": "py:function", "4": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "attribute", "Python attribute"], "3": ["py", "function", "Python function"], "4": ["py", "method", "Python method"]}, "titleterms": {"code": 0, "coverag": 0, "exampl": [1, 2], "neural": 2, "oper": [2, 12], "helmholtz": 2, "equat": 2, "content": [2, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], "introduct": 2, "api": 2, "refer": 2, "nos": [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], "packag": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], "subpackag": [4, 6, 10], "modul": [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], "benchmark": 5, "submodul": [5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17], "data": [6, 7, 8, 13], "indicator_funct": 7, "c_shape": 7, "indicator_to_tl": 7, "params_to_ind": 7, "transmission_loss": [8, 13], "transmission_loss_compact": 8, "transmission_loss_exp": 8, "transmission_loss_wav": 8, "metric": [9, 13], "error_metr": 9, "operator_metr": 9, "network": [10, 11], "residu": 10, "attent": 11, "cross_attent": 11, "linear_cross_attent": 11, "linear_self_attent": 11, "self_attent": 11, "deep_dot_oper": 12, "deep_neural_oper": 12, "deep_o_fno": 12, "deep_o_net": 12, "deep_root_oper": 12, "fourier_neural_oper": 12, "mean_stack_neural_oper": 12, "util": [12, 13, 15, 17], "plot": 13, "training_curv": 13, "preprocess": 14, "low_pass_filt": 14, "trainer": 15, "average_metr": 15, "transform": 16, "scale": 16, "nested_dataclass_to_dict": 17, "unique_id": 17}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx": 60}, "alltitles": {"Code Coverage": [[0, "code-coverage"]], "Examples": [[1, "examples"], [2, "examples"]], "Neural Operators for Helmholtz Equation": [[2, "neural-operators-for-helmholtz-equation"]], "Contents": [[2, "contents"]], "Introduction": [[2, "introduction"]], "API Reference": [[2, "api-reference"]], "nos": [[3, "nos"]], "nos package": [[4, "nos-package"]], "Subpackages": [[4, "subpackages"], [6, "subpackages"], [10, "subpackages"]], "Module contents": [[4, "module-nos"], [5, "module-nos.benchmarks"], [6, "module-nos.data"], [7, "module-nos.data.indicator_function"], [8, "module-nos.data.transmission_loss"], [9, "module-nos.metrics"], [10, "module-nos.networks"], [11, "module-nos.networks.attention"], [12, "module-nos.operators"], [13, "module-nos.plots"], [14, "module-nos.preprocessing"], [15, "module-contents"], [16, "module-nos.transforms"], [17, "module-nos.utils"]], "nos.benchmarks package": [[5, "nos-benchmarks-package"]], "Submodules": [[5, "submodules"], [7, "submodules"], [8, "submodules"], [9, "submodules"], [10, "submodules"], [11, "submodules"], [12, "submodules"], [13, "submodules"], [14, "submodules"], [15, "submodules"], [16, "submodules"], [17, "submodules"]], "nos.benchmarks.benchmark module": [[5, "module-nos.benchmarks.benchmark"]], "nos.data package": [[6, "nos-data-package"]], "nos.data.indicator_function package": [[7, "nos-data-indicator-function-package"]], "nos.data.indicator_function.c_shape module": [[7, "module-nos.data.indicator_function.c_shape"]], "nos.data.indicator_function.indicator_to_tl module": [[7, "module-nos.data.indicator_function.indicator_to_tl"]], "nos.data.indicator_function.params_to_indicator module": [[7, "module-nos.data.indicator_function.params_to_indicator"]], "nos.data.transmission_loss package": [[8, "nos-data-transmission-loss-package"]], "nos.data.transmission_loss.transmission_loss module": [[8, "module-nos.data.transmission_loss.transmission_loss"]], "nos.data.transmission_loss.transmission_loss_compact module": [[8, "module-nos.data.transmission_loss.transmission_loss_compact"]], "nos.data.transmission_loss.transmission_loss_exp module": [[8, "module-nos.data.transmission_loss.transmission_loss_exp"]], "nos.data.transmission_loss.transmission_loss_wave module": [[8, "module-nos.data.transmission_loss.transmission_loss_wave"]], "nos.metrics package": [[9, "nos-metrics-package"]], "nos.metrics.error_metrics module": [[9, "module-nos.metrics.error_metrics"]], "nos.metrics.metric module": [[9, "module-nos.metrics.metric"]], "nos.metrics.operator_metrics module": [[9, "module-nos.metrics.operator_metrics"]], "nos.networks package": [[10, "nos-networks-package"]], "nos.networks.residual module": [[10, "module-nos.networks.residual"]], "nos.networks.attention package": [[11, "nos-networks-attention-package"]], "nos.networks.attention.cross_attention module": [[11, "module-nos.networks.attention.cross_attention"]], "nos.networks.attention.linear_cross_attention module": [[11, "module-nos.networks.attention.linear_cross_attention"]], "nos.networks.attention.linear_self_attention module": [[11, "module-nos.networks.attention.linear_self_attention"]], "nos.networks.attention.self_attention module": [[11, "module-nos.networks.attention.self_attention"]], "nos.operators package": [[12, "nos-operators-package"]], "nos.operators.deep_dot_operator module": [[12, "module-nos.operators.deep_dot_operator"]], "nos.operators.deep_neural_operator module": [[12, "module-nos.operators.deep_neural_operator"]], "nos.operators.deep_o_fno module": [[12, "module-nos.operators.deep_o_fno"]], "nos.operators.deep_o_net module": [[12, "module-nos.operators.deep_o_net"]], "nos.operators.deep_root_operator module": [[12, "module-nos.operators.deep_root_operator"]], "nos.operators.fourier_neural_operator module": [[12, "module-nos.operators.fourier_neural_operator"]], "nos.operators.mean_stack_neural_operator module": [[12, "module-nos.operators.mean_stack_neural_operator"]], "nos.operators.operator module": [[12, "module-nos.operators.operator"]], "nos.operators.utils module": [[12, "module-nos.operators.utils"]], "nos.plots package": [[13, "nos-plots-package"]], "nos.plots.data module": [[13, "module-nos.plots.data"]], "nos.plots.metrics module": [[13, "module-nos.plots.metrics"]], "nos.plots.training_curves module": [[13, "module-nos.plots.training_curves"]], "nos.plots.transmission_loss module": [[13, "module-nos.plots.transmission_loss"]], "nos.plots.utils module": [[13, "module-nos.plots.utils"]], "nos.preprocessing package": [[14, "nos-preprocessing-package"]], "nos.preprocessing.low_pass_filter module": [[14, "module-nos.preprocessing.low_pass_filter"]], "nos.trainers package": [[15, "nos-trainers-package"]], "nos.trainers.average_metric module": [[15, "nos-trainers-average-metric-module"]], "nos.trainers.trainer module": [[15, "nos-trainers-trainer-module"]], "nos.trainers.util module": [[15, "nos-trainers-util-module"]], "nos.transforms package": [[16, "nos-transforms-package"]], "nos.transforms.scaling module": [[16, "module-nos.transforms.scaling"]], "nos.utils package": [[17, "nos-utils-package"]], "nos.utils.nested_dataclass_to_dict module": [[17, "module-nos.utils.nested_dataclass_to_dict"]], "nos.utils.unique_id module": [[17, "module-nos.utils.unique_id"]]}, "indexentries": {"module": [[4, "module-nos"], [5, "module-nos.benchmarks"], [5, "module-nos.benchmarks.benchmark"], [6, "module-nos.data"], [7, "module-nos.data.indicator_function"], [7, "module-nos.data.indicator_function.c_shape"], [7, "module-nos.data.indicator_function.indicator_to_tl"], [7, "module-nos.data.indicator_function.params_to_indicator"], [8, "module-nos.data.transmission_loss"], [8, "module-nos.data.transmission_loss.transmission_loss"], [8, "module-nos.data.transmission_loss.transmission_loss_compact"], [8, "module-nos.data.transmission_loss.transmission_loss_exp"], [8, "module-nos.data.transmission_loss.transmission_loss_wave"], [9, "module-nos.metrics"], [9, "module-nos.metrics.error_metrics"], [9, "module-nos.metrics.metric"], [9, "module-nos.metrics.operator_metrics"], [10, "module-nos.networks"], [10, "module-nos.networks.residual"], [11, "module-nos.networks.attention"], [11, "module-nos.networks.attention.cross_attention"], [11, "module-nos.networks.attention.linear_cross_attention"], [11, "module-nos.networks.attention.linear_self_attention"], [11, "module-nos.networks.attention.self_attention"], [12, "module-nos.operators"], [12, "module-nos.operators.deep_dot_operator"], [12, "module-nos.operators.deep_neural_operator"], [12, "module-nos.operators.deep_o_fno"], [12, "module-nos.operators.deep_o_net"], [12, "module-nos.operators.deep_root_operator"], [12, "module-nos.operators.fourier_neural_operator"], [12, "module-nos.operators.mean_stack_neural_operator"], [12, "module-nos.operators.operator"], [12, "module-nos.operators.utils"], [13, "module-nos.plots"], [13, "module-nos.plots.data"], [13, "module-nos.plots.metrics"], [13, "module-nos.plots.training_curves"], [13, "module-nos.plots.transmission_loss"], [13, "module-nos.plots.utils"], [14, "module-nos.preprocessing"], [14, "module-nos.preprocessing.low_pass_filter"], [16, "module-nos.transforms"], [16, "module-nos.transforms.scaling"], [17, "module-nos.utils"], [17, "module-nos.utils.nested_dataclass_to_dict"], [17, "module-nos.utils.unique_id"]], "nos": [[4, "module-nos"]], "benchmark (class in nos.benchmarks)": [[5, "nos.benchmarks.Benchmark"]], "benchmark (class in nos.benchmarks.benchmark)": [[5, "nos.benchmarks.benchmark.Benchmark"]], "metrics (nos.benchmarks.benchmark attribute)": [[5, "nos.benchmarks.Benchmark.metrics"]], "metrics (nos.benchmarks.benchmark.benchmark attribute)": [[5, "nos.benchmarks.benchmark.Benchmark.metrics"]], "nos.benchmarks": [[5, "module-nos.benchmarks"]], "nos.benchmarks.benchmark": [[5, "module-nos.benchmarks.benchmark"]], "test_set (nos.benchmarks.benchmark attribute)": [[5, "nos.benchmarks.Benchmark.test_set"]], "test_set (nos.benchmarks.benchmark.benchmark attribute)": [[5, "nos.benchmarks.benchmark.Benchmark.test_set"]], "train_set (nos.benchmarks.benchmark attribute)": [[5, "nos.benchmarks.Benchmark.train_set"]], "train_set (nos.benchmarks.benchmark.benchmark attribute)": [[5, "nos.benchmarks.benchmark.Benchmark.train_set"]], "tldataset (class in nos.data)": [[6, "nos.data.TLDataset"]], "tldatasetcompact (class in nos.data)": [[6, "nos.data.TLDatasetCompact"]], "tldatasetcompactexp (class in nos.data)": [[6, "nos.data.TLDatasetCompactExp"]], "tldatasetcompactwave (class in nos.data)": [[6, "nos.data.TLDatasetCompactWave"]], "nos.data": [[6, "module-nos.data"]], "cshape (class in nos.data.indicator_function)": [[7, "nos.data.indicator_function.CShape"]], "cshape (class in nos.data.indicator_function.c_shape)": [[7, "nos.data.indicator_function.c_shape.CShape"]], "indicatortldataset (class in nos.data.indicator_function)": [[7, "nos.data.indicator_function.IndicatorTLDataset"]], "indicatortldataset (class in nos.data.indicator_function.indicator_to_tl)": [[7, "nos.data.indicator_function.indicator_to_tl.IndicatorTLDataset"]], "nos.data.indicator_function": [[7, "module-nos.data.indicator_function"]], "nos.data.indicator_function.c_shape": [[7, "module-nos.data.indicator_function.c_shape"]], "nos.data.indicator_function.indicator_to_tl": [[7, "module-nos.data.indicator_function.indicator_to_tl"]], "nos.data.indicator_function.params_to_indicator": [[7, "module-nos.data.indicator_function.params_to_indicator"]], "params_to_indicator() (in module nos.data.indicator_function.params_to_indicator)": [[7, "nos.data.indicator_function.params_to_indicator.params_to_indicator"]], "tldataset (class in nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.TLDataset"]], "tldataset (class in nos.data.transmission_loss.transmission_loss)": [[8, "nos.data.transmission_loss.transmission_loss.TLDataset"]], "tldatasetcompact (class in nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.TLDatasetCompact"]], "tldatasetcompact (class in nos.data.transmission_loss.transmission_loss_compact)": [[8, "nos.data.transmission_loss.transmission_loss_compact.TLDatasetCompact"]], "tldatasetcompactexp (class in nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.TLDatasetCompactExp"]], "tldatasetcompactexp (class in nos.data.transmission_loss.transmission_loss_exp)": [[8, "nos.data.transmission_loss.transmission_loss_exp.TLDatasetCompactExp"]], "tldatasetcompactwave (class in nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.TLDatasetCompactWave"]], "tldatasetcompactwave (class in nos.data.transmission_loss.transmission_loss_wave)": [[8, "nos.data.transmission_loss.transmission_loss_wave.TLDatasetCompactWave"]], "gaussian_modulated_sine_encoding() (in module nos.data.transmission_loss.transmission_loss_wave)": [[8, "nos.data.transmission_loss.transmission_loss_wave.gaussian_modulated_sine_encoding"]], "get_n_unique() (in module nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.get_n_unique"]], "get_n_unique() (in module nos.data.transmission_loss.transmission_loss)": [[8, "nos.data.transmission_loss.transmission_loss.get_n_unique"]], "get_tl_compact() (in module nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.get_tl_compact"]], "get_tl_compact() (in module nos.data.transmission_loss.transmission_loss_compact)": [[8, "nos.data.transmission_loss.transmission_loss_compact.get_tl_compact"]], "get_tl_frame() (in module nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.get_tl_frame"]], "get_tl_frame() (in module nos.data.transmission_loss.transmission_loss)": [[8, "nos.data.transmission_loss.transmission_loss.get_tl_frame"]], "get_tl_from_path() (in module nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.get_tl_from_path"]], "get_tl_from_path() (in module nos.data.transmission_loss.transmission_loss)": [[8, "nos.data.transmission_loss.transmission_loss.get_tl_from_path"]], "get_transformations() (in module nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.get_transformations"]], "get_transformations() (in module nos.data.transmission_loss.transmission_loss)": [[8, "nos.data.transmission_loss.transmission_loss.get_transformations"]], "get_unique_crystals() (in module nos.data.transmission_loss)": [[8, "nos.data.transmission_loss.get_unique_crystals"]], "get_unique_crystals() (in module nos.data.transmission_loss.transmission_loss)": [[8, "nos.data.transmission_loss.transmission_loss.get_unique_crystals"]], "nos.data.transmission_loss": [[8, "module-nos.data.transmission_loss"]], "nos.data.transmission_loss.transmission_loss": [[8, "module-nos.data.transmission_loss.transmission_loss"]], "nos.data.transmission_loss.transmission_loss_compact": [[8, "module-nos.data.transmission_loss.transmission_loss_compact"]], "nos.data.transmission_loss.transmission_loss_exp": [[8, "module-nos.data.transmission_loss.transmission_loss_exp"]], "nos.data.transmission_loss.transmission_loss_wave": [[8, "module-nos.data.transmission_loss.transmission_loss_wave"]], "simple_sine_encoding() (in module nos.data.transmission_loss.transmission_loss_wave)": [[8, "nos.data.transmission_loss.transmission_loss_wave.simple_sine_encoding"]], "l1error (class in nos.metrics)": [[9, "nos.metrics.L1Error"]], "l1error (class in nos.metrics.error_metrics)": [[9, "nos.metrics.error_metrics.L1Error"]], "loss (class in nos.metrics.error_metrics)": [[9, "nos.metrics.error_metrics.Loss"]], "mserror (class in nos.metrics)": [[9, "nos.metrics.MSError"]], "mserror (class in nos.metrics.error_metrics)": [[9, "nos.metrics.error_metrics.MSError"]], "metric (class in nos.metrics)": [[9, "nos.metrics.Metric"]], "metric (class in nos.metrics.metric)": [[9, "nos.metrics.metric.Metric"]], "numberofparameters (class in nos.metrics)": [[9, "nos.metrics.NumberOfParameters"]], "numberofparameters (class in nos.metrics.operator_metrics)": [[9, "nos.metrics.operator_metrics.NumberOfParameters"]], "speedofevaluation (class in nos.metrics)": [[9, "nos.metrics.SpeedOfEvaluation"]], "speedofevaluation (class in nos.metrics.operator_metrics)": [[9, "nos.metrics.operator_metrics.SpeedOfEvaluation"]], "__call__() (nos.metrics.metric method)": [[9, "nos.metrics.Metric.__call__"]], "__call__() (nos.metrics.metric.metric method)": [[9, "nos.metrics.metric.Metric.__call__"]], "nos.metrics": [[9, "module-nos.metrics"]], "nos.metrics.error_metrics": [[9, "module-nos.metrics.error_metrics"]], "nos.metrics.metric": [[9, "module-nos.metrics.metric"]], "nos.metrics.operator_metrics": [[9, "module-nos.metrics.operator_metrics"]], "resblock (class in nos.networks)": [[10, "nos.networks.ResBlock"]], "resblock (class in nos.networks.residual)": [[10, "nos.networks.residual.ResBlock"]], "resnet (class in nos.networks)": [[10, "nos.networks.ResNet"]], "resnet (class in nos.networks.residual)": [[10, "nos.networks.residual.ResNet"]], "forward() (nos.networks.resblock method)": [[10, "nos.networks.ResBlock.forward"]], "forward() (nos.networks.resnet method)": [[10, "nos.networks.ResNet.forward"]], "forward() (nos.networks.residual.resblock method)": [[10, "nos.networks.residual.ResBlock.forward"]], "forward() (nos.networks.residual.resnet method)": [[10, "nos.networks.residual.ResNet.forward"]], "nos.networks": [[10, "module-nos.networks"]], "nos.networks.residual": [[10, "module-nos.networks.residual"]], "nos.networks.attention": [[11, "module-nos.networks.attention"]], "nos.networks.attention.cross_attention": [[11, "module-nos.networks.attention.cross_attention"]], "nos.networks.attention.linear_cross_attention": [[11, "module-nos.networks.attention.linear_cross_attention"]], "nos.networks.attention.linear_self_attention": [[11, "module-nos.networks.attention.linear_self_attention"]], "nos.networks.attention.self_attention": [[11, "module-nos.networks.attention.self_attention"]], "deepdotoperator (class in nos.operators)": [[12, "nos.operators.DeepDotOperator"]], "deepdotoperator (class in nos.operators.deep_dot_operator)": [[12, "nos.operators.deep_dot_operator.DeepDotOperator"]], "deepneuraloperator (class in nos.operators)": [[12, "nos.operators.DeepNeuralOperator"]], "deepneuraloperator (class in nos.operators.deep_neural_operator)": [[12, "nos.operators.deep_neural_operator.DeepNeuralOperator"]], "deepofno (class in nos.operators)": [[12, "nos.operators.DeepOFNO"]], "deepofno (class in nos.operators.deep_o_fno)": [[12, "nos.operators.deep_o_fno.DeepOFNO"]], "deeponet (class in nos.operators)": [[12, "nos.operators.DeepONet"]], "deeponet (class in nos.operators.deep_o_net)": [[12, "nos.operators.deep_o_net.DeepONet"]], "deeprootoperator (class in nos.operators.deep_root_operator)": [[12, "nos.operators.deep_root_operator.DeepRootOperator"]], "fourierneuraloperator (class in nos.operators)": [[12, "nos.operators.FourierNeuralOperator"]], "fourierneuraloperator (class in nos.operators.fourier_neural_operator)": [[12, "nos.operators.fourier_neural_operator.FourierNeuralOperator"]], "mydeeponet (class in nos.operators.deep_o_net)": [[12, "nos.operators.deep_o_net.MYDeepONet"]], "meanstackneuraloperator (class in nos.operators)": [[12, "nos.operators.MeanStackNeuralOperator"]], "meanstackneuraloperator (class in nos.operators.mean_stack_neural_operator)": [[12, "nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator"]], "neuraloperator (class in nos.operators)": [[12, "nos.operators.NeuralOperator"]], "neuraloperator (class in nos.operators.operator)": [[12, "nos.operators.operator.NeuralOperator"]], "deserialize() (in module nos.operators)": [[12, "nos.operators.deserialize"]], "deserialize() (in module nos.operators.utils)": [[12, "nos.operators.utils.deserialize"]], "forward() (nos.operators.deepdotoperator method)": [[12, "nos.operators.DeepDotOperator.forward"]], "forward() (nos.operators.deepneuraloperator method)": [[12, "nos.operators.DeepNeuralOperator.forward"]], "forward() (nos.operators.deepofno method)": [[12, "nos.operators.DeepOFNO.forward"]], "forward() (nos.operators.meanstackneuraloperator method)": [[12, "nos.operators.MeanStackNeuralOperator.forward"]], "forward() (nos.operators.deep_dot_operator.deepdotoperator method)": [[12, "nos.operators.deep_dot_operator.DeepDotOperator.forward"]], "forward() (nos.operators.deep_neural_operator.deepneuraloperator method)": [[12, "nos.operators.deep_neural_operator.DeepNeuralOperator.forward"]], "forward() (nos.operators.deep_o_fno.deepofno method)": [[12, "nos.operators.deep_o_fno.DeepOFNO.forward"]], "forward() (nos.operators.deep_o_net.mydeeponet method)": [[12, "nos.operators.deep_o_net.MYDeepONet.forward"]], "forward() (nos.operators.deep_root_operator.deeprootoperator method)": [[12, "nos.operators.deep_root_operator.DeepRootOperator.forward"]], "forward() (nos.operators.mean_stack_neural_operator.meanstackneuraloperator method)": [[12, "nos.operators.mean_stack_neural_operator.MeanStackNeuralOperator.forward"]], "from_json() (in module nos.operators)": [[12, "nos.operators.from_json"]], "from_json() (in module nos.operators.utils)": [[12, "nos.operators.utils.from_json"]], "from_pt() (in module nos.operators)": [[12, "nos.operators.from_pt"]], "from_pt() (in module nos.operators.utils)": [[12, "nos.operators.utils.from_pt"]], "info() (nos.operators.neuraloperator method)": [[12, "nos.operators.NeuralOperator.info"]], "info() (nos.operators.operator.neuraloperator method)": [[12, "nos.operators.operator.NeuralOperator.info"]], "nos.operators": [[12, "module-nos.operators"]], "nos.operators.deep_dot_operator": [[12, "module-nos.operators.deep_dot_operator"]], "nos.operators.deep_neural_operator": [[12, "module-nos.operators.deep_neural_operator"]], "nos.operators.deep_o_fno": [[12, "module-nos.operators.deep_o_fno"]], "nos.operators.deep_o_net": [[12, "module-nos.operators.deep_o_net"]], "nos.operators.deep_root_operator": [[12, "module-nos.operators.deep_root_operator"]], "nos.operators.fourier_neural_operator": [[12, "module-nos.operators.fourier_neural_operator"]], "nos.operators.mean_stack_neural_operator": [[12, "module-nos.operators.mean_stack_neural_operator"]], "nos.operators.operator": [[12, "module-nos.operators.operator"]], "nos.operators.utils": [[12, "module-nos.operators.utils"]], "serialize() (in module nos.operators)": [[12, "nos.operators.serialize"]], "serialize() (in module nos.operators.utils)": [[12, "nos.operators.utils.serialize"]], "to_json() (in module nos.operators)": [[12, "nos.operators.to_json"]], "to_json() (in module nos.operators.utils)": [[12, "nos.operators.utils.to_json"]], "to_pt() (in module nos.operators)": [[12, "nos.operators.to_pt"]], "to_pt() (in module nos.operators.utils)": [[12, "nos.operators.utils.to_pt"]], "modeldata (class in nos.plots)": [[13, "nos.plots.ModelData"]], "modeldata (class in nos.plots.data)": [[13, "nos.plots.data.ModelData"]], "multirundata (class in nos.plots)": [[13, "nos.plots.MultiRunData"]], "multirundata (class in nos.plots.data)": [[13, "nos.plots.data.MultiRunData"]], "rundata (class in nos.plots)": [[13, "nos.plots.RunData"]], "rundata (class in nos.plots.data)": [[13, "nos.plots.data.RunData"]], "checkpoint (nos.plots.modeldata attribute)": [[13, "nos.plots.ModelData.checkpoint"]], "checkpoint (nos.plots.data.modeldata attribute)": [[13, "nos.plots.data.ModelData.checkpoint"]], "choices (nos.plots.rundata attribute)": [[13, "nos.plots.RunData.choices"]], "choices (nos.plots.data.rundata attribute)": [[13, "nos.plots.data.RunData.choices"]], "config (nos.plots.multirundata attribute)": [[13, "nos.plots.MultiRunData.config"]], "config (nos.plots.data.multirundata attribute)": [[13, "nos.plots.data.MultiRunData.config"]], "eval_operator() (in module nos.plots.utils)": [[13, "nos.plots.utils.eval_operator"]], "from_dir() (nos.plots.modeldata class method)": [[13, "nos.plots.ModelData.from_dir"]], "from_dir() (nos.plots.multirundata class method)": [[13, "nos.plots.MultiRunData.from_dir"]], "from_dir() (nos.plots.rundata class method)": [[13, "nos.plots.RunData.from_dir"]], "from_dir() (nos.plots.data.modeldata class method)": [[13, "nos.plots.data.ModelData.from_dir"]], "from_dir() (nos.plots.data.multirundata class method)": [[13, "nos.plots.data.MultiRunData.from_dir"]], "from_dir() (nos.plots.data.rundata class method)": [[13, "nos.plots.data.RunData.from_dir"]], "models (nos.plots.rundata attribute)": [[13, "nos.plots.RunData.models"]], "models (nos.plots.data.rundata attribute)": [[13, "nos.plots.data.RunData.models"]], "name (nos.plots.modeldata attribute)": [[13, "nos.plots.ModelData.name"]], "name (nos.plots.multirundata attribute)": [[13, "nos.plots.MultiRunData.name"]], "name (nos.plots.rundata attribute)": [[13, "nos.plots.RunData.name"]], "name (nos.plots.data.modeldata attribute)": [[13, "nos.plots.data.ModelData.name"]], "name (nos.plots.data.multirundata attribute)": [[13, "nos.plots.data.MultiRunData.name"]], "name (nos.plots.data.rundata attribute)": [[13, "nos.plots.data.RunData.name"]], "nos.plots": [[13, "module-nos.plots"]], "nos.plots.data": [[13, "module-nos.plots.data"]], "nos.plots.metrics": [[13, "module-nos.plots.metrics"]], "nos.plots.training_curves": [[13, "module-nos.plots.training_curves"]], "nos.plots.transmission_loss": [[13, "module-nos.plots.transmission_loss"]], "nos.plots.utils": [[13, "module-nos.plots.utils"]], "operator (nos.plots.modeldata attribute)": [[13, "nos.plots.ModelData.operator"]], "operator (nos.plots.data.modeldata attribute)": [[13, "nos.plots.data.ModelData.operator"]], "path (nos.plots.modeldata attribute)": [[13, "nos.plots.ModelData.path"]], "path (nos.plots.multirundata attribute)": [[13, "nos.plots.MultiRunData.path"]], "path (nos.plots.rundata attribute)": [[13, "nos.plots.RunData.path"]], "path (nos.plots.data.modeldata attribute)": [[13, "nos.plots.data.ModelData.path"]], "path (nos.plots.data.multirundata attribute)": [[13, "nos.plots.data.MultiRunData.path"]], "path (nos.plots.data.rundata attribute)": [[13, "nos.plots.data.RunData.path"]], "plot_all_metrics() (in module nos.plots.metrics)": [[13, "nos.plots.metrics.plot_all_metrics"]], "plot_ax() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_ax"]], "plot_model_transmission_loss() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_model_transmission_loss"]], "plot_multirun_curves() (in module nos.plots)": [[13, "nos.plots.plot_multirun_curves"]], "plot_multirun_curves() (in module nos.plots.training_curves)": [[13, "nos.plots.training_curves.plot_multirun_curves"]], "plot_multirun_metrics() (in module nos.plots)": [[13, "nos.plots.plot_multirun_metrics"]], "plot_multirun_metrics() (in module nos.plots.metrics)": [[13, "nos.plots.metrics.plot_multirun_metrics"]], "plot_multirun_transmission_loss() (in module nos.plots)": [[13, "nos.plots.plot_multirun_transmission_loss"]], "plot_multirun_transmission_loss() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_multirun_transmission_loss"]], "plot_run_curves() (in module nos.plots.training_curves)": [[13, "nos.plots.training_curves.plot_run_curves"]], "plot_run_transmission_loss() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_run_transmission_loss"]], "plot_single() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_single"]], "plot_transmission_loss_best() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_transmission_loss_best"]], "plot_transmission_loss_hist() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_transmission_loss_hist"]], "plot_transmission_loss_mean() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_transmission_loss_mean"]], "plot_transmission_loss_median() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_transmission_loss_median"]], "plot_transmission_loss_qtile() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_transmission_loss_qtile"]], "plot_transmission_loss_tile() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_transmission_loss_tile"]], "plot_transmission_loss_worst() (in module nos.plots.transmission_loss)": [[13, "nos.plots.transmission_loss.plot_transmission_loss_worst"]], "plot_xyz_vs_error() (in module nos.plots.training_curves)": [[13, "nos.plots.training_curves.plot_xyz_vs_error"]], "results (nos.plots.multirundata attribute)": [[13, "nos.plots.MultiRunData.results"]], "results (nos.plots.data.multirundata attribute)": [[13, "nos.plots.data.MultiRunData.results"]], "runs (nos.plots.multirundata attribute)": [[13, "nos.plots.MultiRunData.runs"]], "runs (nos.plots.data.multirundata attribute)": [[13, "nos.plots.data.MultiRunData.runs"]], "training (nos.plots.rundata attribute)": [[13, "nos.plots.RunData.training"]], "training (nos.plots.data.rundata attribute)": [[13, "nos.plots.data.RunData.training"]], "training_config (nos.plots.rundata attribute)": [[13, "nos.plots.RunData.training_config"]], "training_config (nos.plots.data.rundata attribute)": [[13, "nos.plots.data.RunData.training_config"]], "lowpassfilter1d (class in nos.preprocessing)": [[14, "nos.preprocessing.LowPassFilter1D"]], "lowpassfilter1d (class in nos.preprocessing.low_pass_filter)": [[14, "nos.preprocessing.low_pass_filter.LowPassFilter1D"]], "forward() (nos.preprocessing.lowpassfilter1d method)": [[14, "nos.preprocessing.LowPassFilter1D.forward"]], "forward() (nos.preprocessing.low_pass_filter.lowpassfilter1d method)": [[14, "nos.preprocessing.low_pass_filter.LowPassFilter1D.forward"]], "nos.preprocessing": [[14, "module-nos.preprocessing"]], "nos.preprocessing.low_pass_filter": [[14, "module-nos.preprocessing.low_pass_filter"]], "minmaxscale (class in nos.transforms)": [[16, "nos.transforms.MinMaxScale"]], "minmaxscale (class in nos.transforms.scaling)": [[16, "nos.transforms.scaling.MinMaxScale"]], "forward() (nos.transforms.minmaxscale method)": [[16, "nos.transforms.MinMaxScale.forward"]], "forward() (nos.transforms.scaling.minmaxscale method)": [[16, "nos.transforms.scaling.MinMaxScale.forward"]], "nos.transforms": [[16, "module-nos.transforms"]], "nos.transforms.scaling": [[16, "module-nos.transforms.scaling"]], "undo() (nos.transforms.minmaxscale method)": [[16, "nos.transforms.MinMaxScale.undo"]], "undo() (nos.transforms.scaling.minmaxscale method)": [[16, "nos.transforms.scaling.MinMaxScale.undo"]], "uniqueid (class in nos.utils)": [[17, "nos.utils.UniqueId"]], "uniqueid (class in nos.utils.unique_id)": [[17, "nos.utils.unique_id.UniqueId"]], "dataclass_to_dict() (in module nos.utils)": [[17, "nos.utils.dataclass_to_dict"]], "dataclass_to_dict() (in module nos.utils.nested_dataclass_to_dict)": [[17, "nos.utils.nested_dataclass_to_dict.dataclass_to_dict"]], "nos.utils": [[17, "module-nos.utils"]], "nos.utils.nested_dataclass_to_dict": [[17, "module-nos.utils.nested_dataclass_to_dict"]], "nos.utils.unique_id": [[17, "module-nos.utils.unique_id"]]}})
\ No newline at end of file