[
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]\npatreon: # Replace with a single Patreon username\nopen_collective: cadcad1\nko_fi: # Replace with a single Ko-fi username\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\nlfx_crowdfunding: # Replace with a single LFX Crowdfunding project-name e.g., cloud-foundry\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/workflows/cadcad-ci.yml",
    "content": "# This workflow will install Python dependencies and run tests with multiple versions of Python\n\nname: cadCAD CI\n\non:\n  push:\n    branches: [ \"master\" ]\n  pull_request:\n    branches: [ \"master\" ]\n  workflow_dispatch:\n\npermissions:\n  contents: read\n\njobs:\n  windows-build:\n    if: false\n    \n    continue-on-error: true\n\n    runs-on: windows-latest\n\n    strategy:\n      matrix:\n        python-version: [\"3.9\", \"3.10\", \"3.11\", \"3.12\"]\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Set up Python ${{ matrix.python-version }}\n      uses: actions/setup-python@v5\n      with:\n        python-version: ${{ matrix.python-version }}\n        cache: 'pip'\n\n    - name: Display Python version\n      run: python -c \"import sys; print(sys.version)\"\n\n    - name: Install test and build dependencies\n      run: |\n        python -m pip install --upgrade pip\n        python -m pip install jupyter\n        pip install -r requirements.txt\n\n    - name: Build cadCAD\n      shell: cmd\n      run: |\n        python setup.py bdist_wheel\n        for %%x in (\"dist\\*.whl\") do python -m pip install %%x --force-reinstall\n\n    - name: Run tests\n      run: |\n        python -m pytest\n\n  build:\n    continue-on-error: true\n\n    strategy:\n      matrix:\n        python-version: [\"3.9\", \"3.10\", \"3.11\", \"3.12\"]\n        os: [ubuntu-latest, macos-latest]\n\n    runs-on: ${{ matrix.os }}\n\n    steps:\n    - uses: actions/checkout@v4\n\n    - name: Set up Python ${{ matrix.python-version }}\n      uses: actions/setup-python@v5\n      with:\n        python-version: ${{ matrix.python-version }}\n        cache: 'pip'\n\n    - name: Display Python version\n      run: python -c \"import sys; print(sys.version)\"\n\n    - name: Install test and build dependencies\n      run: |\n        python -m pip install --upgrade pip\n        python -m pip install jupyter\n        pip install -r requirements.txt\n\n    - name: Build cadCAD\n      run: |\n        python setup.py bdist_wheel\n        python -m pip install dist/*.whl --force-reinstall\n\n    - name: Run tests\n      run: |\n        python -m pytest\n"
  },
  {
    "path": ".github/workflows/cadcad-publish.yml",
    "content": "# This workflow will publish the cadCAD library to PyPI when a release is created\n\nname: cadCAD Publish\n\non:\n  release:\n    types: [published]\n\njobs:\n  pypi-publish:\n    name: Upload release to PyPI\n\n    if: startsWith(github.ref, 'refs/tags/')\n\n    runs-on: ubuntu-latest\n\n    environment:\n      name: pypi\n      url: https://pypi.org/p/cadCAD\n\n    permissions:\n      id-token: write\n\n    steps:\n      - uses: actions/checkout@v4\n\n      - name: Set up Python\n        uses: actions/setup-python@v5\n        with:\n          python-version: '3.12'\n\n      - name: Install dependencies\n        run: |\n          python -m pip install --upgrade pip\n          pip install -r requirements.txt\n\n      - name: Build cadCAD\n        run: |\n            python setup.py bdist_wheel\n\n      - name: Publish package\n        uses: pypa/gh-action-pypi-publish@release/v1\n"
  },
  {
    "path": ".gitignore",
    "content": "*.idea\n*.vscode\n*.ipynb_checkpoints\n*.DS_Store\n*.eggs\n*.pytest_cache\n*.mypy_cache\n*.csv\n*.egg-info\n*.sqlite3\n*.pyc\n*venv\n*external_data\n*sys_exec.py\n*/__pycache__\n*.DS_Store\n*notes.*\n*announcement.md\n*dist.py\n*/poc\n\n__pycache__\nPipfile\nPipfile.lock\nbuild\nresults\nresult\nnotebooks\nclient_work\nmonkeytype\nvenv\nnotes.*\nannouncement.md\ntesting/tests/a_b_tests/venv_0_4_23\n\n\nsimulations/tickets\nsimulations/validation\nsimulations/poc/local/\nsimulations/regression_tests/poc\nsimulations/regression_tests/poc_configs\ndist/*\ntesting/tests/import_cadCAD.nbconvert.ipynb\ntesting/tests/cadCAD_memory_address.json\n"
  },
  {
    "path": "AUTHORS.txt",
    "content": "Authors\n=======\n\ncadCAD was originally implemented by Joshua E. Jodesty and designed by Michael Zargham, Markus B. Koch, and\nMatthew V. Barlin in 2018. Since then, upgrades and improvements were further committed by Danilo L. Bernardineli, Tyler D. Mace\nand Emanuel Lima.\n \n\n\nCurrent Project Maintainers:\n- Emanuel Lima <emanuel@block.science> @emanuellima1\n- Michael Zargham <zargham@block.science> @mzargham\n\n\nActive and Past Contributors:\n- Joshua E. Jodesty @JEJodesty\n- Markus B. Koch @markusbkoch\n- Matthew V. Barlin @matttyb80\n- Michael Zargham @mzargham\n- Danilo L. Bernardineli @danlessa\n- Tyler D. Mace @tylerdmace\n- Emanuel Lima @emanuellima1\n- Zixuan Zhang @zixuanzh\n- Charles Rice @charles-rice\n- Benjamin Scholz @BenSchZA\n\n\nWe’d also like to thank:\n- Andrew Clark @aclarkData\n- Nick Hirannet @nick-phl-7\n- Jonathan Gabler \n- Harry Goodnight @\n- Charlie Hoppes\n- Nikhil Jamdade\n- Chris Frazier\n- Griff Green @GriffGreen\n- Isaac @eenti\n- Jonny Dubowsky @jonnydubowsky\n- Sem Brestels @sembrestels\n- @fjribi\n- Andrea Maria Piana @cammellos\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog:\n\n## 0.5.3 - April 19, 2024\n\n### Bugs fixed\n\n- Solve issue on which nested initial states are being copied from one run to another ([#357](https://github.com/cadCAD-org/cadCAD/pull/357));\n- Created add_parameter_labels ([#360](https://github.com/cadCAD-org/cadCAD/pull/360));\n- Add supress_print attribute to the Executor class for silencing prints and tqdm ([#361](https://github.com/cadCAD-org/cadCAD/pull/361));\n\n## 0.5.2 - April 11, 2024\n\n### Bugs fixed\n\n- fix: easy supports list/array/sequence type as parameter ([#348](https://github.com/cadCAD-org/cadCAD/pull/348));\n- Update setup.py to include tqdm package ([#342](https://github.com/cadCAD-org/cadCAD/pull/342));\n- Debug M dictionairy unpacking in utils ([#343](https://github.com/cadCAD-org/cadCAD/pull/343));\n- Add test for counting the parameters argument inside policies and SUFs ([#345](https://github.com/cadCAD-org/cadCAD/pull/345));\n- Fix sweep_cartesian_product such that it works nicely with easy_run ([#355](https://github.com/cadCAD-org/cadCAD/pull/355));\n- Update easy_run.py ([#356](https://github.com/cadCAD-org/cadCAD/pull/356));\n\n## 0.5.1 - December 21, 2023\n\n### Bugs fixed\n\n- Fixed a bug where the single_proc mode would result in a missing simulation key ([#332](https://github.com/cadCAD-org/cadCAD/issues/332));\n- Fixed a bug where the single_proc mode would not return results ([#335](https://github.com/cadCAD-org/cadCAD/issues/335));\n- Fixed a wrong parameter order when doing single runs ([#337](https://github.com/cadCAD-org/cadCAD/issues/337)).\n- Added a Windows CI pipeline;\n\n## 0.5.0 - December 20, 2023\n\n### New User Features\n\n- Added toggle for enabling users to deactivate deepcopying. This is done by passing an additional object on the `ExecutionContext`, eg. `ExecutionContext(mode, additional_objs={'deepcopy_off': True})`\n\n### New Submodules\n\n- A collection of type annotations for encapsuling `cadCAD` projects is now implemented through the `cadCAD.types` submodules\n- Added `cadCAD.tools` as a submodule, which is originated from the `cadCAD_tools` Python package. This submodule contains several helper functions for making the simulation experience more straightforward as well as a collection of performance profiling tools.\n- Added `cadCAD.diagram` as a submodule, which is originated from the `cadCAD_diagram` Python package. This submodule contains functions for programatically generating block diagrams from existing models.\n- More informative error messages when policies and SUFs are wrongly implemented. (Issues #288 and #258)\n\n### Backend Improvements\n\n- Merged repo with the `cadCAD_legacy_devel`, which includes performance improvements. In particular, simulations will start up faster due to code optimizations.\n- `cadCAD` now uses `pytest` as the testing framework. This was made possible by isolating the existing tests and wrapping them into functions.\n\n### Fixes\n\n- cadCAD is now Python 3.10+ compatible (Issue #306 and #301)\n- Proper support for `ExecutionMode.single_mode` (Issue #253 and #254)\n\n## September 28, 2021\n### New Features:\n* **ver. ≥ `0.4.28`:**\n    * #### [Experiments](documentation#experiments)\n        * #### System Model Configuration\n          * Configurations (`cadCAD.utils.Configuration`'s) are now accessed via the `configs` member of `cadCAD.configuration.Experiment`.\n            [Example:](documentation#experiments) `cadCAD.configuration.Experiment().configs`\n          * `cadCAD.configs` has been re-included for backwards compatibility and has been assigned `cadCAD.experiment.configs`\n        * #### Experiments\n          * `cadCAD.configuration.Experiment()` is unique representation of an experiment of one or more configured System\n          Models.\n            * The `cadCAD` module now contains a default Experiment object `cadCAD.experiment` as an instantiation of\n                `cadCAD.configuration.Experiment()`\n          * An `Experiment`'s `append_model` method stores multiple system model `Configuration`'s for simulation\n          execution within `cadCAD.configuration.Experiment().configs`.\n          `cadCAD.configuration.Experiment().model_ids` contains system model labels and/or indexes for\n          `cadCAD.configuration.Experiment().configs`\n              * The `Experiment`'s `append_model` method is defined with `model_id` parameter that accepts a system model\n              label.\n                * If duplicate `model_id`'s are specified, an index is appended to the label after the `@` symbol.\n                (Example: `cadCAD.configuration.Experiment().model_ids = ['sys_model', 'sys_model@1', 'sys_model@2', ...]`)\n                * If `model_id`'s are not specified or duplicate, the label is auto-generated as a string indicating the\n                system model index within `cadCAD.configuration.Experiment().configs`.\n                (Example of unspecified system models at indexes 1, 3, and 4:\n                `cadCAD.configuration.Experiment().model_ids = ['sys_model', '1', 'sys_model@2', '3', '4', ...]`)\n    * #### [Upgrade Guide:](https://github.com/cadCAD-org/cadCAD/blob/master/documentation/cadCAD-v0.4.28-Model-Upgrade-Guide.md) specific to feature changes / additions\n\n\n## August 25, 2021\n### New Features:\n* **ver. ≥ `0.4.27`:**\n    * #### [Experiments](documentation#experiments)\n        * #### System Model Configurations\n          * Configurations (`cadCAD.utils.Configuration`'s) as are no longer a part of the `cadCAD` module\n            (as `cadCAD.configs`) and are now accessed via the `configs` member of `cadCAD.configuration.Experiment`.\n            [Example:](documentation#experiments) `cadCAD.configuration.Experiment().configs`\n        * #### Experiments\n          * `cadCAD.configuration.Experiment` is unique representation of an experiment of one or more configured System\n          Models. An `Experiment`'s `append_model` method stores multiple system model `Configuration`'s for simulation\n          execution.\n              * The `Experiment`'s `append_model` method requires a `model_id` parameter that is auto-created as `'sys_model_#'`.\n              * **Requirements:**\n                * Users must use different `model_id`'s when appending multiple System Model Configurations.\n                * Users can no longer use the `config_list` method of `cadCAD.configuration.Experiment`\n              * **Backwards Compatibility:** The `append_model` method of `cadCAD.configuration.Experiment` can also be used as\n                the `append_configs` method.\n    * Removed [Nix](https://nixos.org/)\n    * #### [Upgrade Guide:](https://github.com/cadCAD-org/cadCAD/blob/master/documentation/cadCAD-v0.4.27-Model-Upgrade-Guide.md) specific to feature changes / additions\n* **Fixes:**\n    * [#248](https://github.com/cadCAD-org/cadCAD/issues/248)\n        * The previous release was returning partial results. An A/B test for this has been included and will be for\n          future releases\n    * [#242](https://github.com/cadCAD-org/cadCAD/issues/242)\n        * Parallelized simulations enabled with the re-inclusion of `ProcessPool`.\n    * [#257](https://github.com/cadCAD-org/cadCAD/issues/257)\n        * ValueError for runs accepted by the `cadCAD.configuration.Experiment().append_model` via the `sim_configs` no\n          longer gives mis-leading error message if catching a non-related ValueError\n    * [#252](https://github.com/cadCAD-org/cadCAD/issues/252)\n        * Jupyter lab and Jupyter notebook recognises cadCAD module\n\n\n## September 22, 2020\n#### [Multi - System Model Execution](https://github.com/cadCAD-org/cadCAD/blob/master/documentation/Simulation_Execution.md#multiple-simulation-execution)\n* **ver. ≥ `0.4.23`:**\n    * **Hot-Fix:** [#203](https://github.com/cadCAD-org/cadCAD/pull/203) (**No Breaking Changes**)\n        * Multi - System Model simulation results will no longer return truncated results (exclude the results of the last\n        `cadCAD.configuration.Configuration` appended to `cadCAD.configs`).\n        * Issue: [#195](https://github.com/cadCAD-org/cadCAD/issues/195)\n    * Parameter Sweep value `M` (Params) requires up to a maximum of 2 distinct lengths\n\n\n## August 5, 2020\n#### [Experiments](documentation#experiments)\n* `cadCAD.configuration.Experiment` (Alpha) is in development and needed to be released to support the implementation of\nweb applications and proprietary feature extensions. It is intended to represent a unique identifier of an experiment of\none or more configured System Models. For this reason, `append_configs` is a method of\n`cadCAD.configuration.Experiment`. As of now it does not support multi - system model simulation because configurations\nare still appended globally despite `append_config` being a method of Experiment.\n\n##### Examples:\n* **ver. ≥ `0.4.22`:**\n    ```python\n    from cadCAD.configuration import Experiment\n    exp = Experiment()\n    exp.append_configs(...)\n    ```\n* **ver. `0.3.1`:** *Deprecated*\n    ```python\n    from cadCAD.configuration import append_configs\n    append_configs(...)\n    ```\n\n\n## June 22, 2020\n* Bug Fix: Multiprocessing error for Windows\n\n\n## June 19, 2020\n\n## New Features:\n#### [Local Execution Mode (Default)](documentation/Simulation_Execution.md#simulation-execution-modes)\n* Local Execution Mode (Default): Implicit parallelization of Monte-Carlo / Stochastic simulations (Automatically\nselects Multi-Threaded Mode if simulations are configured for more than a single run)\n    * **Backwards Compatibility:** `cadCAD.engine.ExecutionMode` accepts legacy execution modes from ver. `0.3.1`\n\n##### Examples:\n* **ver. ≥ `0.4.22`:**\n    ```python\n    from cadCAD.engine import ExecutionMode, ExecutionContext\n    exec_mode = ExecutionMode()\n    local_ctx = ExecutionContext(context=exec_mode.local_mode)\n    ```\n* **ver. `0.3.1`:**\n\n    Multi-Threaded:\n    ```python\n    from cadCAD.engine import ExecutionMode, ExecutionContext\n\n    exec_mode = ExecutionMode()\n    single_ctx = ExecutionContext(context=exec_mode.multi_proc)\n    ```\n\n    Single-Thread:\n    ```python\n    from cadCAD.engine import ExecutionMode, ExecutionContext\n\n    exec_mode = ExecutionMode()\n    multi_ctx = ExecutionContext(context=exec_mode.single_proc)\n    ```\n\n\n#### cadCAD Post-Processing Enhancements / Modifications\n* \t[**Single Result Dataset**](documentation/Simulation_Execution.md#4-execute-simulation--produce-system-event-dataset)\nas a 2 dimensional `list`\n    * Returns a single dataset instead of multiple datasets per Monte Carlo simulation as in `0.3.1`:\n        * New System Metrics as dataset attributes:\n            * **Simulation** (Alpha) is a unique identifier being developed to represent Experiments as stated above and\n            will be renamed accordingly\n                * **Subset** is a unique identifier of Monte-Carlo simulations produced by parameter sweeps\n    * Note: Returning a single dataset was originally specified during the project’s inception instead of multiple per\n    simulation\n\n##### Examples:\n* **ver. ≥ `0.4.22`:**\n    ```python\n    import pandas as pd\n    from tabulate import tabulate\n    from cadCAD.engine import ExecutionMode, ExecutionContext, Executor\n    import system_model_A, system_model_B\n    from cadCAD import configs\n\n    exec_mode = ExecutionMode()\n    local_ctx = ExecutionContext(context=exec_mode.local_mode)\n    simulation = Executor(exec_context=local_ctx, configs=configs)\n    raw_result, sys_model, _ = simulation.execute()\n\n    result = pd.DataFrame(raw_result)\n    print(tabulate(result, headers='keys', tablefmt='psql'))\n    ```\n    Results:\n    ```\n    +----+------------+-----------+----+---------------------+------------+--------+-----+---------+----------+\n    |    | s1         | s2        | s3 | timestamp           | simulation | subset | run | substep | timestep |\n    |----+------------+-----------+----+---------------------+------------+--------+-----+---------+----------|\n    |  0 | 0.0        | 0.0       |  1 | 2018-10-01 15:16:24 |          0 |      0 |   1 |       0 |        0 |\n    |  1 | 1.0        | 4         |  5 | 2018-10-01 15:16:25 |          0 |      0 |   1 |       1 |        1 |\n    |  2 | 2.0        | 6         |  5 | 2018-10-01 15:16:25 |          0 |      0 |   1 |       2 |        1 |\n    |  3 | 3.0        | [ 30 300] |  5 | 2018-10-01 15:16:25 |          0 |      0 |   1 |       3 |        1 |\n    |  4 | 0          | 0         |  1 | 2018-10-01 15:16:24 |          1 |      0 |   1 |       0 |        0 |\n    |  5 | 1          | 0         |  5 | 2018-10-01 15:16:25 |          1 |      0 |   1 |       1 |        1 |\n    |  6 | a          | 0         |  5 | 2018-10-01 15:16:25 |          1 |      0 |   1 |       2 |        1 |\n    |  7 | ['c', 'd'] | [ 30 300] |  5 | 2018-10-01 15:16:25 |          1 |      0 |   1 |       3 |        1 |\n    +----+------------+-----------+----+---------------------+------------+--------+-----+---------+----------+\n    ```\n* **ver. `0.3.1`:**\n    ```python\n    import pandas as pd\n    from tabulate import tabulate\n    from cadCAD.engine import ExecutionMode, ExecutionContext, Executor\n    import system_model_A, system_model_B\n    from cadCAD import configs\n\n    exec_mode = ExecutionMode()\n\n    multi_ctx = ExecutionContext(context=exec_mode.multi_proc)\n    simulation = Executor(exec_context=multi_ctx, configs=configs)\n\n    i = 0\n    config_names = ['sys_model_A', 'sys_model_B']\n    for raw_result, _ in simulation.execute():\n        result = pd.DataFrame(raw_result)\n        print()\n        print(f\"{config_names[i]} Result: System Events DataFrame:\")\n        print(tabulate(result, headers='keys', tablefmt='psql'))\n        print()\n        i += 1\n    ```\n    Results:\n    ```\n    +----+------------+-----------+----+---------------------+-----+---------+----------+\n    |    | s1         | s2        | s3 | timestamp           | run | substep | timestep |\n    |----+------------+-----------+----+---------------------+-----+---------+----------|\n    |  0 | 0.0        | 0.0       |  1 | 2018-10-01 15:16:24 |   1 |       0 |        0 |\n    |  1 | 1.0        | 4         |  5 | 2018-10-01 15:16:25 |   1 |       1 |        1 |\n    |  2 | 2.0        | 6         |  5 | 2018-10-01 15:16:25 |   1 |       2 |        1 |\n    |  3 | 3.0        | [ 30 300] |  5 | 2018-10-01 15:16:25 |   1 |       3 |        1 |\n    |  4 | 0          | 0         |  1 | 2018-10-01 15:16:24 |   1 |       0 |        0 |\n    |  5 | 1          | 0         |  5 | 2018-10-01 15:16:25 |   1 |       1 |        1 |\n    |  6 | a          | 0         |  5 | 2018-10-01 15:16:25 |   1 |       2 |        1 |\n    |  7 | ['c', 'd'] | [ 30 300] |  5 | 2018-10-01 15:16:25 |   1 |       3 |        1 |\n    +----+------------+-----------+----+---------------------+-----+---------+----------+\n    ```\n\n* **Flattened Configuration list:** The `cadCAD.configs` (System Model Configuration) `list` has been **temporarily**\nflattened to contain single run `cadCAD.configuration.Configuration` objects to both fault-tolerant simulation and\nelastic workloads. This functionality will be restored in a subsequent release by a class that returns\n`cadCAD.configs`'s original representation in ver. `0.3.1`.\n    * The conversion utilities have been provided to restore its original representation of configurations with\n    runs >= 1\n        * [System Configuration Conversions](documentation/System_Configuration.md)\n            * Configuration as list of Configuration Objects (as in ver. `0.3.1`)\n            * New: System Configuration as a Pandas DataFrame\n            * New: System Configuration as list of Dictionaries\n\n##### Examples:\n* Notes:\n    * `configs` is temporarily returned in a flattened format and reformatted into its intended format\n    * `Configuration` objects at `0x10790e470` and `0x1143dd630` are reconstituted into objects at `0x10790e7b8`\n    and `0x116268908` respectively.\n* **ver. ≥ `0.4.22`:**\n    ```python\n    from pprint import pprint\n    from documentation.examples import sys_model_A, sys_model_B\n    from cadCAD.configuration.utils import configs_as_objs, configs_as_dataframe, configs_as_dicts\n    from cadCAD import configs\n\n    flattened_configs = configs\n\n    print('Flattened Format: Temporary')\n    pprint(flattened_configs)\n    print()\n\n    print('Intended Format:')\n    intended_configs = configs_as_objs(flattened_configs)\n    pprint(intended_configs)\n    print()\n    ```\n\n    Result:\n    ```bash\n    Flattened Format: Temporary\n    [<cadCAD.configuration.Configuration object at 0x10790e470>,\n     <cadCAD.configuration.Configuration object at 0x10790e7b8>,\n     <cadCAD.configuration.Configuration object at 0x1143dd630>,\n     <cadCAD.configuration.Configuration object at 0x116268908>]\n\n    Intended Format:\n    [<cadCAD.configuration.Configuration object at 0x10790e7b8>,\n     <cadCAD.configuration.Configuration object at 0x116268908>]\n    ```\n\n\n#### Expandable state and policy update parameter space:\n* Enables the development of feature enhancements that involve the use of additional parameters without requiring users\nto modify their update parameters spaces when upgrading to newer versions. For this reason state / policy update\nexamples in documentation include an additional `**kwargs` parameter.\n    * [State Updates](documentation/README.md#state-update-functions)\n    * [Policy Updates](documentation/README.md#state-update-functions)\n\n##### Examples:\n* **ver. ≥ `0.4.22`:**\n    ```python\n    def state_update(_params, substep, sH, s, _input, **kwargs):\n        ...\n        return 'state_variable_name', new_value\n\n    def policy(_params, substep, sH, s, **kwargs):\n        ...\n        return {'signal_1': value_1, ..., 'signal_N': value_N}\n    ```\n* **ver. `0.3.1`:**\n\n    ```python\n    def state_update(_params, substep, sH, s, _input):\n        ...\n        return 'state_variable_name', new_value\n\n    def policy(_params, substep, sH, s):\n        ...\n        return {'signal_1': value_1, ..., 'signal_N': value_N}\n    ```\n\n\n## May 29, 2020\n* Packaging: Add [Nix](https://nixos.org/) derivation and shell for local development and distribution of cadCAD package\nusing Nix. Nix is a powerful package manager for Linux and other Unix systems that makes package management reliable and\nreproducible, allowing you to share your development and build environments across different machines.\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to cadCAD\n\n:+1::tada: First off, thanks for taking the time to contribute! :tada::+1:\n\nThe following is a set of guidelines for contributing to cadCAD. \nUse your best judgment, and feel free to propose changes to this document in a pull request.\n\n### Pull Requests:\n\nPull Request (PR) presented as \"->\".\n\nGeneral Template:\n\n`user:branch -> org:staging`\n\nContributing a new feature:\n\n`user:feature -> org:staging`\n\nContributing to an existing feature:\n\n`user:feature -> org:feature`\n\n### General Advise for Forked Repositories:\n1. `git pull fork staging`\n2. `git checkout -b feature` (new feature)\n3. Apply your awesomeness! (Commit Often)\n4. `git push fork feature`\n5. Apply a rebase/merge strategy you're comfortable with (Recommended Below).\n6. Submit PR from `user:staging` into `org:staging`\n7. PR is queued for review\n8. PR Reviewed (Update necessary if rejected)\n9. PR Approved (There may be circumstances delaying the merge.)\n10. Your contribution merged into next feature release on `org:master`\n\n### Recommended Strategy: [Rebase](https://git-scm.com/book/en/v2/Git-Branching-Rebasing)\n1. Add cadCAD-org/cadCAD as remote within you forked project locally.\n2. `git checkout remote/master`\n3. `git pull remote master`\n4. `git checkout your_branch`\n5. `git rebase master`\n6. Resolve merge conflicts (while leveraging rebase commands)\n7. `git push fork your_branch`\n\nThanks! :heart:\n"
  },
  {
    "path": "LICENSE.txt",
    "content": "MIT License\n\nCopyright (c) 2018-2020 BlockScience\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE."
  },
  {
    "path": "README.md",
    "content": "```\n                  ___________    ____\n  ________ __ ___/ / ____/   |  / __ \\\n / ___/ __` / __  / /   / /| | / / / /\n/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n\\___/\\__,_/\\__,_/\\____/_/  |_/_____/\nby cadCAD                  ver. 0.5.3\n======================================\n       Complex Adaptive Dynamics\n       o       i        e\n       m       d        s\n       p       e        i\n       u       d        g\n       t                n\n       e\n       r\n```\n***cadCAD*** is a Python package that assists in the processes of designing, testing and validating complex systems\nthrough simulation, with support for Monte Carlo methods, A/B testing and parameter sweeping.\n\n# Getting Started\n\n#### Change Log: [ver. 0.5.3](CHANGELOG.md)\n\n## 0. Pre-installation Virtual Environments with [`venv`](https://docs.python.org/3/library/venv.html) (Optional):\nIf you wish to create an easy to use virtual environment to install cadCAD within, please use python's built in `venv` package.\n\n***Create** a virtual environment:*\n```bash\n$ python3 -m venv ~/cadcad\n```\n\n***Activate** an existing virtual environment:*\n```bash\n$ source ~/cadcad/bin/activate\n(cadcad) $\n```\n\n***Deactivate** virtual environment:*\n```bash\n(cadcad) $ deactivate\n$\n```\n\n## 1. Installation:\nRequires [>= Python 3.9.0](https://www.python.org/downloads/)\n\n**Option A:** Install Using **[pip](https://pypi.org/project/cadCAD/)**\n```bash\npip3 install cadCAD\n```\n\n**Option B:** Build From Source\n```\npip3 install -r requirements.txt\npython3 setup.py sdist bdist_wheel\npip3 install dist/*.whl\n```\n\n## 2. Documentation:\n* [Simulation Configuration](documentation/README.md)\n* [Simulation Execution](documentation/Simulation_Execution.md)\n* [Policy Aggregation](documentation/Policy_Aggregation.md)\n* [Parameter Sweep](documentation/System_Model_Parameter_Sweep.md)\n* [Display System Model Configurations](documentation/System_Configuration.md)\n\n## 3. Connect:\n* Website: https://www.cadcad.org\n* Discord: https://discord.gg/DX9uH8m4qY\n* Twitter: https://twitter.com/cadcad_org\n* Forum: https://community.cadcad.org\n* Github: https://github.com/cadCAD-org\n* Telegram: https://t.me/cadcad_org\n\n## 4. Contribute to this repository:\nFollow [this document](CONTRIBUTING.md) to start contributing!\n"
  },
  {
    "path": "ascii_art.py",
    "content": "production = r'''\n                    __________   ____\n  ________ __ _____/ ____/   |  / __ \\\n / ___/ __` / __  / /   / /| | / / / /\n/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n\\___/\\__,_/\\__,_/\\____/_/  |_/_____/\nby BlockScience\n======================================\n       Complex Adaptive Dynamics       \n       o       i        e\n       m       d        s\n       p       e        i\n       u       d        g\n       t                n\n       e\n       r\n'''\n\ntext = r'''\nComplex Adaptive Dynamics \no       i        e\nm       d        s\np       e        i\nu       d        g\nt                n\ne\nr\n\n'''\n\nblock_letters = r'''\n                    __________   ____\n  ________ __ _____/ ____/   |  / __ \\\n / ___/ __` / __  / /   / /| | / / / /\n/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n\\___/\\__,_/\\__,_/\\____/_/  |_/_____/\nby BlockScience\n'''\n"
  },
  {
    "path": "cadCAD/__init__.py",
    "content": "import os\n\nimport dill\n\nfrom cadCAD.configuration import Experiment\n\nname = \"cadCAD\"\nversion = \"0.5.3\"\nexperiment = Experiment()\nconfigs = experiment.configs\n\nif os.name == \"nt\":\n    dill.settings[\"recurse\"] = True\n\nlogo = r\"\"\"\n                  ___________    ____\n  ________ __ ___/ / ____/   |  / __ \\\n / ___/ __` / __  / /   / /| | / / / /\n/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\n\\___/\\__,_/\\__,_/\\____/_/  |_/_____/\nby cadCAD\n\"\"\"\n"
  },
  {
    "path": "cadCAD/configuration/__init__.py",
    "content": "from typing import Dict, Callable, List, Tuple\nfrom pandas.core.frame import DataFrame # type: ignore\nfrom datetime import datetime\nfrom collections import deque\nfrom copy import deepcopy\nimport pandas as pd # type: ignore\n\nfrom cadCAD.utils import key_filter\nfrom cadCAD.configuration.utils import exo_update_per_ts, configs_as_objs\nfrom cadCAD.configuration.utils.depreciationHandler import sanitize_partial_state_updates, sanitize_config\n\n\nclass Configuration():\n    def __init__(self, user_id, model_id, subset_id, subset_window, sim_config={}, initial_state={}, seeds={}, env_processes={},\n                 exogenous_states={}, partial_state_update_blocks={}, policy_ops=[lambda a, b: a + b],\n                 session_id=0, simulation_id=0, run_id=1, experiment_id=0, exp_window=deque([0, None], 2),\n                 exp_creation_ts=None, **kwargs\n    ) -> None:\n        self.sim_config = sim_config\n        self.initial_state = initial_state\n        self.seeds = seeds\n        self.env_processes = env_processes\n        self.exogenous_states = exogenous_states\n        self.partial_state_update_blocks = partial_state_update_blocks\n        self.policy_ops = policy_ops\n        self.kwargs = kwargs\n\n        self.session_id = session_id  # essentially config id\n\n        self.experiment_id = experiment_id\n        self.user_id = user_id\n        self.model_id = model_id\n        self.exp_creation_ts = exp_creation_ts\n\n        self.labeled_jobs = {}\n        self.simulation_id = simulation_id\n        self.subset_id = subset_id\n        self.run_id = run_id\n\n        self.exp_window = exp_window\n        self.subset_window = subset_window\n\n        sanitize_config(self)\n\n\nclass Experiment(object):\n    def __init__(self):\n        self.exp_creation_ts = str(datetime.utcnow())\n        self.configs = []\n        self.sys_configs = []\n\n        self.model_job_map, self.model_job_counts = {}, {}\n        self.model_ids = list(self.model_job_map.keys())\n        self.model_id_queue = []\n\n        self.exp_id = 0\n        self.simulation_id = -1\n        self.subset_id = 0\n        self.exp_window = deque([self.exp_id, None], 2)\n        self.subset_window = deque([self.subset_id, None], 2)\n\n    def append_model(\n            self,\n            user_id='cadCAD_user',\n            model_id=None,\n            sim_configs={}, initial_state={}, seeds={}, raw_exogenous_states={}, env_processes={},\n            partial_state_update_blocks={}, policy_ops=[lambda a, b: a + b], _exo_update_per_ts: bool = True, **kwargs\n            # config_list=deepcopy(global_configs)\n    ) -> None:\n        _sim_configs = deepcopy(sim_configs)\n        # self.configs = config_list\n        self.simulation_id += 1\n\n        try:\n            max_runs = _sim_configs[0]['N']\n        except KeyError:\n            max_runs = _sim_configs['N']\n\n        if _exo_update_per_ts is True:\n            exogenous_states = exo_update_per_ts(raw_exogenous_states)\n        else:\n            exogenous_states = raw_exogenous_states\n\n        if isinstance(_sim_configs, dict):\n            _sim_configs = [_sim_configs]\n\n        sim_cnt_local = 0\n        new_sim_configs = []\n        for subset_id, t in enumerate(list(zip(_sim_configs, list(range(len(_sim_configs)))))):\n            sim_config = t[0]\n            sim_config['subset_id'] = subset_id\n            sim_config['subset_window'] = self.subset_window\n            N: int = sim_config['N']\n            for n in range(0, N):\n                sim_config['simulation_id'] = self.simulation_id\n                sim_config['run_id'] = n\n                sim_config['N'] = 1\n                new_sim_configs.append((sim_config.copy()))\n            sim_cnt_local += 1\n\n        if model_id == None:\n            new_model_id = str(len(self.model_ids))\n            if new_model_id in self.model_ids:\n                model_id = f\"model@{len(self.model_ids)}\"\n            else:\n                model_id = str(new_model_id)\n        elif model_id != None:\n            if model_id in self.model_ids:\n                model_id = f\"{model_id}@{len(self.model_ids)}\"\n            else:\n                model_id = str(model_id)\n\n        run_id = 0\n        new_model_ids, new_configs = [], []\n        for sim_config in new_sim_configs:\n            subset_id = sim_config['subset_id']\n            sim_config['N'] = run_id + 1\n            if max_runs == 1:\n                sim_config['run_id'] = run_id\n            elif max_runs >= 1:\n                if run_id >= max_runs:\n                    sim_config['N'] = run_id - (max_runs - 1)\n\n            self.exp_window = self.exp_window.copy()\n            config = Configuration(\n                exp_creation_ts=self.exp_creation_ts,\n\n                sim_config=sim_config,\n                initial_state=deepcopy(initial_state),\n                seeds=seeds,\n                exogenous_states=exogenous_states,\n                env_processes=env_processes,\n                partial_state_update_blocks=partial_state_update_blocks,\n                policy_ops=policy_ops,\n\n                # session_id=session_id,\n                user_id=user_id,\n                model_id=model_id,\n                session_id=f\"{user_id}={sim_config['simulation_id']}_{sim_config['run_id']}\",\n\n                experiment_id=self.exp_id,\n                simulation_id=self.simulation_id,\n                subset_id=subset_id,\n                run_id=sim_config['run_id'],\n\n                exp_window=self.exp_window,\n                subset_window=self.subset_window\n            )\n\n            # self.configs.append(config)\n            new_configs.append(config)\n            new_model_ids.append(model_id)\n            run_id += 1\n        self.configs += new_configs\n        self.model_id_queue += new_model_ids\n        self.exp_id += 1\n        self.exp_window.appendleft(self.exp_id)\n        self.sys_configs += configs_as_objs(new_configs)\n\n        unique_new_model_ids = list(set(new_model_ids))\n        new_model_job_list = [(model_id, []) for model_id in unique_new_model_ids]\n        for model_id, v in new_model_job_list:\n            if model_id not in self.model_ids:\n                self.model_job_map[model_id] = v\n                self.model_ids.append(model_id)\n            else:\n                except_str = f\"\"\"\n                    Error: Duplicate model_id in Experiment - \\'{model_id}\\' in {self.model_ids}\n                    -- Specify unique model_id for each use of `.append_model` per `Experiment()`\n                \"\"\"\n                raise Exception(except_str)\n\n        for model_id, job in list(zip(new_model_ids, new_configs)):\n            self.model_job_map[model_id].append(job)\n\n        self.model_job_counts = dict([(k, len(v)) for k, v in self.model_job_map.items()])\n\n    append_configs = append_model\n\n\nclass Identity:\n    def __init__(self, policy_id: Dict[str, int] = {'identity': 0}) -> None:\n        self.beh_id_return_val = policy_id\n\n    def p_identity(self, var_dict, sub_step, sL, s, **kwargs):\n        return self.beh_id_return_val\n\n    def policy_identity(self, k: str) -> callable:\n        return self.p_identity\n\n    def no_state_identity(self, var_dict, sub_step, sL, s, _input, **kwargs):\n        return None\n\n    def state_identity(self, k: str) -> callable:\n        return lambda var_dict, sub_step, sL, s, _input, **kwargs: (k, s[k])\n\n    # state_identity = cloudpickle.dumps(state_identity)\n\n    def apply_identity_funcs(self,\n                             identity: callable,\n                             df: DataFrame,\n                             cols: List[str]) -> DataFrame:\n        \"\"\"\n        Apply the identity on each df column, using its self value as the\n        argument.\n        \"\"\"\n        fill_values = {col: identity(col) for col in cols}\n        filled_df = df.fillna(fill_values)\n        return filled_df\n\n\nclass Processor:\n    def __init__(self, id: Identity = Identity()) -> None:\n        self.id = id\n        self.p_identity = id.p_identity\n        self.policy_identity = id.policy_identity\n        self.no_state_identity = id.no_state_identity\n        self.state_identity = id.state_identity\n        self.apply_identity_funcs = id.apply_identity_funcs\n\n    def create_matrix_field(self, partial_state_updates, key: str) -> DataFrame:\n        if key == 'variables':\n            identity = self.state_identity\n        elif key == 'policies':\n            identity = self.policy_identity\n\n        df = pd.DataFrame(key_filter(partial_state_updates, key))\n        filled_df = self.apply_identity_funcs(identity, df, list(df.columns))\n        if len(filled_df) > 0:\n            return filled_df\n        else:\n            return pd.DataFrame({'empty': []})\n\n    def generate_config(self, initial_state, partial_state_updates, exo_proc\n                       ) -> List[tuple[list[callable], List[callable]]]:\n\n        def no_update_handler(bdf, sdf):\n            if (bdf.empty == False) and (sdf.empty == True):\n                bdf_values = bdf.values.tolist()\n                sdf_values = [[self.no_state_identity] * len(bdf_values) for m in range(len(partial_state_updates))]\n                return sdf_values, bdf_values\n            elif (bdf.empty == True) and (sdf.empty == False):\n                sdf_values = sdf.values.tolist()\n                bdf_values = [[self.p_identity] * len(sdf_values) for m in range(len(partial_state_updates))]\n                return sdf_values, bdf_values\n            else:\n                sdf_values = sdf.values.tolist()\n                bdf_values = bdf.values.tolist()\n                return sdf_values, bdf_values\n\n        def only_ep_handler(state_dict):\n            sdf_functions = [\n                lambda var_dict, sub_step, sL, s, _input, **kwargs: (k, v) for k, v in zip(state_dict.keys(), state_dict.values())\n            ]\n            sdf_values = [sdf_functions]\n            bdf_values = [[self.p_identity] * len(sdf_values)]\n            return sdf_values, bdf_values\n\n        if len(partial_state_updates) != 0:\n            # backwards compatibility\n            partial_state_updates = sanitize_partial_state_updates(partial_state_updates)\n\n            bdf = self.create_matrix_field(partial_state_updates, 'policies')\n            sdf = self.create_matrix_field(partial_state_updates, 'variables')\n            sdf_values, bdf_values = no_update_handler(bdf, sdf)\n            zipped_list = list(zip(sdf_values, bdf_values))\n        else:\n            sdf_values, bdf_values = only_ep_handler(initial_state)\n            zipped_list = list(zip(sdf_values, bdf_values))\n\n        return list(map(lambda x: (x[0] + exo_proc, x[1]), zipped_list))"
  },
  {
    "path": "cadCAD/configuration/utils/__init__.py",
    "content": "import pandas as pd # type: ignore\nfrom datetime import datetime, timedelta\nfrom collections import Counter\nfrom functools import reduce\nfrom funcy import curry # type: ignore\nfrom cadCAD.types import *\nfrom typing import Union, Dict, List\n\nfrom cadCAD.configuration.utils.depreciationHandler import sanitize_partial_state_updates\nfrom cadCAD.utils import dict_filter, contains_type, flatten_tabulated_dict, tabulate_dict\n\n\nclass TensorFieldReport:\n    def __init__(self, config_proc):\n        self.config_proc = config_proc\n\n    def create_tensor_field(self, partial_state_updates, exo_proc, keys=['policies', 'variables']):\n\n        partial_state_updates = sanitize_partial_state_updates(partial_state_updates) # Temporary\n\n        dfs = [self.config_proc.create_matrix_field(partial_state_updates, k) for k in keys]\n        df = pd.concat(dfs, axis=1)\n        for es, i in zip(exo_proc, range(len(exo_proc))):\n            df['es' + str(i + 1)] = es\n        df['m'] = df.index + 1\n        return df\n\n\ndef configs_as_spec(configs):\n    sim_ids = list(map(lambda x: x.simulation_id, configs))\n    # sim_ids = [config.simulation_id for config in configs]\n    sim_id_counts = list(Counter(sim_ids).values())\n    IDed_configs = list(zip(sim_ids, configs))\n    del sim_ids\n    selected_IDed_configs = dict(IDed_configs)\n    del IDed_configs\n    counted_IDs_configs = list(zip(sim_id_counts, selected_IDed_configs.values()))\n    del sim_id_counts, selected_IDed_configs\n    for runs, config in counted_IDs_configs:\n        config.sim_config['N'] = runs\n    return counted_IDs_configs\n\n\ndef configs_as_objs(configs):\n    counted_IDs_configs = configs_as_spec(configs)\n    new_configs = list(map(lambda x: x[1], counted_IDs_configs))\n    del counted_IDs_configs\n    return new_configs\n\n\ndef configs_as_dicts(configs):\n    counted_IDs_configs = configs_as_spec(configs)\n    new_configs = list(map(lambda x: x[1].__dict__, counted_IDs_configs))\n    del counted_IDs_configs\n    return new_configs\n\n\ndef configs_as_dataframe(configs):\n    new_configs = configs_as_dicts(configs)\n    configs_df = pd.DataFrame(new_configs)\n    del new_configs\n    configs_df_columns = list(configs_df.columns)\n    header_cols = ['session_id', 'user_id', 'simulation_id', 'run_id']\n    for col in header_cols:\n        configs_df_columns.remove(col)\n    return configs_df[header_cols + configs_df_columns]\n\n## System Model\n\ndef state_update(y, x):\n    return lambda var_dict, sub_step, sL, s, _input, **kwargs: (y, x)\n\ndef policy(y, x):\n    return lambda _g, step, sL, s, **kwargs: {y: x}\n\ndef bound_norm_random(rng, low, high):\n    res = rng.normal((high+low)/2, (high-low)/6)\n    if res < low or res > high:\n        res = bound_norm_random(rng, low, high)\n    # return Decimal(res)\n    return float(res)\n\n\ntstep_delta = timedelta(days=0, minutes=0, seconds=30)\ndef time_step(dt_str, dt_format='%Y-%m-%d %H:%M:%S', _timedelta = tstep_delta):\n    dt = datetime.strptime(dt_str, dt_format)\n    t = dt + _timedelta\n    return t.strftime(dt_format)\n\n\nep_t_delta = timedelta(days=0, minutes=0, seconds=1)\ndef ep_time_step(s_condition, dt_str, fromat_str='%Y-%m-%d %H:%M:%S', _timedelta = ep_t_delta):\n    if s_condition:\n        return time_step(dt_str, fromat_str, _timedelta)\n    else:\n        return dt_str\n\n\ndef exo_update_per_ts(ep):\n    # @curried\n    def ep_decorator(f, y, var_dict, sub_step, sL, s, _input,  **kwargs):\n        if s['substep'] + 1 == 1:\n            return f(var_dict, sub_step, sL, s, _input,  **kwargs)\n        else:\n            return y, s[y]\n\n    return {es: ep_decorator(f, es) for es, f in ep.items()} # type: ignore\n\n\ndef trigger_condition(s, pre_conditions, cond_opp):\n    condition_bools = [s[field] in precondition_values for field, precondition_values in pre_conditions.items()]\n    return reduce(cond_opp, condition_bools)\n\n\ndef apply_state_condition(pre_conditions, cond_opp, y, f, _g, step, sL, s, _input, **kwargs):\n    def state_scope_tuner(f):\n        lenf = f.__code__.co_argcount\n        if lenf == 5:\n            return f(_g, step, sL, s, _input)\n        elif lenf == 6:\n            return f(_g, step, sL, s, _input, **kwargs)\n\n    if trigger_condition(s, pre_conditions, cond_opp):\n        return state_scope_tuner(f)\n    else:\n        return y, s[y]\n\n\ndef var_trigger(y, f, pre_conditions, cond_op):\n    return lambda _g, step, sL, s, _input, **kwargs: \\\n        apply_state_condition(pre_conditions, cond_op, y, f, _g, step, sL, s, _input, **kwargs)\n\n\ndef var_substep_trigger(substeps):\n    def trigger(end_substep, y, f):\n        pre_conditions = {'substep': substeps}\n        cond_opp = lambda a, b: a and b\n        return var_trigger(y, f, pre_conditions, cond_opp)\n\n    return lambda y, f: curry(trigger)(substeps)(y)(f)\n\n\ndef env_trigger(end_substep):\n    def trigger(end_substep, trigger_field, trigger_vals, funct_list):\n        def env_update(state_dict, sweep_dict, target_value):\n            state_dict_copy = state_dict.copy()\n            # Use supstep to simulate current sysMetrics\n            if state_dict_copy['substep'] == end_substep:\n                state_dict_copy['timestep'] = state_dict_copy['timestep'] + 1\n\n            if state_dict_copy[trigger_field] in trigger_vals:\n                for g in funct_list:\n                    target_value = g(sweep_dict, target_value)\n\n            del state_dict_copy\n            return target_value\n\n        return env_update\n\n    return lambda trigger_field, trigger_vals, funct_list: \\\n        curry(trigger)(end_substep)(trigger_field)(trigger_vals)(funct_list)\n\n\ndef config_sim(config_dict: ConfigurationDict):\n\n    if \"N\" in config_dict:\n        if config_dict[\"N\"] <= 0:\n            raise ValueError(\"'N' must be > 0\")\n        else:\n            pass\n    else:\n        raise KeyError(\"The 'sim_configs' dictionary must contain the key 'N' (# of Monte Carlo Runs)\")\n\n    if \"T\" not in config_dict:\n        raise KeyError(\"The 'sim_configs' dictionary must contain the key 'T' (Timestep Iterator)\")\n    else:\n        if \"M\" in config_dict:\n            params = config_dict['M']\n\n            param_values_length = {key: len(value) if type(value) == list else 0 \n                                for key, value in params.items()}\n            param_values_length_set = set(param_values_length.values())\n            distinct_param_value_lengths = len(param_values_length_set)\n\n            if distinct_param_value_lengths > 2:\n                raise Exception('When sweeping, `M` list lengths should either be 1 and/or equal. More than two distinct lengths are not allowed')\n            elif (distinct_param_value_lengths == 1) and (0 in param_values_length_set):\n                return config_dict\n            elif (distinct_param_value_lengths == 1) or (1 in param_values_length_set):\n                return [{**config_dict, \"M\": M} \n\n                        for M in flatten_tabulated_dict(tabulate_dict(params))]\n            else:\n                raise Exception('When sweeping, `M` list lengths should either be 1 and/or equal. ')\n\n        else:\n            config_dict[\"M\"] = [{}]\n            return config_dict\n\n\ndef psub_list(psu_block, psu_steps):\n    return [psu_block[psu] for psu in psu_steps]\n\n\ndef psub(policies, state_updates):\n    return {\n        'policies': policies,\n        'states': state_updates\n    }\n\n\ndef genereate_psubs(policy_grid, states_grid, policies, state_updates):\n    PSUBS = []\n    for policy_ids, state_list in zip(policy_grid, states_grid):\n        filtered_policies = {k: v for (k, v) in policies.items() if k in policy_ids}\n        filtered_state_updates = {k: v for (k, v) in state_updates.items() if k in state_list}\n        PSUBS.append(psub(filtered_policies, filtered_state_updates))\n\n    return PSUBS\n\n\ndef access_block(state_history, target_field, psu_block_offset, exculsion_list=[]):\n    exculsion_list += [target_field]\n\n    def filter_history(key_list, block):\n        filter = lambda key_list: \\\n            lambda d: {k: v for k, v in d.items() if k not in key_list}\n        return list(map(filter(key_list), block))\n\n    if psu_block_offset < -1:\n        if len(state_history) >= abs(psu_block_offset):\n            return filter_history(exculsion_list, state_history[psu_block_offset])\n        else:\n            return []\n    elif psu_block_offset == -1:\n        return filter_history(exculsion_list, state_history[psu_block_offset])\n    else:\n        return []\n\n## Parameter Sweep\ndef partial_state_sweep_filter(state_field, partial_state_updates):\n    partial_state_dict = dict([(k, v[state_field]) for k, v in partial_state_updates.items()])\n    return dict([\n        (k, dict_filter(v, lambda v: isinstance(v, list))) for k, v in partial_state_dict.items()\n            if contains_type(list(v.values()), list)\n    ])\n\n\ndef state_sweep_filter(raw_exogenous_states):\n    return dict([(k, v) for k, v in raw_exogenous_states.items() if isinstance(v, list)])\n\n\n# @curried\ndef sweep_partial_states(_type, in_config):\n    configs = []\n    # filtered_mech_states\n    filtered_partial_states = partial_state_sweep_filter(_type, in_config.partial_state_update_blocks)\n    if len(filtered_partial_states) > 0:\n        for partial_state, state_dict in filtered_partial_states.items():\n            for state, state_funcs in state_dict.items():\n                for f in state_funcs:\n                    config = in_config.copy()\n                    config.partial_state_updates[partial_state][_type][state] = f\n                    configs.append(config)\n                    del config\n    else:\n        configs = [in_config]\n\n    return configs\n\n# @curried\ndef sweep_states(state_type, states, in_config):\n    configs = []\n    filtered_states = state_sweep_filter(states)\n    if len(filtered_states) > 0:\n        for state, state_funcs in filtered_states.items():\n            for f in state_funcs:\n                config = in_config.copy()\n                exploded_states = states.copy()\n                exploded_states[state] = f\n                if state_type == 'exogenous':\n                    config.exogenous_states = exploded_states\n                elif state_type == 'environmental':\n                    config.env_processes = exploded_states\n                configs.append(config)\n                del config, exploded_states\n    else:\n        configs = [in_config]\n\n    return configs\n"
  },
  {
    "path": "cadCAD/configuration/utils/depreciationHandler.py",
    "content": "from copy import deepcopy\n\n\ndef sanitize_config(config):\n    for key, value in config.kwargs.items():\n        if key == 'state_dict':\n            config.initial_state = value\n        elif key == 'seed':\n            config.seeds = value\n        elif key == 'mechanisms':\n            config.partial_state_update_blocks = value\n\n    if config.initial_state == {}:\n        raise Exception('The initial conditions of the system have not been set')\n\n\ndef sanitize_partial_state_updates(partial_state_updates):\n    new_partial_state_updates = partial_state_updates.copy()\n    def rename_keys(d):\n        if 'behaviors' in d:\n            d['policies'] = d.pop('behaviors')\n\n        if 'states' in d:\n            d['variables'] = d.pop('states')\n\n    if isinstance(new_partial_state_updates, list):\n        for v in new_partial_state_updates:\n            rename_keys(v)\n    elif isinstance(new_partial_state_updates, dict):\n        for k, v in new_partial_state_updates.items():\n            rename_keys(v)\n\n    del partial_state_updates\n    return new_partial_state_updates\n"
  },
  {
    "path": "cadCAD/configuration/utils/policyAggregation.py",
    "content": "def get_base_value(x):\n    if isinstance(x, str):\n        return ''\n    elif isinstance(x, int):\n        return 0\n    elif isinstance(x, list):\n        return []\n    else:\n        return 0\n\n\ndef policy_to_dict(v):\n    return dict(list(zip(map(lambda n: 'p' + str(n + 1), list(range(len(v)))), v)))\n\n\nadd = lambda a, b: a + b\n\n\n# @curried\n# def foldr_dict_vals(f, d):\n#     return foldr(f)(list(d.values()))\n#\n#\n# def sum_dict_values():\n#     return foldr_dict_vals(add)\n\n\n# @curried\n# def dict_op(f, d1, d2):\n#     def set_base_value(target_dict, source_dict, key):\n#         if key not in target_dict:\n#             return get_base_value(source_dict[key])\n#         else:\n#             return target_dict[key]\n#\n#     key_set = set(list(d1.keys()) + list(d2.keys()))\n#\n#     return {k: f(set_base_value(d1, d2, k), set_base_value(d2, d1, k)) for k in key_set}\n#\n# def dict_elemwise_sum():\n#     return dict_op(add)\n"
  },
  {
    "path": "cadCAD/configuration/utils/userDefinedObject.py",
    "content": "from collections import namedtuple\nfrom inspect import getmembers, ismethod\nfrom pandas.core.frame import DataFrame\n\nfrom cadCAD.utils import SilentDF\n\n\ndef val_switch(v):\n    if isinstance(v, DataFrame) is True:\n        return SilentDF(v)\n    else:\n        return v\n\n\nclass udcView(object):\n    def __init__(self, d, masked_members):\n        self.__dict__ = d\n        self.masked_members = masked_members\n\n    def __repr__(self):\n        members = {}\n        variables = {\n            k: val_switch(v) for k, v in self.__dict__.items()\n            if str(type(v)) != \"<class 'method'>\" and k not in self.masked_members # and isinstance(v, DataFrame) is not True\n        }\n        members['methods'] = [k for k, v in self.__dict__.items() if str(type(v)) == \"<class 'method'>\"]\n\n        members.update(variables)\n        return f\"{members}\"\n\n\nclass udcBroker(object):\n    def __init__(self, obj, function_filter=['__init__']):\n        d = {}\n        funcs = dict(getmembers(obj, ismethod))\n        filtered_functions = {k: v for k, v in funcs.items() if k not in function_filter}\n        d['obj'] = obj\n        d.update(vars(obj))  # somehow is enough\n        d.update(filtered_functions)\n\n        self.members_dict = d\n\n    def get_members(self):\n        return self.members_dict\n\n    def get_view(self, masked_members):\n        return udcView(self.members_dict, masked_members)\n\n    def get_namedtuple(self):\n        return namedtuple(\"Hydra\", self.members_dict.keys())(*self.members_dict.values())\n\n\ndef UDO(udo, masked_members=['obj']):\n    return udcBroker(udo).get_view(masked_members)\n\n\ndef udoPipe(obj_view):\n    return UDO(obj_view.obj, obj_view.masked_members)\n"
  },
  {
    "path": "cadCAD/diagram/__init__.py",
    "content": "from cadCAD.diagram.config_diagram import diagram, diagram_from_config"
  },
  {
    "path": "cadCAD/diagram/config_diagram.py",
    "content": "from graphviz import Digraph\nimport inspect\nimport re\n\n\n### Inspect functions\n\n\ndef extract_var_key(raw_line: str, var_id: str) -> str:\n    \"\"\"\n    Extract the key from an line in the form \"dict['key']\" or\n    \"dict.get('key', *args)\".\n    \"\"\"\n    line = raw_line.strip()[len(var_id) :]\n    state_var = \"\"\n    if line[0] == \"[\":\n        state_var = line[2:-2]\n    elif line[0:4] == \".get\":\n        call = line.split(\"(\")[1]\n        call = call.split(\")\")[0]\n        call = call.strip()\n        sep = \"'\"\n        if call[0] == '\"':\n            sep = '\"'\n        state_var = [el for el in call.split(sep) if len(el) > 0][0]\n    return state_var\n\n\ndef extract_vars_from_source(source: str, var_id: str) -> set:\n    \"\"\"\n    Extract keys from an source code that consumes an dict with\n    var_id name.\n    \"\"\"\n    regex = (\n        r\"((\"\n        + var_id\n        + r\"\\[(\\'|\\\")\\w+(\\'|\\\")\\])|(\"\n        + var_id\n        + r\".get\\((\\'|\\\")\\w+(\\'|\\\")[A-z,\\s\\\"\\']*\\)))\"\n    )\n\n    matches = re.findall(regex, source)\n    lines = [match[0] for match in matches]\n    state_vars = set([extract_var_key(line, var_id) for line in lines])\n    return state_vars\n\n\ndef extract_keys(f: callable) -> dict:\n    \"\"\"\n\n    \"\"\"\n    src = inspect.getsource(f)\n    params = inspect.signature(f)\n    params_key = list(params.parameters)[0]\n    state_key = list(params.parameters)[3]\n    output = {\n        \"state\": extract_vars_from_source(src, state_key),\n        \"params\": extract_vars_from_source(src, params_key),\n    }\n    return output\n\n\ndef relate_psub(psub: dict) -> dict:\n    \"\"\"\n    Given an dict describing an Partial State Update block, this functions\n    generates an dict with three keys: 'params' and 'state' which are sets\n    containing all unique parameters and state variables for the PSUB,\n    and 'map' for doing an more detailed map.\n    \"\"\"\n    psub_relation = {\"map\": {}, \"params\": set(), \"state\": set()}\n    unique_params = set()\n    unique_vars = set()\n    keys = [\"policies\", \"variables\"]\n    for key in keys:\n        type_functions = psub.get(key, {})\n        type_keys = {k: extract_keys(v) for k, v in type_functions.items()}\n        params_list = [v.get(\"params\", set()) for v in type_keys.values()]\n        vars_list = [v.get(\"state\", set()) for v in type_keys.values()]\n        if len(params_list) > 0:\n            params = set.union(*params_list)\n        else:\n            params = set()\n        if len(vars_list) > 0:\n            vars = set.union(*vars_list)\n        else:\n            vars = set()\n        psub_relation[\"params\"] = psub_relation[\"params\"].union(params)\n        psub_relation[\"state\"] = psub_relation[\"state\"].union(vars)\n        psub_relation[\"map\"][key] = type_keys\n    return psub_relation\n\n\ndef generate_relations(psubs) -> list:\n    \"\"\"\n    Generates an list of dicts,\n\n    \"\"\"\n    psub_relations = [relate_psub(psub) for psub in psubs]\n    return psub_relations\n\n\n### Diagram functions\n\n\ndef generate_time_graph() -> Digraph:\n    time_graph = Digraph(\"cluster_timestep\", engine=\"dot\")\n    time_graph.attr(style=\"filled\", bgcolor=\"pink\", dpi=\"50\", rankdir=\"LR\")\n    return time_graph\n\n\ndef generate_variables_cluster(variables: dict, i: int, suffix=\"\") -> Digraph:\n    state_graph = Digraph(\"cluster_variables_{}{}\".format(i, suffix))\n    state_graph.attr(style=\"filled, dashed\", label=\"State\", fillcolor=\"skyblue\")\n    for key, value in variables.items():\n        name = \"variable_{}_{}{}\".format(key, i, suffix)\n        description = \"{} ({})\".format(key, type(value).__name__)\n        state_graph.node(\n            name,\n            description,\n            shape=\"cylinder\",\n            style=\"filled, solid\",\n            fillcolor=\"honeydew\",\n        ),\n    return state_graph\n\n\ndef generate_params_cluster(params: dict, i: int) -> Digraph:\n    params_graph = Digraph(\"cluster_params_{}\".format(i))\n    params_graph.attr(style=\"filled, dashed\", label=\"Parameters\", fillcolor=\"skyblue\")\n    for key, value in params.items():\n        name = \"param_{}_{}\".format(key, i)\n        description = \"{} ({})\".format(key, type(value).__name__)\n        params_graph.node(\n            name,\n            description,\n            shape=\"cylinder\",\n            style=\"filled, solid\",\n            fillcolor=\"honeydew\",\n        ),\n    return params_graph\n\n\ndef generate_psub_graph(i: int):\n    psub_graph = Digraph(\"cluster_psub_{}\".format(i))\n    psub_graph.attr(\n        style=\"filled, dashed\",\n        label=f\"Partial State Update Block #{i}\",\n        fillcolor=\"thistle\",\n        center=\"true\",\n    )\n    return psub_graph\n\n\ndef relate_params(graph: Digraph, params, i, origin=-1) -> Digraph:\n    for param in params:\n        dst = \"param_{}_{}\".format(param, i)\n        src = \"param_{}_{}\".format(param, origin)\n        graph.edge(src, dst)\n    return graph\n\n\ndef generate_policies_cluster(policies: dict, i: int, psub_graph) -> Digraph:\n    policy_graph = Digraph(\"cluster_policy_{}\".format(i))\n    policy_graph.attr(label=\"Policies\")\n    policy_graph.node(\n        \"agg_{}\".format(i),\n        \"Aggregation\",\n        shape=\"circle\",\n        style=\"filled,bold\",\n        fillcolor=\"greenyellow\",\n        width=\"1\",\n    )\n    for key, value in policies.items():\n        name = \"policy_{}_{}\".format(key, i)\n        description = \"{} ({})\".format(key, value.__name__)\n        policy_graph.node(\n            name,\n            description,\n            style=\"filled, bold\",\n            fillcolor=\"palegreen\",\n            shape=\"cds\",\n            height=\"1\",\n            width=\"1\",\n        )\n        psub_graph.edge(name, \"agg_{}\".format(i))\n    return psub_graph.subgraph(policy_graph)\n\n\ndef relate(\n    graph, relations, i, src_prefix, dst_prefix, suffix=\"\", reverse=False\n) -> Digraph:\n    for key, value in relations.items():\n        dst = \"{}_{}_{}\".format(dst_prefix, key, i)\n        for param in value:\n            src = \"{}_{}_{}{}\".format(src_prefix, param, i, suffix)\n            if reverse:\n                graph.edge(dst, src)\n            else:\n                graph.edge(src, dst)\n    return graph\n\n\ndef generate_sufs_cluster(sufs: dict, i: int, psub_graph, agg=False) -> Digraph:\n    suf_graph = Digraph(\"cluster_suf_{}\".format(i))\n    suf_graph.attr(label=\"State Update Functions\")\n    for key, value in sufs.items():\n        name = \"suf_{}_{}\".format(key, i)\n        description = \"{} ({})\".format(key, value.__name__)\n        suf_graph.node(\n            name,\n            description,\n            style=\"filled, bold\",\n            fillcolor=\"red\",\n            shape=\"cds\",\n            height=\"1\",\n            width=\"1\",\n        )\n        if agg:\n            psub_graph.edge(\"agg_{}\".format(i), name)\n    return psub_graph.subgraph(suf_graph)\n\n\ndef relate_params_to_sufs(graph, sufs, i) -> Digraph:\n    for key, value in sufs.items():\n        dst = \"suf_{}_{}\".format(key, i)\n        for param in value:\n            src = \"param_{}_{}\".format(param, i)\n            graph.edge(src, dst)\n    return graph\n\n\ndef diagram(initial_state, params, psubs):\n    \"\"\"\n    Generates an diagram for an cadCAD configuration object.\n    \"\"\"\n    relations = generate_relations(psubs)\n    time_graph = generate_time_graph()\n    for i_psub, psub in enumerate(psubs):\n        psub_graph = generate_psub_graph(i_psub)\n\n        # Parameters\n        psub_params = relations[i_psub].get(\"params\", set())\n        psub_params = {k: params.get(k, None) for k in psub_params}\n        psub_vars = relations[i_psub].get(\"state\", set())\n        psub_vars = {k: initial_state.get(k, None) for k in psub_vars}\n        psub_graph.subgraph(generate_params_cluster(psub_params, i_psub))\n        psub_graph.subgraph(generate_variables_cluster(psub_vars, i_psub))\n        # psub_graph = relate_params(psub_graph, psub_params, i)\n\n        # Policies\n        policies = psub.get(\"policies\", {})\n        psub_map = relations[i_psub].get(\"map\", {})\n        policy_map = psub_map.get(\"policies\", {})\n        policy_inputs = {\n            policy: relation[\"state\"] for policy, relation in policy_map.items()\n        }\n        policy_params = {\n            policy: relation[\"params\"] for policy, relation in policy_map.items()\n        }\n        list_of_inputs = list(policy_inputs.values())\n        if len(list_of_inputs) > 0:\n            agg = True\n            inputs = set.union(*list_of_inputs)\n            inputs = {k: initial_state.get(k, None) for k in inputs}\n            psub_graph.subgraph(generate_policies_cluster(policies, i_psub, psub_graph))\n            psub_graph = relate(psub_graph, policy_params, i_psub, \"param\", \"policy\")\n            psub_graph = relate(psub_graph, policy_inputs, i_psub, \"variable\", \"policy\")\n        else:\n            agg = False\n\n        # SUFs\n        sufs = psub.get(\"variables\", {})\n        suf_map = psub_map.get(\"variables\", {})\n        sufs_inputs = {\n            policy: relation[\"state\"] for policy, relation in suf_map.items()\n        }\n        sufs_params = {\n            policy: relation[\"params\"] for policy, relation in suf_map.items()\n        }\n        list_of_inputs = list(sufs_inputs.values())\n        if len(list_of_inputs) > 0:\n            inputs = set.union(*list_of_inputs)\n            inputs = {k: initial_state.get(k, None) for k in inputs}\n            generate_sufs_cluster(sufs, i_psub, psub_graph, agg=agg)\n            psub_graph = relate(psub_graph, sufs_params, i_psub, \"param\", \"suf\")\n            psub_graph = relate(psub_graph, sufs_inputs, i_psub, \"variable\", \"suf\")\n\n            time_graph.subgraph(psub_graph)\n    return time_graph\n\n\ndef diagram_from_config(config):\n    initial_state = config.initial_state\n    params = config.sim_config[\"M\"]\n    psubs = config.partial_state_update_blocks\n    return diagram(initial_state, params, psubs)\n"
  },
  {
    "path": "cadCAD/engine/__init__.py",
    "content": "from time import time\nfrom typing import Callable, Dict, List, Any, Tuple, Union, Sequence, Mapping\nfrom tqdm.auto import tqdm\n\nfrom cadCAD.utils import flatten\nfrom cadCAD.utils.execution import print_exec_info\nfrom cadCAD.configuration import Configuration, Processor\nfrom cadCAD.configuration.utils import TensorFieldReport, configs_as_objs, configs_as_dicts\nfrom cadCAD.engine.simulation import Executor as SimExecutor\nfrom cadCAD.engine.execution import single_proc_exec, parallelize_simulations, local_simulations\nfrom cadCAD.types import *\n\nVarDictType = Dict[str, List[object]]\nStatesListsType = List[dict[str, object]]\nConfigsType = List[tuple[list[callable], List[callable]]]\nEnvProcessesType = Dict[str, callable]\n\n\nclass ExecutionMode:\n    local_mode = 'local_proc'\n    multi_mode = 'multi_proc'\n    distributed = 'dist_proc'\n    single_mode = 'single_proc'\n    # Backwards compatible modes below\n    single_proc = 'single_proc'\n    multi_proc = 'multi_proc'\n\n\ndef auto_mode_switcher(config_amt: int):\n    try:\n        if config_amt == 1:\n            return ExecutionMode.single_mode, single_proc_exec\n        elif (config_amt > 1):\n            return ExecutionMode.multi_mode, parallelize_simulations\n    except AttributeError:\n        if config_amt < 1:\n            raise ValueError('N must be >= 1!')\n\n\nclass ExecutionContext:\n    def __init__(self, context=ExecutionMode.local_mode, method=None, additional_objs=None) -> None:\n        self.name = context\n        self.additional_objs = additional_objs\n        if context == 'local_proc':\n            self.method = local_simulations\n        elif context == 'single_proc':\n            self.method = single_proc_exec\n        elif context == 'multi_proc':\n            self.method = parallelize_simulations\n        elif context == 'dist_proc':\n            def distroduce_proc(\n                    simulation_execs, var_dict_list, states_lists, configs_structs, env_processes_list, Ts, SimIDs, RunIDs,\n                    ExpIDs,\n                    SubsetIDs,\n                    SubsetWindows,\n                    configured_n,  # exec_method,\n                    sc, additional_objs=additional_objs\n            ):\n                return method(\n                    simulation_execs, var_dict_list, states_lists, configs_structs, env_processes_list, Ts, SimIDs, RunIDs,\n                    ExpIDs,\n                    SubsetIDs,\n                    SubsetWindows,\n                    configured_n,  # exec_method,\n                    sc, additional_objs\n                )\n\n            self.method = distroduce_proc\n\n\nclass Executor:\n    def __init__(self,\n                 exec_context: ExecutionContext, configs: List[Configuration], sc=None, empty_return=False, supress_print=False\n                 ) -> None:\n        self.sc = sc\n        self.SimExecutor = SimExecutor\n        self.exec_method = exec_context.method\n        self.exec_context = exec_context.name\n        self.additional_objs = exec_context.additional_objs\n        self.configs = configs\n        self.empty_return = empty_return\n        self.supress_print = supress_print\n\n    def execute(self) -> Tuple[object, object, Dict[str, object]]:\n        if self.empty_return is True:\n            return [], [], []\n\n        config_proc = Processor()\n        create_tensor_field = TensorFieldReport(\n            config_proc).create_tensor_field\n\n        sessions = []\n        var_dict_list, states_lists = [], []\n        Ts, Ns, SimIDs, RunIDs = [], [], [], []\n        ExpIDs, ExpWindows, SubsetIDs, SubsetWindows = [], [], [], []\n        eps, configs_structs, env_processes_list = [], [], []\n        partial_state_updates, sim_executors = [], []\n        config_idx = 0\n\n        # Execution Info\n        if self.supress_print is False:\n            print_exec_info(self.exec_context, configs_as_objs(self.configs))\n\n        t1 = time()\n        for x in tqdm(self.configs,\n                      total=len(self.configs),\n                      desc=\"Initializing configurations\",\n                      disable=self.supress_print):\n            sessions.append(\n                {\n                    'user_id': x.user_id, 'experiment_id': x.experiment_id, 'session_id': x.session_id,\n                    'simulation_id': x.simulation_id, 'run_id': x.run_id,\n                    'subset_id': x.subset_id, 'subset_window': x.subset_window\n                }\n            )\n            Ts.append(x.sim_config['T'])\n            Ns.append(x.sim_config['N'])\n\n            ExpIDs.append(x.experiment_id)\n            ExpWindows.append(x.exp_window)\n            SimIDs.append(x.simulation_id)\n            SubsetIDs.append(x.subset_id)\n            RunIDs.append(x.run_id)\n            SubsetWindows.append(x.subset_window)\n\n            var_dict_list.append(x.sim_config['M'])\n            states_lists.append([x.initial_state])\n            eps.append(list(x.exogenous_states.values()))\n            configs_structs.append(config_proc.generate_config(\n                x.initial_state, x.partial_state_update_blocks, eps[config_idx]))\n            env_processes_list.append(x.env_processes)\n            partial_state_updates.append(x.partial_state_update_blocks)\n            sim_executors.append(SimExecutor(x.policy_ops).simulation)\n\n            config_idx += 1\n\n        remote_threshold = 100\n        config_amt = len(self.configs)\n\n        def get_final_dist_results(simulations: List[StateHistory],\n                                   psus: List[StateUpdateBlocks],\n                                   eps,\n                                   sessions: List[SessionDict]):\n            tensor_fields = [create_tensor_field(\n                psu, ep) for psu, ep in list(zip(psus, eps))]\n            return simulations, tensor_fields, sessions\n\n        def get_final_results(simulations: List[StateHistory],\n                              psus: List[StateUpdateBlocks],\n                              eps,\n                              sessions: List[SessionDict],\n                              remote_threshold: int):\n            \n            # if list of lists of lists of dicts: do flatten\n            # if list of dicts: do not flatetn\n            # else raise error\n\n\n            init: bool = isinstance(simulations, Sequence)\n            failed_1 = False\n            failed_2 = False\n            \n            try:\n                init: bool = isinstance(simulations, Sequence)\n                dont_flatten = init & isinstance(simulations[0], Mapping)\n                do_flatten = not dont_flatten\n            except:\n                failed_1 = True\n                do_flatten = True\n\n            try:\n                do_flatten = init & isinstance(simulations[0], Sequence)\n                do_flatten &= isinstance(simulations[0][0], Sequence)\n                do_flatten &= isinstance(simulations[0][0][0], Mapping)\n            except:\n                failed_2 = True\n                do_flatten = False\n\n            if failed_1 and failed_2:\n                raise ValueError('Invalid simulation results (Executor output is not list[dict] or list[list[list[dict]]])')\n\n\n            flat_timesteps, tensor_fields = [], []\n            for sim_result, psu, ep in tqdm(list(zip(simulations, psus, eps)),\n                                            total=len(simulations),\n                                            desc='Flattening results',\n                                            disable=self.supress_print):\n                if do_flatten:\n                    flat_timesteps.append(flatten(sim_result))\n                tensor_fields.append(create_tensor_field(psu, ep))\n                \n            if do_flatten:\n                flat_simulations = flatten(flat_timesteps)\n            else:\n                flat_simulations = simulations\n\n            return flat_simulations, tensor_fields, sessions\n\n        final_result = None\n        original_N = len(configs_as_dicts(self.configs))\n        if self.exec_context != ExecutionMode.distributed:\n            # Consider Legacy Support\n            if self.exec_context == ExecutionMode.local_mode:\n                self.exec_context, self.exec_method = auto_mode_switcher(\n                    config_amt)\n            elif self.exec_context == ExecutionMode.single_mode or self.exec_context == ExecutionMode.single_proc:\n                self.exec_context, self.exec_method = ExecutionMode.single_mode, single_proc_exec\n            elif self.exec_context == ExecutionMode.multi_mode or self.exec_context == ExecutionMode.multi_proc:\n                if config_amt == 1:\n                    raise ValueError(\"Multi mode must have at least 2 configs\")\n                else:\n                    self.exec_context, self.exec_method = ExecutionMode.multi_mode, parallelize_simulations\n            else:\n                raise ValueError(\"Invalid execution mode specified\")\n\n            if self.supress_print is False:\n                print(\"Execution Method: \" + self.exec_method.__name__)\n                \n            simulations_results = self.exec_method(\n                sim_executors, var_dict_list, states_lists, configs_structs, env_processes_list, Ts, SimIDs, RunIDs,\n                ExpIDs, SubsetIDs, SubsetWindows, original_N, self.additional_objs\n            )\n\n            final_result = get_final_results(\n                simulations_results, partial_state_updates, eps, sessions, remote_threshold)\n        elif self.exec_context == ExecutionMode.distributed:\n            if self.supress_print is False:\n                print(\"Execution Method: \" + self.exec_method.__name__)\n            simulations_results = self.exec_method(\n                sim_executors, var_dict_list, states_lists, configs_structs, env_processes_list, Ts,\n                SimIDs, RunIDs, ExpIDs, SubsetIDs, SubsetWindows, original_N, self.sc\n            )\n            final_result = get_final_dist_results(\n                simulations_results, partial_state_updates, eps, sessions)\n\n        t2 = time()\n        if self.supress_print is False:\n            print(f\"Total execution time: {t2 - t1 :.2f}s\")\n\n        return final_result\n"
  },
  {
    "path": "cadCAD/engine/execution.py",
    "content": "from typing import Callable, Dict, List, Any, Tuple, Sequence\nfrom pathos.multiprocessing import ProcessPool # type: ignore\nfrom collections import Counter\nfrom cadCAD.types import *\nfrom cadCAD.utils import flatten\n\nVarDictType = Dict[str, List[object]]\nStatesListsType = List[dict[str, object]]\nConfigsType = List[tuple[list[callable], List[callable]]]\nEnvProcessesType = Dict[str, callable]\n\n\ndef single_proc_exec(\n    simulation_execs: Sequence[ExecutorFunction],\n    var_dict_list: Union[Sequence[Parameters], Parameters],\n    states_lists: Sequence[StateHistory],\n    configs_structs: Sequence[StateUpdateBlocks],\n    env_processes_list: Sequence[EnvProcesses],\n    Ts: Sequence[TimeSeq],\n    SimIDs: Sequence[SimulationID],\n    Ns: Sequence[Run],\n    ExpIDs: Sequence[int],\n    SubsetIDs: Sequence[SubsetID],\n    SubsetWindows: Sequence[SubsetWindow],\n    configured_n: Sequence[N_Runs],\n    additional_objs=None\n) -> List:\n    \n    \n    if not isinstance(var_dict_list, Sequence):\n        var_dict_list = list([var_dict_list])\n\n    raw_params = (\n        simulation_execs, states_lists, configs_structs, env_processes_list,\n        Ts, SimIDs, Ns, SubsetIDs, SubsetWindows, var_dict_list)\n    \n    results: List = []\n    for raw_param in zip(*raw_params):\n        simulation_exec, states_list, config, env_processes, T, sim_id, N, subset_id, subset_window, var_dict = raw_param\n        result = simulation_exec(\n            var_dict, states_list, config, env_processes, T, sim_id, N, subset_id, subset_window, configured_n, additional_objs\n        )\n        results.append(flatten(result))\n    return flatten(results)\n\ndef parallelize_simulations(\n    simulation_execs: List[ExecutorFunction],\n    var_dict_list: List[Parameters],\n    states_lists: List[StateHistory],\n    configs_structs: List[StateUpdateBlocks],\n    env_processes_list: List[EnvProcesses],\n    Ts: List[TimeSeq],\n    SimIDs: List[SimulationID],\n    Ns: List[Run],\n    ExpIDs: List[int],\n    SubsetIDs: List[SubsetID],\n    SubsetWindows: List[SubsetWindow],\n    configured_n: List[N_Runs],\n    additional_objs=None\n):\n\n    params = list(\n        zip(\n            simulation_execs, var_dict_list, states_lists, configs_structs, env_processes_list,\n            Ts, SimIDs, Ns, SubsetIDs, SubsetWindows\n        )\n    )\n\n    len_configs_structs = len(configs_structs)\n\n    unique_runs = Counter(SimIDs)\n    sim_count = max(unique_runs.values())\n    highest_divisor = int(len_configs_structs / sim_count)\n\n    new_configs_structs, new_params = [], []\n    for count in range(len(params)):\n        if count == 0:\n            new_params.append(\n                params[count: highest_divisor]\n            )\n            new_configs_structs.append(\n                configs_structs[count: highest_divisor]\n            )\n        elif count > 0:\n            new_params.append(\n                params[count * highest_divisor: (count + 1) * highest_divisor]\n            )\n            new_configs_structs.append(\n                configs_structs[count * highest_divisor: (count + 1) * highest_divisor]\n            )\n\n    def process_executor(params):\n        if len_configs_structs > 1:\n            with ProcessPool(processes=len_configs_structs) as pp:\n                results = pp.map(\n                    lambda t: t[0](t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], configured_n), params\n                )\n        else:\n            t = params[0]\n            results = t[0](t[1], t[2], t[3], t[4], t[5], t[6], t[7], t[8], t[9], configured_n)\n        return results\n\n    results = flatten(list(map(lambda params: process_executor(params), new_params)))\n\n    return results\n\n\ndef local_simulations(\n    simulation_execs: List[ExecutorFunction],\n    var_dict_list: List[Parameters],\n    states_lists: List[StateHistory],\n    configs_structs: List[StateUpdateBlocks],\n    env_processes_list: List[EnvProcesses],\n    Ts: List[TimeSeq],\n    SimIDs: List[SimulationID],\n    Ns: List[Run],\n    ExpIDs: List[int],\n    SubsetIDs: List[SubsetID],\n    SubsetWindows: List[SubsetWindow],\n    configured_n: List[N_Runs],\n    additional_objs=None\n    ):\n    config_amt = len(configs_structs)\n\n    if config_amt == 1: # and configured_n != 1\n        return single_proc_exec(\n            simulation_execs, var_dict_list, states_lists, configs_structs, env_processes_list,\n            Ts, SimIDs, Ns, ExpIDs, SubsetIDs, SubsetWindows, configured_n, additional_objs\n        )\n    elif config_amt > 1: # and configured_n != 1\n        return parallelize_simulations(\n            simulation_execs, var_dict_list, states_lists, configs_structs, env_processes_list,\n            Ts, SimIDs, Ns, ExpIDs, SubsetIDs, SubsetWindows, configured_n, additional_objs\n        )\n        # elif config_amt > 1 and configured_n == 1:\n"
  },
  {
    "path": "cadCAD/engine/simulation.py",
    "content": "from typing import Any, Callable, Dict, List, Tuple\nfrom copy import deepcopy, copy\nfrom functools import reduce\nfrom funcy import curry # type: ignore\n\nfrom cadCAD.utils import flatten\nfrom cadCAD.engine.utils import engine_exception\nfrom cadCAD.types import *\n\nid_exception: callable = curry(engine_exception)(KeyError)(KeyError)(None)\n\nAggregator = Callable[[object, object], object]\n\n\ndef policy_scope_tuner(args: tuple,\n                       additional_objs: object,\n                       f: PolicyFunction) -> dict:\n    \"\"\"\n    Execute cadCAD policy function.\n    \"\"\"\n    (sweep_dict, sub_step, sL, s) = args\n    if additional_objs is None:\n        return f(sweep_dict, sub_step, sL, s)\n    else:\n        return f(sweep_dict, sub_step, sL, s, additional_objs)\n\n\ndef compose(init_reduction_funct: Aggregator,\n            funct_list: List[Aggregator],\n            val_list: dict) -> object:\n    \"\"\"\n    Reduce the nested policy input dict into a simple one.\n    \"\"\"\n    result, i = None, 0\n    def composition(x): return [reduce(\n        init_reduction_funct, x.values())] + funct_list\n    for g in composition(val_list):\n        if i == 0:\n            result = g\n            i = 1\n        else:\n            result = g(result)\n    return result\n\nclass Executor:\n    def __init__(\n        self,\n        policy_ops,\n        policy_update_exception: callable = id_exception,\n        state_update_exception: callable = id_exception\n    ) -> None:\n\n        self.policy_ops = policy_ops\n        self.state_update_exception = state_update_exception\n        self.policy_update_exception = policy_update_exception\n\n    def get_policy_input(\n        self,\n        sweep_dict: Dict[str, List[object]],\n        sub_step: int,\n        sL: List[dict[str, object]],\n        s: Dict[str, object],\n        funcs: List[callable],\n        additional_objs\n    ) -> Dict[str, object]:\n        \"\"\"\n        Retrieves the Policy Input for usage on State Update Functions\n\n        Arguments:\n            sweep_dict - System Parameters\n            sub_step - Execution order in regards to PSUBs\n            sL - History of the variables state\n            s - Current variables state\n            funcs - list of cadCAD Policies to be executed\n        \"\"\"\n\n        ops = self.policy_ops\n\n        args = (sweep_dict, sub_step, sL, s)\n        def execute_policy(f: PolicyFunction) -> dict:\n            return policy_scope_tuner(args, additional_objs, f)\n\n        col_results: List[PolicyOutput] = map(execute_policy, funcs)\n        # Create a nested dict containing all results combination\n        # new_dict[policy_input][policy_ordinal] = policy_input_value\n        new_dict: dict = {}\n        for i, col_result in enumerate(col_results):\n            for label, value in col_result.items():\n                if label not in new_dict.keys():\n                    new_dict[label] = {}\n                else:\n                    pass\n                new_dict[label][i] = value\n\n        # Aggregator functions\n        ops_head, *ops_tail = ops\n\n        # Function for aggregating a combination of policy inputs\n        # for the same signal\n        def f(val_list):\n            return compose(init_reduction_funct=ops_head,\n                           funct_list=ops_tail,\n                           val_list=val_list)\n\n        # Generate dict to be consumed by SUFs\n        policy_input = {\n            label: f(val_list)\n            for label, val_list\n            in new_dict.items()}\n\n        return policy_input\n\n    def apply_env_proc(\n        self,\n        sweep_dict,\n        env_processes: Dict[str, callable],\n        state_dict: Dict[str, object]\n    ) -> Dict[str, object]:\n\n        def env_composition(target_field, state_dict, target_value):\n            function_type = type(lambda x: x)\n            env_update = env_processes[target_field]\n            if isinstance(env_update, list):\n                for f in env_update:\n                    target_value = f(sweep_dict, target_value)\n            elif isinstance(env_update, function_type):\n                target_value = env_update(state_dict, sweep_dict, target_value)\n            else:\n                target_value = env_update\n\n            return target_value\n\n        filtered_state_dict = {\n            k: v for k, v in state_dict.items() if k in env_processes.keys()}\n        env_proc_dict = {\n            target_field: env_composition(\n                target_field, state_dict, target_value)\n            for target_field, target_value in filtered_state_dict.items()\n        }\n\n        for k, v in env_proc_dict.items():\n            state_dict[k] = v\n\n        return state_dict\n\n    # mech_step\n    def partial_state_update(\n        self,\n        sweep_dict: Parameters,\n        sub_step: Substep,\n        sL: List[State],\n        sH: StateHistory,\n        state_funcs: List[StateUpdateFunction],\n        policy_funcs: List[PolicyFunction],\n        env_processes: EnvProcesses,\n        time_step: int,\n        run: int,\n        additional_objs\n    ) -> List[dict[str, object]]:\n\n        if type(additional_objs) == dict:\n            if additional_objs.get('deepcopy_off', False) == True:\n                last_in_obj = copy(sL[-1])\n                if len(additional_objs) == 1:\n                    additional_objs = None \n                    # XXX: drop the additional objects if only used for deepcopy\n                    # toggling.\n            else:\n                last_in_obj = deepcopy(sL[-1])\n        else:\n            last_in_obj = deepcopy(sL[-1])\n            \n        _input: Dict[str, Any] = self.policy_update_exception(\n            self.get_policy_input(sweep_dict, sub_step, sH, last_in_obj, policy_funcs, additional_objs)\n        )\n\n        def generate_record(state_funcs):\n            def state_scope_tuner(f):\n                lenf = f.__code__.co_argcount\n                if lenf == 5:\n                    return self.state_update_exception(f(sweep_dict, sub_step, sH, last_in_obj, _input))\n                elif lenf == 6:\n                    return self.state_update_exception(f(sweep_dict, sub_step, sH, last_in_obj, _input, additional_objs))\n            for f in state_funcs:\n                yield state_scope_tuner(f)\n\n        def transfer_missing_fields(source, destination):\n            for k in source:\n                if k not in destination:\n                    destination[k] = source[k]\n            del source  \n            return destination\n\n        try:\n            new_state_vars = dict(generate_record(state_funcs))\n        except (ValueError, TypeError):\n            raise ValueError(\"There is a State Update Function which is not returning an proper tuple\")\n\n\n        last_in_copy: Dict[str, Any] = transfer_missing_fields(last_in_obj, new_state_vars)\n        last_in_copy: Dict[str, Any] = self.apply_env_proc(sweep_dict, env_processes, last_in_copy)\n        last_in_copy['substep'], last_in_copy['timestep'], last_in_copy['run'] = sub_step, time_step, run\n\n        sL.append(last_in_copy)\n        del last_in_copy\n\n        return sL\n\n    # mech_pipeline - state_update_block\n    def state_update_pipeline(\n        self,\n        sweep_dict: Dict[str, List[object]],\n        simulation_list,\n        configs: List[tuple[list[callable], List[callable]]],\n        env_processes: Dict[str, callable],\n        time_step: int,\n        run: int,\n        additional_objs\n    ) -> List[dict[str, object]]:\n\n        sub_step = 0\n        states_list_copy: List[dict[str, object]] = tuple(simulation_list[-1])\n        genesis_states: Dict[str, object] = states_list_copy[-1].copy()\n#         genesis_states: Dict[str, object] = states_list_copy[-1]\n\n        if len(states_list_copy) == 1:\n            genesis_states['substep'] = sub_step\n\n        del states_list_copy\n        states_list: List[dict[str, object]] = [genesis_states]\n\n        sub_step += 1\n        for [s_conf, p_conf] in configs:\n            states_list: List[dict[str, object]] = self.partial_state_update(\n                sweep_dict, sub_step, states_list, simulation_list, s_conf, p_conf, env_processes, time_step, run,\n                additional_objs\n            )\n            sub_step += 1\n\n        time_step += 1\n\n        return states_list\n\n    # state_update_pipeline\n    def run_pipeline(\n        self,\n        sweep_dict: Dict[str, List[object]],\n        states_list: List[dict[str, object]],\n        configs: List[tuple[list[callable], List[callable]]],\n        env_processes: Dict[str, callable],\n        time_seq: range,\n        run: int,\n        additional_objs\n    ) -> List[list[dict[str, object]]]:\n        time_seq: List[int] = [x + 1 for x in time_seq]\n        simulation_list: List[list[dict[str, object]]] = [states_list]\n\n        for time_step in time_seq:\n            pipe_run: List[dict[str, object]] = self.state_update_pipeline(\n                sweep_dict, simulation_list, configs, env_processes, time_step, run, additional_objs\n            )\n            _, *pipe_run = pipe_run\n            simulation_list.append(pipe_run)\n\n        return simulation_list\n\n    def simulation(\n        self,\n        sweep_dict: SweepableParameters,\n        states_list: StateHistory,\n        configs,\n        env_processes: EnvProcesses,\n        time_seq: TimeSeq,\n        simulation_id: SimulationID,\n        run: int,\n        subset_id: SubsetID,\n        subset_window: SubsetWindow,\n        configured_N: int,\n        # remote_ind\n        additional_objs: Union[None, Dict]=None\n    ):\n        run += 1\n        subset_window.appendleft(subset_id)\n\n        def execute_run(sweep_dict, states_list, configs, env_processes, time_seq, _run) -> List[dict[str, object]]:\n            def generate_init_sys_metrics(genesis_states_list, sim_id, _subset_id, _run, _subset_window):\n                for D in genesis_states_list:\n                    d = D.copy()\n                    d['simulation'], d['subset'], d['run'], d['substep'], d['timestep'] = \\\n                        sim_id, _subset_id, _run, 0, 0\n                    yield d\n\n            states_list_copy: List[dict[str, object]] = list(\n                generate_init_sys_metrics(\n                    tuple(states_list), simulation_id, subset_id, run, subset_window)\n            )\n\n            first_timestep_per_run: List[dict[str, object]] = self.run_pipeline(\n                sweep_dict, states_list_copy, configs, env_processes, time_seq, run, additional_objs\n            )\n            del states_list_copy\n\n            return first_timestep_per_run\n\n        pipe_run = flatten(\n            [execute_run(sweep_dict, states_list, configs,\n                         env_processes, time_seq, run)]\n        )\n\n        return pipe_run\n"
  },
  {
    "path": "cadCAD/engine/utils.py",
    "content": "from datetime import datetime\n\n\ndef datetime_range(start, end, delta, dt_format='%Y-%m-%d %H:%M:%S'):\n    reverse_head = end\n    [start, end] = [datetime.strptime(x, dt_format) for x in [start, end]]\n\n    def _datetime_range(start, end, delta):\n        current = start\n        while current < end:\n            yield current\n            current += delta\n\n    reverse_tail = [dt.strftime(dt_format) for dt in _datetime_range(start, end, delta)]\n    return reverse_tail + [reverse_head]\n\n\ndef last_index(l):\n    return len(l)-1\n\n\ndef retrieve_state(l, offset):\n    return l[last_index(l) + offset + 1]\n\n\n# @curried\ndef engine_exception(ErrorType, error_message, exception_function, try_function):\n    try:\n        return try_function\n    except ErrorType:\n        print(error_message)\n        return exception_function\n"
  },
  {
    "path": "cadCAD/tools/__init__.py",
    "content": "from cadCAD.tools.execution import easy_run\nfrom cadCAD.tools.profiling import profile_run\nfrom cadCAD.tools.utils import generic_suf, add_parameter_labels\n"
  },
  {
    "path": "cadCAD/tools/execution/__init__.py",
    "content": "from cadCAD.tools.execution.easy_run import easy_run"
  },
  {
    "path": "cadCAD/tools/execution/easy_run.py",
    "content": "import inspect\nimport types\nfrom typing import Dict, Union\n\nimport pandas as pd  # type: ignore\nfrom cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import config_sim\nfrom cadCAD.engine import ExecutionContext, ExecutionMode, Executor\n\n\ndef describe_or_return(v: object) -> object:\n    \"\"\"\n    Thanks @LinuxIsCool!\n    \"\"\"\n    if isinstance(v, types.FunctionType):\n        return f'function: {v.__name__}'\n    elif isinstance(v, types.LambdaType) and v.__name__ == '<lambda>':\n        return f'lambda: {inspect.signature(v)}'\n    elif isinstance(v, list):\n        return str(v)\n    else:\n        return v\n\n\ndef select_M_dict(M_dict: Dict[str, object], keys: set) -> Dict[str, object]:\n    \"\"\"\n    Thanks @LinuxIsCool!\n    \"\"\"\n    return {k: describe_or_return(v) for k, v in M_dict.items() if k in keys}\n\n\ndef select_config_M_dict(configs: list, i: int, keys: set) -> Dict[str, object]:\n    return select_M_dict(configs[i].sim_config['M'], keys)\n\n\ndef easy_run(\n    state_variables,\n    params,\n    psubs,\n    N_timesteps,\n    N_samples,\n    use_label=False,\n    assign_params: Union[bool, set] = True,\n    drop_substeps=True,\n    exec_mode='local',\n    deepcopy_off=False,\n    supress_print=False\n) -> pd.DataFrame:\n    \"\"\"\n    Run cadCAD simulations without headaches.\n    \"\"\"\n\n    # Set-up sim_config\n    simulation_parameters = {'N': N_samples,\n                             'T': range(N_timesteps), 'M': params}\n    sim_config = config_sim(simulation_parameters)  # type: ignore\n\n    # Create a new experiment\n    exp = Experiment()\n    exp.append_configs(\n        sim_configs=sim_config,\n        initial_state=state_variables,\n        partial_state_update_blocks=psubs,\n    )\n    configs = exp.configs\n\n    # Set-up cadCAD executor\n    if exec_mode == 'local':\n        _exec_mode = ExecutionMode().local_mode\n    elif exec_mode == 'single':\n        _exec_mode = ExecutionMode().single_mode\n    exec_context = ExecutionContext(_exec_mode, additional_objs={'deepcopy_off': deepcopy_off})\n    executor = Executor(exec_context=exec_context, configs=configs, supress_print=supress_print)\n\n    # Execute the cadCAD experiment\n    (records, tensor_field, _) = executor.execute()\n\n    # Parse the output as a pandas DataFrame\n    df = pd.DataFrame(records)\n\n    if drop_substeps == True:\n        # Drop all intermediate substeps\n        first_ind = (df.substep == 0) & (df.timestep == 0)\n        last_ind = df.substep == max(df.substep)\n        inds_to_drop = first_ind | last_ind\n        df = df.loc[inds_to_drop].drop(columns=['substep'])\n    else:\n        pass\n\n    if assign_params == False:\n        pass\n    else:\n        M_dict = configs[0].sim_config['M']\n        params_set = set(M_dict.keys())\n\n        if assign_params == True:\n            pass\n        else:\n            params_set &= assign_params  # type: ignore\n\n        # Logic for getting the assign params criteria\n        if type(assign_params) is list:\n            selected_params = set(assign_params) & params_set  # type: ignore\n        elif type(assign_params) is set:\n            selected_params = assign_params & params_set\n        else:\n            selected_params = params_set\n        # Attribute parameters to each row*\n        params_dict = select_config_M_dict(configs, 0, selected_params)\n\n        # Handles all cases of parameter types including list\n        for key, value in params_dict.items():\n            df[key] = df.apply(lambda _: value, axis=1)\n\n        for i, (_, n_df) in enumerate(df.groupby(['simulation', 'subset', 'run'])):\n            params_dict = select_config_M_dict(configs, i, selected_params)\n            for key, value in params_dict.items():\n                df.loc[n_df.index, key] = df.loc[n_df.index].apply(\n                    lambda _: value, axis=1)\n\n    # Based on Vitor Marthendal (@marthendalnunes) snippet\n    if use_label == True:\n        psub_map = {\n            order + 1: psub.get('label', '') for (order, psub) in enumerate(psubs)\n        }\n        psub_map[0] = 'Initial State'\n        df['substep_label'] = df.substep.map(psub_map)\n\n    return df\n"
  },
  {
    "path": "cadCAD/tools/preparation.py",
    "content": "from typing import Mapping\nfrom cadCAD.tools.execution import easy_run\nfrom pandas import DataFrame # type: ignore\nfrom cadCAD.types import *\nfrom cadCAD.tools.types import *\nfrom itertools import product\nfrom dataclasses import dataclass\n\n\ndef sweep_cartesian_product(sweep_params: SweepableParameters) -> SweepableParameters:\n    \"\"\"\n    Makes a cartesian product from dictionary values.\n    This is useful for plugging inside the sys_params dict, like:\n    ```python\n    sweep_params = {'a': [0.1, 0.2], 'b': [1, 2]}\n    product_sweep \n    sys_params = {**cartesian_product_sweep(sweep_params),\n                  'c': [0.1]}\n    ```\n    Usage:\n    >>> sweep_params = {'a': [0.1, 0.2], 'b': [1, 2]}\n    >>> cartesian_product_sweep(sweep_params)\n    {'a': [0.1, 0.1, 0.2, 0.2], 'b': [1, 2, 1, 2]}\n    \"\"\"\n    cartesian_product = product(*sweep_params.values())\n    transpose_cartesian_product = zip(*cartesian_product)\n    zipped_sweep_params = zip(sweep_params.keys(), transpose_cartesian_product)\n    sweep_dict = dict(zipped_sweep_params)\n    sweep_dict = {k: list(v) for k, v in sweep_dict.items()}\n    return sweep_dict\n\n\ndef prepare_params(params: SystemParameters,\n                   cartesian_sweep: bool = False) -> Mapping[str, List[object]]:\n    simple_params = {k: [v.value]\n                     for k, v in params.items()\n                     if type(v) is Param}\n\n    sweep_params: SweepableParameters = {k: v.value\n                             for k, v in params.items()\n                             if type(v) is ParamSweep}\n    if cartesian_sweep is True:\n        sweep_params = sweep_cartesian_product(sweep_params)\n    else:\n        pass\n\n    cleaned_params = {**simple_params, **sweep_params}\n    return cleaned_params\n\n\ndef prepare_state(state: InitialState) -> Mapping[str, object]:\n    cleaned_state = {k: v.value\n                     for k, v in state.items()}\n    return cleaned_state\n\n\n@dataclass\nclass ConfigurationWrapper():\n    initial_state: InitialState\n    params: SystemParameters\n    timestep_block: StateUpdateBlocks\n    timesteps: int\n    samples: int\n\n    def run(self, *args, **kwargs) -> DataFrame:\n        output = easy_run(prepare_state(self.initial_state),\n                          prepare_params(self.params),\n                          self.timestep_block,\n                          self.timesteps,\n                          self.samples,\n                          *args,\n                          **kwargs)\n        return output\n"
  },
  {
    "path": "cadCAD/tools/profiling/__init__.py",
    "content": "from cadCAD.tools.profiling.profile_run import profile_run"
  },
  {
    "path": "cadCAD/tools/profiling/profile_run.py",
    "content": "from typing import Dict\nfrom cadCAD.tools import easy_run\nfrom cadCAD.types import StateUpdateBlocks, Parameters, State, StateUpdateBlock\nfrom time import time\nimport pandas as pd # type: ignore\n\n\ndef MEASURE_TIME_SUF(p, s, h, v, p_i): return ('run_time', time())\n\n\nMEASURING_BLOCK: StateUpdateBlock = {\n    'label': 'Time Measure',\n    'policies': {},\n    'variables': {\n        'run_time': MEASURE_TIME_SUF\n    }\n} # type: ignore\n\n\ndef profile_psubs(psubs: StateUpdateBlocks, profile_substeps=True) -> StateUpdateBlocks:\n    \"\"\"\n    Updates a TimestepBlock so that a time measuring function is added.\n    \"\"\"\n    new_timestep_block: StateUpdateBlocks = []\n    new_timestep_block.append(MEASURING_BLOCK)\n    if profile_substeps is True:\n        for psub in psubs:\n            new_timestep_block.append(psub)\n            new_timestep_block.append(MEASURING_BLOCK)\n    else:\n        pass\n    return new_timestep_block\n\n\ndef profile_run(state_variables: State,\n                params: Parameters,\n                psubs: StateUpdateBlocks,\n                *args,\n                profile_substeps=True,\n                **kwargs) -> pd.DataFrame:\n\n    if profile_substeps is True:\n        kwargs.update(drop_substeps=False)\n\n    new_psubs = profile_psubs(psubs, profile_substeps)\n    state_variables.update({'run_time': None})\n\n    return easy_run(state_variables,\n                    params,\n                    new_psubs,\n                    *args,\n                    **kwargs)\n"
  },
  {
    "path": "cadCAD/tools/profiling/visualizations.py",
    "content": "from tqdm.auto import tqdm\nimport pandas as pd\nimport plotly.express as px\nimport numpy as np\n\n\ndef visualize_elapsed_time_per_ts(df: pd.DataFrame, relative=False) -> None:\n    indexes = ['simulation', 'run', 'timestep', 'substep']\n\n    z_df = df.set_index(indexes)\n    first_time = z_df.query(\n        'timestep == 1 & substep == 1').reset_index([-1, -2]).run_time\n    s = (z_df.run_time - first_time)\n    s.name = 'time_since_start'\n\n    z_df = z_df.join(s)\n    s = z_df.groupby(indexes[:-1]).time_since_start.max()\n\n    fig_df = s.reset_index()\n    if relative is True:\n        s = fig_df.groupby(indexes[:-2]).time_since_start.diff()\n        s.name = 'psub_duration'\n        fig_df = fig_df.join(s)\n\n        y_col = 'psub_duration'\n    else:\n        y_col = 'time_since_start'\n        \n    fig = px.box(fig_df,\n                x='timestep',\n                y=y_col)\n\n    return fig\n\n\ndef visualize_substep_impact(df: pd.DataFrame, relative=True, **kwargs) -> None:\n    indexes = ['simulation', 'run', 'timestep', 'substep']\n\n    new_df = df.copy()\n    new_df = new_df.assign(psub_time=np.nan).set_index(indexes)\n\n    # Calculate the run time associated with PSUBs\n    for ind, gg_df in tqdm(df.query('substep > 0').groupby(indexes[:-1])):\n        g_df = gg_df.reset_index()\n        N_rows = len(g_df)\n        substep_rows = list(range(N_rows))[1:-1:2]\n\n        for substep_row in substep_rows:\n            t1 = g_df.run_time[substep_row - 1]\n            t2 = g_df.run_time[substep_row + 1]\n            dt = t2 - t1\n            g_df.loc[substep_row, 'psub_time'] = dt\n        g_df = g_df.set_index(indexes)\n        new_df.loc[g_df.index, 'psub_time'] = g_df.psub_time\n\n    fig_df = new_df.reset_index().dropna(subset=['psub_time'])\n\n\n    if 'substep_label' in fig_df.columns:\n        x_col = 'substep_label'\n    else:\n        x_col = 'substep'\n        fig_df[x_col] = fig_df[x_col] / 2\n\n    if relative is True:\n        fig_df = fig_df.assign(relative_psub_time=fig_df.groupby(indexes[:-1]).psub_time.apply(lambda x: x / x.sum()))\n        y_col = 'relative_psub_time'\n    else:\n        y_col = 'psub_time'\n\n    inds = fig_df[y_col] < fig_df[y_col].quantile(0.95)\n    inds &= fig_df[y_col] > fig_df[y_col].quantile(0.05)\n\n    fig = px.box(fig_df[inds],\n                 x=x_col,\n                 y=y_col,\n                 **kwargs)\n\n    return fig\n"
  },
  {
    "path": "cadCAD/tools/types.py",
    "content": "from typing import NamedTuple, Tuple, Dict, Union, List\n\nclass InitialValue(NamedTuple):\n    value: object\n    type: type\n\n\nclass Param(NamedTuple):\n    value: object\n    type: type\n\n\nclass ParamSweep(NamedTuple):\n    value: List[object]\n    type: type\n\nInitialState = Dict[str, InitialValue]\nSystemParameters = Dict[str, Union[Param, ParamSweep]]"
  },
  {
    "path": "cadCAD/tools/utils.py",
    "content": "from cadCAD.types import *\nimport pandas as pd\n\n\ndef generic_suf(variable: str, signal: str = \"\") -> StateUpdateFunction:\n    \"\"\"\n    Generate a State Update Function that assigns the signal value to the\n    given variable. By default, the signal has the same identifier as the\n    variable.\n    \"\"\"\n    if signal is \"\":\n        signal = variable\n    else:\n        pass\n\n    def suf(_1, _2, _3, _4, signals: PolicyOutput) -> StateUpdateTuple:\n        return (variable, signals[signal])\n\n    return suf\n\n\ndef add_parameter_labels(configs: list, df: pd.DataFrame) -> pd.DataFrame:\n    \"\"\"Utility function to add the parameters to a dataframe after processing\n\n    Args:\n        configs (list): The configurations of the simulations\n        df (pd.DataFrame): Simulation dataframe\n\n    Returns:\n        pd.DataFrame: Simulation dataframe with labels\n    \"\"\"\n\n    # Find the relevant parameters\n    sim_params = pd.DataFrame([x.sim_config[\"M\"] for x in configs])\n    sim_params[[\"subset\", \"simulation\", \"run\"]] = [\n        [x.subset_id, x.simulation_id, x.run_id] for x in configs\n    ]\n    # Fix because run_id is 0 indexed, but cadCAD dataframe is 1 indexed for runs\n    sim_params[\"run\"] += 1\n\n    # Join\n    sim_params = sim_params.set_index([\"subset\", \"simulation\", \"run\"])\n    df = df.join(sim_params, on=[\"subset\", \"simulation\", \"run\"])\n    return df\n"
  },
  {
    "path": "cadCAD/types.py",
    "content": "from typing import TypedDict, Callable, Union, Dict, List, Tuple, Iterable\nfrom collections import deque\n\nState = Dict[str, object]\nParameters = Dict[str, object]\nSweepableParameters = Dict[str, List[object]]\nSubstep = int\nStateHistory = List[List[State]]\nPolicyOutput = Dict[str, object]\nStateVariable = object\n\nPolicyFunction = Callable[[Parameters, Substep, StateHistory, State], PolicyOutput]\nStateUpdateFunction = Callable[[Parameters, Substep, StateHistory, State, PolicyOutput], Tuple[str, StateVariable]]\n\nclass StateUpdateBlock(TypedDict):\n    policies: Dict[str, PolicyFunction]\n    variables: Dict[str, StateUpdateFunction]\n\n\nStateUpdateBlocks = List[StateUpdateBlock]\n\nclass ConfigurationDict(TypedDict):\n    T: Iterable # Generator for the timestep variable\n    N: int # Number of MC Runs\n    M: Union[Parameters, SweepableParameters] # Parameters / List of Parameter to Sweep\n\nTargetValue = object\nEnvProcess: Callable[[State, SweepableParameters, TargetValue], TargetValue]\nEnvProcesses = Dict[str, Callable]\nTimeSeq = Iterable\nSimulationID = int\nRun = int\nSubsetID = int\nSubsetWindow = Iterable\nN_Runs = int\n\nExecutorFunction = Callable[[Parameters, StateHistory, StateUpdateBlocks, EnvProcesses, TimeSeq, SimulationID, Run, SubsetID, SubsetWindow, N_Runs], object]\nExecutionParameter = Tuple[ExecutorFunction, Parameters, StateHistory, StateUpdateBlocks, EnvProcesses, TimeSeq, SimulationID, Run, SubsetID, SubsetWindow, N_Runs]\n\n\nclass SessionDict(TypedDict):\n    user_id: str\n    experiment_id: int\n    session_id: str\n    simulation_id: int\n    run_id: int\n    subset_id: int\n    subset_window: deque\n"
  },
  {
    "path": "cadCAD/utils/__init__.py",
    "content": "from functools import reduce\nfrom collections import defaultdict\nfrom itertools import product\nimport warnings\nfrom typing import Union\nfrom cadCAD.types import *\nfrom typing import List, Dict, Union\n\nimport functools\nimport operator\n\nfrom pandas import DataFrame # type: ignore\n\n\nclass SilentDF(DataFrame):\n    def __repr__(self):\n        return str(hex(id(DataFrame)))\n\n\ndef append_dict(dict: dict, new_dict: dict) -> dict:\n    \"\"\"\n    >>> append_dict({1: 2, 3: 4}, {3: 5})\n    {1: 2, 3: 5}\n    \"\"\"\n    dict.update(new_dict)\n    return dict\n\n\ndef arrange_cols(df: DataFrame, reverse=False) -> DataFrame:\n    \"\"\"\n    Reorders `df` columns so that the variable order is `session_metrics`\n    followed by `sys_metrics` and `results_cols`\n    \"\"\"\n    session_metrics = ['session_id', 'user_id', 'simulation_id', 'run_id']\n    sys_metrics = ['run', 'timestep', 'substep']\n    result_cols = list(set(df.columns) - set(session_metrics) - set(sys_metrics))\n    result_cols.sort(reverse=reverse)\n    return df[session_metrics + sys_metrics + result_cols]\n\n\nclass IndexCounter:\n    def __init__(self):\n        self.i = 0\n\n    def __call__(self):\n        self.i += 1\n        return self.i\n\n\ndef compose(*functions: Tuple[callable]) -> object:\n    return reduce(lambda f, g: lambda x: f(g(x)), functions, lambda x: x)\n\n\ndef pipe(x: object) -> object:\n    return x\n\n\ndef print_pipe(x: object) -> object:\n    print(x)\n    return x\n\n\ndef tupalize(k: object, vs: Union[list, dict]):\n    \"\"\"\n    >>> tupalize(1, 1)\n    [(1, 1)]\n    >>> tupalize(1, [2, 3])\n    [(1, 2), (1, 3)]\n    \"\"\"\n    l = []\n    if isinstance(vs, list):\n        for v in vs:\n            l.append((k, v))\n    else:\n        l.append((k, vs))\n    return l\n\ndef flattenDict(l: dict) -> list:\n    \"\"\"\n    >>> flattenDict({1: [1, 2, 3], 4: 5})\n    [{1: 1, 4: 5}, {1: 2, 4: 5}, {1: 3, 4: 5}]\n    \"\"\"\n    flat_list = [tupalize(k, vs) for k, vs in l.items()]\n    flat_dict = [dict(items) for items in product(*flat_list)]\n    return flat_dict\n\n\ndef flatten(l: Union[list, dict]):\n    if isinstance(l, list):\n        return functools.reduce(operator.iconcat, l, [])\n    elif isinstance(l, dict):\n        return flattenDict(l)\n\n\ndef flatMap(f, collection):\n    return flatten(list(map(f, collection)))\n\n\ndef dict_filter(dictionary, condition):\n    return dict([(k, v) for k, v in dictionary.items() if condition(v)])\n\n\ndef get_max_dict_val_len(g: Dict[str, List[int]]) -> int:\n    return len(max(g.values(), key=len))\n\n\ndef tabulate_dict(d: Dict[str, List[int]]) -> Dict[str, List[int]]:\n    max_len = get_max_dict_val_len(d)\n    _d = {}\n    for k, vl in d.items():\n        if len(vl) != max_len:\n            _d[k] = vl + list([vl[-1]] * (max_len-1))\n        else:\n            _d[k] = vl\n\n    return _d\n\n\ndef flatten_tabulated_dict(d: Dict[str, List[int]]) -> List[dict[str, int]]:\n    max_len = get_max_dict_val_len(d)\n    dl: List[dict] = [{} for i in range(max_len)]\n\n    for k, vl in d.items():\n        for v, i in zip(vl, list(range(len(vl)))):\n            dl[i][k] = v\n\n    return dl\n\n\ndef contains_type(_collection, type):\n    return any(isinstance(x, type) for x in _collection)\n\n\ndef drop_right(l, n):\n    return l[:len(l) - n]\n\n\ndef key_filter(l, keyname):\n    if (type(l) == list):\n        return [v[keyname] for v in l]\n        # Keeping support to dictionaries for backwards compatibility\n        # Should be removed in the future\n    warnings.warn(\n        \"The use of a dictionary to describe Partial State Update Blocks will be deprecated. Use a list instead.\",\n        FutureWarning)\n    return [v[keyname] for k, v in l.items()]\n\n\ndef groupByKey(l):\n    d = defaultdict(list)\n    for key, value in l:\n        d[key].append(value)\n    return list(dict(d).items()).pop()\n\n\n# @curried\ndef rename(new_name, f):\n    f.__name__ = new_name\n    return f\n\n\ndef curry_pot(f, *argv):\n    sweep_ind = f.__name__[0:5] == 'sweep'\n    arg_len = len(argv)\n    if sweep_ind is True and arg_len == 4:\n        return f(argv[0])(argv[1])(argv[2])(argv[3])\n    elif sweep_ind is False and arg_len == 4:\n        return f(argv[0], argv[1], argv[2], argv[3])\n    elif sweep_ind is True and arg_len == 3:\n        return f(argv[0])(argv[1])(argv[2])\n    elif sweep_ind is False and arg_len == 3:\n        return f(argv[0], argv[1], argv[2])\n    else:\n        raise TypeError('curry_pot() needs 3 or 4 positional arguments')\n"
  },
  {
    "path": "cadCAD/utils/execution.py",
    "content": "from pprint import pprint\n\nfrom cadCAD import logo, version\nfrom cadCAD.utils import flatten\n\n\ndef print_exec_info(exec_context, configs):\n    print(logo)\n    print(f'cadCAD Version: {version}')\n    print(f'Execution Mode: {exec_context}')\n    models = len(configs)\n    sim_strs, run_vals, timestep_vals, params, sub_states = [], [], [], [], set()\n    for i, config in enumerate(configs):\n        sim_config = config.sim_config\n        n_n = sim_config['N']\n        n_t = len(sim_config['T'])\n        n_m = len(sim_config['M'])\n        n_s = len(config.initial_state)\n        run_vals.append(n_n)\n        for timestep in [*sim_config['T']]:\n            timestep_vals.append(timestep)\n        if type(sim_config['M']) is dict:\n            params.append(n_m)\n        else:\n            n_m = 0\n        for state_key in list(config.initial_state.keys()):\n            sub_states.add(state_key)\n\n        sim_strs.append(f'     Simulation {i}: (Timesteps, Params, Runs, Sub-States) = ({n_t}, {n_m}, {n_n}, {n_s})')\n\n    timesteps = len(timestep_vals)\n    if sum(params) != 0:\n        param_count = sum(params)\n    else:\n        param_count = 0\n    runs = sum(run_vals)\n    init_states = len(sub_states)\n\n    print(\"Simulation Dimensions:\")\n    print(\n        f'Entire Simulation: (Models, Unique Timesteps, Params, Total Runs, Sub-States) = ({models}, {timesteps}, {param_count}, {runs}, {init_states})'\n    )\n    for sim_str in sim_strs:\n        print(sim_str)\n"
  },
  {
    "path": "cadCAD/utils/jupyter.py",
    "content": "def get_home_dir(user):\n    return f\"s3://jupyterbackups/jupyter/{user}/\"\n\ndef set_write_path(sc, user, datafolder_path):\n    return get_home_dir(user) + datafolder_path +f'_{sc.applicationId}'\n"
  },
  {
    "path": "cadCAD/utils/sys_config.py",
    "content": "from funcy import curry\nfrom cadCAD.configuration.utils import ep_time_step, time_step\n\n\ndef increment(y, incr_by):\n    return lambda _g, step, sL, s, _input, **kwargs: (y, s[y] + incr_by)\n\n\ndef track(y):\n    return lambda _g, step, sL, s, _input, **kwargs: (y, s[y].x)\n\n\ndef simple_state_update(y, x):\n    return lambda _g, step, sH, s, _input, **kwargs: (y, x)\n\n\ndef simple_policy_update(y):\n    return lambda _g, step, sH, s, **kwargs: y\n\n\ndef update_timestamp(y, timedelta, format):\n    return lambda _g, step, sL, s, _input, **kwargs: (\n        y,\n        ep_time_step(s, dt_str=s[y], fromat_str=format, _timedelta=timedelta)\n    )\n\n\ndef apply(f, y: str, incr_by: int):\n    return lambda _g, step, sL, s, _input, **kwargs: (y, curry(f)(s[y])(incr_by))\n\n\ndef add(y: str, incr_by):\n    return apply(lambda a, b: a + b, y, incr_by)\n\n\ndef increment_state_by_int(y: str, incr_by: int):\n    return lambda _g, step, sL, s, _input, **kwargs: (y, s[y] + incr_by)\n\n\ndef s(y, x):\n    return lambda _g, step, sH, s, _input, **kwargs: (y, x)\n\n\ndef time_model(y, substeps, time_delta, ts_format='%Y-%m-%d %H:%M:%S'):\n    def apply_incriment_condition(s):\n        if s['substep'] == 0 or s['substep'] == substeps:\n            return y, time_step(dt_str=s[y], dt_format=ts_format, _timedelta=time_delta)\n        else:\n            return y, s[y]\n    return lambda _g, step, sL, s, _input, **kwargs: apply_incriment_condition(s)\n"
  },
  {
    "path": "documentation/Historically_State_Access.md",
    "content": "Historical State Access (DEPRECATED)\n==\n#### Motivation\nThe current state (values of state variables) is accessed through the `s` list. When the user requires previous state \nvariable values, they may be accessed through the state history list, `sH`. Accessing the state history should be \nimplemented without creating unintended feedback loops on the current state.\n\nThe 3rd parameter of state and policy update functions (labeled as `sH` of type `list[list[dict]]`) provides access to \npast Partial State Update Block (PSUB) given a negative offset number. `access_block` is used to access past PSUBs \n(`list[dict]`) from `sH`. For example, an offset of `-2` denotes the second to last PSUB.\n\n#### Exclusion list\nCreate a list of states to exclude from the reported PSU.\n```python\nexclusion_list = [\n    'nonexistent', 'last_x', '2nd_to_last_x', '3rd_to_last_x', '4th_to_last_x'\n]\n```\n##### Example Policy Updates\n###### Last partial state update\n```python\ndef last_update(_params, substep, sH, s, **kwargs):\n    return {\"last_x\": access_block(\n            state_history=sH,\n            target_field=\"last_x\", # Add a field to the exclusion list\n            psu_block_offset=-1,\n            exculsion_list=exclusion_list\n        )\n    }\n```\n* Note: Although `target_field` adding a field to the exclusion may seem redundant, it is useful in the case of the \nexclusion list being empty while the `target_field` is assigned to a state or a policy key.\n##### Define State Updates\n###### 2nd to last partial state update\n```python\ndef second2last_update(_params, substep, sH, s, **kwargs):\n    return {\"2nd_to_last_x\": access_block(sH, \"2nd_to_last_x\", -2, exclusion_list)}\n```\n\n\n###### 3rd to last partial state update\n```python\ndef third_to_last_x(_params, substep, sH, s, _input, **kwargs):\n    return '3rd_to_last_x', access_block(sH, \"3rd_to_last_x\", -3, exclusion_list)\n```\n###### 4rd to last partial state update\n```python\ndef fourth_to_last_x(_params, substep, sH, s, _input, **kwargs):\n    return '4th_to_last_x', access_block(sH, \"4th_to_last_x\", -4, exclusion_list)\n```\n###### Non-exsistent partial state update\n* `psu_block_offset >= 0` doesn't exist\n```python\ndef nonexistent(_params, substep, sH, s, _input, **kwargs):\n    return 'nonexistent', access_block(sH, \"nonexistent\", 0, exclusion_list)\n```\n\n#### [Example Simulation:](examples/historical_state_access.py)\n\n\n#### Example Output:\n###### State History\n```\n+----+-------+-----------+------------+-----+\n|    |   run |   substep |   timestep |   x |\n|----+-------+-----------+------------+-----|\n|  0 |     1 |         0 |          0 |   0 |\n|  1 |     1 |         1 |          1 |   1 |\n|  2 |     1 |         2 |          1 |   2 |\n|  3 |     1 |         3 |          1 |   3 |\n|  4 |     1 |         1 |          2 |   4 |\n|  5 |     1 |         2 |          2 |   5 |\n|  6 |     1 |         3 |          2 |   6 |\n|  7 |     1 |         1 |          3 |   7 |\n|  8 |     1 |         2 |          3 |   8 |\n|  9 |     1 |         3 |          3 |   9 |\n+----+-------+-----------+------------+-----+\n```\n###### Accessed State History: \nExample: `last_x`\n```\n+----+-----------------------------------------------------------------------------------------------------------------------------------------------------+\n|    | last_x                                                                                                                                              |\n|----+-----------------------------------------------------------------------------------------------------------------------------------------------------|\n|  0 | []                                                                                                                                                  |\n|  1 | [{'x': 0, 'run': 1, 'substep': 0, 'timestep': 0}]                                                                                                   |\n|  2 | [{'x': 0, 'run': 1, 'substep': 0, 'timestep': 0}]                                                                                                   |\n|  3 | [{'x': 0, 'run': 1, 'substep': 0, 'timestep': 0}]                                                                                                   |\n|  4 | [{'x': 1, 'run': 1, 'substep': 1, 'timestep': 1}, {'x': 2, 'run': 1, 'substep': 2, 'timestep': 1}, {'x': 3, 'run': 1, 'substep': 3, 'timestep': 1}] |\n|  5 | [{'x': 1, 'run': 1, 'substep': 1, 'timestep': 1}, {'x': 2, 'run': 1, 'substep': 2, 'timestep': 1}, {'x': 3, 'run': 1, 'substep': 3, 'timestep': 1}] |\n|  6 | [{'x': 1, 'run': 1, 'substep': 1, 'timestep': 1}, {'x': 2, 'run': 1, 'substep': 2, 'timestep': 1}, {'x': 3, 'run': 1, 'substep': 3, 'timestep': 1}] |\n|  7 | [{'x': 4, 'run': 1, 'substep': 1, 'timestep': 2}, {'x': 5, 'run': 1, 'substep': 2, 'timestep': 2}, {'x': 6, 'run': 1, 'substep': 3, 'timestep': 2}] |\n|  8 | [{'x': 4, 'run': 1, 'substep': 1, 'timestep': 2}, {'x': 5, 'run': 1, 'substep': 2, 'timestep': 2}, {'x': 6, 'run': 1, 'substep': 3, 'timestep': 2}] |\n|  9 | [{'x': 4, 'run': 1, 'substep': 1, 'timestep': 2}, {'x': 5, 'run': 1, 'substep': 2, 'timestep': 2}, {'x': 6, 'run': 1, 'substep': 3, 'timestep': 2}] |\n+----+-----------------------------------------------------------------------------------------------------------------------------------------------------+\n```"
  },
  {
    "path": "documentation/Policy_Aggregation.md",
    "content": "Policy Aggregation\n==\n\nFor each Partial State Update, multiple policy dictionaries are aggregated into a single dictionary to be inputted into \nall state functions using an initial reduction function and optional subsequent map functions. \n\n#### Aggregate Function Composition:\n```python\n# Reduce Function\nadd = lambda a, b: a + b # Used to add policy values of the same key\n# Map Function\nmult_by_2 = lambda y: y * 2 # Used to multiply all policy values by 2\npolicy_ops=[add, mult_by_2]\n```\n\n##### Example Policy Updates per Partial State Update (PSU)\n```python\ndef p1_psu1(_params, step, sH, s, **kwargs):\n    return {'policy1': 1}\ndef p2_psu1(_params, step, sH, s, **kwargs):\n    return {'policy2': 2}\n```\n* `add` not applicable due to lack of redundant policies\n* `mult_by_2` applied to all policies\n* Result: `{'policy1': 2, 'policy2': 4}`\n\n```python\ndef p1_psu2(_params, step, sH, s, **kwargs):\n    return {'policy1': 2, 'policy2': 2}\ndef p2_psu2(_params, step, sH, s, **kwargs):\n    return {'policy1': 2, 'policy2': 2}\n```\n* `add` applicable due to redundant policies\n* `mult_by_2` applied to all policies\n* Result: `{'policy1': 8, 'policy2': 8}`\n\n```python\ndef p1_psu3(_params, step, sH, s, **kwargs):\n    return {'policy1': 1, 'policy2': 2, 'policy3': 3}\ndef p2_psu3(_params, step, sH, s, **kwargs):\n    return {'policy1': 1, 'policy2': 2, 'policy3': 3}\n```\n* `add` applicable due to redundant policies\n* `mult_by_2` applied to all policies\n* Result: `{'policy1': 4, 'policy2': 8, 'policy3': 12}`\n\n#### Aggregate Policies using functions\n```python\nfrom cadCAD.configuration import Experiment\n\nexp = Experiment()\nexp.append_model(\n    sim_configs=???,\n    initial_state=???,\n    partial_state_update_blocks=???,\n    policy_ops=[add, mult_by_2] # Default: [lambda a, b: a + b]\n)\n```\n\n#### Example\n##### * [System Model Configuration](examples/policy_aggregation.py)\n##### * Simulation Results:\n```\n+----+---------------------------------------------+-------+------+-----------+------------+\n|    | policies                                    |   run |   s1 |   substep |   timestep |\n|----+---------------------------------------------+-------+------+-----------+------------|\n|  0 | {}                                          |     1 |    0 |         0 |          0 |\n|  1 | {'policy1': 2, 'policy2': 4}                |     1 |    1 |         1 |          1 |\n|  2 | {'policy1': 8, 'policy2': 8}                |     1 |    2 |         2 |          1 |\n|  3 | {'policy3': 12, 'policy1': 4, 'policy2': 8} |     1 |    3 |         3 |          1 |\n|  4 | {'policy1': 2, 'policy2': 4}                |     1 |    4 |         1 |          2 |\n|  5 | {'policy1': 8, 'policy2': 8}                |     1 |    5 |         2 |          2 |\n|  6 | {'policy3': 12, 'policy1': 4, 'policy2': 8} |     1 |    6 |         3 |          2 |\n|  7 | {'policy1': 2, 'policy2': 4}                |     1 |    7 |         1 |          3 |\n|  8 | {'policy1': 8, 'policy2': 8}                |     1 |    8 |         2 |          3 |\n|  9 | {'policy3': 12, 'policy1': 4, 'policy2': 8} |     1 |    9 |         3 |          3 |\n+----+---------------------------------------------+-------+------+-----------+------------+\n```\n"
  },
  {
    "path": "documentation/README.md",
    "content": "Simulation Configuration\n==\n\n## Introduction\n\nGiven a **Simulation Configuration**, cadCAD produces datasets that represent the evolution of the state of a system \nover [discrete time](https://en.wikipedia.org/wiki/Discrete_time_and_continuous_time#Discrete_time). The state of the \nsystem is described by a set of [State Variables](#State-Variables). The dynamic of the system is described by \n[Policy Functions](#Policy-Functions) and [State Update Functions](#State-Update-Functions), which are evaluated by \ncadCAD according to the definitions set by the user in [Partial State Update Blocks](#Partial-State-Update-Blocks).\n\nA Simulation Configuration is comprised of a [System Model](#System-Model) and a set of [Simulation Properties](#Simulation-Properties).\n\n### Experiments\n`cadCAD.configuration.Experiment` is a unique representation of an experiment of one or more configured System Models.\nThe `append_model` method of `Experiment` appends a System Model configurations, each representing a single `run`.\n\n```python\nfrom cadCAD.configuration import Experiment\n\nexp = Experiment()\nexp.append_model(\n    model_id = ..., # OPTIONAL: System Model label\n    initial_state = ..., # System Model\n    partial_state_update_blocks = ..., # System Model\n    policy_ops = ..., # System Model\n    sim_configs = ..., # Simulation Properties\n    user_id = ..., # OPTIONAL: Configuration User ID\n)\n```\nParameters: `append_model`\n* **model_id** : str - OPTIONAL: System Model label\n* **initial_state** : _dict_ - [State Variables](#State-Variables) and their initial values\n* **partial_state_update_blocks** : List[dict[dict]] - list of [Partial State Update Blocks](#Partial-State-Update-Blocks)\n* **policy_ops** : List[functions] - See [Policy Aggregation](Policy_Aggregation.md) \n* **sim_configs** - See [System Model Parameter Sweep](System_Model_Parameter_Sweep.md)\n* **user_id** : str - OPTIONAL: Configuration User ID\n\n## Simulation Properties\n\nSimulation properties are passed to `append_model` in the `sim_configs` parameter. To construct this parameter, we \nuse the `config_sim` function in `cadCAD.configuration.utils`\n\n```python\nfrom cadCAD.configuration.utils import config_sim\nfrom cadCAD.configuration import Experiment\n\nsim_config_dict = {\n    \"N\": ...,\n    \"T\": range(...),\n    \"M\": ...\n}\n\nc = config_sim(sim_config_dict)\n\nexp = Experiment()\nexp.append_model(\n    ...\n    sim_configs = c # Simulation Properties\n)\n```\n\n### T - Simulation Length\nComputer simulations run in discrete time:\n\n>Discrete time views values of variables as occurring at distinct, separate \"points in time\", or equivalently as being \nunchanged throughout each non-zero region of time (\"time period\")—that is, time is viewed as a discrete variable. (...) \nThis view of time corresponds to a digital clock that gives a fixed reading of 10:37 for a while, and then jumps to a \nnew fixed reading of 10:38, etc. \n([source: Wikipedia](https://en.wikipedia.org/wiki/Discrete_time_and_continuous_time#Discrete_time))\n\nAs is common in many simulation tools, in cadCAD too we refer to each discrete unit of time as a **timestep**. cadCAD \nincrements a \"time counter\", and at each step it updates the state variables according to the equations that describe \nthe system.\n\nThe main simulation property that the user must set when creating a Simulation Configuration is the number of timesteps \nin the simulation. In other words, for how long do they want to simulate the system that has been modeled.\n\n### N - Number of Runs\n\ncadCAD facilitates running multiple simulations of the same system sequentially, reporting the results of all those \nruns in a single dataset. This is especially helpful for running \n[Monte Carlo Simulations](https://github.com/cadCAD-org/demos/blob/master/tutorials/robots_and_marbles/robot-marbles-part-4/robot-marbles-part-4.ipynb).\n\n### M - Parameters of the System\n\nParameters of the system, passed to the state update functions and the policy functions in the `params` parameter are \ndefined here. See [System Model Parameter Sweep](System_Model_Parameter_Sweep.md) for more information.\n\n## System Model\nThe System Model describes the system that will be simulated in cadCAD. It is comprised of a set of \n[State Variables](##State-Variables) and the [State Update Functions](#State-Update-Functions) that determine the \nevolution of the state of the system over time. [Policy Functions](#Policy-Functions) (representations of user policies \nor internal system control policies) may also be part of a System Model.\n\n### State Variables\n>A state variable is one of the set of variables that are used to describe the mathematical \"state\" of a dynamical \nsystem. Intuitively, the state of a system describes enough about the system to determine its future behaviour in the \nabsence of any external forces affecting the system. ([source: Wikipedia](https://en.wikipedia.org/wiki/State_variable))\n\ncadCAD can handle state variables of any Python data type, including custom classes. It is up to the user of cadCAD to \ndetermine the state variables needed to **sufficiently and accurately** describe the system they are interested in.\n\nState Variables are passed to `append_model` along with its initial values, as a Python `dict` where the `dict_keys` \nare the names of the variables and the `dict_values` are their initial values.\n\n```python\nfrom cadCAD.configuration import Experiment\n\ngenesis_states = {\n    'state_variable_1': 0,\n    'state_variable_2': 0,\n    'state_variable_3': 1.5,\n    'timestamp': '2019-01-01 00:00:00'\n}\n\nexp = Experiment()\nexp.append_model(\n    initial_state = genesis_states,\n    ...\n)\n```\n### State Update Functions\nState Update Functions represent equations according to which the state variables change over time. Each state update \nfunction must return a tuple containing a string with the name of the state variable being updated and its new value. \nEach state update function can only modify a single state variable. The general structure of a state update function is:\n```python\ndef state_update_function_A(_params, substep, sH, s, _input, **kwargs):\n    ...\n    return 'state_variable_name', new_value\n```\nParameters:\n* **_params** : _dict_ - [System parameters](System_Model_Parameter_Sweep.md)\n* **substep** : _int_ - Current [substep](#Substep)\n* **sH** : _list[list[dict_]] - Historical values of all state variables for the simulation. See \n[Historical State Access (DEPRECATED)](Historically_State_Access.md) for details\n* **s** : _dict_ - Current state of the system, where the `dict_keys` are the names of the state variables and the \n`dict_values` are their current values.\n* **_input** : _dict_ - Aggregation of the signals of all policy functions in the current \n[Partial State Update Block](#Partial-State-Update-Block)\n* **\\*\\*kwargs** - State Update feature extensions \n\nReturn:\n* _tuple_ containing a string with the name of the state variable being updated and its new value.\n    \nState update functions should not modify any of the parameters passed to it, as those are mutable Python objects that \ncadCAD relies on in order to run the simulation according to the specifications.\n\n### Policy Functions\nA Policy Function computes one or more signals to be passed to [State Update Functions](#State-Update-Functions) \n(via the _\\_input_ parameter). Read \n[this article](https://github.com/cadCAD-org/demos/blob/master/tutorials/robots_and_marbles/robot-marbles-part-2/robot-marbles-part-2.ipynb) \nfor details on why and when to use policy functions.\n\n<!-- We would then expand the tutorials with these kind of concepts\n#### Policies\nPolicies consist of the potential action made available through mechanisms. The action taken is expected to be the \nresult of a conditional determination of the past state.  \n\nWhile executed the same, the modeller can approach policies dependent on the availability of a mechanism to a population.\n\n- ***Control Policy***\nWhen the controlling or deploying entity has the ability to act in order to affect some aspect of the system, this is a \ncontrol policy.\n- ***User Policy*** model agent behaviors in reaction to state variables and exogenous variables. The resulted user \naction will become an input to PSUs. Note that user behaviors should not directly update value of state variables. \nThe action taken, as well as the potential to act, through a mechanism is a behavior.  -->\n\nThe general structure of a policy function is:\n```python\ndef policy_function_1(_params, substep, sH, s, **kwargs):\n    ...\n    return {'signal_1': value_1, ..., 'signal_N': value_N}\n```\nParameters:\n* **_params** : _dict_ - [System parameters](System_Model_Parameter_Sweep.md)\n* **substep** : _int_ - Current [substep](#Substep)\n* **sH** : _list[list[dict_]] - Historical values of all state variables for the simulation. See \n[Historical State Access (DEPRECATED)](Historically_State_Access.md) for details\n* **s** : _dict_ - Current state of the system, where the `dict_keys` are the names of the state variables and the \n`dict_values` are their current values.\n* **\\*\\*kwargs** - Policy Update feature extensions \n    \nReturn:\n* _dict_ of signals to be passed to the state update functions in the same \n[Partial State Update Block](#Partial-State-Update-Blocks)\n\nPolicy functions should not modify any of the parameters passed to it, as those are mutable Python objects that cadCAD \nrelies on in order to run the simulation according to the specifications.\n\nAt each [Partial State Update Block](#Partial-State-Update-Blocks) (PSUB), the `dicts` returned by all policy functions \nwithin that PSUB dictionaries are aggregated into a single `dict` using an initial reduction function \n(a key-wise operation, default: `dic1['keyA'] + dic2['keyA']`) and optional subsequent map functions. The resulting \naggregated `dict` is then passed as the `_input` parameter to the state update functions in that PSUB. For more \ninformation on how to modify the aggregation method, see [Policy Aggregation](Policy_Aggregation.md).\n\n### Partial State Update Blocks\n\nA **Partial State Update Block** (PSUB) is a set of State Update Functions and Policy Functions such that State Update \nFunctions in the set are independent from each other and Policies in the set are independent from each other and from \nthe State Update Functions in the set. In other words, if a state variable is updated in a PSUB, its new value cannot \nimpact the State Update Functions and Policy Functions in that PSUB - only those in the next PSUB.\n\n![](https://i.imgur.com/9rlX9TG.png)\n\nPartial State Update Blocks are passed to `append_model` as a list of Python `dicts` where the `dict_keys` are named \n`\"policies\"` and `\"variables\"` and the values are also Python `dicts` where the keys are the names of the policy and \nstate update functions and the values are the functions.\n\n```python\nfrom cadCAD.configuration import Experiment\n\nPSUBs = [\n    {\n        \"policies\": {\n            \"b_1\": policy_function_1,\n            ...\n            \"b_J\": policy_function_J\n        },\n        \"variables\": {\n            \"s_1\": state_update_function_1,\n            ...\n            \"s_K\": state_update_function_K\n        }\n    }, #PSUB_1,\n    {...}, #PSUB_2,\n    ...\n    {...} #PSUB_M\n]\n\nexp = Experiment()\nexp.append_model(\n    ...\n    partial_state_update_blocks = PSUBs,\n    ...\n)\n```\n\n#### Substep\nAt each timestep, cadCAD iterates over the `partial_state_update_blocks` list. For each Partial State Update Block, \ncadCAD returns a record containing the state of the system at the end of that PSUB. We refer to that subdivision of a \ntimestep as a `substep`.\n\n## Result Dataset\n\ncadCAD returns a dataset containing the evolution of the state variables defined by the user over time, with three `int` \nindexes:\n* `subset` - identifies the subset per sweepable parameter produced by a parameter sweep (ver. `0.3.1`'s result was \nmultiple datasets; A single dataset per sweepable parameter).\n* `run` - identifies the [run](#N-Number-of-Runs)\n* `timestep` - discrete unit of time (the total number of timesteps is defined by the user in the \n[T Simulation Parameter](#T-Simulation-Length))\n* `substep` - subdivision of timestep (the number of [substeps](#Substeps) is the same as the number of Partial State \nUpdate Blocks)\n* `simulation` - **Alpha: Ignore**\n\nTherefore, the total number of records in the resulting dataset is `N` x `T` x `len(partial_state_update_blocks)`\n\n#### [System Simulation Execution](Simulation_Execution.md)\n"
  },
  {
    "path": "documentation/Simulation_Execution.md",
    "content": "# Simulation Execution\nSystem Simulations are executed with the execution engine executor (`cadCAD.engine.Executor`) given System Model \nConfigurations. There are multiple simulation Execution Modes and Execution Contexts.\n\n## Steps\n### 1. *Choose Execution Mode*\n#### Simulation Execution Modes:\n`cadCAD` executes a process per System Model Configuration and a thread per System Simulation.\n#### Class: `cadCAD.engine.ExecutionMode`\n#### Attributes:\n* **Local Mode (Default):** Automatically selects Single Threaded or Multi-Process Modes (Example: \n`cadCAD.engine.ExecutionMode().local_mode`).\n* **Single Threaded Mode:** A single threaded Execution Mode for a single System Model Configuration (Example: \n`cadCAD.engine.ExecutionMode().single_mode`).\n* **Multi-Process Mode:** Execution Mode for System Model Simulations which executes Multiple processes within \nmultiple processes per given System Model Configuration (Example: `cadCAD.engine.ExecutionMode().multi_mode`).\n\n### 2. *Create Execution Context using Execution Mode*\n```python\nfrom cadCAD.engine import ExecutionMode, ExecutionContext\nexec_mode = ExecutionMode()\nlocal_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\n```\n\n### 3. *Create Simulation Executor*\n```python\nfrom cadCAD.engine import Executor\nfrom ... import exp # import of an instantiated of an `cadCAD.configuration.Experiment` object \nsimulation = Executor(exec_context=local_mode_ctx, configs=exp.configs)\n```\n\n### 4. *Execute Simulation & Produce System Event Dataset*\nA Simulation execution produces a System Event Dataset and the Tensor Field applied to initial states used to create it.\n\n```python\nimport pandas as pd\nraw_system_events, tensor_field, sessions = simulation.execute()\n\n# Simulation Result Types:\n# raw_system_events: List[dict] \n# tensor_field: pd.DataFrame\n\n# Result System Events DataFrame\nsimulation_result = pd.DataFrame(raw_system_events)\n```\n\n#### Example Tensor Field\n```\n+----+-----+--------------------------------+--------------------------------+\n|    |   m | b1                             | s1                             |\n|----+-----+--------------------------------+--------------------------------|\n|  0 |   1 | <function p1m1 at 0x10c458ea0> | <function s1m1 at 0x10c464510> |\n|  1 |   2 | <function p1m2 at 0x10c464048> | <function s1m2 at 0x10c464620> |\n|  2 |   3 | <function p1m3 at 0x10c464400> | <function s1m3 at 0x10c464730> |\n+----+-----+--------------------------------+--------------------------------+\n```\n\n#### Example Result: System Events DataFrame\n```\n+----+------+-----------+------------+--------+-----+---------+----------+\n|    |   s1 | s2        | simulation | subset | run | substep | timestep |\n|----+------+-----------|------------+--------+-----+---------+----------|\n|  0 |    0 | 0.0       |          0 |      0 |   1 |       0 |        0 |\n|  1 |    1 | 4         |          0 |      0 |   1 |       1 |        1 |\n|  2 |    2 | 6         |          0 |      0 |   1 |       2 |        1 |\n|  3 |    3 | [ 30 300] |          0 |      0 |   1 |       3 |        1 |\n|  4 |    0 | 0.0       |          1 |      0 |   1 |       0 |        0 |\n|  5 |    1 | 4         |          1 |      0 |   1 |       1 |        1 |\n|  6 |    2 | 6         |          1 |      0 |   1 |       2 |        1 |\n|  7 |    3 | [ 30 300] |          1 |      0 |   1 |       3 |        1 |\n+----+------+-----------+------------+--------+-----+---------+----------+\n```\n\n## Execution Examples:\n### Single Simulation Execution (Single Threaded Execution)\nExample System Model Configurations: \n* [System Model A](examples/sys_model_A.py)\n* [System Model B](examples/sys_model_B.py)\n\nExample Simulation Executions:\n* [System Model A](examples/sys_model_A_exec.py)\n* [System Model B](examples/sys_model_B_exec.py)\n\n```python\nimport pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom documentation.examples import sys_model_A\nfrom documentation.examples.sys_model_A import exp\n\nexec_mode = ExecutionMode()\n\n# Single Process Execution using a Single System Model Configuration:\n# sys_model_A\nlocal_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\nsys_model_A_simulation = Executor(exec_context=local_mode_ctx, configs=exp.configs)\n\nsys_model_A_raw_result, sys_model_A_tensor_field, sessions = sys_model_A_simulation.execute()\nsys_model_A_result = pd.DataFrame(sys_model_A_raw_result)\nprint()\nprint(\"Tensor Field: sys_model_A\")\nprint(tabulate(sys_model_A_tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Result: System Events DataFrame\")\nprint(tabulate(sys_model_A_result, headers='keys', tablefmt='psql'))\nprint()\n```\n\n#### Multiple Simulation Execution\n##### Multi-Process / Threaded Execution\nExample System Model Configurations: \n* [System Model A](examples/sys_model_A.py)\n* [System Model B](examples/sys_model_B.py)\n\nExample Simulation Executions:\n* [System Model AB](examples/sys_model_AB_exec.py)\n\n```python\nimport pandas as pd\nfrom tabulate import tabulate\n\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom documentation.examples import sys_model_A, sys_model_B, system_model_AB_exp\n\nexec_mode = ExecutionMode()\n\n# # Multiple Processes Execution using Multiple System Model Configurations:\n# # sys_model_A & sys_model_B\nlocal_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\nsys_model_AB_simulation = Executor(exec_context=local_mode_ctx, configs=system_model_AB_exp.configs)\n\nsys_model_AB_raw_result, sys_model_AB_tensor_field, sessions = sys_model_AB_simulation.execute()\nsys_model_AB_result = pd.DataFrame(sys_model_AB_raw_result)\nprint()\nprint(\"Tensor Field:\")\nprint(tabulate(sys_model_AB_tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Result: System Events DataFrame:\")\nprint(tabulate(sys_model_AB_result, headers='keys', tablefmt='psql'))\nprint()\n```\n\n##### System Model Parameter Sweep [Info](System_Model_Parameter_Sweep.md) \nExample: [Param Sweep](examples/param_sweep.py)\n\n```python\nimport pandas as pd\nfrom tabulate import tabulate\n\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom documentation.examples import param_sweep\nfrom documentation.examples.param_sweep import exp\n\nexec_mode = ExecutionMode()\nlocal_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\nrun = Executor(exec_context=local_mode_ctx, configs=exp.configs)\n\nraw_result, tensor_field, sessions = run.execute()\nresult = pd.DataFrame(raw_result)\nprint()\nprint(\"Tensor Field:\")\nprint(tabulate(tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Output:\")\nprint(tabulate(result, headers='keys', tablefmt='psql'))\nprint()\n```\n"
  },
  {
    "path": "documentation/System_Configuration.md",
    "content": "# Display System Model Configurations:\n\n## Announcement:\n\nSee [CHANGELOG](CHANGELOG.md)\n\nThe `cadCAD.configuration.Experiment().configs` (System Model Configurations) `list` has been flattened \nto contain single run `Configuration` objects. This functionality will be restored in a \nsubsequent release by a class that returns the original representation in ver. `0.3.1`.\n* The conversion utilities have been provided to restore its original representation of configurations with \nruns >= 1\n    * System Configuration Conversions:\n        * Configuration as list of Configuration Objects (as in ver. `0.3.1`) \n        * New: System Configuration as a Pandas DataFrame\n        * New: System Configuration as list of Dictionaries\n\n## Conversions\n##### Note: The following applies as a result of simulation execution\n\n#### Imports:\n```python\nfrom cadCAD.configuration.utils import configs_as_objs, configs_as_dataframe, configs_as_dicts\n```\n\n#### System Configurations as list of Configuration Objects\nExample:\n* `configs` is temporarily returned in a flattened format and reformatted into its intended format. \n* `Configuration` objects at `0x10790e470` and `0x1143dd630` are reconstituted into objects at `0x10790e7b8` \nand `0x116268908` respectively.\n```python\nfrom ... import exp # import of an instantiated `cadCAD.configuration.Experiment` object \n\nflattened_configs = exp.configs\n         \nprint('Flattened Format: Temporary')  \npprint(flattened_configs)\nprint()\n\nprint('Intended Format:')\nintended_configs = configs_as_objs(flattened_configs)\npprint(intended_configs)\nprint()\n\nprint(\"Object: cadCAD.configuration.Configuration(...).sim_config\")\npprint(intended_configs[0].sim_config)\nprint()\n```\nReturn:\n```\nFlattened Format: Temporary\n[<cadCAD.configuration.Configuration object at 0x10790e470>,\n <cadCAD.configuration.Configuration object at 0x10790e7b8>,\n <cadCAD.configuration.Configuration object at 0x1143dd630>,\n <cadCAD.configuration.Configuration object at 0x116268908>]\n\nIntended Format:\n[<cadCAD.configuration.Configuration object at 0x10790e7b8>,\n <cadCAD.configuration.Configuration object at 0x116268908>]\n\nObject: cadCAD.configuration.Configuration(...).sim_config\n{'M': [{}],\n 'N': 2,\n 'T': range(0, 1),\n 'run_id': 1,\n 'simulation_id': 0,\n 'subset_id': 0,\n 'subset_window': deque([0, None], maxlen=2)}\n```\n\n#### System Configurations as a Pandas DataFrame\n```python\nflattened_configs = configs\nconfigs_df = configs_as_dataframe(configs)\nconfigs_df\n```\n\n#### System Configurations as list of Dictionaries\n```python\nconfigs_dicts: list = configs_as_dicts(configs)\npprint(configs_dicts[0]['sim_config'])\n```\nReturn:\n```\n{'env_processes': {'s3': [<function <lambda> at 0x7f8f9c99bd90>,\n                          <function <lambda> at 0x7f8f9c9a11e0>],\n                   's4': <function env_trigger.<locals>.trigger.<locals>.env_update at 0x7f8f9c9a12f0>},\n 'exogenous_states': {},\n 'initial_state': {'s1': 0.0,\n                   's2': 0.0,\n                   's3': 1.0,\n                   's4': 1.0,\n                   'timestamp': '2018-10-01 15:16:24'},\n 'kwargs': {},\n 'partial_state_updates': [{'policies': {'p1': <function p1m1 at 0x7f8f9c985ea0>,\n                                         'p2': <function p2m1 at 0x7f8f9c985f28>},\n                            'variables': {'s1': <function s1m1 at 0x7f8f9c99b268>,\n                                          's2': <function s2m1 at 0x7f8f9c99b2f0>,\n                                          's3': <function var_trigger.<locals>.<lambda> at 0x7f8f9c99bae8>,\n                                          's4': <function var_trigger.<locals>.<lambda> at 0x7f8f9c99bea0>,\n                                          'timestamp': <function var_trigger.<locals>.<lambda> at 0x7f8f9c99b730>}},\n                           {'policies': {'p1': <function p1m2 at 0x7f8f9c99b048>,\n                                         'p2': <function p2m2 at 0x7f8f9c99b0d0>},\n                            'variables': {'s1': <function s1m2 at 0x7f8f9c99b378>,\n                                          's2': <function s2m2 at 0x7f8f9c99b400>,\n                                          's3': <function var_trigger.<locals>.<lambda> at 0x7f8f9c99bbf8>,\n                                          's4': <function var_trigger.<locals>.<lambda> at 0x7f8f9c9a1048>,\n                                          'timestamp': <function var_trigger.<locals>.<lambda> at 0x7f8f9c99b840>}},\n                           {'policies': {'p1': <function p1m3 at 0x7f8f9c99b158>,\n                                         'p2': <function p2m3 at 0x7f8f9c99b1e0>},\n                            'variables': {'s1': <function s1m3 at 0x7f8f9c99b488>,\n                                          's2': <function s2m3 at 0x7f8f9c99b510>,\n                                          's3': <function var_trigger.<locals>.<lambda> at 0x7f8f9c99bd08>,\n                                          's4': <function var_trigger.<locals>.<lambda> at 0x7f8f9c9a1158>,\n                                          'timestamp': <function var_trigger.<locals>.<lambda> at 0x7f8f9c99b950>}}],\n 'policy_ops': [<function <lambda> at 0x7f8f9cb39158>],\n 'run_id': 249,\n 'seeds': {'a': <mtrand.RandomState object at 0x7f8f9c9a21f8>,\n           'b': <mtrand.RandomState object at 0x7f8f9c9a2240>,\n           'c': <mtrand.RandomState object at 0x7f8f9c9a2288>,\n           'z': <mtrand.RandomState object at 0x7f8f9ca04948>},\n 'session_id': 'cadCAD_user=0_249',\n 'sim_config': {'M': {'alpha': 1, 'beta': 2, 'gamma': 3, 'omega': 7},\n                'N': 250,\n                'T': range(0, 5000),\n                'run_id': 249,\n                'simulation_id': 0},\n 'simulation_id': 0,\n 'user_id': 'cadCAD_user'}\n```\n"
  },
  {
    "path": "documentation/System_Model_Parameter_Sweep.md",
    "content": "System Model Parameter Sweep\n==\nParametrization of a System Model configuration that produces multiple configurations.\n\n##### Set Parameters\n*Note:* `params` values require up to a maximum of 2 distinct lengths\n```python\nparams = {\n    'alpha': [1],\n    'beta': [2, 5],\n    'gamma': [3, 4],\n    'omega': [7]\n}\n```\nThe parameters above produce 2 Runs per Simulation.\n* Run 1: \n    * `alpha = 1`\n    * `beta = 2`\n    * `gamma = 3`\n    * `omega = 7`\n* Run 2:\n    * `alpha = 1`\n    * `beta = 5`\n    * `gamma = 4`\n    * `omega = 7`\n\nAll parameters can also be set to include a single parameter each, which will result in a single simulation.\n\n##### Example State Updates\n\nPrevious State:\n`y = 0`\n\n```python\ndef state_update(_params, step, sH, s, _input, **kwargs):\n    y = 'state'\n    x = s['state'] + _params['alpha'] + _params['gamma']\n    return y, x\n```\n* Updated State:\n    * Simulation 1: `y = 4 = 0 + 1 + 3` \n    * Simulation 2: `y = 5 = 0 + 1 + 4`\n\n##### Example Policy Updates\n```python\n# Internal States per Mechanism\ndef policies(_params, step, sH, s, **kwargs):\n    return {'beta': _params['beta'], 'gamma': _params['gamma']}\n```\n* Simulation 1: `{'beta': 2, 'gamma': 3]}` \n* Simulation 2: `{'beta': 5, 'gamma': 4}`\n\n##### Configure Simulation\n```python\nfrom cadCAD.configuration.utils import config_sim\n\ng = {\n    'alpha': [1],\n    'beta': [2, 5],\n    'gamma': [3, 4],\n    'omega': [7]\n}\n\nsim_config = config_sim(\n    {\n        \"N\": 2,\n        \"T\": range(5),\n        \"M\": g,\n    }\n)\n```\n#### Example\n##### * [System Model Configuration](examples/param_sweep.py)"
  },
  {
    "path": "documentation/__init__.py",
    "content": ""
  },
  {
    "path": "documentation/cadCAD-v0.4.23-Model-Upgrade-Guide.md",
    "content": "<table>\n    <tr>\n        <th>\n            Feature\n        </th>\n        <th>\n            ver. 0.4.23\n        </th>\n      <th>\n            ver. 0.3.1 (Deprecated)\n        </th>\n    </tr>\n    <tr>\n        <td>\n           <h5>\n                Experiments\n            </h5>\n        </td>\n        <td>\n<pre lang=\"python\">\nfrom cadCAD.configuration import Experiment\nexp = Experiment()\nexp.append_configs(...) \n</pre>\n        </td>\n        <td>\n<pre lang=\"python\">\nfrom cadCAD.configuration import append_configs\nappend_configs(…)         \n</pre>\n        </td>\n</tr>\n<tr>\n        <td>\n           <h5>\n                Local Execution Mode\n            </h5>\n        </td>\n        <td>\n<pre lang=\"python\">          \nfrom cadCAD.engine import ExecutionMode, ExecutionContext\nexec_mode = ExecutionMode()\nlocal_ctx = ExecutionContext(context=exec_mode.local_mode)         \n</pre>\n        </td>\n        <td>\n         <p>Multi-Threaded</p>\n         <pre lang=\"python\">\nfrom cadCAD.engine import ExecutionMode, ExecutionContext\nexec_mode = ExecutionMode()\nsingle_ctx = ExecutionContext(context=exec_mode.multi_proc)\n</pre>\n<p>Single-Threaded</p>\n<pre lang=\"python\">\nfrom cadCAD.engine import ExecutionMode, ExecutionContext\nexec_mode = ExecutionMode()\nmulti_ctx = ExecutionContext(context=exec_mode.single_proc)\n            </pre>\n        </td>\n   </tr>\n <tr>\n        <td>\n           <h5>\n                cadCAD Post-Processing Enhancements / Modifications\n           </h5>\n        </td>\n        <td>\n            <pre lang=\"python\">\nimport pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nimport system_model_A, system_model_B\n\nfrom cadCAD import configs\nexec_mode = ExecutionMode()\n\nlocal_ctx = ExecutionContext(context=exec_mode.local_mode)\nsimulation = Executor(exec_context=local_ctx, configs=configs)\nraw_result, sys_model, _ = simulation.execute()\nresult = pd.DataFrame(raw_result)\nprint(tabulate(result, headers='keys', tablefmt='psql'))\n</pre>\n        </td>\n        <td>\n         <pre lang=\"python\">\n        \nimport pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nimport system_model_A, system_model_B\nfrom cadCAD import configs\n\nexec_mode = ExecutionMode()\nmulti_ctx = ExecutionContext(context=exec_mode.multi_proc)\nsimulation = Executor(exec_context=multi_ctx, configs=configs)\ni = 0\nconfig_names = ['sys_model_A', 'sys_model_B']\nfor raw_result, _ in simulation.execute():\nresult = pd.DataFrame(raw_result)\nprint()\nprint(f\"{config_names[i]} Result: System Events DataFrame:\")\nprint(tabulate(result, headers='keys', tablefmt='psql'))\nprint()\ni += 1\n           \n   </pre>\n        </td>\n   </tr>\n\n <tr>\n        <td>\n           <h5>\n             Expandable state and policy update parameter\n            </h5>\n        </td>\n        <td>\n            <pre lang=\"python\">\ndef state_update(_params, substep, sH, s, _input, **kwargs):\n…\nreturn 'state_variable_name', new_value\ndef policy(_params, substep, sH, s, **kwargs):\n…\nreturn {'signal_1': value_1, …, 'signal_N': value_N}\n   </pre>\n        </td>\n        <td>\n         <pre lang=\"python\">     \ndef state_update(_params, substep, sH, s, _input):\n…\nreturn 'state_variable_name', new_value\ndef policy(_params, substep, sH, s):\n…\nreturn {'signal_1': value_1, …, 'signal_N': value_N}  \n   </pre>\n        </td>\n   </tr>\n</table>\n"
  },
  {
    "path": "documentation/cadCAD-v0.4.27-Model-Upgrade-Guide.md",
    "content": "<table>\n    <tr>\n        <th>\n            Feature\n        </th>\n        <th>\n            ver. 0.4.27\n        </th>\n        <th>\n            ver. 0.4.23\n        </th>\n    </tr>\n    <tr>\n        <td>\n           <h5>\n                Experiments & System Model Configurations\n            </h5>\n        </td>\n        <td>\n<pre lang=\"python\">\nfrom cadCAD.configuration import Experiment\n\nexp = Experiment()\nexp.append_model(\n    model_id = 'sys_model_1', # System Model\n    initial_state = ..., # System Model\n    partial_state_update_blocks = ..., # System Model\n    policy_ops = ..., # System Model\n    sim_configs = ..., # Simulation Properties\n)\nexp.append_model(\n    model_id = 'sys_model_2', # System Model\n    ...\n)\n\nconfigs = exp.configs\n</pre>\n        </td>\n        <td>\n<pre lang=\"python\">\nfrom cadCAD import configs\nfrom cadCAD.configuration import Experiment\nexp = Experiment()\nexp.append_configs(...)       \n</pre>\n        </td>\n</tr>\n <tr>\n        <td>\n           <h5>\n                cadCAD Post-Processing Modifications\n           </h5>\n        </td>\n        <td>\n            <pre lang=\"python\">\nimport pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom simulations.regression_tests.experiments import multi_exp\nfrom simulations.regression_tests.models import config_multi_1, config_multi_2\n\nexec_mode = ExecutionMode()\n\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nrun = Executor(exec_context=local_proc_ctx, configs=multi_exp.configs)\n\nraw_result, tensor_fields, _ = run.execute()\nresult = pd.DataFrame(raw_result)\nprint(tabulate(tensor_fields[0], headers='keys', tablefmt='psql'))\nprint(tabulate(result, headers='keys', tablefmt='psql'))\n</pre>\n        </td>\n        <td>\n         <pre lang=\"python\">\nimport pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nimport system_model_A, system_model_B\n\nfrom cadCAD import configs\nexec_mode = ExecutionMode()\n\nlocal_ctx = ExecutionContext(context=exec_mode.local_mode)\nsimulation = Executor(exec_context=local_ctx, configs=configs)\nraw_result, sys_model, _ = simulation.execute()\nresult = pd.DataFrame(raw_result)\nprint(tabulate(result, headers='keys', tablefmt='psql'))           \n   </pre>\n        </td>\n   </tr>\n</table>\n"
  },
  {
    "path": "documentation/cadCAD-v0.4.28-Model-Upgrade-Guide.md",
    "content": "<table>\n    <tr>\n        <th>\n            Feature\n        </th>\n        <th>\n            ver. 0.4.28\n        </th>\n        <th>\n            ver. 0.4.23\n        </th>\n    </tr>\n    <tr>\n        <td>\n           <h5>\n                Experiments & System Model Configurations\n            </h5>\n        </td>\n        <td>\n<pre lang=\"python\">\nfrom cadCAD.configuration import Experiment\n\nexp = Experiment()\nexp.append_model(\n    model_id = 'sys_model_1', # System Model - OPTIONAL\n    initial_state = ..., # System Model\n    partial_state_update_blocks = ..., # System Model\n    policy_ops = ..., # System Model\n    sim_configs = ..., # Simulation Properties\n)\nexp.append_model(...)\n\nconfigs = exp.configs\n</pre>\n        </td>\n        <td>\n<pre lang=\"python\">\nfrom cadCAD import configs\nfrom cadCAD.configuration import Experiment\nexp = Experiment()\nexp.append_configs(...)       \n</pre>\n        </td>\n</tr>\n <tr>\n        <td>\n           <h5>\n                cadCAD Post-Processing Modifications\n           </h5>\n        </td>\n        <td>\n            <pre lang=\"python\">\nimport pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom simulations.regression_tests.experiments import multi_exp\nfrom simulations.regression_tests.models import config_multi_1, config_multi_2\n\nexec_mode = ExecutionMode()\n\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nrun = Executor(exec_context=local_proc_ctx, configs=multi_exp.configs)\n\nraw_result, tensor_fields, _ = run.execute()\nresult = pd.DataFrame(raw_result)\nprint(tabulate(tensor_fields[0], headers='keys', tablefmt='psql'))\nprint(tabulate(result, headers='keys', tablefmt='psql'))\n</pre>\n        </td>\n        <td>\n         <pre lang=\"python\">\nimport pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nimport system_model_A, system_model_B\n\nfrom cadCAD import configs\nexec_mode = ExecutionMode()\n\nlocal_ctx = ExecutionContext(context=exec_mode.local_mode)\nsimulation = Executor(exec_context=local_ctx, configs=configs)\nraw_result, sys_model, _ = simulation.execute()\nresult = pd.DataFrame(raw_result)\nprint(tabulate(result, headers='keys', tablefmt='psql'))           \n   </pre>\n        </td>\n   </tr>\n</table>\n"
  },
  {
    "path": "documentation/examples/__init__.py",
    "content": "from cadCAD.configuration import Experiment\n\nsystem_model_AB_exp = Experiment()\n"
  },
  {
    "path": "documentation/examples/cadCAD_diagram.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"def policy_1(p, s, h, v):\\n\",\n    \"    return {\\\"pi_1\\\": v[\\\"var_1\\\"]}\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def policy_2(p, s, h, v):\\n\",\n    \"    return {\\\"pi_1\\\": v[\\\"var_1\\\"], \\\"pi_2\\\": v[\\\"var_1\\\"] * v[\\\"var_2\\\"]}\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def suf_1(p, s, h, v, pi):\\n\",\n    \"    return (\\\"var_1\\\", pi[\\\"pi_1\\\"])\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def suf_2(p, s, h, v, pi):\\n\",\n    \"    return (\\\"var_2\\\", pi[\\\"pi_2\\\"])\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"psubs = [\\n\",\n    \"    {\\n\",\n    \"        \\\"label\\\": \\\"Test\\\",\\n\",\n    \"        \\\"policies\\\": {\\\"policy_1\\\": policy_1, \\\"policy_2\\\": policy_2},\\n\",\n    \"        \\\"variables\\\": {\\\"var_1\\\": suf_1, \\\"var_2\\\": suf_2},\\n\",\n    \"    }\\n\",\n    \"]\\n\",\n    \"\\n\",\n    \"initial_state = {\\\"var_1\\\": 0, \\\"var_2\\\": 1}\\n\",\n    \"\\n\",\n    \"params = {\\\"param_1\\\": 0, \\\"param_2\\\": 1}\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import sys\\n\",\n    \"sys.path.append('..')\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"image/svg+xml\": [\n       \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"no\\\"?>\\n\",\n       \"<!DOCTYPE svg PUBLIC \\\"-//W3C//DTD SVG 1.1//EN\\\"\\n\",\n       \" \\\"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd\\\">\\n\",\n       \"<!-- Generated by graphviz version 2.43.0 (0)\\n\",\n       \" -->\\n\",\n       \"<!-- Title: cluster_timestep Pages: 1 -->\\n\",\n       \"<svg width=\\\"481pt\\\" height=\\\"183pt\\\"\\n\",\n       \" viewBox=\\\"0.00 0.00 693.14 264.00\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" xmlns:xlink=\\\"http://www.w3.org/1999/xlink\\\">\\n\",\n       \"<g id=\\\"graph0\\\" class=\\\"graph\\\" transform=\\\"scale(1.44 1.44) rotate(0) translate(4 260)\\\">\\n\",\n       \"<title>cluster_timestep</title>\\n\",\n       \"<polygon fill=\\\"pink\\\" stroke=\\\"transparent\\\" points=\\\"-4,4 -4,-260 689.14,-260 689.14,4 -4,4\\\"/>\\n\",\n       \"<g id=\\\"clust1\\\" class=\\\"cluster\\\">\\n\",\n       \"<title>cluster_psub_0</title>\\n\",\n       \"<polygon fill=\\\"thistle\\\" stroke=\\\"black\\\" stroke-dasharray=\\\"5,2\\\" points=\\\"8,-8 8,-248 677.14,-248 677.14,-8 8,-8\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"342.57\\\" y=\\\"-232.8\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">Partial State Update Block</text>\\n\",\n       \"</g>\\n\",\n       \"<g id=\\\"clust3\\\" class=\\\"cluster\\\">\\n\",\n       \"<title>cluster_variables_0</title>\\n\",\n       \"<polygon fill=\\\"skyblue\\\" stroke=\\\"black\\\" stroke-dasharray=\\\"5,2\\\" points=\\\"16,-88 16,-217 106,-217 106,-88 16,-88\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"61\\\" y=\\\"-201.8\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">State</text>\\n\",\n       \"</g>\\n\",\n       \"<g id=\\\"clust4\\\" class=\\\"cluster\\\">\\n\",\n       \"<title>cluster_policy_0</title>\\n\",\n       \"<polygon fill=\\\"thistle\\\" stroke=\\\"black\\\" stroke-dasharray=\\\"5,2\\\" points=\\\"126,-16 126,-217 390.64,-217 390.64,-16 126,-16\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"258.32\\\" y=\\\"-201.8\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">Policies</text>\\n\",\n       \"</g>\\n\",\n       \"<g id=\\\"clust5\\\" class=\\\"cluster\\\">\\n\",\n       \"<title>cluster_suf_0</title>\\n\",\n       \"<polygon fill=\\\"thistle\\\" stroke=\\\"black\\\" stroke-dasharray=\\\"5,2\\\" points=\\\"418.64,-16 418.64,-217 561.64,-217 561.64,-16 418.64,-16\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"490.14\\\" y=\\\"-201.8\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">State Update Functions</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- state_0 -->\\n\",\n       \"<g id=\\\"node1\\\" class=\\\"node\\\">\\n\",\n       \"<title>state_0</title>\\n\",\n       \"<path fill=\\\"honeydew\\\" stroke=\\\"black\\\" d=\\\"M88,-74.73C88,-76.53 75.9,-78 61,-78 46.1,-78 34,-76.53 34,-74.73 34,-74.73 34,-45.27 34,-45.27 34,-43.47 46.1,-42 61,-42 75.9,-42 88,-43.47 88,-45.27 88,-45.27 88,-74.73 88,-74.73\\\"/>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M88,-74.73C88,-72.92 75.9,-71.45 61,-71.45 46.1,-71.45 34,-72.92 34,-74.73\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"61\\\" y=\\\"-56.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">State 1</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- policy_policy_1_0 -->\\n\",\n       \"<g id=\\\"node5\\\" class=\\\"node\\\">\\n\",\n       \"<title>policy_policy_1_0</title>\\n\",\n       \"<polygon fill=\\\"palegreen\\\" stroke=\\\"black\\\" stroke-width=\\\"2\\\" points=\\\"246,-90 134,-90 134,-30 246,-30 258,-60 246,-90\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"196\\\" y=\\\"-56.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">policy_1 (policy_1)</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- state_0&#45;&gt;policy_policy_1_0 -->\\n\",\n       \"<g id=\\\"edge6\\\" class=\\\"edge\\\">\\n\",\n       \"<title>state_0&#45;&gt;policy_policy_1_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M88.28,-60C98.61,-60 111.02,-60 123.67,-60\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"123.82,-63.5 133.82,-60 123.82,-56.5 123.82,-63.5\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- policy_policy_2_0 -->\\n\",\n       \"<g id=\\\"node6\\\" class=\\\"node\\\">\\n\",\n       \"<title>policy_policy_2_0</title>\\n\",\n       \"<polygon fill=\\\"palegreen\\\" stroke=\\\"black\\\" stroke-width=\\\"2\\\" points=\\\"246,-180 134,-180 134,-120 246,-120 258,-150 246,-180\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"196\\\" y=\\\"-146.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">policy_2 (policy_2)</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- state_0&#45;&gt;policy_policy_2_0 -->\\n\",\n       \"<g id=\\\"edge7\\\" class=\\\"edge\\\">\\n\",\n       \"<title>state_0&#45;&gt;policy_policy_2_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M88.43,-72.68C94.43,-76.03 100.62,-79.87 106,-84 116.22,-91.85 116.09,-96.76 126,-105 127.13,-105.94 128.29,-106.88 129.46,-107.82\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"127.34,-110.61 137.4,-113.92 131.61,-105.05 127.34,-110.61\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- variable_var_2_0 -->\\n\",\n       \"<g id=\\\"node2\\\" class=\\\"node\\\">\\n\",\n       \"<title>variable_var_2_0</title>\\n\",\n       \"<path fill=\\\"honeydew\\\" stroke=\\\"black\\\" d=\\\"M98,-182.73C98,-184.53 81.42,-186 61,-186 40.58,-186 24,-184.53 24,-182.73 24,-182.73 24,-153.27 24,-153.27 24,-151.47 40.58,-150 61,-150 81.42,-150 98,-151.47 98,-153.27 98,-153.27 98,-182.73 98,-182.73\\\"/>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M98,-182.73C98,-180.92 81.42,-179.45 61,-179.45 40.58,-179.45 24,-180.92 24,-182.73\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"61\\\" y=\\\"-164.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">var_2 (int)</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- variable_var_2_0&#45;&gt;policy_policy_2_0 -->\\n\",\n       \"<g id=\\\"edge4\\\" class=\\\"edge\\\">\\n\",\n       \"<title>variable_var_2_0&#45;&gt;policy_policy_2_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M98.34,-163.08C106.33,-162 115.06,-160.82 123.9,-159.62\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"124.45,-163.08 133.89,-158.27 123.51,-156.14 124.45,-163.08\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- variable_var_1_0 -->\\n\",\n       \"<g id=\\\"node3\\\" class=\\\"node\\\">\\n\",\n       \"<title>variable_var_1_0</title>\\n\",\n       \"<path fill=\\\"honeydew\\\" stroke=\\\"black\\\" d=\\\"M98,-128.73C98,-130.53 81.42,-132 61,-132 40.58,-132 24,-130.53 24,-128.73 24,-128.73 24,-99.27 24,-99.27 24,-97.47 40.58,-96 61,-96 81.42,-96 98,-97.47 98,-99.27 98,-99.27 98,-128.73 98,-128.73\\\"/>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M98,-128.73C98,-126.92 81.42,-125.45 61,-125.45 40.58,-125.45 24,-126.92 24,-128.73\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"61\\\" y=\\\"-110.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">var_1 (int)</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- variable_var_1_0&#45;&gt;policy_policy_1_0 -->\\n\",\n       \"<g id=\\\"edge3\\\" class=\\\"edge\\\">\\n\",\n       \"<title>variable_var_1_0&#45;&gt;policy_policy_1_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M98.34,-99.24C106.51,-95.93 115.44,-92.3 124.47,-88.64\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"125.94,-91.82 133.89,-84.81 123.31,-85.33 125.94,-91.82\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- variable_var_1_0&#45;&gt;policy_policy_2_0 -->\\n\",\n       \"<g id=\\\"edge5\\\" class=\\\"edge\\\">\\n\",\n       \"<title>variable_var_1_0&#45;&gt;policy_policy_2_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M98.34,-123.84C106.42,-126.02 115.25,-128.41 124.18,-130.83\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"123.32,-134.22 133.89,-133.46 125.15,-127.47 123.32,-134.22\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- agg_0 -->\\n\",\n       \"<g id=\\\"node4\\\" class=\\\"node\\\">\\n\",\n       \"<title>agg_0</title>\\n\",\n       \"<ellipse fill=\\\"greenyellow\\\" stroke=\\\"black\\\" stroke-width=\\\"2\\\" cx=\\\"338.32\\\" cy=\\\"-105\\\" rx=\\\"44.15\\\" ry=\\\"44.15\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"338.32\\\" y=\\\"-101.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">Aggregation</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- suf_var_1_0 -->\\n\",\n       \"<g id=\\\"node7\\\" class=\\\"node\\\">\\n\",\n       \"<title>suf_var_1_0</title>\\n\",\n       \"<polygon fill=\\\"red\\\" stroke=\\\"black\\\" stroke-width=\\\"2\\\" points=\\\"522.64,-180 444.64,-180 444.64,-120 522.64,-120 534.64,-150 522.64,-180\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"489.64\\\" y=\\\"-146.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">var_1 (suf_1)</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- agg_0&#45;&gt;suf_var_1_0 -->\\n\",\n       \"<g id=\\\"edge8\\\" class=\\\"edge\\\">\\n\",\n       \"<title>agg_0&#45;&gt;suf_var_1_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M380.92,-117.54C397.59,-122.56 417.02,-128.42 434.75,-133.76\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"433.82,-137.13 444.4,-136.67 435.84,-130.43 433.82,-137.13\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- suf_var_2_0 -->\\n\",\n       \"<g id=\\\"node8\\\" class=\\\"node\\\">\\n\",\n       \"<title>suf_var_2_0</title>\\n\",\n       \"<polygon fill=\\\"red\\\" stroke=\\\"black\\\" stroke-width=\\\"2\\\" points=\\\"522.64,-90 444.64,-90 444.64,-30 522.64,-30 534.64,-60 522.64,-90\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"489.64\\\" y=\\\"-56.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">var_2 (suf_2)</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- agg_0&#45;&gt;suf_var_2_0 -->\\n\",\n       \"<g id=\\\"edge9\\\" class=\\\"edge\\\">\\n\",\n       \"<title>agg_0&#45;&gt;suf_var_2_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M380.92,-92.46C397.59,-87.44 417.02,-81.58 434.75,-76.24\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"435.84,-79.57 444.4,-73.33 433.82,-72.87 435.84,-79.57\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- policy_policy_1_0&#45;&gt;agg_0 -->\\n\",\n       \"<g id=\\\"edge1\\\" class=\\\"edge\\\">\\n\",\n       \"<title>policy_policy_1_0&#45;&gt;agg_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M258.14,-79.61C267.47,-82.6 277.01,-85.66 286.1,-88.57\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"285.16,-91.95 295.75,-91.67 287.3,-85.28 285.16,-91.95\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- policy_policy_2_0&#45;&gt;agg_0 -->\\n\",\n       \"<g id=\\\"edge2\\\" class=\\\"edge\\\">\\n\",\n       \"<title>policy_policy_2_0&#45;&gt;agg_0</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M258.14,-130.39C267.47,-127.4 277.01,-124.34 286.1,-121.43\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"287.3,-124.72 295.75,-118.33 285.16,-118.05 287.3,-124.72\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- state_1 -->\\n\",\n       \"<g id=\\\"node9\\\" class=\\\"node\\\">\\n\",\n       \"<title>state_1</title>\\n\",\n       \"<ellipse fill=\\\"none\\\" stroke=\\\"black\\\" cx=\\\"633.39\\\" cy=\\\"-105\\\" rx=\\\"36\\\" ry=\\\"18\\\"/>\\n\",\n       \"<text text-anchor=\\\"middle\\\" x=\\\"633.39\\\" y=\\\"-101.3\\\" font-family=\\\"Times,serif\\\" font-size=\\\"14.00\\\">state_1</text>\\n\",\n       \"</g>\\n\",\n       \"<!-- suf_var_1_0&#45;&gt;state_1 -->\\n\",\n       \"<g id=\\\"edge10\\\" class=\\\"edge\\\">\\n\",\n       \"<title>suf_var_1_0&#45;&gt;state_1</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M534.72,-136.01C553.37,-130.09 574.92,-123.24 593.03,-117.5\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"594.23,-120.79 602.7,-114.43 592.11,-114.12 594.23,-120.79\\\"/>\\n\",\n       \"</g>\\n\",\n       \"<!-- suf_var_2_0&#45;&gt;state_1 -->\\n\",\n       \"<g id=\\\"edge11\\\" class=\\\"edge\\\">\\n\",\n       \"<title>suf_var_2_0&#45;&gt;state_1</title>\\n\",\n       \"<path fill=\\\"none\\\" stroke=\\\"black\\\" d=\\\"M534.72,-73.99C553.37,-79.91 574.92,-86.76 593.03,-92.5\\\"/>\\n\",\n       \"<polygon fill=\\\"black\\\" stroke=\\\"black\\\" points=\\\"592.11,-95.88 602.7,-95.57 594.23,-89.21 592.11,-95.88\\\"/>\\n\",\n       \"</g>\\n\",\n       \"</g>\\n\",\n       \"</svg>\\n\"\n      ],\n      \"text/plain\": [\n       \"<graphviz.dot.Digraph at 0x7f28a138d590>\"\n      ]\n     },\n     \"execution_count\": 10,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"from cadCAD_diagram.config_diagram import diagram\\n\",\n    \"\\n\",\n    \"diagram(initial_state, params, psubs)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.7.6\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 4\n}\n"
  },
  {
    "path": "documentation/examples/cadCAD_tools_example.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \" # cadCAD Easy Run for the Minimal Prey & Predator model\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html\\n\",\n      \"  from .autonotebook import tqdm as notebook_tqdm\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"import plotly.express as px\\n\",\n    \"import numpy as np\\n\",\n    \"import sys\\n\",\n    \"import seaborn as sns\\n\",\n    \"from tqdm.auto import tqdm\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \" ## Minimal Prey and Predator Model\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"TIMESTEPS = 100\\n\",\n    \"SAMPLES = 10\\n\",\n    \"\\n\",\n    \"initial_conditions = {\\n\",\n    \"    'prey_population': 100,\\n\",\n    \"    'predator_population': 15\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"params = {\\n\",\n    \"    \\\"prey_birth_rate\\\": [1.0],\\n\",\n    \"    \\\"predator_birth_rate\\\": [0.01],\\n\",\n    \"    \\\"predator_death_const\\\": [1.0],\\n\",\n    \"    \\\"prey_death_const\\\": [0.03],\\n\",\n    \"    # Precision of the simulation. Lower is more accurate / slower\\n\",\n    \"    \\\"dt\\\": [0.01, 0.1, 0.05]\\n\",\n    \"}\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def p_predator_births(params, step, sL, s):\\n\",\n    \"    dt = params['dt']\\n\",\n    \"    predator_population = s['predator_population']\\n\",\n    \"    prey_population = s['prey_population']\\n\",\n    \"    birth_fraction = params['predator_birth_rate'] + \\\\\\n\",\n    \"        np.random.random() * 0.0002\\n\",\n    \"    births = birth_fraction * prey_population * predator_population * dt\\n\",\n    \"    return {'add_to_predator_population': births}\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def p_prey_births(params, step, sL, s):\\n\",\n    \"    dt = params['dt']\\n\",\n    \"    population = s['prey_population']\\n\",\n    \"    birth_fraction = params['prey_birth_rate'] + np.random.random() * 0.1\\n\",\n    \"    births = birth_fraction * population * dt\\n\",\n    \"    return {'add_to_prey_population': births}\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def p_predator_deaths(params, step, sL, s):\\n\",\n    \"    dt = params['dt']\\n\",\n    \"    population = s['predator_population']\\n\",\n    \"    death_rate = params['predator_death_const'] + np.random.random() * 0.005\\n\",\n    \"    deaths = death_rate * population * dt\\n\",\n    \"    return {'add_to_predator_population': -1.0 * deaths}\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def p_prey_deaths(params, step, sL, s):\\n\",\n    \"    dt = params['dt']\\n\",\n    \"    death_rate = params['prey_death_const'] + np.random.random() * 0.1\\n\",\n    \"    prey_population = s['prey_population']\\n\",\n    \"    predator_population = s['predator_population']\\n\",\n    \"    deaths = death_rate * prey_population * predator_population * dt\\n\",\n    \"    return {'add_to_prey_population': -1.0 * deaths}\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def s_prey_population(params, step, sL, s, _input):\\n\",\n    \"    y = 'prey_population'\\n\",\n    \"    x = s['prey_population'] + _input['add_to_prey_population']\\n\",\n    \"    return (y, x)\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"def s_predator_population(params, step, sL, s, _input):\\n\",\n    \"    y = 'predator_population'\\n\",\n    \"    x = s['predator_population'] + _input['add_to_predator_population']\\n\",\n    \"    return (y, x)\\n\",\n    \"\\n\",\n    \"\\n\",\n    \"partial_state_update_blocks = [\\n\",\n    \"    {\\n\",\n    \"        'label': 'Lotka-Volterra Equations',\\n\",\n    \"        'policies': {\\n\",\n    \"            'predator_births': p_predator_births,\\n\",\n    \"            'prey_births': p_prey_births,\\n\",\n    \"            'predator_deaths': p_predator_deaths,\\n\",\n    \"            'prey_deaths': p_prey_deaths,\\n\",\n    \"        },\\n\",\n    \"        'variables': {\\n\",\n    \"            'prey_population': s_prey_population,\\n\",\n    \"            'predator_population': s_predator_population\\n\",\n    \"        }\\n\",\n    \"    },\\n\",\n    \"    {\\n\",\n    \"        'label': 'Do Nothing',\\n\",\n    \"        'policies': {\\n\",\n    \"            \\n\",\n    \"        },\\n\",\n    \"        'variables': {\\n\",\n    \"            \\n\",\n    \"        }\\n\",\n    \"    }\\n\",\n    \"]\\n\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import sys\\n\",\n    \"sys.path.append(\\\"../..\\\")\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 4,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"                  ___________    ____\\n\",\n      \"  ________ __ ___/ / ____/   |  / __ \\\\\\n\",\n      \" / ___/ __` / __  / /   / /| | / / / /\\n\",\n      \"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\\n\",\n      \"\\\\___/\\\\__,_/\\\\__,_/\\\\____/_/  |_/_____/\\n\",\n      \"by cadCAD\\n\",\n      \"\\n\",\n      \"cadCAD Version: 0.4.28\\n\",\n      \"Execution Mode: local_proc\\n\",\n      \"Simulation Dimensions:\\n\",\n      \"Entire Simulation: (Models, Unique Timesteps, Params, Total Runs, Sub-States) = (1, 100, 5, 30, 2)\\n\",\n      \"     Simulation 0: (Timesteps, Params, Runs, Sub-States) = (100, 5, 30, 2)\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Initializing configurations: 100%|██████████| 30/30 [00:00<00:00, 669.03it/s]\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Execution Method: parallelize_simulations\\n\",\n      \"Execution Mode: parallelized\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"Flattening results: 100%|██████████| 30/30 [00:00<00:00, 324.56it/s]\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Total execution time: 0.86s\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from cadCAD.tools import easy_run\\n\",\n    \"\\n\",\n    \"df = easy_run(initial_conditions,\\n\",\n    \"              params,\\n\",\n    \"              partial_state_update_blocks,\\n\",\n    \"              TIMESTEPS,\\n\",\n    \"              SAMPLES,\\n\",\n    \"              assign_params=True,\\n\",\n    \"              drop_substeps=False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 5,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"hovertemplate\": \"color=1<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"1\",\n         \"line\": {\n          \"color\": \"#636efa\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"1\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=2<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"2\",\n         \"line\": {\n          \"color\": \"#EF553B\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"2\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=3<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"3\",\n         \"line\": {\n          \"color\": \"#00cc96\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"3\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=4<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"4\",\n         \"line\": {\n          \"color\": \"#ab63fa\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"4\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=5<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"5\",\n         \"line\": {\n          \"color\": \"#FFA15A\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"5\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=6<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"6\",\n         \"line\": {\n          \"color\": \"#19d3f3\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"6\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=7<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"7\",\n         \"line\": {\n          \"color\": \"#FF6692\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"7\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=8<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"8\",\n         \"line\": {\n          \"color\": \"#B6E880\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"8\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=9<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"9\",\n         \"line\": {\n          \"color\": \"#FF97FF\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"9\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        },\n        {\n         \"hovertemplate\": \"color=10<br>x=%{x}<br>y=%{y}<extra></extra>\",\n         \"legendgroup\": \"10\",\n         \"line\": {\n          \"color\": \"#FECB52\",\n          \"dash\": \"solid\"\n         },\n         \"marker\": {\n          \"symbol\": \"circle\"\n         },\n         \"mode\": \"lines\",\n         \"name\": \"10\",\n         \"showlegend\": true,\n         \"type\": \"scattergl\",\n         \"x\": [\n          100,\n          99.29993160631898,\n          99.29993160631898,\n          99.38148169571427,\n          99.38148169571427,\n          99.33344287701127,\n          99.33344287701127,\n          99.78052429956195,\n          99.78052429956195,\n          99.54958970085868,\n          99.54958970085868,\n          99.5415288602601,\n          99.5415288602601,\n          99.20043010937233,\n          99.20043010937233,\n          98.38175972088112,\n          98.38175972088112,\n          98.08171337358606,\n          98.08171337358606,\n          98.3146135545321,\n          98.3146135545321,\n          98.15163483592876,\n          98.15163483592876,\n          98.2617316271704,\n          98.2617316271704,\n          98.4307104729456,\n          98.4307104729456,\n          98.78953357215462,\n          98.78953357215462,\n          98.79985727776051,\n          98.79985727776051,\n          99.23692266333096,\n          99.23692266333096,\n          98.39279376646044,\n          98.39279376646044,\n          98.38874784974972,\n          98.38874784974972,\n          98.47174801810372,\n          98.47174801810372,\n          98.2916973612909,\n          98.2916973612909,\n          98.77808827688989,\n          98.77808827688989,\n          98.74409721517681,\n          98.74409721517681,\n          99.24190042277999,\n          99.24190042277999,\n          98.84599456847697,\n          98.84599456847697,\n          99.09135177709153,\n          99.09135177709153,\n          99.10434894166539,\n          99.10434894166539,\n          99.57328874254877,\n          99.57328874254877,\n          99.21501237298247,\n          99.21501237298247,\n          99.25020700392601,\n          99.25020700392601,\n          99.63288351336783,\n          99.63288351336783,\n          99.40473856709445,\n          99.40473856709445,\n          98.7710291940686,\n          98.7710291940686,\n          98.5407493936721,\n          98.5407493936721,\n          97.7508566239193,\n          97.7508566239193,\n          97.71072647387824,\n          97.71072647387824,\n          97.06612114764668,\n          97.06612114764668,\n          96.60023270185529,\n          96.60023270185529,\n          96.97950519720334,\n          96.97950519720334,\n          97.13875284807816,\n          97.13875284807816,\n          97.28197178315625,\n          97.28197178315625,\n          96.58033571299049,\n          96.58033571299049,\n          96.25643172904921,\n          96.25643172904921,\n          96.6261400000404,\n          96.6261400000404,\n          96.52079469759674,\n          96.52079469759674,\n          96.14265950886788,\n          96.14265950886788,\n          96.29506225210642,\n          96.29506225210642,\n          95.82910831575578,\n          95.82910831575578,\n          96.35112441973347,\n          96.35112441973347,\n          96.16329269178928,\n          96.16329269178928,\n          95.87027246972195,\n          95.87027246972195,\n          95.7307727305111,\n          95.7307727305111,\n          95.52782525481386,\n          95.52782525481386,\n          95.3266966060663,\n          95.3266966060663,\n          94.73244989096955,\n          94.73244989096955,\n          94.85863986535756,\n          94.85863986535756,\n          94.5348526851931,\n          94.5348526851931,\n          94.27697635190073,\n          94.27697635190073,\n          93.47026915554588,\n          93.47026915554588,\n          93.23682795968988,\n          93.23682795968988,\n          93.37231139151324,\n          93.37231139151324,\n          93.15534439539415,\n          93.15534439539415,\n          93.24217287585641,\n          93.24217287585641,\n          93.78860723896459,\n          93.78860723896459,\n          93.77560714675685,\n          93.77560714675685,\n          93.0999726791823,\n          93.0999726791823,\n          92.90606801326578,\n          92.90606801326578,\n          93.2831221906634,\n          93.2831221906634,\n          93.01583352672039,\n          93.01583352672039,\n          92.70359835023112,\n          92.70359835023112,\n          92.00530036542673,\n          92.00530036542673,\n          92.42100834060409,\n          92.42100834060409,\n          92.7895835919253,\n          92.7895835919253,\n          92.73717490018763,\n          92.73717490018763,\n          92.76883196952322,\n          92.76883196952322,\n          93.08317487684629,\n          93.08317487684629,\n          92.33451766496589,\n          92.33451766496589,\n          92.13498897315472,\n          92.13498897315472,\n          92.09928886790658,\n          92.09928886790658,\n          92.22680948420437,\n          92.22680948420437,\n          91.62546599412939,\n          91.62546599412939,\n          91.12033628158707,\n          91.12033628158707,\n          90.91703470428618,\n          90.91703470428618,\n          90.51203613658468,\n          90.51203613658468,\n          90.76461607129751,\n          90.76461607129751,\n          91.12216656725413,\n          91.12216656725413,\n          91.25249379875453,\n          91.25249379875453,\n          91.58012004487541,\n          91.58012004487541,\n          91.06486472813755,\n          91.06486472813755,\n          91.18797649222013,\n          91.18797649222013,\n          90.69671638734081,\n          90.69671638734081,\n          91.26790712942591,\n          91.26790712942591,\n          90.79702047570592,\n          90.79702047570592,\n          90.23186056687439,\n          90.23186056687439,\n          89.67634735880623,\n          89.67634735880623,\n          90.06987166421722,\n          90.06987166421722,\n          89.65940405481305,\n          89.65940405481305,\n          89.14786912937605,\n          89.14786912937605,\n          88.68086196244481,\n          88.68086196244481,\n          88.08424380115036,\n          88.08424380115036,\n          87.92914636627808,\n          87.92914636627808,\n          100,\n          92.99931606318984,\n          92.99931606318984,\n          93.74968330870446,\n          93.74968330870446,\n          93.35200242595599,\n          93.35200242595599,\n          97.61217815984494,\n          97.61217815984494,\n          95.54997817570786,\n          95.54997817570786,\n          95.635092884268,\n          95.635092884268,\n          92.61880754039443,\n          92.61880754039443,\n          85.39231796273906,\n          85.39231796273906,\n          83.12912862094319,\n          83.12912862094319,\n          85.40561642328275,\n          85.40561642328275,\n          84.62039860344953,\n          84.62039860344953,\n          86.16474388636449,\n          86.16474388636449,\n          88.32785188924211,\n          88.32785188924211,\n          92.10765900299248,\n          92.10765900299248,\n          93.26077770768009,\n          93.26077770768009,\n          97.9845294627281,\n          97.9845294627281,\n          91.85128228934461,\n          91.85128228934461,\n          92.94825282196534,\n          92.94825282196534,\n          94.908060967487,\n          94.908060967487,\n          94.71326538271349,\n          94.71326538271349,\n          100.13862169564187,\n          100.13862169564187,\n          101.27435286478284,\n          101.27435286478284,\n          107.18723419784558,\n          107.18723419784558,\n          105.11150551338793,\n          105.11150551338793,\n          108.89332418604562,\n          108.89332418604562,\n          110.45800926706632,\n          110.45800926706632,\n          116.48523146511381,\n          116.48523146511381,\n          114.1292438507272,\n          114.1292438507272,\n          115.6710564645791,\n          115.6710564645791,\n          120.72623435030194,\n          120.72623435030194,\n          118.93046533906094,\n          118.93046533906094,\n          112.25835075871757,\n          112.25835075871757,\n          110.00527663324144,\n          110.00527663324144,\n          101.43663074912372,\n          101.43663074912372,\n          101.02867217786005,\n          101.02867217786005,\n          94.33053060847377,\n          94.33053060847377,\n          89.75476827975842,\n          89.75476827975842,\n          93.29245542951959,\n          93.29245542951959,\n          94.9186805787271,\n          94.9186805787271,\n          96.46551527277536,\n          96.46551527277536,\n          89.87389035969865,\n          89.87389035969865,\n          87.16376777592785,\n          87.16376777592785,\n          90.71447055509934,\n          90.71447055509934,\n          90.19536558085994,\n          90.19536558085994,\n          87.37997504032674,\n          87.37997504032674,\n          89.23463194487961,\n          89.23463194487961,\n          85.88495474723042,\n          85.88495474723042,\n          90.91229934650016,\n          90.91229934650016,\n          90.15196996137051,\n          90.15196996137051,\n          88.67602042222708,\n          88.67602042222708,\n          88.50743002514825,\n          88.50743002514825,\n          87.96325417167918,\n          87.96325417167918,\n          87.47813607760847,\n          87.47813607760847,\n          84.01053269460503,\n          84.01053269460503,\n          86.21927941269837,\n          86.21927941269837,\n          85.20026287932083,\n          85.20026287932083,\n          84.74514940369397,\n          84.74514940369397,\n          80.44680552355874,\n          80.44680552355874,\n          80.41520185078912,\n          80.41520185078912,\n          83.13776682112793,\n          83.13776682112793,\n          83.62311825579216,\n          83.62311825579216,\n          86.27091768763398,\n          86.27091768763398,\n          92.29068344923925,\n          92.29068344923925,\n          94.59113655600862,\n          94.59113655600862,\n          92.23253576603186,\n          92.23253576603186,\n          93.36203549432568,\n          93.36203549432568,\n          98.80311561440442,\n          98.80311561440442,\n          99.52383859763862,\n          99.52383859763862,\n          100.02610961464065,\n          100.02610961464065,\n          97.48148429129367,\n          97.48148429129367,\n          103.34545533154333,\n          103.34545533154333,\n          109.43020057074936,\n          109.43020057074936,\n          112.12304973808557,\n          112.12304973808557,\n          115.52003033279902,\n          115.52003033279902,\n          121.55801868602819,\n          121.55801868602819,\n          117.08958909341867,\n          117.08958909341867,\n          117.75922193520242,\n          117.75922193520242,\n          119.85458925018938,\n          119.85458925018938,\n          123.66274001251523,\n          123.66274001251523,\n          119.15604184133105,\n          119.15604184133105,\n          115.53291901293304,\n          115.53291901293304,\n          114.89363074478746,\n          114.89363074478746,\n          111.82198288405428,\n          111.82198288405428,\n          115.87910014654939,\n          115.87910014654939,\n          121.11836567425608,\n          121.11836567425608,\n          123.6936575690804,\n          123.6936575690804,\n          128.58085298226052,\n          128.58085298226052,\n          121.95792293344105,\n          121.95792293344105,\n          123.60374048079915,\n          123.60374048079915,\n          116.48935752258258,\n          116.48935752258258,\n          123.55808091733965,\n          123.55808091733965,\n          115.82597098962636,\n          115.82597098962636,\n          106.77349871746914,\n          106.77349871746914,\n          98.16867422379417,\n          98.16867422379417,\n          101.74594768140646,\n          101.74594768140646,\n          95.1243047124417,\n          95.1243047124417,\n          87.65512294066052,\n          87.65512294066052,\n          81.34224880318148,\n          81.34224880318148,\n          74.25512295493493,\n          74.25512295493493,\n          72.08158085400078,\n          72.08158085400078,\n          100,\n          96.49965803159492,\n          96.49965803159492,\n          96.89282234085528,\n          96.89282234085528,\n          96.66395700156504,\n          96.66395700156504,\n          98.84511851049147,\n          98.84511851049147,\n          97.72022468264952,\n          97.72022468264952,\n          97.69539195252099,\n          97.69539195252099,\n          96.04474200505408,\n          96.04474200505408,\n          92.12122707795169,\n          92.12122707795169,\n          90.7524578823741,\n          90.7524578823741,\n          91.86620599866295,\n          91.86620599866295,\n          91.18321550679761,\n          91.18321550679761,\n          91.77076300242805,\n          91.77076300242805,\n          92.64886983215455,\n          92.64886983215455,\n          94.4115531951917,\n          94.4115531951917,\n          94.60105803410664,\n          94.60105803410664,\n          96.77426923210655,\n          96.77426923210655,\n          92.95584004241334,\n          92.95584004241334,\n          93.0988602155345,\n          93.0988602155345,\n          93.66372732853505,\n          93.66372732853505,\n          93.03719912084956,\n          93.03719912084956,\n          95.452716939988,\n          95.452716939988,\n          95.51738150606599,\n          95.51738150606599,\n          98.05425788440175,\n          98.05425788440175,\n          96.45618107548292,\n          96.45618107548292,\n          97.85694974565604,\n          97.85694974565604,\n          98.17927424291095,\n          98.17927424291095,\n          100.65800191623217,\n          100.65800191623217,\n          99.23013457226213,\n          99.23013457226213,\n          99.68075990493776,\n          99.68075990493776,\n          101.76892968159176,\n          101.76892968159176,\n          100.93152794995164,\n          100.93152794995164,\n          98.15507445203599,\n          98.15507445203599,\n          97.32448920917646,\n          97.32448920917646,\n          93.8712393709979,\n          93.8712393709979,\n          93.94055110646606,\n          93.94055110646606,\n          91.25561322951836,\n          91.25561322951836,\n          89.45152914637421,\n          89.45152914637421,\n          91.38648456820863,\n          91.38648456820863,\n          92.40702828733023,\n          92.40702828733023,\n          93.37466906480901,\n          93.37466906480901,\n          90.60421743023397,\n          90.60421743023397,\n          89.54727537765943,\n          89.54727537765943,\n          91.50562818437629,\n          91.50562818437629,\n          91.43629555560625,\n          91.43629555560625,\n          90.22387819072098,\n          90.22387819072098,\n          91.286734506583,\n          91.286734506583,\n          89.70792037849891,\n          89.70792037849891,\n          92.36523442648821,\n          92.36523442648821,\n          92.01299752297405,\n          92.01299752297405,\n          91.26989588133198,\n          91.26989588133198,\n          91.16338302394053,\n          91.16338302394053,\n          90.8266416539283,\n          90.8266416539283,\n          90.48973346931841,\n          90.48973346931841,\n          88.53135087902336,\n          88.53135087902336,\n          89.58435442398849,\n          89.58435442398849,\n          88.8253866031861,\n          88.8253866031861,\n          88.3389425664917,\n          88.3389425664917,\n          85.6690510129246,\n          85.6690510129246,\n          85.33734615018504,\n          85.33734615018504,\n          86.51603920143914,\n          86.51603920143914,\n          86.33828493348129,\n          86.33828493348129,\n          87.36304955582791,\n          87.36304955582791,\n          90.23284652388249,\n          90.23284652388249,\n          90.91718361444943,\n          90.91718361444943,\n          88.99242906220593,\n          88.99242906220593,\n          88.99938883525597,\n          88.99938883525597,\n          91.30743180141197,\n          91.30743180141197,\n          91.05295854841216,\n          91.05295854841216,\n          90.67174729743687,\n          90.67174729743687,\n          88.7604154487307,\n          88.7604154487307,\n          91.21667934978741,\n          91.21667934978741,\n          93.6338256538187,\n          93.6338256538187,\n          94.37558676757705,\n          94.37558676757705,\n          95.47321941160612,\n          95.47321941160612,\n          97.77075917390104,\n          97.77075917390104,\n          95.59282238220855,\n          95.59282238220855,\n          95.72059903293992,\n          95.72059903293992,\n          96.52854695498216,\n          96.52854695498216,\n          98.09563460829936,\n          98.09563460829936,\n          96.51532722863074,\n          96.51532722863074,\n          95.4085247939158,\n          95.4085247939158,\n          95.52465821995634,\n          95.52465821995634,\n          94.8087017899729,\n          94.8087017899729,\n          96.88999312951138,\n          96.88999312951138,\n          99.41181607140739,\n          99.41181607140739,\n          101.0349689701463,\n          101.0349689701463,\n          103.52291722549926,\n          103.52291722549926,\n          102.29402709966891,\n          102.29402709966891,\n          103.89599855840412,\n          103.89599855840412,\n          102.66305598951656,\n          102.66305598951656,\n          106.35128198458621,\n          106.35128198458621,\n          105.2153347445648,\n          105.2153347445648,\n          103.54761969318548,\n          103.54761969318548,\n          101.9104419064554,\n          101.9104419064554,\n          104.68762728033715,\n          104.68762728033715,\n          103.74561762296544,\n          103.74561762296544,\n          102.29177188240789,\n          102.29177188240789,\n          100.99065500957371,\n          100.99065500957371,\n          99.08829773238939,\n          99.08829773238939,\n          99.25050915772879,\n          99.25050915772879\n         ],\n         \"xaxis\": \"x\",\n         \"y\": [\n          15,\n          15.0025881631884,\n          15.0025881631884,\n          15.001496702185737,\n          15.001496702185737,\n          15.002361804039465,\n          15.002361804039465,\n          15.003883708196188,\n          15.003883708196188,\n          15.00568393679195,\n          15.00568393679195,\n          15.007415489103332,\n          15.007415489103332,\n          15.007679903819312,\n          15.007679903819312,\n          15.00785846437848,\n          15.00785846437848,\n          15.005149988731267,\n          15.005149988731267,\n          15.003693218370183,\n          15.003693218370183,\n          15.003201208353792,\n          15.003201208353792,\n          15.001441720795848,\n          15.001441720795848,\n          15.000133583406503,\n          15.000133583406503,\n          14.998369352308925,\n          14.998369352308925,\n          14.996174666815067,\n          14.996174666815067,\n          14.994789169151316,\n          14.994789169151316,\n          14.99321394632609,\n          14.99321394632609,\n          14.990466967358335,\n          14.990466967358335,\n          14.98892812664762,\n          14.98892812664762,\n          14.987709914471244,\n          14.987709914471244,\n          14.987290241379329,\n          14.987290241379329,\n          14.985547623238297,\n          14.985547623238297,\n          14.986392330287694,\n          14.986392330287694,\n          14.9857180023299,\n          14.9857180023299,\n          14.984461841594834,\n          14.984461841594834,\n          14.985073680988108,\n          14.985073680988108,\n          14.985562867120061,\n          14.985562867120061,\n          14.98541282187458,\n          14.98541282187458,\n          14.984719710317288,\n          14.984719710317288,\n          14.985916999281203,\n          14.985916999281203,\n          14.98625696832826,\n          14.98625696832826,\n          14.986605681348385,\n          14.986605681348385,\n          14.985955421994834,\n          14.985955421994834,\n          14.986129886338091,\n          14.986129886338091,\n          14.984477177626776,\n          14.984477177626776,\n          14.981225059271852,\n          14.981225059271852,\n          14.976432391666856,\n          14.976432391666856,\n          14.973674166171941,\n          14.973674166171941,\n          14.96980019046312,\n          14.96980019046312,\n          14.966768040636888,\n          14.966768040636888,\n          14.962334392385861,\n          14.962334392385861,\n          14.957429395595303,\n          14.957429395595303,\n          14.953568887352041,\n          14.953568887352041,\n          14.948548302693771,\n          14.948548302693771,\n          14.945167884771239,\n          14.945167884771239,\n          14.940572465174537,\n          14.940572465174537,\n          14.936861141832518,\n          14.936861141832518,\n          14.931906107640428,\n          14.931906107640428,\n          14.927219898398723,\n          14.927219898398723,\n          14.921427580941707,\n          14.921427580941707,\n          14.91592475619714,\n          14.91592475619714,\n          14.910827079437475,\n          14.910827079437475,\n          14.90399212146379,\n          14.90399212146379,\n          14.897887136036417,\n          14.897887136036417,\n          14.891130476962763,\n          14.891130476962763,\n          14.883405497521546,\n          14.883405497521546,\n          14.876434503668987,\n          14.876434503668987,\n          14.870076791929769,\n          14.870076791929769,\n          14.862470074033991,\n          14.862470074033991,\n          14.853101924486802,\n          14.853101924486802,\n          14.845417890954725,\n          14.845417890954725,\n          14.834854591138358,\n          14.834854591138358,\n          14.82487867160691,\n          14.82487867160691,\n          14.817333893722857,\n          14.817333893722857,\n          14.80795542406726,\n          14.80795542406726,\n          14.799736508431591,\n          14.799736508431591,\n          14.789248058469765,\n          14.789248058469765,\n          14.7801175136321,\n          14.7801175136321,\n          14.77151478230201,\n          14.77151478230201,\n          14.762483431482917,\n          14.762483431482917,\n          14.75140910811959,\n          14.75140910811959,\n          14.742427769315322,\n          14.742427769315322,\n          14.731695495637132,\n          14.731695495637132,\n          14.723316727651351,\n          14.723316727651351,\n          14.714085420344661,\n          14.714085420344661,\n          14.705044067153839,\n          14.705044067153839,\n          14.695511757105502,\n          14.695511757105502,\n          14.684106161453188,\n          14.684106161453188,\n          14.673362900138697,\n          14.673362900138697,\n          14.662126777303884,\n          14.662126777303884,\n          14.650294122378542,\n          14.650294122378542,\n          14.637133503588467,\n          14.637133503588467,\n          14.625885500549552,\n          14.625885500549552,\n          14.613041318879013,\n          14.613041318879013,\n          14.600491228516,\n          14.600491228516,\n          14.589826301169238,\n          14.589826301169238,\n          14.579097284458562,\n          14.579097284458562,\n          14.567445029812177,\n          14.567445029812177,\n          14.555065538321779,\n          14.555065538321779,\n          14.543083171721651,\n          14.543083171721651,\n          14.530543871653219,\n          14.530543871653219,\n          14.519732090172331,\n          14.519732090172331,\n          14.50728664083606,\n          14.50728664083606,\n          14.494761059082773,\n          14.494761059082773,\n          14.480759862525757,\n          14.480759862525757,\n          14.466954078017151,\n          14.466954078017151,\n          14.452655312592428,\n          14.452655312592428,\n          14.43861439698937,\n          14.43861439698937,\n          14.421950182244203,\n          14.421950182244203,\n          14.404714317939641,\n          14.404714317939641,\n          15,\n          15.025881631884008,\n          15.025881631884008,\n          14.919856780977506,\n          14.919856780977506,\n          14.84340539956636,\n          14.84340539956636,\n          14.768172517785956,\n          14.768172517785956,\n          14.753355341717914,\n          14.753355341717914,\n          14.710325587285196,\n          14.710325587285196,\n          14.65501286735965,\n          14.65501286735965,\n          14.558960244492898,\n          14.558960244492898,\n          14.343261540533113,\n          14.343261540533113,\n          14.112473629068363,\n          14.112473629068363,\n          13.923048492146386,\n          13.923048492146386,\n          13.716505105851384,\n          13.716505105851384,\n          13.536396160701718,\n          13.536396160701718,\n          13.382627368919778,\n          13.382627368919778,\n          13.273403497288376,\n          13.273403497288376,\n          13.18737339314849,\n          13.18737339314849,\n          13.15696932845709,\n          13.15696932845709,\n          13.046690159522171,\n          13.046690159522171,\n          12.961691639243096,\n          12.961691639243096,\n          12.904545878763365,\n          12.904545878763365,\n          12.853989386327374,\n          12.853989386327374,\n          12.856562555701977,\n          12.856562555701977,\n          12.89695026210208,\n          12.89695026210208,\n          12.99401382064389,\n          12.99401382064389,\n          13.064986472742175,\n          13.064986472742175,\n          13.200100005296521,\n          13.200100005296521,\n          13.356245186734787,\n          13.356245186734787,\n          13.581858258648817,\n          13.581858258648817,\n          13.779446331861786,\n          13.779446331861786,\n          14.020887197803892,\n          14.020887197803892,\n          14.322226633251981,\n          14.322226633251981,\n          14.607966995872808,\n          14.607966995872808,\n          14.80045909939326,\n          14.80045909939326,\n          14.974742020331096,\n          14.974742020331096,\n          15.014139514654353,\n          15.014139514654353,\n          15.031590488973418,\n          15.031590488973418,\n          14.942284460374912,\n          14.942284460374912,\n          14.810526845162071,\n          14.810526845162071,\n          14.71725604402707,\n          14.71725604402707,\n          14.654423668399897,\n          14.654423668399897,\n          14.59904128346401,\n          14.59904128346401,\n          14.452865602940358,\n          14.452865602940358,\n          14.282261478879674,\n          14.282261478879674,\n          14.149772009038367,\n          14.149772009038367,\n          14.027052069983485,\n          14.027052069983485,\n          13.859992607077059,\n          13.859992607077059,\n          13.726038665079807,\n          13.726038665079807,\n          13.542762810472052,\n          13.542762810472052,\n          13.426206655218582,\n          13.426206655218582,\n          13.293233924236567,\n          13.293233924236567,\n          13.147791616712704,\n          13.147791616712704,\n          13.006610763951292,\n          13.006610763951292,\n          12.84823986731333,\n          12.84823986731333,\n          12.693804885133208,\n          12.693804885133208,\n          12.498890192871052,\n          12.498890192871052,\n          12.325809989121367,\n          12.325809989121367,\n          12.151607078337484,\n          12.151607078337484,\n          11.98176127509246,\n          11.98176127509246,\n          11.761719359770526,\n          11.761719359770526,\n          11.535738338854555,\n          11.535738338854555,\n          11.356031924588308,\n          11.356031924588308,\n          11.166858150706151,\n          11.166858150706151,\n          11.013537609868145,\n          11.013537609868145,\n          10.940785833361874,\n          10.940785833361874,\n          10.880470893076224,\n          10.880470893076224,\n          10.810492031684296,\n          10.810492031684296,\n          10.738828174758915,\n          10.738828174758915,\n          10.732227365833888,\n          10.732227365833888,\n          10.74063259552893,\n          10.74063259552893,\n          10.754970118090359,\n          10.754970118090359,\n          10.733785904628672,\n          10.733785904628672,\n          10.787976887758164,\n          10.787976887758164,\n          10.88944458640169,\n          10.88944458640169,\n          11.04254907916619,\n          11.04254907916619,\n          11.228202407568958,\n          11.228202407568958,\n          11.482818264639777,\n          11.482818264639777,\n          11.69687181566044,\n          11.69687181566044,\n          11.906283961960796,\n          11.906283961960796,\n          12.151929632994989,\n          12.151929632994989,\n          12.442078661195602,\n          12.442078661195602,\n          12.685614756768384,\n          12.685614756768384,\n          12.882246373678006,\n          12.882246373678006,\n          13.098033807459965,\n          13.098033807459965,\n          13.265644619378074,\n          13.265644619378074,\n          13.488205244369283,\n          13.488205244369283,\n          13.801786381602861,\n          13.801786381602861,\n          14.15661507092392,\n          14.15661507092392,\n          14.571319896228996,\n          14.571319896228996,\n          14.900498464260913,\n          14.900498464260913,\n          15.264447207321453,\n          15.264447207321453,\n          15.531123380217505,\n          15.531123380217505,\n          15.924513627073946,\n          15.924513627073946,\n          16.19019922374802,\n          16.19019922374802,\n          16.322098263657374,\n          16.322098263657374,\n          16.304174332335062,\n          16.304174332335062,\n          16.340241196629936,\n          16.340241196629936,\n          16.268904220202955,\n          16.268904220202955,\n          16.086253203878236,\n          16.086253203878236,\n          15.782468169262778,\n          15.782468169262778,\n          15.374958294571538,\n          15.374958294571538,\n          15,\n          15.012940815942004,\n          15.012940815942004,\n          14.98636610132836,\n          14.98636610132836,\n          14.971810745493599,\n          14.971810745493599,\n          14.959082346076983,\n          14.959082346076983,\n          14.960947875173133,\n          14.960947875173133,\n          14.95565263271521,\n          14.95565263271521,\n          14.943059453110807,\n          14.943059453110807,\n          14.920042423099233,\n          14.920042423099233,\n          14.859798697725925,\n          14.859798697725925,\n          14.797521921922066,\n          14.797521921922066,\n          14.746699458020705,\n          14.746699458020705,\n          14.686175690662845,\n          14.686175690662845,\n          14.631471102128723,\n          14.631471102128723,\n          14.58023065366825,\n          14.58023065366825,\n          14.537568554812667,\n          14.537568554812667,\n          14.500231317119468,\n          14.500231317119468,\n          14.474722857563513,\n          14.474722857563513,\n          14.4220647350196,\n          14.4220647350196,\n          14.376180825464203,\n          14.376180825464203,\n          14.335464151009303,\n          14.335464151009303,\n          14.295170307805137,\n          14.295170307805137,\n          14.263049608683579,\n          14.263049608683579,\n          14.243626386186193,\n          14.243626386186193,\n          14.231930990766053,\n          14.231930990766053,\n          14.208866161776603,\n          14.208866161776603,\n          14.202879759057403,\n          14.202879759057403,\n          14.198542451693676,\n          14.198542451693676,\n          14.205568788947831,\n          14.205568788947831,\n          14.202391682296767,\n          14.202391682296767,\n          14.211179246898407,\n          14.211179246898407,\n          14.22809282401728,\n          14.22809282401728,\n          14.240716868942075,\n          14.240716868942075,\n          14.233201323513999,\n          14.233201323513999,\n          14.225227297004473,\n          14.225227297004473,\n          14.189429886330164,\n          14.189429886330164,\n          14.147165369806896,\n          14.147165369806896,\n          14.08333714510193,\n          14.08333714510193,\n          14.019069291306938,\n          14.019069291306938,\n          13.961481416227368,\n          13.961481416227368,\n          13.913958049210835,\n          13.913958049210835,\n          13.866151471260338,\n          13.866151471260338,\n          13.801817295121142,\n          13.801817295121142,\n          13.737042236766802,\n          13.737042236766802,\n          13.678767238942457,\n          13.678767238942457,\n          13.628052525015123,\n          13.628052525015123,\n          13.56643704645608,\n          13.56643704645608,\n          13.515035696227566,\n          13.515035696227566,\n          13.450876501139497,\n          13.450876501139497,\n          13.402818129238593,\n          13.402818129238593,\n          13.348944553667687,\n          13.348944553667687,\n          13.293373264063145,\n          13.293373264063145,\n          13.239891656584982,\n          13.239891656584982,\n          13.178310915340727,\n          13.178310915340727,\n          13.11914363309317,\n          13.11914363309317,\n          13.04834605494057,\n          13.04834605494057,\n          12.980008418510142,\n          12.980008418510142,\n          12.912100563936535,\n          12.912100563936535,\n          12.84548257168026,\n          12.84548257168026,\n          12.761653328708682,\n          12.761653328708682,\n          12.670680742782599,\n          12.670680742782599,\n          12.593746048181327,\n          12.593746048181327,\n          12.505966192387636,\n          12.505966192387636,\n          12.426975415778585,\n          12.426975415778585,\n          12.372987114877688,\n          12.372987114877688,\n          12.316124888297376,\n          12.316124888297376,\n          12.25624784136798,\n          12.25624784136798,\n          12.188780748399955,\n          12.188780748399955,\n          12.139029429691613,\n          12.139029429691613,\n          12.091613175035052,\n          12.091613175035052,\n          12.042152685505714,\n          12.042152685505714,\n          11.977247905600317,\n          11.977247905600317,\n          11.933433733774168,\n          11.933433733774168,\n          11.89504783502318,\n          11.89504783502318,\n          11.871147080760428,\n          11.871147080760428,\n          11.850217659047976,\n          11.850217659047976,\n          11.84192192212905,\n          11.84192192212905,\n          11.82311969344896,\n          11.82311969344896,\n          11.798468322241224,\n          11.798468322241224,\n          11.781618541251447,\n          11.781618541251447,\n          11.771189982727265,\n          11.771189982727265,\n          11.752590059889691,\n          11.752590059889691,\n          11.725074162195554,\n          11.725074162195554,\n          11.707552281866988,\n          11.707552281866988,\n          11.681614136981478,\n          11.681614136981478,\n          11.667586378488018,\n          11.667586378488018,\n          11.674231291283325,\n          11.674231291283325,\n          11.689501880321215,\n          11.689501880321215,\n          11.71312985613572,\n          11.71312985613572,\n          11.729541695595978,\n          11.729541695595978,\n          11.756346252143663,\n          11.756346252143663,\n          11.776821825896544,\n          11.776821825896544,\n          11.823144360448932,\n          11.823144360448932,\n          11.858480184796978,\n          11.858480184796978,\n          11.887381186413212,\n          11.887381186413212,\n          11.903274853981108,\n          11.903274853981108,\n          11.934053284575308,\n          11.934053284575308,\n          11.959946529310686,\n          11.959946529310686,\n          11.981458643093886,\n          11.981458643093886,\n          11.986109221284174,\n          11.986109221284174,\n          11.98062484432249,\n          11.98062484432249\n         ],\n         \"yaxis\": \"y\"\n        }\n       ],\n       \"layout\": {\n        \"legend\": {\n         \"title\": {\n          \"text\": \"color\"\n         },\n         \"tracegroupgap\": 0\n        },\n        \"margin\": {\n         \"t\": 60\n        },\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"pie\": [\n           {\n            \"automargin\": true,\n            \"type\": \"pie\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"fillpattern\": {\n             \"fillmode\": \"overlay\",\n             \"size\": 10,\n             \"solidity\": 0.2\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"autotypenumbers\": \"strict\",\n          \"coloraxis\": {\n           \"colorbar\": {\n            \"outlinewidth\": 0,\n            \"ticks\": \"\"\n           }\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        },\n        \"xaxis\": {\n         \"anchor\": \"y\",\n         \"domain\": [\n          0,\n          1\n         ],\n         \"title\": {\n          \"text\": \"x\"\n         }\n        },\n        \"yaxis\": {\n         \"anchor\": \"x\",\n         \"domain\": [\n          0,\n          1\n         ],\n         \"title\": {\n          \"text\": \"y\"\n         }\n        }\n       }\n      }\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from cadCAD_tools import profile_run\\n\",\n    \"\\n\",\n    \"fig = px.line(df.query('dt == 0.1'),\\n\",\n    \"              x=df.prey_population,\\n\",\n    \"              y=df.predator_population,\\n\",\n    \"              color=df.run.astype(str))\\n\",\n    \"\\n\",\n    \"fig.show()\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 6,\n   \"metadata\": {\n    \"scrolled\": true\n   },\n   \"outputs\": [\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"                  ___________    ____\\n\",\n      \"  ________ __ ___/ / ____/   |  / __ \\\\\\n\",\n      \" / ___/ __` / __  / /   / /| | / / / /\\n\",\n      \"/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\\n\",\n      \"\\\\___/\\\\__,_/\\\\__,_/\\\\____/_/  |_/_____/\\n\",\n      \"by cadCAD\\n\",\n      \"\\n\",\n      \"cadCAD Version: 0.4.28\\n\",\n      \"Execution Mode: local_proc\\n\",\n      \"Simulation Dimensions:\\n\",\n      \"Entire Simulation: (Models, Unique Timesteps, Params, Total Runs, Sub-States) = (1, 20, 5, 30, 3)\\n\",\n      \"     Simulation 0: (Timesteps, Params, Runs, Sub-States) = (20, 5, 30, 3)\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Initializing configurations: 100%|██████████| 30/30 [00:00<00:00, 662.65it/s]\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Execution Method: parallelize_simulations\\n\",\n      \"Execution Mode: parallelized\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\",\n      \"Flattening results: 100%|██████████| 30/30 [00:00<00:00, 666.25it/s]\"\n     ]\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"Total execution time: 0.48s\\n\"\n     ]\n    },\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"df = profile_run(initial_conditions,\\n\",\n    \"              params,\\n\",\n    \"              partial_state_update_blocks,\\n\",\n    \"              20,\\n\",\n    \"              10,\\n\",\n    \"              use_label=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 7,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"text/plain\": [\n       \"0               Initial State\\n\",\n       \"1                Time Measure\\n\",\n       \"2    Lotka-Volterra Equations\\n\",\n       \"3                Time Measure\\n\",\n       \"4                  Do Nothing\\n\",\n       \"5                Time Measure\\n\",\n       \"6                Time Measure\\n\",\n       \"7    Lotka-Volterra Equations\\n\",\n       \"Name: substep_label, dtype: object\"\n      ]\n     },\n     \"execution_count\": 7,\n     \"metadata\": {},\n     \"output_type\": \"execute_result\"\n    }\n   ],\n   \"source\": [\n    \"df.head(8).substep_label\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 8,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"alignmentgroup\": \"True\",\n         \"hovertemplate\": \"timestep=%{x}<br>time_since_start=%{y}<extra></extra>\",\n         \"legendgroup\": \"\",\n         \"marker\": {\n          \"color\": \"#636efa\"\n         },\n         \"name\": \"\",\n         \"notched\": false,\n         \"offsetgroup\": \"\",\n         \"orientation\": \"v\",\n         \"showlegend\": false,\n         \"type\": \"box\",\n         \"x\": [\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20\n         ],\n         \"x0\": \" \",\n         \"xaxis\": \"x\",\n         \"y\": [\n          null,\n          0.26558995246887207,\n          0.2659590244293213,\n          0.2660501003265381,\n          0.2661259174346924,\n          0.2663848400115967,\n          0.2664608955383301,\n          0.2665390968322754,\n          0.266618013381958,\n          0.26669907569885254,\n          0.2667720317840576,\n          0.2668471336364746,\n          0.2669200897216797,\n          0.266995906829834,\n          0.26707005500793457,\n          0.26714301109313965,\n          0.2672159671783447,\n          0.26729512214660645,\n          0.267733097076416,\n          0.2681009769439697,\n          0.26819801330566406,\n          null,\n          0.27036190032958984,\n          0.2707710266113281,\n          0.2710988521575928,\n          0.2712888717651367,\n          0.27136993408203125,\n          0.27144384384155273,\n          0.2715179920196533,\n          0.2716028690338135,\n          0.2716810703277588,\n          0.2717549800872803,\n          0.2718698978424072,\n          0.27195191383361816,\n          0.2720298767089844,\n          0.2722759246826172,\n          0.27252674102783203,\n          0.2726719379425049,\n          0.2727508544921875,\n          0.272824764251709,\n          0.27289772033691406,\n          0.27296996116638184,\n          null,\n          0.276965856552124,\n          0.27704882621765137,\n          0.27712392807006836,\n          0.27719688415527344,\n          0.27727174758911133,\n          0.2773449420928955,\n          0.2774178981781006,\n          0.2774968147277832,\n          0.2775750160217285,\n          0.2776467800140381,\n          0.27771973609924316,\n          0.27779197692871094,\n          0.27786707878112793,\n          0.2779388427734375,\n          0.2780117988586426,\n          0.27808594703674316,\n          0.27815985679626465,\n          0.2782328128814697,\n          0.27835893630981445,\n          0.27843594551086426,\n          null,\n          0.28354501724243164,\n          0.2838010787963867,\n          0.28403782844543457,\n          0.2842710018157959,\n          0.284527063369751,\n          0.28476572036743164,\n          0.28499889373779297,\n          0.28540492057800293,\n          0.2857358455657959,\n          0.2861349582672119,\n          0.2863729000091553,\n          0.2866988182067871,\n          0.28699374198913574,\n          0.2870907783508301,\n          0.28716492652893066,\n          0.28723883628845215,\n          0.2873198986053467,\n          0.28739404678344727,\n          0.28746795654296875,\n          0.28754091262817383,\n          null,\n          0.2860229015350342,\n          0.2860989570617676,\n          0.28617000579833984,\n          0.2862389087677002,\n          0.2863130569458008,\n          0.28638315200805664,\n          0.286452054977417,\n          0.28652501106262207,\n          0.28659820556640625,\n          0.2866659164428711,\n          0.2867431640625,\n          0.28681111335754395,\n          0.2868809700012207,\n          0.28695201873779297,\n          0.2870211601257324,\n          0.287092924118042,\n          0.28716421127319336,\n          0.2872331142425537,\n          0.28730225563049316,\n          0.287369966506958,\n          null,\n          0.2810492515563965,\n          0.2811269760131836,\n          0.28119826316833496,\n          0.2812690734863281,\n          0.2813410758972168,\n          0.28141117095947266,\n          0.2814810276031494,\n          0.2815561294555664,\n          0.2816300392150879,\n          0.28170204162597656,\n          0.281771183013916,\n          0.28184008598327637,\n          0.28191328048706055,\n          0.2819819450378418,\n          0.28205299377441406,\n          0.282120943069458,\n          0.2821919918060303,\n          0.28226208686828613,\n          0.2823309898376465,\n          0.28239917755126953,\n          null,\n          0.27811098098754883,\n          0.27818989753723145,\n          0.2782609462738037,\n          0.27833080291748047,\n          0.27840280532836914,\n          0.2784738540649414,\n          0.27854275703430176,\n          0.27861785888671875,\n          0.27869582176208496,\n          0.2787637710571289,\n          0.27883291244506836,\n          0.2789020538330078,\n          0.27897191047668457,\n          0.2790398597717285,\n          0.2791109085083008,\n          0.27917981147766113,\n          0.279249906539917,\n          0.27931880950927734,\n          0.2793879508972168,\n          0.27945590019226074,\n          null,\n          0.26662278175354004,\n          0.26670384407043457,\n          0.26677489280700684,\n          0.2668459415435791,\n          0.26691770553588867,\n          0.26698899269104004,\n          0.2670598030090332,\n          0.2671349048614502,\n          0.26720690727233887,\n          0.2672770023345947,\n          0.2673468589782715,\n          0.26741695404052734,\n          0.2674880027770996,\n          0.2675619125366211,\n          0.26763081550598145,\n          0.26770687103271484,\n          0.26778483390808105,\n          0.26786303520202637,\n          0.26793599128723145,\n          0.2680046558380127,\n          null,\n          0.26627492904663086,\n          0.2663588523864746,\n          0.2664330005645752,\n          0.2665059566497803,\n          0.26657891273498535,\n          0.2666490077972412,\n          0.2667198181152344,\n          0.26679277420043945,\n          0.26686882972717285,\n          0.26694297790527344,\n          0.267014741897583,\n          0.2670876979827881,\n          0.2671627998352051,\n          0.26735877990722656,\n          0.26743292808532715,\n          0.2675046920776367,\n          0.2675788402557373,\n          0.2676527500152588,\n          0.26772499084472656,\n          0.26779794692993164,\n          null,\n          0.2680220603942871,\n          0.26810216903686523,\n          0.2681732177734375,\n          0.2682492733001709,\n          0.26832103729248047,\n          0.26839137077331543,\n          0.2684621810913086,\n          0.2685360908508301,\n          0.26860809326171875,\n          0.2686781883239746,\n          0.26874709129333496,\n          0.2688171863555908,\n          0.26889705657958984,\n          0.2689692974090576,\n          0.26903820037841797,\n          0.2691073417663574,\n          0.2691771984100342,\n          0.26924633979797363,\n          0.269315242767334,\n          0.26938438415527344\n         ],\n         \"y0\": \" \",\n         \"yaxis\": \"y\"\n        }\n       ],\n       \"layout\": {\n        \"boxmode\": \"group\",\n        \"legend\": {\n         \"tracegroupgap\": 0\n        },\n        \"margin\": {\n         \"t\": 60\n        },\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"pie\": [\n           {\n            \"automargin\": true,\n            \"type\": \"pie\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"fillpattern\": {\n             \"fillmode\": \"overlay\",\n             \"size\": 10,\n             \"solidity\": 0.2\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"autotypenumbers\": \"strict\",\n          \"coloraxis\": {\n           \"colorbar\": {\n            \"outlinewidth\": 0,\n            \"ticks\": \"\"\n           }\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        },\n        \"xaxis\": {\n         \"anchor\": \"y\",\n         \"domain\": [\n          0,\n          1\n         ],\n         \"title\": {\n          \"text\": \"timestep\"\n         }\n        },\n        \"yaxis\": {\n         \"anchor\": \"x\",\n         \"domain\": [\n          0,\n          1\n         ],\n         \"title\": {\n          \"text\": \"time_since_start\"\n         }\n        }\n       }\n      }\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"from cadCAD_tools.profiling.visualizations import visualize_elapsed_time_per_ts\\n\",\n    \"\\n\",\n    \"visualize_elapsed_time_per_ts(df, relative=False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 9,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"alignmentgroup\": \"True\",\n         \"hovertemplate\": \"timestep=%{x}<br>psub_duration=%{y}<extra></extra>\",\n         \"legendgroup\": \"\",\n         \"marker\": {\n          \"color\": \"#636efa\"\n         },\n         \"name\": \"\",\n         \"notched\": false,\n         \"offsetgroup\": \"\",\n         \"orientation\": \"v\",\n         \"showlegend\": false,\n         \"type\": \"box\",\n         \"x\": [\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20,\n          0,\n          1,\n          2,\n          3,\n          4,\n          5,\n          6,\n          7,\n          8,\n          9,\n          10,\n          11,\n          12,\n          13,\n          14,\n          15,\n          16,\n          17,\n          18,\n          19,\n          20\n         ],\n         \"x0\": \" \",\n         \"xaxis\": \"x\",\n         \"y\": [\n          null,\n          null,\n          0.00036907196044921875,\n          0.00009107589721679688,\n          0.00007581710815429688,\n          0.0002589225769042969,\n          0.00007605552673339844,\n          0.0000782012939453125,\n          0.00007891654968261719,\n          0.00008106231689453125,\n          0.00007295608520507812,\n          0.00007510185241699219,\n          0.00007295608520507812,\n          0.00007581710815429688,\n          0.00007414817810058594,\n          0.00007295608520507812,\n          0.00007295608520507812,\n          0.00007915496826171875,\n          0.0004379749298095703,\n          0.00036787986755371094,\n          0.00009703636169433594,\n          null,\n          null,\n          0.00040912628173828125,\n          0.00032782554626464844,\n          0.0001900196075439453,\n          0.00008106231689453125,\n          0.00007390975952148438,\n          0.00007414817810058594,\n          0.00008487701416015625,\n          0.0000782012939453125,\n          0.00007390975952148438,\n          0.00011491775512695312,\n          0.0000820159912109375,\n          0.00007796287536621094,\n          0.0002460479736328125,\n          0.00025081634521484375,\n          0.00014519691467285156,\n          0.00007891654968261719,\n          0.00007390975952148438,\n          0.00007295608520507812,\n          0.00007224082946777344,\n          null,\n          null,\n          0.00008296966552734375,\n          0.00007510185241699219,\n          0.00007295608520507812,\n          0.00007486343383789062,\n          0.00007319450378417969,\n          0.00007295608520507812,\n          0.00007891654968261719,\n          0.0000782012939453125,\n          0.00007176399230957031,\n          0.00007295608520507812,\n          0.00007224082946777344,\n          0.00007510185241699219,\n          0.00007176399230957031,\n          0.00007295608520507812,\n          0.00007414817810058594,\n          0.00007390975952148438,\n          0.00007295608520507812,\n          0.00012612342834472656,\n          0.00007700920104980469,\n          null,\n          null,\n          0.0002560615539550781,\n          0.00023674964904785156,\n          0.00023317337036132812,\n          0.0002560615539550781,\n          0.00023865699768066406,\n          0.00023317337036132812,\n          0.00040602684020996094,\n          0.00033092498779296875,\n          0.0003991127014160156,\n          0.00023794174194335938,\n          0.00032591819763183594,\n          0.0002949237823486328,\n          0.00009703636169433594,\n          0.00007414817810058594,\n          0.00007390975952148438,\n          0.00008106231689453125,\n          0.00007414817810058594,\n          0.00007390975952148438,\n          0.00007295608520507812,\n          null,\n          null,\n          0.00007605552673339844,\n          0.00007104873657226562,\n          0.00006890296936035156,\n          0.00007414817810058594,\n          0.00007009506225585938,\n          0.00006890296936035156,\n          0.00007295608520507812,\n          0.00007319450378417969,\n          0.00006771087646484375,\n          0.00007724761962890625,\n          0.00006794929504394531,\n          0.00006985664367675781,\n          0.00007104873657226562,\n          0.00006914138793945312,\n          0.00007176399230957031,\n          0.00007128715515136719,\n          0.00006890296936035156,\n          0.00006914138793945312,\n          0.00006771087646484375,\n          null,\n          null,\n          0.00007772445678710938,\n          0.00007128715515136719,\n          0.00007081031799316406,\n          0.00007200241088867188,\n          0.00007009506225585938,\n          0.00006985664367675781,\n          0.00007510185241699219,\n          0.00007390975952148438,\n          0.00007200241088867188,\n          0.00006914138793945312,\n          0.00006890296936035156,\n          0.00007319450378417969,\n          0.00006866455078125,\n          0.00007104873657226562,\n          0.00006794929504394531,\n          0.00007104873657226562,\n          0.00007009506225585938,\n          0.00006890296936035156,\n          0.00006818771362304688,\n          null,\n          null,\n          0.00007891654968261719,\n          0.00007104873657226562,\n          0.00006985664367675781,\n          0.00007200241088867188,\n          0.00007104873657226562,\n          0.00006890296936035156,\n          0.00007510185241699219,\n          0.00007796287536621094,\n          0.00006794929504394531,\n          0.00006914138793945312,\n          0.00006914138793945312,\n          0.00006985664367675781,\n          0.00006794929504394531,\n          0.00007104873657226562,\n          0.00006890296936035156,\n          0.00007009506225585938,\n          0.00006890296936035156,\n          0.00006914138793945312,\n          0.00006794929504394531,\n          null,\n          null,\n          0.00008106231689453125,\n          0.00007104873657226562,\n          0.00007104873657226562,\n          0.00007176399230957031,\n          0.00007128715515136719,\n          0.00007081031799316406,\n          0.00007510185241699219,\n          0.00007200241088867188,\n          0.00007009506225585938,\n          0.00006985664367675781,\n          0.00007009506225585938,\n          0.00007104873657226562,\n          0.00007390975952148438,\n          0.00006890296936035156,\n          0.00007605552673339844,\n          0.00007796287536621094,\n          0.0000782012939453125,\n          0.00007295608520507812,\n          0.00006866455078125,\n          null,\n          null,\n          0.00008392333984375,\n          0.00007414817810058594,\n          0.00007295608520507812,\n          0.00007295608520507812,\n          0.00007009506225585938,\n          0.00007081031799316406,\n          0.00007295608520507812,\n          0.00007605552673339844,\n          0.00007414817810058594,\n          0.00007176399230957031,\n          0.00007295608520507812,\n          0.00007510185241699219,\n          0.00019598007202148438,\n          0.00007414817810058594,\n          0.00007176399230957031,\n          0.00007414817810058594,\n          0.00007390975952148438,\n          0.00007224082946777344,\n          0.00007295608520507812,\n          null,\n          null,\n          0.000080108642578125,\n          0.00007104873657226562,\n          0.00007605552673339844,\n          0.00007176399230957031,\n          0.00007033348083496094,\n          0.00007081031799316406,\n          0.00007390975952148438,\n          0.00007200241088867188,\n          0.00007009506225585938,\n          0.00006890296936035156,\n          0.00007009506225585938,\n          0.00007987022399902344,\n          0.00007224082946777344,\n          0.00006890296936035156,\n          0.00006914138793945312,\n          0.00006985664367675781,\n          0.00006914138793945312,\n          0.00006890296936035156,\n          0.00006914138793945312\n         ],\n         \"y0\": \" \",\n         \"yaxis\": \"y\"\n        }\n       ],\n       \"layout\": {\n        \"boxmode\": \"group\",\n        \"legend\": {\n         \"tracegroupgap\": 0\n        },\n        \"margin\": {\n         \"t\": 60\n        },\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             },\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"pattern\": {\n              \"fillmode\": \"overlay\",\n              \"size\": 10,\n              \"solidity\": 0.2\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"pie\": [\n           {\n            \"automargin\": true,\n            \"type\": \"pie\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"fillpattern\": {\n             \"fillmode\": \"overlay\",\n             \"size\": 10,\n             \"solidity\": 0.2\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"autotypenumbers\": \"strict\",\n          \"coloraxis\": {\n           \"colorbar\": {\n            \"outlinewidth\": 0,\n            \"ticks\": \"\"\n           }\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        },\n        \"xaxis\": {\n         \"anchor\": \"y\",\n         \"domain\": [\n          0,\n          1\n         ],\n         \"title\": {\n          \"text\": \"timestep\"\n         }\n        },\n        \"yaxis\": {\n         \"anchor\": \"x\",\n         \"domain\": [\n          0,\n          1\n         ],\n         \"title\": {\n          \"text\": \"psub_duration\"\n         }\n        }\n       }\n      }\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"visualize_elapsed_time_per_ts(df, relative=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 10,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"name\": \"stderr\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"100%|██████████| 200/200 [00:00<00:00, 1004.62it/s]\\n\"\n     ]\n    },\n    {\n     \"ename\": \"TypeError\",\n     \"evalue\": \"incompatible index of inserted column with frame index\",\n     \"output_type\": \"error\",\n     \"traceback\": [\n      \"\\u001b[0;31m---------------------------------------------------------------------------\\u001b[0m\",\n      \"\\u001b[0;31mValueError\\u001b[0m                                Traceback (most recent call last)\",\n      \"File \\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/frame.py:12304\\u001b[0m, in \\u001b[0;36m_reindex_for_setitem\\u001b[0;34m(value, index)\\u001b[0m\\n\\u001b[1;32m  12303\\u001b[0m \\u001b[38;5;28;01mtry\\u001b[39;00m:\\n\\u001b[0;32m> 12304\\u001b[0m     reindexed_value \\u001b[38;5;241m=\\u001b[39m value\\u001b[38;5;241m.\\u001b[39mreindex(index)\\u001b[38;5;241m.\\u001b[39m_values\\n\\u001b[1;32m  12305\\u001b[0m \\u001b[38;5;28;01mexcept\\u001b[39;00m \\u001b[38;5;167;01mValueError\\u001b[39;00m \\u001b[38;5;28;01mas\\u001b[39;00m err:\\n\\u001b[1;32m  12306\\u001b[0m     \\u001b[38;5;66;03m# raised in MultiIndex.from_tuples, see test_insert_error_msmgs\\u001b[39;00m\\n\",\n      \"File \\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/series.py:4977\\u001b[0m, in \\u001b[0;36mSeries.reindex\\u001b[0;34m(self, index, axis, method, copy, level, fill_value, limit, tolerance)\\u001b[0m\\n\\u001b[1;32m   4960\\u001b[0m \\u001b[38;5;129m@doc\\u001b[39m(\\n\\u001b[1;32m   4961\\u001b[0m     NDFrame\\u001b[38;5;241m.\\u001b[39mreindex,  \\u001b[38;5;66;03m# type: ignore[has-type]\\u001b[39;00m\\n\\u001b[1;32m   4962\\u001b[0m     klass\\u001b[38;5;241m=\\u001b[39m_shared_doc_kwargs[\\u001b[38;5;124m\\\"\\u001b[39m\\u001b[38;5;124mklass\\u001b[39m\\u001b[38;5;124m\\\"\\u001b[39m],\\n\\u001b[0;32m   (...)\\u001b[0m\\n\\u001b[1;32m   4975\\u001b[0m     tolerance\\u001b[38;5;241m=\\u001b[39m\\u001b[38;5;28;01mNone\\u001b[39;00m,\\n\\u001b[1;32m   4976\\u001b[0m ) \\u001b[38;5;241m-\\u001b[39m\\u001b[38;5;241m>\\u001b[39m Series:\\n\\u001b[0;32m-> 4977\\u001b[0m     \\u001b[38;5;28;01mreturn\\u001b[39;00m \\u001b[38;5;28msuper\\u001b[39m()\\u001b[38;5;241m.\\u001b[39mreindex(\\n\\u001b[1;32m   4978\\u001b[0m         index\\u001b[38;5;241m=\\u001b[39mindex,\\n\\u001b[1;32m   4979\\u001b[0m         method\\u001b[38;5;241m=\\u001b[39mmethod,\\n\\u001b[1;32m   4980\\u001b[0m         copy\\u001b[38;5;241m=\\u001b[39mcopy,\\n\\u001b[1;32m   4981\\u001b[0m         level\\u001b[38;5;241m=\\u001b[39mlevel,\\n\\u001b[1;32m   4982\\u001b[0m         fill_value\\u001b[38;5;241m=\\u001b[39mfill_value,\\n\\u001b[1;32m   4983\\u001b[0m         limit\\u001b[38;5;241m=\\u001b[39mlimit,\\n\\u001b[1;32m   4984\\u001b[0m         tolerance\\u001b[38;5;241m=\\u001b[39mtolerance,\\n\\u001b[1;32m   4985\\u001b[0m     )\\n\",\n      \"File \\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/generic.py:5521\\u001b[0m, in \\u001b[0;36mNDFrame.reindex\\u001b[0;34m(self, labels, index, columns, axis, method, copy, level, fill_value, limit, tolerance)\\u001b[0m\\n\\u001b[1;32m   5520\\u001b[0m \\u001b[38;5;66;03m# perform the reindex on the axes\\u001b[39;00m\\n\\u001b[0;32m-> 5521\\u001b[0m \\u001b[38;5;28;01mreturn\\u001b[39;00m \\u001b[38;5;28mself\\u001b[39m\\u001b[38;5;241m.\\u001b[39m_reindex_axes(\\n\\u001b[1;32m   5522\\u001b[0m     axes, level, limit, tolerance, method, fill_value, copy\\n\\u001b[1;32m   5523\\u001b[0m )\\u001b[38;5;241m.\\u001b[39m__finalize__(\\u001b[38;5;28mself\\u001b[39m, method\\u001b[38;5;241m=\\u001b[39m\\u001b[38;5;124m\\\"\\u001b[39m\\u001b[38;5;124mreindex\\u001b[39m\\u001b[38;5;124m\\\"\\u001b[39m)\\n\",\n      \"File \\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/generic.py:5544\\u001b[0m, in \\u001b[0;36mNDFrame._reindex_axes\\u001b[0;34m(self, axes, level, limit, tolerance, method, fill_value, copy)\\u001b[0m\\n\\u001b[1;32m   5543\\u001b[0m ax \\u001b[38;5;241m=\\u001b[39m \\u001b[38;5;28mself\\u001b[39m\\u001b[38;5;241m.\\u001b[39m_get_axis(a)\\n\\u001b[0;32m-> 5544\\u001b[0m new_index, indexer \\u001b[38;5;241m=\\u001b[39m ax\\u001b[38;5;241m.\\u001b[39mreindex(\\n\\u001b[1;32m   5545\\u001b[0m     labels, level\\u001b[38;5;241m=\\u001b[39mlevel, limit\\u001b[38;5;241m=\\u001b[39mlimit, tolerance\\u001b[38;5;241m=\\u001b[39mtolerance, method\\u001b[38;5;241m=\\u001b[39mmethod\\n\\u001b[1;32m   5546\\u001b[0m )\\n\\u001b[1;32m   5548\\u001b[0m axis \\u001b[38;5;241m=\\u001b[39m \\u001b[38;5;28mself\\u001b[39m\\u001b[38;5;241m.\\u001b[39m_get_axis_number(a)\\n\",\n      \"File \\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/indexes/base.py:4437\\u001b[0m, in \\u001b[0;36mIndex.reindex\\u001b[0;34m(self, target, method, level, limit, tolerance)\\u001b[0m\\n\\u001b[1;32m   4435\\u001b[0m             indexer, _ \\u001b[38;5;241m=\\u001b[39m \\u001b[38;5;28mself\\u001b[39m\\u001b[38;5;241m.\\u001b[39mget_indexer_non_unique(target)\\n\\u001b[0;32m-> 4437\\u001b[0m target \\u001b[38;5;241m=\\u001b[39m \\u001b[38;5;28mself\\u001b[39m\\u001b[38;5;241m.\\u001b[39m_wrap_reindex_result(target, indexer, preserve_names)\\n\\u001b[1;32m   4438\\u001b[0m \\u001b[38;5;28;01mreturn\\u001b[39;00m target, indexer\\n\",\n      \"File \\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/indexes/multi.py:2602\\u001b[0m, in \\u001b[0;36mMultiIndex._wrap_reindex_result\\u001b[0;34m(self, target, indexer, preserve_names)\\u001b[0m\\n\\u001b[1;32m   2601\\u001b[0m \\u001b[38;5;28;01mtry\\u001b[39;00m:\\n\\u001b[0;32m-> 2602\\u001b[0m     target \\u001b[38;5;241m=\\u001b[39m MultiIndex\\u001b[38;5;241m.\\u001b[39mfrom_tuples(target)\\n\\u001b[1;32m   2603\\u001b[0m \\u001b[38;5;28;01mexcept\\u001b[39;00m \\u001b[38;5;167;01mTypeError\\u001b[39;00m:\\n\\u001b[1;32m   2604\\u001b[0m     \\u001b[38;5;66;03m# not all tuples, see test_constructor_dict_multiindex_reindex_flat\\u001b[39;00m\\n\",\n      \"File \\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/indexes/multi.py:220\\u001b[0m, in \\u001b[0;36mnames_compat.<locals>.new_meth\\u001b[0;34m(self_or_cls, *args, **kwargs)\\u001b[0m\\n\\u001b[1;32m    218\\u001b[0m     kwargs[\\u001b[38;5;124m\\\"\\u001b[39m\\u001b[38;5;124mnames\\u001b[39m\\u001b[38;5;124m\\\"\\u001b[39m] \\u001b[38;5;241m=\\u001b[39m kwargs\\u001b[38;5;241m.\\u001b[39mpop(\\u001b[38;5;124m\\\"\\u001b[39m\\u001b[38;5;124mname\\u001b[39m\\u001b[38;5;124m\\\"\\u001b[39m)\\n\\u001b[0;32m--> 220\\u001b[0m \\u001b[38;5;28;01mreturn\\u001b[39;00m meth(self_or_cls, \\u001b[38;5;241m*\\u001b[39margs, \\u001b[38;5;241m*\\u001b[39m\\u001b[38;5;241m*\\u001b[39mkwargs)\\n\",\n      \"File \\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/indexes/multi.py:615\\u001b[0m, in \\u001b[0;36mMultiIndex.from_tuples\\u001b[0;34m(cls, tuples, sortorder, names)\\u001b[0m\\n\\u001b[1;32m    613\\u001b[0m         tuples \\u001b[38;5;241m=\\u001b[39m np\\u001b[38;5;241m.\\u001b[39masarray(tuples\\u001b[38;5;241m.\\u001b[39m_values)\\n\\u001b[0;32m--> 615\\u001b[0m     arrays \\u001b[38;5;241m=\\u001b[39m \\u001b[38;5;28mlist\\u001b[39m(lib\\u001b[38;5;241m.\\u001b[39mtuples_to_object_array(tuples)\\u001b[38;5;241m.\\u001b[39mT)\\n\\u001b[1;32m    616\\u001b[0m \\u001b[38;5;28;01melif\\u001b[39;00m \\u001b[38;5;28misinstance\\u001b[39m(tuples, \\u001b[38;5;28mlist\\u001b[39m):\\n\",\n      \"File \\u001b[0;32mlib.pyx:2977\\u001b[0m, in \\u001b[0;36mpandas._libs.lib.tuples_to_object_array\\u001b[0;34m()\\u001b[0m\\n\",\n      \"\\u001b[0;31mValueError\\u001b[0m: Buffer dtype mismatch, expected 'Python object' but got 'long'\",\n      \"\\nThe above exception was the direct cause of the following exception:\\n\",\n      \"\\u001b[0;31mTypeError\\u001b[0m                                 Traceback (most recent call last)\",\n      \"\\u001b[0;32m/var/folders/y4/dvc6qr5j30s3frwztjt5shg40000gn/T/ipykernel_61363/3498303338.py\\u001b[0m in \\u001b[0;36m?\\u001b[0;34m()\\u001b[0m\\n\\u001b[1;32m      1\\u001b[0m \\u001b[0;32mfrom\\u001b[0m \\u001b[0mcadCAD_tools\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mprofiling\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mvisualizations\\u001b[0m \\u001b[0;32mimport\\u001b[0m \\u001b[0mvisualize_substep_impact\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m      2\\u001b[0m \\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0;32m----> 3\\u001b[0;31m \\u001b[0mvisualize_substep_impact\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mdf\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mrelative\\u001b[0m\\u001b[0;34m=\\u001b[0m\\u001b[0;32mTrue\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0m\",\n      \"\\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/cadCAD_tools/profiling/visualizations.py\\u001b[0m in \\u001b[0;36m?\\u001b[0;34m(df, relative, **kwargs)\\u001b[0m\\n\\u001b[1;32m     61\\u001b[0m         \\u001b[0mx_col\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0;34m'substep'\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m     62\\u001b[0m         \\u001b[0mfig_df\\u001b[0m\\u001b[0;34m[\\u001b[0m\\u001b[0mx_col\\u001b[0m\\u001b[0;34m]\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0mfig_df\\u001b[0m\\u001b[0;34m[\\u001b[0m\\u001b[0mx_col\\u001b[0m\\u001b[0;34m]\\u001b[0m \\u001b[0;34m/\\u001b[0m \\u001b[0;36m2\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m     63\\u001b[0m \\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m     64\\u001b[0m     \\u001b[0;32mif\\u001b[0m \\u001b[0mrelative\\u001b[0m \\u001b[0;32mis\\u001b[0m \\u001b[0;32mTrue\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0;32m---> 65\\u001b[0;31m         \\u001b[0mfig_df\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0mfig_df\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0massign\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mrelative_psub_time\\u001b[0m\\u001b[0;34m=\\u001b[0m\\u001b[0mfig_df\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mgroupby\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mindexes\\u001b[0m\\u001b[0;34m[\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m-\\u001b[0m\\u001b[0;36m1\\u001b[0m\\u001b[0;34m]\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mpsub_time\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mapply\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0;32mlambda\\u001b[0m \\u001b[0mx\\u001b[0m\\u001b[0;34m:\\u001b[0m \\u001b[0mx\\u001b[0m \\u001b[0;34m/\\u001b[0m \\u001b[0mx\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0msum\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0m\\u001b[1;32m     66\\u001b[0m         \\u001b[0my_col\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0;34m'relative_psub_time'\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m     67\\u001b[0m     \\u001b[0;32melse\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m     68\\u001b[0m         \\u001b[0my_col\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0;34m'psub_time'\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\",\n      \"\\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/frame.py\\u001b[0m in \\u001b[0;36m?\\u001b[0;34m(self, **kwargs)\\u001b[0m\\n\\u001b[1;32m   5008\\u001b[0m         \\\"\\\"\\\"\\n\\u001b[1;32m   5009\\u001b[0m         \\u001b[0mdata\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0mself\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mcopy\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mdeep\\u001b[0m\\u001b[0;34m=\\u001b[0m\\u001b[0;32mNone\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   5010\\u001b[0m \\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   5011\\u001b[0m         \\u001b[0;32mfor\\u001b[0m \\u001b[0mk\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mv\\u001b[0m \\u001b[0;32min\\u001b[0m \\u001b[0mkwargs\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mitems\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0;32m-> 5012\\u001b[0;31m             \\u001b[0mdata\\u001b[0m\\u001b[0;34m[\\u001b[0m\\u001b[0mk\\u001b[0m\\u001b[0;34m]\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0mcom\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mapply_if_callable\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mv\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mdata\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0m\\u001b[1;32m   5013\\u001b[0m         \\u001b[0;32mreturn\\u001b[0m \\u001b[0mdata\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\",\n      \"\\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/frame.py\\u001b[0m in \\u001b[0;36m?\\u001b[0;34m(self, key, value)\\u001b[0m\\n\\u001b[1;32m   4087\\u001b[0m             \\u001b[0;31m# Column to set is duplicated\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   4088\\u001b[0m             \\u001b[0mself\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0m_setitem_array\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0;34m[\\u001b[0m\\u001b[0mkey\\u001b[0m\\u001b[0;34m]\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mvalue\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   4089\\u001b[0m         \\u001b[0;32melse\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   4090\\u001b[0m             \\u001b[0;31m# set column\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0;32m-> 4091\\u001b[0;31m             \\u001b[0mself\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0m_set_item\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mkey\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mvalue\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0m\",\n      \"\\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/frame.py\\u001b[0m in \\u001b[0;36m?\\u001b[0;34m(self, key, value)\\u001b[0m\\n\\u001b[1;32m   4296\\u001b[0m \\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   4297\\u001b[0m         \\u001b[0mSeries\\u001b[0m\\u001b[0;34m/\\u001b[0m\\u001b[0mTimeSeries\\u001b[0m \\u001b[0mwill\\u001b[0m \\u001b[0mbe\\u001b[0m \\u001b[0mconformed\\u001b[0m \\u001b[0mto\\u001b[0m \\u001b[0mthe\\u001b[0m \\u001b[0mDataFrames\\u001b[0m \\u001b[0mindex\\u001b[0m \\u001b[0mto\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   4298\\u001b[0m         \\u001b[0mensure\\u001b[0m \\u001b[0mhomogeneity\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   4299\\u001b[0m         \\\"\\\"\\\"\\n\\u001b[0;32m-> 4300\\u001b[0;31m         \\u001b[0mvalue\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mrefs\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0mself\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0m_sanitize_column\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mvalue\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0m\\u001b[1;32m   4301\\u001b[0m \\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   4302\\u001b[0m         if (\\n\\u001b[1;32m   4303\\u001b[0m             \\u001b[0mkey\\u001b[0m \\u001b[0;32min\\u001b[0m \\u001b[0mself\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mcolumns\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\",\n      \"\\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/frame.py\\u001b[0m in \\u001b[0;36m?\\u001b[0;34m(self, value)\\u001b[0m\\n\\u001b[1;32m   5032\\u001b[0m         \\u001b[0;32massert\\u001b[0m \\u001b[0;32mnot\\u001b[0m \\u001b[0misinstance\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mvalue\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mDataFrame\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   5033\\u001b[0m         \\u001b[0;32mif\\u001b[0m \\u001b[0mis_dict_like\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mvalue\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   5034\\u001b[0m             \\u001b[0;32mif\\u001b[0m \\u001b[0;32mnot\\u001b[0m \\u001b[0misinstance\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mvalue\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mSeries\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   5035\\u001b[0m                 \\u001b[0mvalue\\u001b[0m \\u001b[0;34m=\\u001b[0m \\u001b[0mSeries\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mvalue\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0;32m-> 5036\\u001b[0;31m             \\u001b[0;32mreturn\\u001b[0m \\u001b[0m_reindex_for_setitem\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mvalue\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mself\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mindex\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0m\\u001b[1;32m   5037\\u001b[0m \\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   5038\\u001b[0m         \\u001b[0;32mif\\u001b[0m \\u001b[0mis_list_like\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mvalue\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m   5039\\u001b[0m             \\u001b[0mcom\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mrequire_length_match\\u001b[0m\\u001b[0;34m(\\u001b[0m\\u001b[0mvalue\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0mself\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mindex\\u001b[0m\\u001b[0;34m)\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\",\n      \"\\u001b[0;32m/opt/homebrew/Caskroom/miniconda/base/lib/python3.11/site-packages/pandas/core/frame.py\\u001b[0m in \\u001b[0;36m?\\u001b[0;34m(value, index)\\u001b[0m\\n\\u001b[1;32m  12307\\u001b[0m         \\u001b[0;32mif\\u001b[0m \\u001b[0;32mnot\\u001b[0m \\u001b[0mvalue\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mindex\\u001b[0m\\u001b[0;34m.\\u001b[0m\\u001b[0mis_unique\\u001b[0m\\u001b[0;34m:\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m  12308\\u001b[0m             \\u001b[0;31m# duplicate axis\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m  12309\\u001b[0m             \\u001b[0;32mraise\\u001b[0m \\u001b[0merr\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m  12310\\u001b[0m \\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[0;32m> 12311\\u001b[0;31m         raise TypeError(\\n\\u001b[0m\\u001b[1;32m  12312\\u001b[0m             \\u001b[0;34m\\\"incompatible index of inserted column with frame index\\\"\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\\u001b[1;32m  12313\\u001b[0m         ) from err\\n\\u001b[1;32m  12314\\u001b[0m     \\u001b[0;32mreturn\\u001b[0m \\u001b[0mreindexed_value\\u001b[0m\\u001b[0;34m,\\u001b[0m \\u001b[0;32mNone\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0;34m\\u001b[0m\\u001b[0m\\n\",\n      \"\\u001b[0;31mTypeError\\u001b[0m: incompatible index of inserted column with frame index\"\n     ]\n    }\n   ],\n   \"source\": [\n    \"from cadCAD_tools.profiling.visualizations import visualize_substep_impact\\n\",\n    \"\\n\",\n    \"visualize_substep_impact(df, relative=True)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [\n    {\n     \"data\": {\n      \"application/vnd.jupyter.widget-view+json\": {\n       \"model_id\": \"c7a8382fce234affa682e5be26089cba\",\n       \"version_major\": 2,\n       \"version_minor\": 0\n      },\n      \"text/plain\": [\n       \"HBox(children=(FloatProgress(value=0.0, max=600.0), HTML(value='')))\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    },\n    {\n     \"name\": \"stdout\",\n     \"output_type\": \"stream\",\n     \"text\": [\n      \"\\n\"\n     ]\n    },\n    {\n     \"data\": {\n      \"application/vnd.plotly.v1+json\": {\n       \"config\": {\n        \"plotlyServerURL\": \"https://plot.ly\"\n       },\n       \"data\": [\n        {\n         \"alignmentgroup\": \"True\",\n         \"hovertemplate\": \"substep_label=%{x}<br>psub_time=%{y}<extra></extra>\",\n         \"legendgroup\": \"\",\n         \"marker\": {\n          \"color\": \"#636efa\"\n         },\n         \"name\": \"\",\n         \"notched\": false,\n         \"offsetgroup\": \"\",\n         \"orientation\": \"v\",\n         \"showlegend\": false,\n         \"type\": \"box\",\n         \"x\": [\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\",\n          \"Lotka-Volterra Equations\",\n          \"Do Nothing\"\n         ],\n         \"x0\": \" \",\n         \"xaxis\": \"x\",\n         \"y\": [\n          0.000213623046875,\n          0.0001201629638671875,\n          0.00015401840209960938,\n          0.00011467933654785156,\n          0.0001506805419921875,\n          0.00019168853759765625,\n          0.0001285076141357422,\n          0.00009202957153320312,\n          0.00012993812561035156,\n          0.00017142295837402344,\n          0.0001304149627685547,\n          0.00010156631469726562,\n          0.00013756752014160156,\n          0.00010561943054199219,\n          0.00011491775512695312,\n          0.00008702278137207031,\n          0.00010752677917480469,\n          0.000087738037109375,\n          0.00010800361633300781,\n          0.00008916854858398438,\n          0.00010633468627929688,\n          0.00008869171142578125,\n          0.00014901161193847656,\n          0.0001392364501953125,\n          0.0001914501190185547,\n          0.00014710426330566406,\n          0.00024271011352539062,\n          0.00014662742614746094,\n          0.00018787384033203125,\n          0.00013256072998046875,\n          0.00008869171142578125,\n          0.00011134147644042969,\n          0.00015592575073242188,\n          0.000152587890625,\n          0.000202178955078125,\n          0.00018024444580078125,\n          0.00020051002502441406,\n          0.0001697540283203125,\n          0.00019931793212890625,\n          0.00009608268737792969,\n          0.00011682510375976562,\n          0.00009942054748535156,\n          0.00013136863708496094,\n          0.00010061264038085938,\n          0.00019669532775878906,\n          0.00010061264038085938,\n          0.00012111663818359375,\n          0.00009369850158691406,\n          0.00012755393981933594,\n          0.00010037422180175781,\n          0.00011301040649414062,\n          0.00008893013000488281,\n          0.00010991096496582031,\n          0.0001068115234375,\n          0.00008726119995117188,\n          0.00010848045349121094,\n          0.00008988380432128906,\n          0.0001125335693359375,\n          0.00009012222290039062,\n          0.000156402587890625,\n          0.00009083747863769531,\n          0.00011324882507324219,\n          0.0001666545867919922,\n          0.00008797645568847656,\n          0.00011277198791503906,\n          0.00008821487426757812,\n          0.00011610984802246094,\n          0.00009012222290039062,\n          0.00011301040649414062,\n          0.00009131431579589844,\n          0.00011110305786132812,\n          0.00019431114196777344,\n          0.00017762184143066406,\n          0.00022673606872558594,\n          0.0001709461212158203,\n          0.0001926422119140625,\n          0.0001010894775390625,\n          0.00023603439331054688,\n          0.0001704692840576172,\n          0.00019288063049316406,\n          0.0001239776611328125,\n          0.0001308917999267578,\n          0.000095367431640625,\n          0.0001480579376220703,\n          0.00017189979553222656,\n          0.0002257823944091797,\n          0.0001761913299560547,\n          0.00017023086547851562,\n          0.00009751319885253906,\n          0.00013589859008789062,\n          0.00014352798461914062,\n          0.00016808509826660156,\n          0.0001347064971923828,\n          0.00009989738464355469,\n          0.00013446807861328125,\n          0.00010204315185546875,\n          0.00018835067749023438,\n          0.00020051002502441406,\n          0.00018072128295898438,\n          0.0001316070556640625,\n          0.00015974044799804688,\n          0.00010895729064941406,\n          0.00013685226440429688,\n          0.00022935867309570312,\n          0.00015401840209960938,\n          0.0001583099365234375,\n          0.0001308917999267578,\n          0.0001842975616455078,\n          0.00022077560424804688,\n          0.0002543926239013672,\n          0.0001125335693359375,\n          0.00014591217041015625,\n          0.00009846687316894531,\n          0.00015211105346679688,\n          0.00011444091796875,\n          0.0001571178436279297,\n          0.00011205673217773438,\n          0.00009799003601074219,\n          0.00014448165893554688,\n          0.00011873245239257812,\n          0.0001544952392578125,\n          0.00011467933654785156,\n          0.00014662742614746094,\n          0.000091552734375,\n          0.00011205673217773438,\n          0.00008893013000488281,\n          0.00010895729064941406,\n          0.000091552734375,\n          0.00022649765014648438,\n          0.0001556873321533203,\n          0.00020194053649902344,\n          0.00016307830810546875,\n          0.0001392364501953125,\n          0.00014901161193847656,\n          0.00009179115295410156,\n          0.00011992454528808594,\n          0.00008845329284667969,\n          0.00011539459228515625,\n          0.00009012222290039062,\n          0.00011348724365234375,\n          0.00009369850158691406,\n          0.00012159347534179688,\n          0.00009441375732421875,\n          0.00011110305786132812,\n          0.0001590251922607422,\n          0.00013375282287597656,\n          0.00010704994201660156,\n          0.0001914501190185547,\n          0.00009846687316894531,\n          0.0001327991485595703,\n          0.00009322166442871094,\n          0.00012731552124023438,\n          0.00010514259338378906,\n          0.0001289844512939453,\n          0.00010466575622558594,\n          0.0001327991485595703,\n          0.00010657310485839844,\n          0.00010943412780761719,\n          0.00010657310485839844,\n          0.00010466575622558594,\n          0.000102996826171875,\n          0.00010466575622558594,\n          0.00014853477478027344,\n          0.000091552734375,\n          0.00011038780212402344,\n          0.00008916854858398438,\n          0.00010943412780761719,\n          0.00008988380432128906,\n          0.00011157989501953125,\n          0.00009131431579589844,\n          0.00011992454528808594,\n          0.00008869171142578125,\n          0.00012183189392089844,\n          0.00009393692016601562,\n          0.00011992454528808594,\n          0.00009942054748535156,\n          0.00012040138244628906,\n          0.00009560585021972656,\n          0.0001232624053955078,\n          0.00015878677368164062,\n          0.0001010894775390625,\n          0.00016689300537109375,\n          0.0001246929168701172,\n          0.00015854835510253906,\n          0.0000972747802734375,\n          0.0001361370086669922,\n          0.00011110305786132812,\n          0.0001399517059326172,\n          0.00011205673217773438,\n          0.0001361370086669922,\n          0.0001087188720703125,\n          0.00014519691467285156,\n          0.0001270771026611328,\n          0.0001575946807861328,\n          0.00013637542724609375,\n          0.00016641616821289062,\n          0.00015592575073242188,\n          0.00025272369384765625,\n          0.00021958351135253906,\n          0.00026488304138183594,\n          0.0002071857452392578,\n          0.00023436546325683594,\n          0.00017642974853515625,\n          0.0001838207244873047,\n          0.0002167224884033203,\n          0.0001590251922607422,\n          0.00019931793212890625,\n          0.0001480579376220703,\n          0.00021839141845703125,\n          0.00009036064147949219,\n          0.0001125335693359375,\n          0.00008678436279296875,\n          0.00010776519775390625,\n          0.00010728836059570312,\n          0.00012302398681640625,\n          0.00009584426879882812,\n          0.00021028518676757812,\n          0.00011873245239257812,\n          0.0001666545867919922,\n          0.00012159347534179688,\n          0.00014901161193847656,\n          0.000091552734375,\n          0.00020360946655273438,\n          0.00009274482727050781,\n          0.00011324882507324219,\n          0.00010752677917480469,\n          0.0001068115234375,\n          0.00010609626770019531,\n          0.00010728836059570312,\n          0.00010395050048828125,\n          0.00010228157043457031,\n          0.00010275840759277344,\n          0.0001404285430908203,\n          0.00014162063598632812,\n          0.00011277198791503906,\n          0.00008702278137207031,\n          0.00010800361633300781,\n          0.00009274482727050781,\n          0.00011706352233886719,\n          0.00012063980102539062,\n          0.00010037422180175781,\n          0.0001308917999267578,\n          0.00014257431030273438,\n          0.0001671314239501953,\n          0.00011968612670898438,\n          0.00020265579223632812,\n          0.00010561943054199219,\n          0.00013875961303710938,\n          0.00009465217590332031,\n          0.0001327991485595703,\n          0.00009083747863769531,\n          0.00011110305786132812,\n          0.00009179115295410156,\n          0.00011086463928222656,\n          0.00008916854858398438,\n          0.00011205673217773438,\n          0.00009322166442871094,\n          0.00011873245239257812,\n          0.00009393692016601562,\n          0.00011491775512695312,\n          0.0000934600830078125,\n          0.00011301040649414062,\n          0.0000896453857421875,\n          0.00011348724365234375,\n          0.00009202957153320312,\n          0.00011944770812988281,\n          0.00009369850158691406,\n          0.00011491775512695312,\n          0.00009107589721679688,\n          0.00011229515075683594,\n          0.00009298324584960938,\n          0.00011086463928222656,\n          0.00008749961853027344,\n          0.00010800361633300781,\n          0.0001232624053955078,\n          0.00011777877807617188,\n          0.00009417533874511719,\n          0.00011682510375976562,\n          0.0000934600830078125,\n          0.00011849403381347656,\n          0.0000934600830078125,\n          0.0002079010009765625,\n          0.00011277198791503906,\n          0.00014162063598632812,\n          0.00010633468627929688,\n          0.0001480579376220703,\n          0.00010156631469726562,\n          0.0001437664031982422,\n          0.00010728836059570312,\n          0.00013256072998046875,\n          0.00010037422180175781,\n          0.00014209747314453125,\n          0.00011348724365234375,\n          0.00012969970703125,\n          0.00012087821960449219,\n          0.00020265579223632812,\n          0.00011348724365234375,\n          0.00012826919555664062,\n          0.00012087821960449219,\n          0.00015234947204589844,\n          0.0001347064971923828,\n          0.00018405914306640625,\n          0.00011491775512695312,\n          0.0001621246337890625,\n          0.0001819133758544922,\n          0.0002601146697998047,\n          0.00009369850158691406,\n          0.00011801719665527344,\n          0.000087738037109375,\n          0.00010895729064941406,\n          0.00008702278137207031,\n          0.00015282630920410156,\n          0.000091552734375,\n          0.00010704994201660156,\n          0.00017380714416503906,\n          0.00010633468627929688,\n          0.0001049041748046875,\n          0.00010538101196289062,\n          0.00020003318786621094,\n          0.00009965896606445312,\n          0.00017690658569335938,\n          0.00010585784912109375,\n          0.00011301040649414062,\n          0.0000896453857421875,\n          0.00011324882507324219,\n          0.000087738037109375,\n          0.0001087188720703125,\n          0.00008797645568847656,\n          0.0001220703125,\n          0.00009107589721679688,\n          0.00018072128295898438,\n          0.00009250640869140625,\n          0.00011515617370605469,\n          0.00009202957153320312,\n          0.0001163482666015625,\n          0.00009417533874511719,\n          0.00013446807861328125,\n          0.000133514404296875,\n          0.00012373924255371094,\n          0.00009560585021972656,\n          0.00016570091247558594,\n          0.00009822845458984375,\n          0.00011491775512695312,\n          0.00008797645568847656,\n          0.00011205673217773438,\n          0.00012493133544921875,\n          0.00011706352233886719,\n          0.00008749961853027344,\n          0.00011515617370605469,\n          0.00009202957153320312,\n          0.00011515617370605469,\n          0.00008797645568847656,\n          0.0001304149627685547,\n          0.0001399517059326172,\n          0.0000896453857421875,\n          0.00011563301086425781,\n          0.00008749961853027344,\n          0.00028014183044433594,\n          0.00015473365783691406,\n          0.0002455711364746094,\n          0.00009822845458984375,\n          0.00011849403381347656,\n          0.00010967254638671875,\n          0.00009608268737792969,\n          0.00012183189392089844,\n          0.00009751319885253906,\n          0.0001163482666015625,\n          0.00009560585021972656,\n          0.00012946128845214844,\n          0.00009250640869140625,\n          0.00012731552124023438,\n          0.00009441375732421875,\n          0.00011610984802246094,\n          0.00008916854858398438,\n          0.00011181831359863281,\n          0.000091552734375,\n          0.00011038780212402344,\n          0.00011277198791503906,\n          0.00008869171142578125,\n          0.00011539459228515625,\n          0.00009298324584960938,\n          0.00011110305786132812,\n          0.0001621246337890625,\n          0.00010895729064941406,\n          0.0001938343048095703,\n          0.00013017654418945312,\n          0.0002396106719970703,\n          0.0001804828643798828,\n          0.00024771690368652344,\n          0.00018644332885742188,\n          0.00022339820861816406,\n          0.0001804828643798828,\n          0.00012922286987304688,\n          0.00009131431579589844,\n          0.00011396408081054688,\n          0.00009250640869140625,\n          0.00010943412780761719,\n          0.00008797645568847656,\n          0.0001773834228515625,\n          0.00009775161743164062,\n          0.00011801719665527344,\n          0.00008869171142578125,\n          0.00011372566223144531,\n          0.000091552734375,\n          0.00011324882507324219,\n          0.00008869171142578125,\n          0.0001385211944580078,\n          0.00011754035949707031,\n          0.00017523765563964844,\n          0.00011897087097167969,\n          0.00017452239990234375,\n          0.0001239776611328125,\n          0.00021696090698242188,\n          0.00009918212890625,\n          0.000194549560546875,\n          0.00012969970703125,\n          0.0001404285430908203,\n          0.00010585784912109375,\n          0.00013899803161621094,\n          0.00020956993103027344,\n          0.00011110305786132812,\n          0.00015592575073242188,\n          0.00011277198791503906,\n          0.00016570091247558594,\n          0.000118255615234375,\n          0.00016427040100097656,\n          0.00010848045349121094,\n          0.0001926422119140625,\n          0.00010442733764648438,\n          0.00011873245239257812,\n          0.00009393692016601562,\n          0.0002048015594482422,\n          0.00011372566223144531,\n          0.00011777877807617188,\n          0.00008821487426757812,\n          0.00010848045349121094,\n          0.000118255615234375,\n          0.00008797645568847656,\n          0.0001068115234375,\n          0.00008702278137207031,\n          0.00010848045349121094,\n          0.00008702278137207031,\n          0.00010657310485839844,\n          0.00010323524475097656,\n          0.00010466575622558594,\n          0.00010466575622558594,\n          0.00014543533325195312,\n          0.00009012222290039062,\n          0.00011730194091796875,\n          0.00009679794311523438,\n          0.0001373291015625,\n          0.00009655952453613281,\n          0.00013947486877441406,\n          0.00010848045349121094,\n          0.0001418590545654297,\n          0.00011372566223144531,\n          0.00011730194091796875,\n          0.00010013580322265625,\n          0.00012946128845214844,\n          0.00009417533874511719,\n          0.00009131431579589844,\n          0.00011944770812988281,\n          0.0001499652862548828,\n          0.00018453598022460938,\n          0.00009608268737792969,\n          0.00011372566223144531,\n          0.00008845329284667969,\n          0.00010895729064941406,\n          0.00008988380432128906,\n          0.000110626220703125,\n          0.00008916854858398438,\n          0.00011348724365234375,\n          0.00009608268737792969,\n          0.00011849403381347656,\n          0.00009632110595703125,\n          0.0001652240753173828,\n          0.00008821487426757812,\n          0.00010514259338378906,\n          0.00010514259338378906,\n          0.00011157989501953125,\n          0.00010824203491210938,\n          0.00008726119995117188,\n          0.00010466575622558594,\n          0.00012636184692382812,\n          0.00011277198791503906,\n          0.00024700164794921875,\n          0.00024008750915527344,\n          0.0002193450927734375,\n          0.00012564659118652344,\n          0.0001964569091796875,\n          0.0001780986785888672,\n          0.00010943412780761719,\n          0.00017118453979492188,\n          0.00011992454528808594,\n          0.0001575946807861328,\n          0.00011849403381347656,\n          0.00017213821411132812,\n          0.00015234947204589844,\n          0.000213623046875,\n          0.0001087188720703125,\n          0.0002143383026123047,\n          0.00009822845458984375,\n          0.00013637542724609375,\n          0.00008869171142578125,\n          0.00013566017150878906,\n          0.0001068115234375,\n          0.00014162063598632812,\n          0.00010228157043457031,\n          0.00014710426330566406,\n          0.00011134147644042969,\n          0.00015020370483398438,\n          0.00009369850158691406,\n          0.00011086463928222656,\n          0.00008702278137207031,\n          0.00010585784912109375,\n          0.00010895729064941406,\n          0.00008845329284667969,\n          0.00011157989501953125,\n          0.00008797645568847656,\n          0.00010561943054199219,\n          0.00012159347534179688,\n          0.00009918212890625,\n          0.00014972686767578125,\n          0.000118255615234375,\n          0.0001614093780517578,\n          0.000179290771484375,\n          0.00013327598571777344,\n          0.00010609626770019531,\n          0.0001900196075439453,\n          0.00010323524475097656,\n          0.00011467933654785156,\n          0.00008845329284667969,\n          0.0001087188720703125,\n          0.000087738037109375,\n          0.00010657310485839844,\n          0.0002090930938720703,\n          0.000152587890625,\n          0.00011324882507324219,\n          0.00014662742614746094,\n          0.00010895729064941406,\n          0.00011920928955078125,\n          0.00009107589721679688,\n          0.00011014938354492188,\n          0.00009107589721679688,\n          0.00010848045349121094,\n          0.00009965896606445312,\n          0.00012636184692382812,\n          0.00008916854858398438,\n          0.00010776519775390625,\n          0.00010395050048828125,\n          0.00010395050048828125,\n          0.00010323524475097656,\n          0.00010538101196289062,\n          0.00010156631469726562,\n          0.00011992454528808594,\n          0.00013327598571777344,\n          0.00008749961853027344,\n          0.00010895729064941406,\n          0.00010991096496582031,\n          0.00008702278137207031,\n          0.00010752677917480469,\n          0.00008940696716308594,\n          0.00011157989501953125,\n          0.00008940696716308594,\n          0.0001785755157470703,\n          0.00022172927856445312,\n          0.00017118453979492188,\n          0.0001888275146484375,\n          0.00015354156494140625,\n          0.00019621849060058594,\n          0.00009083747863769531,\n          0.000125885009765625,\n          0.00017023086547851562,\n          0.00018930435180664062,\n          0.00014972686767578125,\n          0.0001823902130126953,\n          0.00008821487426757812,\n          0.00011086463928222656,\n          0.000133514404296875,\n          0.00010800361633300781,\n          0.0001087188720703125,\n          0.0001087188720703125,\n          0.00008893013000488281,\n          0.00011014938354492188,\n          0.00008916854858398438,\n          0.00011229515075683594,\n          0.00009298324584960938,\n          0.00011229515075683594,\n          0.00009322166442871094,\n          0.00014138221740722656,\n          0.00014925003051757812,\n          0.00009775161743164062,\n          0.0001423358917236328,\n          0.00014090538024902344,\n          0.00010585784912109375,\n          0.00025200843811035156,\n          0.00014662742614746094,\n          0.00023126602172851562,\n          0.0001919269561767578,\n          0.0001289844512939453,\n          0.00009369850158691406,\n          0.00011134147644042969,\n          0.00008749961853027344,\n          0.00014328956604003906,\n          0.00008893013000488281,\n          0.0001251697540283203,\n          0.00009894371032714844,\n          0.0001347064971923828,\n          0.000110626220703125,\n          0.00014448165893554688,\n          0.00010967254638671875,\n          0.00012445449829101562,\n          0.00009179115295410156,\n          0.00013136863708496094,\n          0.00010323524475097656,\n          0.0001354217529296875,\n          0.00010395050048828125,\n          0.00013303756713867188,\n          0.00009608268737792969,\n          0.00018525123596191406,\n          0.00020241737365722656,\n          0.00019693374633789062,\n          0.00009775161743164062,\n          0.00012612342834472656,\n          0.0001068115234375,\n          0.00013828277587890625,\n          0.00011086463928222656,\n          0.0001506805419921875,\n          0.00009584426879882812,\n          0.00011897087097167969,\n          0.00009083747863769531,\n          0.000110626220703125,\n          0.000087738037109375,\n          0.0001068115234375,\n          0.00008726119995117188,\n          0.00010538101196289062,\n          0.00011134147644042969,\n          0.0002675056457519531,\n          0.00020623207092285156,\n          0.00024008750915527344,\n          0.00010466575622558594,\n          0.00013685226440429688,\n          0.00010228157043457031,\n          0.00014925003051757812,\n          0.00011682510375976562,\n          0.00014162063598632812,\n          0.00011038780212402344,\n          0.00014638900756835938,\n          0.00010395050048828125,\n          0.00011181831359863281,\n          0.00008797645568847656,\n          0.00011301040649414062,\n          0.000091552734375,\n          0.00016570091247558594,\n          0.00008821487426757812,\n          0.00010657310485839844,\n          0.00010538101196289062,\n          0.0001049041748046875,\n          0.00010418891906738281,\n          0.00010728836059570312,\n          0.00008678436279296875,\n          0.00010704994201660156,\n          0.00008702278137207031,\n          0.00010657310485839844,\n          0.00008869171142578125,\n          0.00011301040649414062,\n          0.00016117095947265625,\n          0.00009322166442871094,\n          0.00017786026000976562,\n          0.0001049041748046875,\n          0.00013518333435058594,\n          0.00013065338134765625,\n          0.000171661376953125,\n          0.00009131431579589844,\n          0.00011157989501953125,\n          0.00011658668518066406,\n          0.00009679794311523438,\n          0.00011324882507324219,\n          0.00009775161743164062,\n          0.00014066696166992188,\n          0.00010919570922851562,\n          0.00013399124145507812,\n          0.00016164779663085938,\n          0.0001366138458251953,\n          0.00009703636169433594,\n          0.0001354217529296875,\n          0.00009870529174804688,\n          0.00011730194091796875,\n          0.00009202957153320312,\n          0.00010800361633300781,\n          0.00010585784912109375,\n          0.00010752677917480469,\n          0.00009036064147949219,\n          0.00011610984802246094,\n          0.00009322166442871094,\n          0.00011324882507324219,\n          0.000095367431640625,\n          0.00011706352233886719,\n          0.00009131431579589844,\n          0.00011730194091796875,\n          0.000091552734375,\n          0.00011444091796875,\n          0.00009107589721679688,\n          0.00011539459228515625,\n          0.0000896453857421875,\n          0.00018787384033203125,\n          0.0002827644348144531,\n          0.0002124309539794922,\n          0.00017833709716796875,\n          0.00012111663818359375,\n          0.0001952648162841797,\n          0.00012826919555664062,\n          0.00015473365783691406,\n          0.00011467933654785156,\n          0.00015211105346679688,\n          0.00012373924255371094,\n          0.0001666545867919922,\n          0.0001437664031982422,\n          0.00011992454528808594,\n          0.00008726119995117188,\n          0.00010776519775390625,\n          0.00010347366333007812,\n          0.0001430511474609375,\n          0.00011301040649414062,\n          0.00015163421630859375,\n          0.00011229515075683594,\n          0.00014352798461914062,\n          0.00012302398681640625,\n          0.00012874603271484375,\n          0.00010561943054199219,\n          0.0001366138458251953,\n          0.00010538101196289062,\n          0.00013899803161621094,\n          0.00010728836059570312,\n          0.0001251697540283203,\n          0.00010442733764648438,\n          0.0001308917999267578,\n          0.00009226799011230469,\n          0.00013780593872070312,\n          0.00023245811462402344,\n          0.0001735687255859375,\n          0.0002543926239013672,\n          0.00016045570373535156,\n          0.0001266002655029297,\n          0.00009059906005859375,\n          0.00011539459228515625,\n          0.00020885467529296875,\n          0.00010657310485839844,\n          0.00013971328735351562,\n          0.00010585784912109375,\n          0.00011944770812988281,\n          0.00009942054748535156,\n          0.0001308917999267578,\n          0.00010585784912109375,\n          0.000164031982421875,\n          0.0001461505889892578,\n          0.0001628398895263672,\n          0.00011444091796875,\n          0.0001327991485595703,\n          0.00012350082397460938,\n          0.00016927719116210938,\n          0.0001957416534423828,\n          0.000194549560546875,\n          0.00010156631469726562,\n          0.0001347064971923828,\n          0.0001010894775390625,\n          0.00012493133544921875,\n          0.0001423358917236328,\n          0.00014901161193847656,\n          0.00020265579223632812,\n          0.00016736984252929688,\n          0.00009059906005859375,\n          0.000110626220703125,\n          0.00013017654418945312,\n          0.0001285076141357422,\n          0.00008726119995117188,\n          0.00011181831359863281,\n          0.00009250640869140625,\n          0.00011587142944335938,\n          0.00009012222290039062,\n          0.00012135505676269531,\n          0.00009083747863769531,\n          0.00017833709716796875,\n          0.00012063980102539062,\n          0.00014138221740722656,\n          0.00009298324584960938,\n          0.00010800361633300781,\n          0.00010776519775390625,\n          0.0001049041748046875,\n          0.00010514259338378906,\n          0.00010442733764648438,\n          0.00010418891906738281,\n          0.00010848045349121094,\n          0.00009202957153320312,\n          0.00010728836059570312,\n          0.00008702278137207031,\n          0.0001392364501953125,\n          0.00009322166442871094,\n          0.00010967254638671875,\n          0.00009322166442871094,\n          0.00010943412780761719,\n          0.00009298324584960938,\n          0.00011348724365234375,\n          0.00017499923706054688,\n          0.00011467933654785156,\n          0.00008821487426757812,\n          0.00011038780212402344,\n          0.00011181831359863281,\n          0.00011563301086425781,\n          0.00009274482727050781,\n          0.00011181831359863281,\n          0.00009107589721679688,\n          0.00009918212890625,\n          0.0001220703125,\n          0.0001361370086669922,\n          0.00013065338134765625,\n          0.00009632110595703125,\n          0.0001347064971923828,\n          0.00011515617370605469,\n          0.00014829635620117188,\n          0.00011491775512695312,\n          0.00014853477478027344,\n          0.00009274482727050781,\n          0.0001373291015625,\n          0.00009393692016601562,\n          0.00011038780212402344,\n          0.0000972747802734375,\n          0.0001285076141357422,\n          0.00010561943054199219,\n          0.00013065338134765625,\n          0.00010395050048828125,\n          0.00013637542724609375,\n          0.0001087188720703125,\n          0.00013375282287597656,\n          0.00009465217590332031,\n          0.0001277923583984375,\n          0.00010132789611816406,\n          0.00016951560974121094,\n          0.00009226799011230469,\n          0.00012826919555664062,\n          0.000102996826171875,\n          0.00012731552124023438,\n          0.00010132789611816406,\n          0.00012373924255371094,\n          0.000102996826171875,\n          0.00012636184692382812,\n          0.00010347366333007812,\n          0.0001842975616455078,\n          0.00010991096496582031,\n          0.00014448165893554688,\n          0.00010180473327636719,\n          0.00011444091796875,\n          0.000091552734375,\n          0.00010800361633300781,\n          0.00009584426879882812,\n          0.00021386146545410156,\n          0.0001087188720703125,\n          0.00012540817260742188,\n          0.00009655952453613281,\n          0.0001227855682373047,\n          0.00009703636169433594,\n          0.00011992454528808594,\n          0.00009775161743164062,\n          0.00014925003051757812,\n          0.00012946128845214844,\n          0.0002028942108154297,\n          0.00010919570922851562,\n          0.00015354156494140625,\n          0.0001323223114013672,\n          0.0001666545867919922,\n          0.00011444091796875,\n          0.00016546249389648438,\n          0.00010967254638671875,\n          0.0001437664031982422,\n          0.00011444091796875,\n          0.000148773193359375,\n          0.00010776519775390625,\n          0.00014591217041015625,\n          0.00011229515075683594,\n          0.00014781951904296875,\n          0.00011444091796875,\n          0.00020265579223632812,\n          0.00012302398681640625,\n          0.00016999244689941406,\n          0.00012874603271484375,\n          0.00009131431579589844,\n          0.00011491775512695312,\n          0.00009298324584960938,\n          0.00011348724365234375,\n          0.000091552734375,\n          0.00011420249938964844,\n          0.00009107589721679688,\n          0.00011587142944335938,\n          0.00009489059448242188,\n          0.00028252601623535156,\n          0.00011277198791503906,\n          0.00015974044799804688,\n          0.00012350082397460938,\n          0.0002543926239013672,\n          0.00012421607971191406,\n          0.00017333030700683594,\n          0.00012922286987304688,\n          0.0001709461212158203,\n          0.0001347064971923828,\n          0.00016045570373535156,\n          0.00011420249938964844,\n          0.0001659393310546875,\n          0.0001380443572998047,\n          0.00018286705017089844,\n          0.00013518333435058594,\n          0.00013184547424316406,\n          0.00009799003601074219,\n          0.00011754035949707031,\n          0.00009512901306152344,\n          0.00011682510375976562,\n          0.000095367431640625,\n          0.00011301040649414062,\n          0.0001456737518310547,\n          0.00011777877807617188,\n          0.00009226799011230469,\n          0.00011491775512695312,\n          0.00010228157043457031,\n          0.00014019012451171875,\n          0.00009489059448242188,\n          0.00011706352233886719,\n          0.00009369850158691406,\n          0.00011873245239257812,\n          0.000095367431640625,\n          0.00011777877807617188,\n          0.00009918212890625,\n          0.0001246929168701172,\n          0.00010037422180175781,\n          0.0001327991485595703,\n          0.00010728836059570312,\n          0.00015211105346679688,\n          0.00009965896606445312,\n          0.00012135505676269531,\n          0.00010752677917480469,\n          0.0001361370086669922,\n          0.00010728836059570312,\n          0.00013518333435058594,\n          0.00011610984802246094,\n          0.0001437664031982422,\n          0.00011324882507324219,\n          0.0001964569091796875,\n          0.00014281272888183594,\n          0.00012636184692382812,\n          0.00009489059448242188,\n          0.00011897087097167969,\n          0.00009775161743164062,\n          0.00012040138244628906,\n          0.00010371208190917969,\n          0.00012421607971191406,\n          0.00009894371032714844,\n          0.0001232624053955078,\n          0.00009989738464355469,\n          0.00013494491577148438,\n          0.00018644332885742188,\n          0.00010085105895996094,\n          0.00012087821960449219,\n          0.00010848045349121094,\n          0.000244140625,\n          0.00011134147644042969,\n          0.00015401840209960938,\n          0.00012230873107910156,\n          0.00016617774963378906,\n          0.0001347064971923828,\n          0.00017380714416503906,\n          0.00010704994201660156,\n          0.00014853477478027344,\n          0.00011348724365234375,\n          0.0001499652862548828,\n          0.0001068115234375,\n          0.00022482872009277344,\n          0.00011277198791503906,\n          0.00012564659118652344,\n          0.00009679794311523438,\n          0.0001227855682373047,\n          0.00009822845458984375,\n          0.0001342296600341797,\n          0.00010085105895996094,\n          0.0001251697540283203,\n          0.00010156631469726562,\n          0.0001239776611328125,\n          0.0001010894775390625,\n          0.00012230873107910156,\n          0.00009584426879882812,\n          0.00012230873107910156,\n          0.00013065338134765625,\n          0.0000972747802734375,\n          0.0001201629638671875,\n          0.00012636184692382812,\n          0.00016188621520996094,\n          0.00011801719665527344,\n          0.0001595020294189453,\n          0.00012803077697753906,\n          0.00016498565673828125,\n          0.00016260147094726562,\n          0.0001366138458251953,\n          0.0001678466796875,\n          0.00010371208190917969,\n          0.00012826919555664062,\n          0.00010085105895996094,\n          0.00012230873107910156,\n          0.00009870529174804688,\n          0.0001227855682373047,\n          0.00009965896606445312,\n          0.0001327991485595703,\n          0.0001747608184814453,\n          0.00011157989501953125,\n          0.00015974044799804688,\n          0.00016736984252929688,\n          0.0001087188720703125,\n          0.00016450881958007812,\n          0.0001583099365234375,\n          0.00017452239990234375,\n          0.0001418590545654297,\n          0.0001697540283203125,\n          0.00012636184692382812,\n          0.0001342296600341797,\n          0.00013113021850585938,\n          0.00028133392333984375,\n          0.0001742839813232422,\n          0.00016260147094726562,\n          0.00019931793212890625,\n          0.00014352798461914062,\n          0.00011610984802246094,\n          0.0001595020294189453,\n          0.00012040138244628906,\n          0.00016355514526367188,\n          0.00011706352233886719,\n          0.0002429485321044922,\n          0.0002560615539550781,\n          0.00023865699768066406,\n          0.0002372264862060547,\n          0.00023794174194335938,\n          0.00025963783264160156,\n          0.0002732276916503906,\n          0.00022602081298828125,\n          0.00021982192993164062,\n          0.00018334388732910156,\n          0.0002665519714355469,\n          0.00020265579223632812,\n          0.0002448558807373047,\n          0.00020599365234375,\n          0.00020885467529296875,\n          0.00017595291137695312,\n          0.00013256072998046875,\n          0.0002624988555908203,\n          0.0002818107604980469,\n          0.0002503395080566406,\n          0.0002300739288330078,\n          0.00014710426330566406,\n          0.00010418891906738281,\n          0.0001246929168701172,\n          0.00010251998901367188,\n          0.00013256072998046875,\n          0.000179290771484375,\n          0.00014162063598632812,\n          0.0002410411834716797,\n          0.0002498626708984375,\n          0.00024437904357910156,\n          0.000244140625,\n          0.00027251243591308594,\n          0.0002689361572265625,\n          0.00023174285888671875,\n          0.0002598762512207031,\n          0.00013017654418945312,\n          0.0001800060272216797,\n          0.00013637542724609375\n         ],\n         \"y0\": \" \",\n         \"yaxis\": \"y\"\n        }\n       ],\n       \"layout\": {\n        \"boxmode\": \"group\",\n        \"legend\": {\n         \"tracegroupgap\": 0\n        },\n        \"margin\": {\n         \"t\": 60\n        },\n        \"template\": {\n         \"data\": {\n          \"bar\": [\n           {\n            \"error_x\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"error_y\": {\n             \"color\": \"#2a3f5f\"\n            },\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             }\n            },\n            \"type\": \"bar\"\n           }\n          ],\n          \"barpolar\": [\n           {\n            \"marker\": {\n             \"line\": {\n              \"color\": \"#E5ECF6\",\n              \"width\": 0.5\n             }\n            },\n            \"type\": \"barpolar\"\n           }\n          ],\n          \"carpet\": [\n           {\n            \"aaxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"baxis\": {\n             \"endlinecolor\": \"#2a3f5f\",\n             \"gridcolor\": \"white\",\n             \"linecolor\": \"white\",\n             \"minorgridcolor\": \"white\",\n             \"startlinecolor\": \"#2a3f5f\"\n            },\n            \"type\": \"carpet\"\n           }\n          ],\n          \"choropleth\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"choropleth\"\n           }\n          ],\n          \"contour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"contour\"\n           }\n          ],\n          \"contourcarpet\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"contourcarpet\"\n           }\n          ],\n          \"heatmap\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmap\"\n           }\n          ],\n          \"heatmapgl\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"heatmapgl\"\n           }\n          ],\n          \"histogram\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"histogram\"\n           }\n          ],\n          \"histogram2d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2d\"\n           }\n          ],\n          \"histogram2dcontour\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"histogram2dcontour\"\n           }\n          ],\n          \"mesh3d\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"type\": \"mesh3d\"\n           }\n          ],\n          \"parcoords\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"parcoords\"\n           }\n          ],\n          \"pie\": [\n           {\n            \"automargin\": true,\n            \"type\": \"pie\"\n           }\n          ],\n          \"scatter\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter\"\n           }\n          ],\n          \"scatter3d\": [\n           {\n            \"line\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatter3d\"\n           }\n          ],\n          \"scattercarpet\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattercarpet\"\n           }\n          ],\n          \"scattergeo\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergeo\"\n           }\n          ],\n          \"scattergl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattergl\"\n           }\n          ],\n          \"scattermapbox\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scattermapbox\"\n           }\n          ],\n          \"scatterpolar\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolar\"\n           }\n          ],\n          \"scatterpolargl\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterpolargl\"\n           }\n          ],\n          \"scatterternary\": [\n           {\n            \"marker\": {\n             \"colorbar\": {\n              \"outlinewidth\": 0,\n              \"ticks\": \"\"\n             }\n            },\n            \"type\": \"scatterternary\"\n           }\n          ],\n          \"surface\": [\n           {\n            \"colorbar\": {\n             \"outlinewidth\": 0,\n             \"ticks\": \"\"\n            },\n            \"colorscale\": [\n             [\n              0,\n              \"#0d0887\"\n             ],\n             [\n              0.1111111111111111,\n              \"#46039f\"\n             ],\n             [\n              0.2222222222222222,\n              \"#7201a8\"\n             ],\n             [\n              0.3333333333333333,\n              \"#9c179e\"\n             ],\n             [\n              0.4444444444444444,\n              \"#bd3786\"\n             ],\n             [\n              0.5555555555555556,\n              \"#d8576b\"\n             ],\n             [\n              0.6666666666666666,\n              \"#ed7953\"\n             ],\n             [\n              0.7777777777777778,\n              \"#fb9f3a\"\n             ],\n             [\n              0.8888888888888888,\n              \"#fdca26\"\n             ],\n             [\n              1,\n              \"#f0f921\"\n             ]\n            ],\n            \"type\": \"surface\"\n           }\n          ],\n          \"table\": [\n           {\n            \"cells\": {\n             \"fill\": {\n              \"color\": \"#EBF0F8\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"header\": {\n             \"fill\": {\n              \"color\": \"#C8D4E3\"\n             },\n             \"line\": {\n              \"color\": \"white\"\n             }\n            },\n            \"type\": \"table\"\n           }\n          ]\n         },\n         \"layout\": {\n          \"annotationdefaults\": {\n           \"arrowcolor\": \"#2a3f5f\",\n           \"arrowhead\": 0,\n           \"arrowwidth\": 1\n          },\n          \"autotypenumbers\": \"strict\",\n          \"coloraxis\": {\n           \"colorbar\": {\n            \"outlinewidth\": 0,\n            \"ticks\": \"\"\n           }\n          },\n          \"colorscale\": {\n           \"diverging\": [\n            [\n             0,\n             \"#8e0152\"\n            ],\n            [\n             0.1,\n             \"#c51b7d\"\n            ],\n            [\n             0.2,\n             \"#de77ae\"\n            ],\n            [\n             0.3,\n             \"#f1b6da\"\n            ],\n            [\n             0.4,\n             \"#fde0ef\"\n            ],\n            [\n             0.5,\n             \"#f7f7f7\"\n            ],\n            [\n             0.6,\n             \"#e6f5d0\"\n            ],\n            [\n             0.7,\n             \"#b8e186\"\n            ],\n            [\n             0.8,\n             \"#7fbc41\"\n            ],\n            [\n             0.9,\n             \"#4d9221\"\n            ],\n            [\n             1,\n             \"#276419\"\n            ]\n           ],\n           \"sequential\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ],\n           \"sequentialminus\": [\n            [\n             0,\n             \"#0d0887\"\n            ],\n            [\n             0.1111111111111111,\n             \"#46039f\"\n            ],\n            [\n             0.2222222222222222,\n             \"#7201a8\"\n            ],\n            [\n             0.3333333333333333,\n             \"#9c179e\"\n            ],\n            [\n             0.4444444444444444,\n             \"#bd3786\"\n            ],\n            [\n             0.5555555555555556,\n             \"#d8576b\"\n            ],\n            [\n             0.6666666666666666,\n             \"#ed7953\"\n            ],\n            [\n             0.7777777777777778,\n             \"#fb9f3a\"\n            ],\n            [\n             0.8888888888888888,\n             \"#fdca26\"\n            ],\n            [\n             1,\n             \"#f0f921\"\n            ]\n           ]\n          },\n          \"colorway\": [\n           \"#636efa\",\n           \"#EF553B\",\n           \"#00cc96\",\n           \"#ab63fa\",\n           \"#FFA15A\",\n           \"#19d3f3\",\n           \"#FF6692\",\n           \"#B6E880\",\n           \"#FF97FF\",\n           \"#FECB52\"\n          ],\n          \"font\": {\n           \"color\": \"#2a3f5f\"\n          },\n          \"geo\": {\n           \"bgcolor\": \"white\",\n           \"lakecolor\": \"white\",\n           \"landcolor\": \"#E5ECF6\",\n           \"showlakes\": true,\n           \"showland\": true,\n           \"subunitcolor\": \"white\"\n          },\n          \"hoverlabel\": {\n           \"align\": \"left\"\n          },\n          \"hovermode\": \"closest\",\n          \"mapbox\": {\n           \"style\": \"light\"\n          },\n          \"paper_bgcolor\": \"white\",\n          \"plot_bgcolor\": \"#E5ECF6\",\n          \"polar\": {\n           \"angularaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"radialaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"scene\": {\n           \"xaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"yaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           },\n           \"zaxis\": {\n            \"backgroundcolor\": \"#E5ECF6\",\n            \"gridcolor\": \"white\",\n            \"gridwidth\": 2,\n            \"linecolor\": \"white\",\n            \"showbackground\": true,\n            \"ticks\": \"\",\n            \"zerolinecolor\": \"white\"\n           }\n          },\n          \"shapedefaults\": {\n           \"line\": {\n            \"color\": \"#2a3f5f\"\n           }\n          },\n          \"ternary\": {\n           \"aaxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"baxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           },\n           \"bgcolor\": \"#E5ECF6\",\n           \"caxis\": {\n            \"gridcolor\": \"white\",\n            \"linecolor\": \"white\",\n            \"ticks\": \"\"\n           }\n          },\n          \"title\": {\n           \"x\": 0.05\n          },\n          \"xaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          },\n          \"yaxis\": {\n           \"automargin\": true,\n           \"gridcolor\": \"white\",\n           \"linecolor\": \"white\",\n           \"ticks\": \"\",\n           \"title\": {\n            \"standoff\": 15\n           },\n           \"zerolinecolor\": \"white\",\n           \"zerolinewidth\": 2\n          }\n         }\n        },\n        \"xaxis\": {\n         \"anchor\": \"y\",\n         \"domain\": [\n          0,\n          1\n         ],\n         \"title\": {\n          \"text\": \"substep_label\"\n         }\n        },\n        \"yaxis\": {\n         \"anchor\": \"x\",\n         \"domain\": [\n          0,\n          1\n         ],\n         \"title\": {\n          \"text\": \"psub_time\"\n         }\n        }\n       }\n      },\n      \"text/html\": [\n       \"<div>                            <div id=\\\"d482f90f-954b-4a6d-8d1c-8efb3ab82990\\\" class=\\\"plotly-graph-div\\\" style=\\\"height:525px; width:100%;\\\"></div>            <script type=\\\"text/javascript\\\">                require([\\\"plotly\\\"], function(Plotly) {                    window.PLOTLYENV=window.PLOTLYENV || {};                                    if (document.getElementById(\\\"d482f90f-954b-4a6d-8d1c-8efb3ab82990\\\")) {                    Plotly.newPlot(                        \\\"d482f90f-954b-4a6d-8d1c-8efb3ab82990\\\",                        [{\\\"alignmentgroup\\\": \\\"True\\\", \\\"hovertemplate\\\": \\\"substep_label=%{x}<br>psub_time=%{y}<extra></extra>\\\", \\\"legendgroup\\\": \\\"\\\", \\\"marker\\\": {\\\"color\\\": \\\"#636efa\\\"}, \\\"name\\\": \\\"\\\", \\\"notched\\\": false, \\\"offsetgroup\\\": \\\"\\\", \\\"orientation\\\": \\\"v\\\", \\\"showlegend\\\": false, \\\"type\\\": \\\"box\\\", \\\"x\\\": [\\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\", \\\"Lotka-Volterra Equations\\\", \\\"Do Nothing\\\"], \\\"x0\\\": \\\" \\\", \\\"xaxis\\\": \\\"x\\\", \\\"y\\\": [0.000213623046875, 0.0001201629638671875, 0.00015401840209960938, 0.00011467933654785156, 0.0001506805419921875, 0.00019168853759765625, 0.0001285076141357422, 9.202957153320312e-05, 0.00012993812561035156, 0.00017142295837402344, 0.0001304149627685547, 0.00010156631469726562, 0.00013756752014160156, 0.00010561943054199219, 0.00011491775512695312, 8.702278137207031e-05, 0.00010752677917480469, 8.7738037109375e-05, 0.00010800361633300781, 8.916854858398438e-05, 0.00010633468627929688, 8.869171142578125e-05, 0.00014901161193847656, 0.0001392364501953125, 0.0001914501190185547, 0.00014710426330566406, 0.00024271011352539062, 0.00014662742614746094, 0.00018787384033203125, 0.00013256072998046875, 8.869171142578125e-05, 0.00011134147644042969, 0.00015592575073242188, 0.000152587890625, 0.000202178955078125, 0.00018024444580078125, 0.00020051002502441406, 0.0001697540283203125, 0.00019931793212890625, 9.608268737792969e-05, 0.00011682510375976562, 9.942054748535156e-05, 0.00013136863708496094, 0.00010061264038085938, 0.00019669532775878906, 0.00010061264038085938, 0.00012111663818359375, 9.369850158691406e-05, 0.00012755393981933594, 0.00010037422180175781, 0.00011301040649414062, 8.893013000488281e-05, 0.00010991096496582031, 0.0001068115234375, 8.726119995117188e-05, 0.00010848045349121094, 8.988380432128906e-05, 0.0001125335693359375, 9.012222290039062e-05, 0.000156402587890625, 9.083747863769531e-05, 0.00011324882507324219, 0.0001666545867919922, 8.797645568847656e-05, 0.00011277198791503906, 8.821487426757812e-05, 0.00011610984802246094, 9.012222290039062e-05, 0.00011301040649414062, 9.131431579589844e-05, 0.00011110305786132812, 0.00019431114196777344, 0.00017762184143066406, 0.00022673606872558594, 0.0001709461212158203, 0.0001926422119140625, 0.0001010894775390625, 0.00023603439331054688, 0.0001704692840576172, 0.00019288063049316406, 0.0001239776611328125, 0.0001308917999267578, 9.5367431640625e-05, 0.0001480579376220703, 0.00017189979553222656, 0.0002257823944091797, 0.0001761913299560547, 0.00017023086547851562, 9.751319885253906e-05, 0.00013589859008789062, 0.00014352798461914062, 0.00016808509826660156, 0.0001347064971923828, 9.989738464355469e-05, 0.00013446807861328125, 0.00010204315185546875, 0.00018835067749023438, 0.00020051002502441406, 0.00018072128295898438, 0.0001316070556640625, 0.00015974044799804688, 0.00010895729064941406, 0.00013685226440429688, 0.00022935867309570312, 0.00015401840209960938, 0.0001583099365234375, 0.0001308917999267578, 0.0001842975616455078, 0.00022077560424804688, 0.0002543926239013672, 0.0001125335693359375, 0.00014591217041015625, 9.846687316894531e-05, 0.00015211105346679688, 0.00011444091796875, 0.0001571178436279297, 0.00011205673217773438, 9.799003601074219e-05, 0.00014448165893554688, 0.00011873245239257812, 0.0001544952392578125, 0.00011467933654785156, 0.00014662742614746094, 9.1552734375e-05, 0.00011205673217773438, 8.893013000488281e-05, 0.00010895729064941406, 9.1552734375e-05, 0.00022649765014648438, 0.0001556873321533203, 0.00020194053649902344, 0.00016307830810546875, 0.0001392364501953125, 0.00014901161193847656, 9.179115295410156e-05, 0.00011992454528808594, 8.845329284667969e-05, 0.00011539459228515625, 9.012222290039062e-05, 0.00011348724365234375, 9.369850158691406e-05, 0.00012159347534179688, 9.441375732421875e-05, 0.00011110305786132812, 0.0001590251922607422, 0.00013375282287597656, 0.00010704994201660156, 0.0001914501190185547, 9.846687316894531e-05, 0.0001327991485595703, 9.322166442871094e-05, 0.00012731552124023438, 0.00010514259338378906, 0.0001289844512939453, 0.00010466575622558594, 0.0001327991485595703, 0.00010657310485839844, 0.00010943412780761719, 0.00010657310485839844, 0.00010466575622558594, 0.000102996826171875, 0.00010466575622558594, 0.00014853477478027344, 9.1552734375e-05, 0.00011038780212402344, 8.916854858398438e-05, 0.00010943412780761719, 8.988380432128906e-05, 0.00011157989501953125, 9.131431579589844e-05, 0.00011992454528808594, 8.869171142578125e-05, 0.00012183189392089844, 9.393692016601562e-05, 0.00011992454528808594, 9.942054748535156e-05, 0.00012040138244628906, 9.560585021972656e-05, 0.0001232624053955078, 0.00015878677368164062, 0.0001010894775390625, 0.00016689300537109375, 0.0001246929168701172, 0.00015854835510253906, 9.72747802734375e-05, 0.0001361370086669922, 0.00011110305786132812, 0.0001399517059326172, 0.00011205673217773438, 0.0001361370086669922, 0.0001087188720703125, 0.00014519691467285156, 0.0001270771026611328, 0.0001575946807861328, 0.00013637542724609375, 0.00016641616821289062, 0.00015592575073242188, 0.00025272369384765625, 0.00021958351135253906, 0.00026488304138183594, 0.0002071857452392578, 0.00023436546325683594, 0.00017642974853515625, 0.0001838207244873047, 0.0002167224884033203, 0.0001590251922607422, 0.00019931793212890625, 0.0001480579376220703, 0.00021839141845703125, 9.036064147949219e-05, 0.0001125335693359375, 8.678436279296875e-05, 0.00010776519775390625, 0.00010728836059570312, 0.00012302398681640625, 9.584426879882812e-05, 0.00021028518676757812, 0.00011873245239257812, 0.0001666545867919922, 0.00012159347534179688, 0.00014901161193847656, 9.1552734375e-05, 0.00020360946655273438, 9.274482727050781e-05, 0.00011324882507324219, 0.00010752677917480469, 0.0001068115234375, 0.00010609626770019531, 0.00010728836059570312, 0.00010395050048828125, 0.00010228157043457031, 0.00010275840759277344, 0.0001404285430908203, 0.00014162063598632812, 0.00011277198791503906, 8.702278137207031e-05, 0.00010800361633300781, 9.274482727050781e-05, 0.00011706352233886719, 0.00012063980102539062, 0.00010037422180175781, 0.0001308917999267578, 0.00014257431030273438, 0.0001671314239501953, 0.00011968612670898438, 0.00020265579223632812, 0.00010561943054199219, 0.00013875961303710938, 9.465217590332031e-05, 0.0001327991485595703, 9.083747863769531e-05, 0.00011110305786132812, 9.179115295410156e-05, 0.00011086463928222656, 8.916854858398438e-05, 0.00011205673217773438, 9.322166442871094e-05, 0.00011873245239257812, 9.393692016601562e-05, 0.00011491775512695312, 9.34600830078125e-05, 0.00011301040649414062, 8.96453857421875e-05, 0.00011348724365234375, 9.202957153320312e-05, 0.00011944770812988281, 9.369850158691406e-05, 0.00011491775512695312, 9.107589721679688e-05, 0.00011229515075683594, 9.298324584960938e-05, 0.00011086463928222656, 8.749961853027344e-05, 0.00010800361633300781, 0.0001232624053955078, 0.00011777877807617188, 9.417533874511719e-05, 0.00011682510375976562, 9.34600830078125e-05, 0.00011849403381347656, 9.34600830078125e-05, 0.0002079010009765625, 0.00011277198791503906, 0.00014162063598632812, 0.00010633468627929688, 0.0001480579376220703, 0.00010156631469726562, 0.0001437664031982422, 0.00010728836059570312, 0.00013256072998046875, 0.00010037422180175781, 0.00014209747314453125, 0.00011348724365234375, 0.00012969970703125, 0.00012087821960449219, 0.00020265579223632812, 0.00011348724365234375, 0.00012826919555664062, 0.00012087821960449219, 0.00015234947204589844, 0.0001347064971923828, 0.00018405914306640625, 0.00011491775512695312, 0.0001621246337890625, 0.0001819133758544922, 0.0002601146697998047, 9.369850158691406e-05, 0.00011801719665527344, 8.7738037109375e-05, 0.00010895729064941406, 8.702278137207031e-05, 0.00015282630920410156, 9.1552734375e-05, 0.00010704994201660156, 0.00017380714416503906, 0.00010633468627929688, 0.0001049041748046875, 0.00010538101196289062, 0.00020003318786621094, 9.965896606445312e-05, 0.00017690658569335938, 0.00010585784912109375, 0.00011301040649414062, 8.96453857421875e-05, 0.00011324882507324219, 8.7738037109375e-05, 0.0001087188720703125, 8.797645568847656e-05, 0.0001220703125, 9.107589721679688e-05, 0.00018072128295898438, 9.250640869140625e-05, 0.00011515617370605469, 9.202957153320312e-05, 0.0001163482666015625, 9.417533874511719e-05, 0.00013446807861328125, 0.000133514404296875, 0.00012373924255371094, 9.560585021972656e-05, 0.00016570091247558594, 9.822845458984375e-05, 0.00011491775512695312, 8.797645568847656e-05, 0.00011205673217773438, 0.00012493133544921875, 0.00011706352233886719, 8.749961853027344e-05, 0.00011515617370605469, 9.202957153320312e-05, 0.00011515617370605469, 8.797645568847656e-05, 0.0001304149627685547, 0.0001399517059326172, 8.96453857421875e-05, 0.00011563301086425781, 8.749961853027344e-05, 0.00028014183044433594, 0.00015473365783691406, 0.0002455711364746094, 9.822845458984375e-05, 0.00011849403381347656, 0.00010967254638671875, 9.608268737792969e-05, 0.00012183189392089844, 9.751319885253906e-05, 0.0001163482666015625, 9.560585021972656e-05, 0.00012946128845214844, 9.250640869140625e-05, 0.00012731552124023438, 9.441375732421875e-05, 0.00011610984802246094, 8.916854858398438e-05, 0.00011181831359863281, 9.1552734375e-05, 0.00011038780212402344, 0.00011277198791503906, 8.869171142578125e-05, 0.00011539459228515625, 9.298324584960938e-05, 0.00011110305786132812, 0.0001621246337890625, 0.00010895729064941406, 0.0001938343048095703, 0.00013017654418945312, 0.0002396106719970703, 0.0001804828643798828, 0.00024771690368652344, 0.00018644332885742188, 0.00022339820861816406, 0.0001804828643798828, 0.00012922286987304688, 9.131431579589844e-05, 0.00011396408081054688, 9.250640869140625e-05, 0.00010943412780761719, 8.797645568847656e-05, 0.0001773834228515625, 9.775161743164062e-05, 0.00011801719665527344, 8.869171142578125e-05, 0.00011372566223144531, 9.1552734375e-05, 0.00011324882507324219, 8.869171142578125e-05, 0.0001385211944580078, 0.00011754035949707031, 0.00017523765563964844, 0.00011897087097167969, 0.00017452239990234375, 0.0001239776611328125, 0.00021696090698242188, 9.918212890625e-05, 0.000194549560546875, 0.00012969970703125, 0.0001404285430908203, 0.00010585784912109375, 0.00013899803161621094, 0.00020956993103027344, 0.00011110305786132812, 0.00015592575073242188, 0.00011277198791503906, 0.00016570091247558594, 0.000118255615234375, 0.00016427040100097656, 0.00010848045349121094, 0.0001926422119140625, 0.00010442733764648438, 0.00011873245239257812, 9.393692016601562e-05, 0.0002048015594482422, 0.00011372566223144531, 0.00011777877807617188, 8.821487426757812e-05, 0.00010848045349121094, 0.000118255615234375, 8.797645568847656e-05, 0.0001068115234375, 8.702278137207031e-05, 0.00010848045349121094, 8.702278137207031e-05, 0.00010657310485839844, 0.00010323524475097656, 0.00010466575622558594, 0.00010466575622558594, 0.00014543533325195312, 9.012222290039062e-05, 0.00011730194091796875, 9.679794311523438e-05, 0.0001373291015625, 9.655952453613281e-05, 0.00013947486877441406, 0.00010848045349121094, 0.0001418590545654297, 0.00011372566223144531, 0.00011730194091796875, 0.00010013580322265625, 0.00012946128845214844, 9.417533874511719e-05, 9.131431579589844e-05, 0.00011944770812988281, 0.0001499652862548828, 0.00018453598022460938, 9.608268737792969e-05, 0.00011372566223144531, 8.845329284667969e-05, 0.00010895729064941406, 8.988380432128906e-05, 0.000110626220703125, 8.916854858398438e-05, 0.00011348724365234375, 9.608268737792969e-05, 0.00011849403381347656, 9.632110595703125e-05, 0.0001652240753173828, 8.821487426757812e-05, 0.00010514259338378906, 0.00010514259338378906, 0.00011157989501953125, 0.00010824203491210938, 8.726119995117188e-05, 0.00010466575622558594, 0.00012636184692382812, 0.00011277198791503906, 0.00024700164794921875, 0.00024008750915527344, 0.0002193450927734375, 0.00012564659118652344, 0.0001964569091796875, 0.0001780986785888672, 0.00010943412780761719, 0.00017118453979492188, 0.00011992454528808594, 0.0001575946807861328, 0.00011849403381347656, 0.00017213821411132812, 0.00015234947204589844, 0.000213623046875, 0.0001087188720703125, 0.0002143383026123047, 9.822845458984375e-05, 0.00013637542724609375, 8.869171142578125e-05, 0.00013566017150878906, 0.0001068115234375, 0.00014162063598632812, 0.00010228157043457031, 0.00014710426330566406, 0.00011134147644042969, 0.00015020370483398438, 9.369850158691406e-05, 0.00011086463928222656, 8.702278137207031e-05, 0.00010585784912109375, 0.00010895729064941406, 8.845329284667969e-05, 0.00011157989501953125, 8.797645568847656e-05, 0.00010561943054199219, 0.00012159347534179688, 9.918212890625e-05, 0.00014972686767578125, 0.000118255615234375, 0.0001614093780517578, 0.000179290771484375, 0.00013327598571777344, 0.00010609626770019531, 0.0001900196075439453, 0.00010323524475097656, 0.00011467933654785156, 8.845329284667969e-05, 0.0001087188720703125, 8.7738037109375e-05, 0.00010657310485839844, 0.0002090930938720703, 0.000152587890625, 0.00011324882507324219, 0.00014662742614746094, 0.00010895729064941406, 0.00011920928955078125, 9.107589721679688e-05, 0.00011014938354492188, 9.107589721679688e-05, 0.00010848045349121094, 9.965896606445312e-05, 0.00012636184692382812, 8.916854858398438e-05, 0.00010776519775390625, 0.00010395050048828125, 0.00010395050048828125, 0.00010323524475097656, 0.00010538101196289062, 0.00010156631469726562, 0.00011992454528808594, 0.00013327598571777344, 8.749961853027344e-05, 0.00010895729064941406, 0.00010991096496582031, 8.702278137207031e-05, 0.00010752677917480469, 8.940696716308594e-05, 0.00011157989501953125, 8.940696716308594e-05, 0.0001785755157470703, 0.00022172927856445312, 0.00017118453979492188, 0.0001888275146484375, 0.00015354156494140625, 0.00019621849060058594, 9.083747863769531e-05, 0.000125885009765625, 0.00017023086547851562, 0.00018930435180664062, 0.00014972686767578125, 0.0001823902130126953, 8.821487426757812e-05, 0.00011086463928222656, 0.000133514404296875, 0.00010800361633300781, 0.0001087188720703125, 0.0001087188720703125, 8.893013000488281e-05, 0.00011014938354492188, 8.916854858398438e-05, 0.00011229515075683594, 9.298324584960938e-05, 0.00011229515075683594, 9.322166442871094e-05, 0.00014138221740722656, 0.00014925003051757812, 9.775161743164062e-05, 0.0001423358917236328, 0.00014090538024902344, 0.00010585784912109375, 0.00025200843811035156, 0.00014662742614746094, 0.00023126602172851562, 0.0001919269561767578, 0.0001289844512939453, 9.369850158691406e-05, 0.00011134147644042969, 8.749961853027344e-05, 0.00014328956604003906, 8.893013000488281e-05, 0.0001251697540283203, 9.894371032714844e-05, 0.0001347064971923828, 0.000110626220703125, 0.00014448165893554688, 0.00010967254638671875, 0.00012445449829101562, 9.179115295410156e-05, 0.00013136863708496094, 0.00010323524475097656, 0.0001354217529296875, 0.00010395050048828125, 0.00013303756713867188, 9.608268737792969e-05, 0.00018525123596191406, 0.00020241737365722656, 0.00019693374633789062, 9.775161743164062e-05, 0.00012612342834472656, 0.0001068115234375, 0.00013828277587890625, 0.00011086463928222656, 0.0001506805419921875, 9.584426879882812e-05, 0.00011897087097167969, 9.083747863769531e-05, 0.000110626220703125, 8.7738037109375e-05, 0.0001068115234375, 8.726119995117188e-05, 0.00010538101196289062, 0.00011134147644042969, 0.0002675056457519531, 0.00020623207092285156, 0.00024008750915527344, 0.00010466575622558594, 0.00013685226440429688, 0.00010228157043457031, 0.00014925003051757812, 0.00011682510375976562, 0.00014162063598632812, 0.00011038780212402344, 0.00014638900756835938, 0.00010395050048828125, 0.00011181831359863281, 8.797645568847656e-05, 0.00011301040649414062, 9.1552734375e-05, 0.00016570091247558594, 8.821487426757812e-05, 0.00010657310485839844, 0.00010538101196289062, 0.0001049041748046875, 0.00010418891906738281, 0.00010728836059570312, 8.678436279296875e-05, 0.00010704994201660156, 8.702278137207031e-05, 0.00010657310485839844, 8.869171142578125e-05, 0.00011301040649414062, 0.00016117095947265625, 9.322166442871094e-05, 0.00017786026000976562, 0.0001049041748046875, 0.00013518333435058594, 0.00013065338134765625, 0.000171661376953125, 9.131431579589844e-05, 0.00011157989501953125, 0.00011658668518066406, 9.679794311523438e-05, 0.00011324882507324219, 9.775161743164062e-05, 0.00014066696166992188, 0.00010919570922851562, 0.00013399124145507812, 0.00016164779663085938, 0.0001366138458251953, 9.703636169433594e-05, 0.0001354217529296875, 9.870529174804688e-05, 0.00011730194091796875, 9.202957153320312e-05, 0.00010800361633300781, 0.00010585784912109375, 0.00010752677917480469, 9.036064147949219e-05, 0.00011610984802246094, 9.322166442871094e-05, 0.00011324882507324219, 9.5367431640625e-05, 0.00011706352233886719, 9.131431579589844e-05, 0.00011730194091796875, 9.1552734375e-05, 0.00011444091796875, 9.107589721679688e-05, 0.00011539459228515625, 8.96453857421875e-05, 0.00018787384033203125, 0.0002827644348144531, 0.0002124309539794922, 0.00017833709716796875, 0.00012111663818359375, 0.0001952648162841797, 0.00012826919555664062, 0.00015473365783691406, 0.00011467933654785156, 0.00015211105346679688, 0.00012373924255371094, 0.0001666545867919922, 0.0001437664031982422, 0.00011992454528808594, 8.726119995117188e-05, 0.00010776519775390625, 0.00010347366333007812, 0.0001430511474609375, 0.00011301040649414062, 0.00015163421630859375, 0.00011229515075683594, 0.00014352798461914062, 0.00012302398681640625, 0.00012874603271484375, 0.00010561943054199219, 0.0001366138458251953, 0.00010538101196289062, 0.00013899803161621094, 0.00010728836059570312, 0.0001251697540283203, 0.00010442733764648438, 0.0001308917999267578, 9.226799011230469e-05, 0.00013780593872070312, 0.00023245811462402344, 0.0001735687255859375, 0.0002543926239013672, 0.00016045570373535156, 0.0001266002655029297, 9.059906005859375e-05, 0.00011539459228515625, 0.00020885467529296875, 0.00010657310485839844, 0.00013971328735351562, 0.00010585784912109375, 0.00011944770812988281, 9.942054748535156e-05, 0.0001308917999267578, 0.00010585784912109375, 0.000164031982421875, 0.0001461505889892578, 0.0001628398895263672, 0.00011444091796875, 0.0001327991485595703, 0.00012350082397460938, 0.00016927719116210938, 0.0001957416534423828, 0.000194549560546875, 0.00010156631469726562, 0.0001347064971923828, 0.0001010894775390625, 0.00012493133544921875, 0.0001423358917236328, 0.00014901161193847656, 0.00020265579223632812, 0.00016736984252929688, 9.059906005859375e-05, 0.000110626220703125, 0.00013017654418945312, 0.0001285076141357422, 8.726119995117188e-05, 0.00011181831359863281, 9.250640869140625e-05, 0.00011587142944335938, 9.012222290039062e-05, 0.00012135505676269531, 9.083747863769531e-05, 0.00017833709716796875, 0.00012063980102539062, 0.00014138221740722656, 9.298324584960938e-05, 0.00010800361633300781, 0.00010776519775390625, 0.0001049041748046875, 0.00010514259338378906, 0.00010442733764648438, 0.00010418891906738281, 0.00010848045349121094, 9.202957153320312e-05, 0.00010728836059570312, 8.702278137207031e-05, 0.0001392364501953125, 9.322166442871094e-05, 0.00010967254638671875, 9.322166442871094e-05, 0.00010943412780761719, 9.298324584960938e-05, 0.00011348724365234375, 0.00017499923706054688, 0.00011467933654785156, 8.821487426757812e-05, 0.00011038780212402344, 0.00011181831359863281, 0.00011563301086425781, 9.274482727050781e-05, 0.00011181831359863281, 9.107589721679688e-05, 9.918212890625e-05, 0.0001220703125, 0.0001361370086669922, 0.00013065338134765625, 9.632110595703125e-05, 0.0001347064971923828, 0.00011515617370605469, 0.00014829635620117188, 0.00011491775512695312, 0.00014853477478027344, 9.274482727050781e-05, 0.0001373291015625, 9.393692016601562e-05, 0.00011038780212402344, 9.72747802734375e-05, 0.0001285076141357422, 0.00010561943054199219, 0.00013065338134765625, 0.00010395050048828125, 0.00013637542724609375, 0.0001087188720703125, 0.00013375282287597656, 9.465217590332031e-05, 0.0001277923583984375, 0.00010132789611816406, 0.00016951560974121094, 9.226799011230469e-05, 0.00012826919555664062, 0.000102996826171875, 0.00012731552124023438, 0.00010132789611816406, 0.00012373924255371094, 0.000102996826171875, 0.00012636184692382812, 0.00010347366333007812, 0.0001842975616455078, 0.00010991096496582031, 0.00014448165893554688, 0.00010180473327636719, 0.00011444091796875, 9.1552734375e-05, 0.00010800361633300781, 9.584426879882812e-05, 0.00021386146545410156, 0.0001087188720703125, 0.00012540817260742188, 9.655952453613281e-05, 0.0001227855682373047, 9.703636169433594e-05, 0.00011992454528808594, 9.775161743164062e-05, 0.00014925003051757812, 0.00012946128845214844, 0.0002028942108154297, 0.00010919570922851562, 0.00015354156494140625, 0.0001323223114013672, 0.0001666545867919922, 0.00011444091796875, 0.00016546249389648438, 0.00010967254638671875, 0.0001437664031982422, 0.00011444091796875, 0.000148773193359375, 0.00010776519775390625, 0.00014591217041015625, 0.00011229515075683594, 0.00014781951904296875, 0.00011444091796875, 0.00020265579223632812, 0.00012302398681640625, 0.00016999244689941406, 0.00012874603271484375, 9.131431579589844e-05, 0.00011491775512695312, 9.298324584960938e-05, 0.00011348724365234375, 9.1552734375e-05, 0.00011420249938964844, 9.107589721679688e-05, 0.00011587142944335938, 9.489059448242188e-05, 0.00028252601623535156, 0.00011277198791503906, 0.00015974044799804688, 0.00012350082397460938, 0.0002543926239013672, 0.00012421607971191406, 0.00017333030700683594, 0.00012922286987304688, 0.0001709461212158203, 0.0001347064971923828, 0.00016045570373535156, 0.00011420249938964844, 0.0001659393310546875, 0.0001380443572998047, 0.00018286705017089844, 0.00013518333435058594, 0.00013184547424316406, 9.799003601074219e-05, 0.00011754035949707031, 9.512901306152344e-05, 0.00011682510375976562, 9.5367431640625e-05, 0.00011301040649414062, 0.0001456737518310547, 0.00011777877807617188, 9.226799011230469e-05, 0.00011491775512695312, 0.00010228157043457031, 0.00014019012451171875, 9.489059448242188e-05, 0.00011706352233886719, 9.369850158691406e-05, 0.00011873245239257812, 9.5367431640625e-05, 0.00011777877807617188, 9.918212890625e-05, 0.0001246929168701172, 0.00010037422180175781, 0.0001327991485595703, 0.00010728836059570312, 0.00015211105346679688, 9.965896606445312e-05, 0.00012135505676269531, 0.00010752677917480469, 0.0001361370086669922, 0.00010728836059570312, 0.00013518333435058594, 0.00011610984802246094, 0.0001437664031982422, 0.00011324882507324219, 0.0001964569091796875, 0.00014281272888183594, 0.00012636184692382812, 9.489059448242188e-05, 0.00011897087097167969, 9.775161743164062e-05, 0.00012040138244628906, 0.00010371208190917969, 0.00012421607971191406, 9.894371032714844e-05, 0.0001232624053955078, 9.989738464355469e-05, 0.00013494491577148438, 0.00018644332885742188, 0.00010085105895996094, 0.00012087821960449219, 0.00010848045349121094, 0.000244140625, 0.00011134147644042969, 0.00015401840209960938, 0.00012230873107910156, 0.00016617774963378906, 0.0001347064971923828, 0.00017380714416503906, 0.00010704994201660156, 0.00014853477478027344, 0.00011348724365234375, 0.0001499652862548828, 0.0001068115234375, 0.00022482872009277344, 0.00011277198791503906, 0.00012564659118652344, 9.679794311523438e-05, 0.0001227855682373047, 9.822845458984375e-05, 0.0001342296600341797, 0.00010085105895996094, 0.0001251697540283203, 0.00010156631469726562, 0.0001239776611328125, 0.0001010894775390625, 0.00012230873107910156, 9.584426879882812e-05, 0.00012230873107910156, 0.00013065338134765625, 9.72747802734375e-05, 0.0001201629638671875, 0.00012636184692382812, 0.00016188621520996094, 0.00011801719665527344, 0.0001595020294189453, 0.00012803077697753906, 0.00016498565673828125, 0.00016260147094726562, 0.0001366138458251953, 0.0001678466796875, 0.00010371208190917969, 0.00012826919555664062, 0.00010085105895996094, 0.00012230873107910156, 9.870529174804688e-05, 0.0001227855682373047, 9.965896606445312e-05, 0.0001327991485595703, 0.0001747608184814453, 0.00011157989501953125, 0.00015974044799804688, 0.00016736984252929688, 0.0001087188720703125, 0.00016450881958007812, 0.0001583099365234375, 0.00017452239990234375, 0.0001418590545654297, 0.0001697540283203125, 0.00012636184692382812, 0.0001342296600341797, 0.00013113021850585938, 0.00028133392333984375, 0.0001742839813232422, 0.00016260147094726562, 0.00019931793212890625, 0.00014352798461914062, 0.00011610984802246094, 0.0001595020294189453, 0.00012040138244628906, 0.00016355514526367188, 0.00011706352233886719, 0.0002429485321044922, 0.0002560615539550781, 0.00023865699768066406, 0.0002372264862060547, 0.00023794174194335938, 0.00025963783264160156, 0.0002732276916503906, 0.00022602081298828125, 0.00021982192993164062, 0.00018334388732910156, 0.0002665519714355469, 0.00020265579223632812, 0.0002448558807373047, 0.00020599365234375, 0.00020885467529296875, 0.00017595291137695312, 0.00013256072998046875, 0.0002624988555908203, 0.0002818107604980469, 0.0002503395080566406, 0.0002300739288330078, 0.00014710426330566406, 0.00010418891906738281, 0.0001246929168701172, 0.00010251998901367188, 0.00013256072998046875, 0.000179290771484375, 0.00014162063598632812, 0.0002410411834716797, 0.0002498626708984375, 0.00024437904357910156, 0.000244140625, 0.00027251243591308594, 0.0002689361572265625, 0.00023174285888671875, 0.0002598762512207031, 0.00013017654418945312, 0.0001800060272216797, 0.00013637542724609375], \\\"y0\\\": \\\" \\\", \\\"yaxis\\\": \\\"y\\\"}],                        {\\\"boxmode\\\": \\\"group\\\", \\\"legend\\\": {\\\"tracegroupgap\\\": 0}, \\\"margin\\\": {\\\"t\\\": 60}, \\\"template\\\": {\\\"data\\\": {\\\"bar\\\": [{\\\"error_x\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"error_y\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"marker\\\": {\\\"line\\\": {\\\"color\\\": \\\"#E5ECF6\\\", \\\"width\\\": 0.5}}, \\\"type\\\": \\\"bar\\\"}], \\\"barpolar\\\": [{\\\"marker\\\": {\\\"line\\\": {\\\"color\\\": \\\"#E5ECF6\\\", \\\"width\\\": 0.5}}, \\\"type\\\": \\\"barpolar\\\"}], \\\"carpet\\\": [{\\\"aaxis\\\": {\\\"endlinecolor\\\": \\\"#2a3f5f\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"minorgridcolor\\\": \\\"white\\\", \\\"startlinecolor\\\": \\\"#2a3f5f\\\"}, \\\"baxis\\\": {\\\"endlinecolor\\\": \\\"#2a3f5f\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"minorgridcolor\\\": \\\"white\\\", \\\"startlinecolor\\\": \\\"#2a3f5f\\\"}, \\\"type\\\": \\\"carpet\\\"}], \\\"choropleth\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"choropleth\\\"}], \\\"contour\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"contour\\\"}], \\\"contourcarpet\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"contourcarpet\\\"}], \\\"heatmap\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"heatmap\\\"}], \\\"heatmapgl\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"heatmapgl\\\"}], \\\"histogram\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"histogram\\\"}], \\\"histogram2d\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"histogram2d\\\"}], \\\"histogram2dcontour\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"histogram2dcontour\\\"}], \\\"mesh3d\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"type\\\": \\\"mesh3d\\\"}], \\\"parcoords\\\": [{\\\"line\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"parcoords\\\"}], \\\"pie\\\": [{\\\"automargin\\\": true, \\\"type\\\": \\\"pie\\\"}], \\\"scatter\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatter\\\"}], \\\"scatter3d\\\": [{\\\"line\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatter3d\\\"}], \\\"scattercarpet\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattercarpet\\\"}], \\\"scattergeo\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattergeo\\\"}], \\\"scattergl\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattergl\\\"}], \\\"scattermapbox\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scattermapbox\\\"}], \\\"scatterpolar\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterpolar\\\"}], \\\"scatterpolargl\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterpolargl\\\"}], \\\"scatterternary\\\": [{\\\"marker\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"type\\\": \\\"scatterternary\\\"}], \\\"surface\\\": [{\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}, \\\"colorscale\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"type\\\": \\\"surface\\\"}], \\\"table\\\": [{\\\"cells\\\": {\\\"fill\\\": {\\\"color\\\": \\\"#EBF0F8\\\"}, \\\"line\\\": {\\\"color\\\": \\\"white\\\"}}, \\\"header\\\": {\\\"fill\\\": {\\\"color\\\": \\\"#C8D4E3\\\"}, \\\"line\\\": {\\\"color\\\": \\\"white\\\"}}, \\\"type\\\": \\\"table\\\"}]}, \\\"layout\\\": {\\\"annotationdefaults\\\": {\\\"arrowcolor\\\": \\\"#2a3f5f\\\", \\\"arrowhead\\\": 0, \\\"arrowwidth\\\": 1}, \\\"autotypenumbers\\\": \\\"strict\\\", \\\"coloraxis\\\": {\\\"colorbar\\\": {\\\"outlinewidth\\\": 0, \\\"ticks\\\": \\\"\\\"}}, \\\"colorscale\\\": {\\\"diverging\\\": [[0, \\\"#8e0152\\\"], [0.1, \\\"#c51b7d\\\"], [0.2, \\\"#de77ae\\\"], [0.3, \\\"#f1b6da\\\"], [0.4, \\\"#fde0ef\\\"], [0.5, \\\"#f7f7f7\\\"], [0.6, \\\"#e6f5d0\\\"], [0.7, \\\"#b8e186\\\"], [0.8, \\\"#7fbc41\\\"], [0.9, \\\"#4d9221\\\"], [1, \\\"#276419\\\"]], \\\"sequential\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]], \\\"sequentialminus\\\": [[0.0, \\\"#0d0887\\\"], [0.1111111111111111, \\\"#46039f\\\"], [0.2222222222222222, \\\"#7201a8\\\"], [0.3333333333333333, \\\"#9c179e\\\"], [0.4444444444444444, \\\"#bd3786\\\"], [0.5555555555555556, \\\"#d8576b\\\"], [0.6666666666666666, \\\"#ed7953\\\"], [0.7777777777777778, \\\"#fb9f3a\\\"], [0.8888888888888888, \\\"#fdca26\\\"], [1.0, \\\"#f0f921\\\"]]}, \\\"colorway\\\": [\\\"#636efa\\\", \\\"#EF553B\\\", \\\"#00cc96\\\", \\\"#ab63fa\\\", \\\"#FFA15A\\\", \\\"#19d3f3\\\", \\\"#FF6692\\\", \\\"#B6E880\\\", \\\"#FF97FF\\\", \\\"#FECB52\\\"], \\\"font\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}, \\\"geo\\\": {\\\"bgcolor\\\": \\\"white\\\", \\\"lakecolor\\\": \\\"white\\\", \\\"landcolor\\\": \\\"#E5ECF6\\\", \\\"showlakes\\\": true, \\\"showland\\\": true, \\\"subunitcolor\\\": \\\"white\\\"}, \\\"hoverlabel\\\": {\\\"align\\\": \\\"left\\\"}, \\\"hovermode\\\": \\\"closest\\\", \\\"mapbox\\\": {\\\"style\\\": \\\"light\\\"}, \\\"paper_bgcolor\\\": \\\"white\\\", \\\"plot_bgcolor\\\": \\\"#E5ECF6\\\", \\\"polar\\\": {\\\"angularaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"bgcolor\\\": \\\"#E5ECF6\\\", \\\"radialaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}}, \\\"scene\\\": {\\\"xaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}, \\\"yaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}, \\\"zaxis\\\": {\\\"backgroundcolor\\\": \\\"#E5ECF6\\\", \\\"gridcolor\\\": \\\"white\\\", \\\"gridwidth\\\": 2, \\\"linecolor\\\": \\\"white\\\", \\\"showbackground\\\": true, \\\"ticks\\\": \\\"\\\", \\\"zerolinecolor\\\": \\\"white\\\"}}, \\\"shapedefaults\\\": {\\\"line\\\": {\\\"color\\\": \\\"#2a3f5f\\\"}}, \\\"ternary\\\": {\\\"aaxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"baxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}, \\\"bgcolor\\\": \\\"#E5ECF6\\\", \\\"caxis\\\": {\\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\"}}, \\\"title\\\": {\\\"x\\\": 0.05}, \\\"xaxis\\\": {\\\"automargin\\\": true, \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\", \\\"title\\\": {\\\"standoff\\\": 15}, \\\"zerolinecolor\\\": \\\"white\\\", \\\"zerolinewidth\\\": 2}, \\\"yaxis\\\": {\\\"automargin\\\": true, \\\"gridcolor\\\": \\\"white\\\", \\\"linecolor\\\": \\\"white\\\", \\\"ticks\\\": \\\"\\\", \\\"title\\\": {\\\"standoff\\\": 15}, \\\"zerolinecolor\\\": \\\"white\\\", \\\"zerolinewidth\\\": 2}}}, \\\"xaxis\\\": {\\\"anchor\\\": \\\"y\\\", \\\"domain\\\": [0.0, 1.0], \\\"title\\\": {\\\"text\\\": \\\"substep_label\\\"}}, \\\"yaxis\\\": {\\\"anchor\\\": \\\"x\\\", \\\"domain\\\": [0.0, 1.0], \\\"title\\\": {\\\"text\\\": \\\"psub_time\\\"}}},                        {\\\"responsive\\\": true}                    ).then(function(){\\n\",\n       \"                            \\n\",\n       \"var gd = document.getElementById('d482f90f-954b-4a6d-8d1c-8efb3ab82990');\\n\",\n       \"var x = new MutationObserver(function (mutations, observer) {{\\n\",\n       \"        var display = window.getComputedStyle(gd).display;\\n\",\n       \"        if (!display || display === 'none') {{\\n\",\n       \"            console.log([gd, 'removed!']);\\n\",\n       \"            Plotly.purge(gd);\\n\",\n       \"            observer.disconnect();\\n\",\n       \"        }}\\n\",\n       \"}});\\n\",\n       \"\\n\",\n       \"// Listen for the removal of the full notebook cells\\n\",\n       \"var notebookContainer = gd.closest('#notebook-container');\\n\",\n       \"if (notebookContainer) {{\\n\",\n       \"    x.observe(notebookContainer, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"// Listen for the clearing of the current output cell\\n\",\n       \"var outputEl = gd.closest('.output');\\n\",\n       \"if (outputEl) {{\\n\",\n       \"    x.observe(outputEl, {childList: true});\\n\",\n       \"}}\\n\",\n       \"\\n\",\n       \"                        })                };                });            </script>        </div>\"\n      ]\n     },\n     \"metadata\": {},\n     \"output_type\": \"display_data\"\n    }\n   ],\n   \"source\": [\n    \"visualize_substep_impact(df, relative=False)\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": null,\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": []\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.0\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 2\n}\n"
  },
  {
    "path": "documentation/examples/example_1.py",
    "content": "from pprint import pprint\n\nimport pandas as pd\nfrom tabulate import tabulate\n\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom documentation.examples import sys_model_A, sys_model_B, system_model_AB_exp\nfrom documentation.examples.sys_model_A import exp\n\nexec_mode = ExecutionMode()\n\n# Single Process Execution using a Single System Model Configuration:\n# sys_model_A\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nsys_model_A_simulation = Executor(exec_context=local_proc_ctx, configs=exp.configs)\n\nsys_model_A_raw_result, sys_model_A_tensor_field, sessions = sys_model_A_simulation.execute()\nsys_model_A_result = pd.DataFrame(sys_model_A_raw_result)\nprint()\nprint(\"Tensor Field: sys_model_A\")\nprint(tabulate(sys_model_A_tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Result: System Events DataFrame\")\nprint(tabulate(sys_model_A_result, headers='keys', tablefmt='psql'))\nprint()\n\n# # Multiple Processes Execution using Multiple System Model Configurations:\n# # sys_model_A & sys_model_B\nmulti_proc_ctx = ExecutionContext(context=exec_mode.multi_proc)\nsys_model_AB_simulation = Executor(exec_context=multi_proc_ctx, configs=system_model_AB_exp.configs)\n\nsys_model_AB_raw_result, sys_model_AB_tensor_field, sessions = sys_model_AB_simulation.execute()\nprint()\nsys_model_AB_result = pd.DataFrame(sys_model_AB_raw_result)\nprint()\nprint(f\"Tensor Field:\")\nprint(tabulate(sys_model_AB_tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Result: System Events DataFrame:\")\nprint(tabulate(sys_model_AB_result, headers='keys', tablefmt='psql'))\nprint()\n"
  },
  {
    "path": "documentation/examples/historical_state_access.py",
    "content": "import pandas as pd\nfrom tabulate import tabulate\n\nfrom cadCAD.configuration.utils import config_sim, access_block\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom cadCAD.configuration import Experiment\n\npolicies, variables = {}, {}\nexclusion_list = ['nonexsistant', 'last_x', '2nd_to_last_x', '3rd_to_last_x', '4th_to_last_x']\n\n# Policies per Mechanism\n\n# state_history, target_field, psu_block_offset, exculsion_list\ndef last_update(_g, substep, sH, s):\n    return {\"last_x\": access_block(\n            state_history=sH,\n            target_field=\"last_x\",\n            psu_block_offset=-1,\n            exculsion_list=exclusion_list\n        )\n    }\npolicies[\"last_x\"] = last_update\n\ndef second2last_update(_g, substep, sH, s):\n    return {\"2nd_to_last_x\": access_block(sH, \"2nd_to_last_x\", -2, exclusion_list)}\npolicies[\"2nd_to_last_x\"] = second2last_update\n\n\n# Internal States per Mechanism\n\n# WARNING: DO NOT delete elements from sH\ndef add(y, x):\n    return lambda _g, substep, sH, s, _input: (y, s[y] + x)\nvariables['x'] = add('x', 1)\n\n# last_partial_state_update_block\ndef nonexsistant(_g, substep, sH, s, _input):\n    return 'nonexsistant', access_block(sH, \"nonexsistant\", 0, exclusion_list)\nvariables['nonexsistant'] = nonexsistant\n\n# last_partial_state_update_block\ndef last_x(_g, substep, sH, s, _input):\n    return 'last_x', _input[\"last_x\"]\nvariables['last_x'] = last_x\n\n# 2nd to last partial state update block\ndef second_to_last_x(_g, substep, sH, s, _input):\n    return '2nd_to_last_x', _input[\"2nd_to_last_x\"]\nvariables['2nd_to_last_x'] = second_to_last_x\n\n# 3rd to last partial state update block\ndef third_to_last_x(_g, substep, sH, s, _input):\n    return '3rd_to_last_x', access_block(sH, \"3rd_to_last_x\", -3, exclusion_list)\nvariables['3rd_to_last_x'] = third_to_last_x\n\n# 4th to last partial state update block\ndef fourth_to_last_x(_g, substep, sH, s, _input):\n    return '4th_to_last_x', access_block(sH, \"4th_to_last_x\", -4, exclusion_list)\nvariables['4th_to_last_x'] = fourth_to_last_x\n\n\ngenesis_states = {\n    'x': 0,\n    'nonexsistant': [],\n    'last_x': [],\n    '2nd_to_last_x': [],\n    '3rd_to_last_x': [],\n    '4th_to_last_x': []\n}\n\nPSUB = {\n    \"policies\": policies,\n    \"variables\": variables\n}\n\npsubs = {\n    \"PSUB1\": PSUB,\n    \"PSUB2\": PSUB,\n    \"PSUB3\": PSUB\n}\n\nsim_config = config_sim(\n    {\n        \"N\": 1,\n        \"T\": range(3),\n    }\n)\n\nexp = Experiment()\nexp.append_model(\n    model_id='hist_state_access',\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    partial_state_update_blocks=psubs\n)\n\nexec_mode = ExecutionMode()\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nrun = Executor(exec_context=local_proc_ctx, configs=exp.configs)\n\nraw_result, tensor_field, sessions = run.execute()\nresult = pd.DataFrame(raw_result)\ncols = ['run','substep','timestep','x','nonexsistant','last_x','2nd_to_last_x','3rd_to_last_x','4th_to_last_x']\nresult = result[cols]\n\nprint()\nprint(\"Tensor Field:\")\nprint(tabulate(tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Output:\")\nprint(tabulate(result, headers='keys', tablefmt='psql'))\nprint()\n"
  },
  {
    "path": "documentation/examples/param_sweep.py",
    "content": "import pprint\n\nimport pandas as pd\nfrom tabulate import tabulate\n\nfrom cadCAD.configuration.utils import env_trigger, var_substep_trigger, config_sim, psub_list\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom cadCAD.configuration import Experiment\n\npp = pprint.PrettyPrinter(indent=4)\n\n\ndef some_function(x):\n    return x\n\n\ng: Dict[str, List[int]] = {\n    'alpha': [1],\n    'beta': [2, 5],\n    'gamma': [3, 4],\n    'omega': [some_function]\n}\n\npsu_steps = ['1', '2', '3']\nsystem_substeps = len(psu_steps)\nvar_timestep_trigger = var_substep_trigger([0, system_substeps])\nenv_timestep_trigger = env_trigger(system_substeps)\nenv_process = {}\n\n\n# Policies\ndef gamma(_params, step, sH, s):\n    return {'gamma': _params['gamma']}\n\n\ndef omega(_params, step, sH, s):\n    return {'omega': _params['omega'](7)}\n\n\n# Internal States\ndef alpha(_params, step, sH, s, _input):\n    return 'alpha', _params['alpha']\n\ndef alpha_plus_gamma(_params, step, sH, s, _input):\n    return 'alpha_plus_gamma', _params['alpha'] + _params['gamma']\n\n\ndef beta(_params, step, sH, s, _input):\n    return 'beta', _params['beta']\n\n\ndef policies(_params, step, sH, s, _input):\n    return 'policies', _input\n\n\ndef sweeped(_params, step, sH, s, _input):\n    return 'sweeped', {'beta': _params['beta'], 'gamma': _params['gamma']}\n\n\ngenesis_states = {\n    'alpha_plus_gamma': 0,\n    'alpha': 0,\n    'beta': 0,\n    'policies': {},\n    'sweeped': {}\n}\n\nenv_process['sweeped'] = env_timestep_trigger(trigger_field='timestep', trigger_vals=[5], funct_list=[lambda _g, x: _g['beta']])\n\nsim_config = config_sim(\n    {\n        \"N\": 2,\n        \"T\": range(5),\n        \"M\": g,\n    }\n)\n\npsu_block = {k: {\"policies\": {}, \"variables\": {}} for k in psu_steps}\nfor m in psu_steps:\n    psu_block[m]['policies']['gamma'] = gamma\n    psu_block[m]['policies']['omega'] = omega\n    psu_block[m][\"variables\"]['alpha'] = alpha_plus_gamma\n    psu_block[m][\"variables\"]['alpha_plus_gamma'] = alpha\n    psu_block[m][\"variables\"]['beta'] = beta\n    psu_block[m]['variables']['policies'] = policies\n    psu_block[m][\"variables\"]['sweeped'] = var_timestep_trigger(y='sweeped', f=sweeped)\n\npsubs = psub_list(psu_block, psu_steps)\nprint()\npp.pprint(psu_block)\nprint()\n\nexp = Experiment()\nexp.append_model(\n    model_id='param_sweep',\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    env_processes=env_process,\n    partial_state_update_blocks=psubs\n)\n\nexec_mode = ExecutionMode()\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nrun = Executor(exec_context=local_proc_ctx, configs=exp.configs)\n\nraw_result, tensor_field, sessions = run.execute()\nresult = pd.DataFrame(raw_result)\nprint()\nprint(\"Tensor Field:\")\nprint(tabulate(tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Output:\")\nprint(tabulate(result, headers='keys', tablefmt='psql'))\nprint()\n"
  },
  {
    "path": "documentation/examples/policy_aggregation.py",
    "content": "import pandas as pd\nfrom tabulate import tabulate\n\nfrom cadCAD.configuration.utils import config_sim\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom cadCAD.configuration import Experiment\n\n# Policies per Mechanism\ndef p1m1(_g, step, sH, s):\n    return {'policy1': 1}\ndef p2m1(_g, step, sH, s):\n    return {'policy2': 2}\n\ndef p1m2(_g, step, sH, s):\n    return {'policy1': 2, 'policy2': 2}\ndef p2m2(_g, step, sH, s):\n    return {'policy1': 2, 'policy2': 2}\n\ndef p1m3(_g, step, sH, s):\n    return {'policy1': 1, 'policy2': 2, 'policy3': 3}\ndef p2m3(_g, step, sH, s):\n    return {'policy1': 1, 'policy2': 2, 'policy3': 3}\n\n\n# Internal States per Mechanism\ndef add(y, x):\n    return lambda _g, step, sH, s, _input: (y, s[y] + x)\n\ndef policies(_g, step, sH, s, _input):\n    y = 'policies'\n    x = _input\n    return (y, x)\n\n\n# Genesis States\ngenesis_states = {\n    'policies': {},\n    's1': 0\n}\n\nvariables = {\n    's1': add('s1', 1),\n    \"policies\": policies\n}\n\npsubs = {\n    \"m1\": {\n        \"policies\": {\n            \"p1\": p1m1,\n            \"p2\": p2m1\n        },\n        \"variables\": variables\n    },\n    \"m2\": {\n        \"policies\": {\n            \"p1\": p1m2,\n            \"p2\": p2m2\n        },\n        \"variables\": variables\n    },\n    \"m3\": {\n        \"policies\": {\n            \"p1\": p1m3,\n            \"p2\": p2m3\n        },\n        \"variables\": variables\n    }\n}\n\n\nsim_config = config_sim(\n    {\n        \"N\": 1,\n        \"T\": range(3),\n    }\n)\n\nexp = Experiment()\nexp.append_model(\n    model_id='policy_agg',\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    partial_state_update_blocks=psubs,\n    policy_ops=[lambda a, b: a + b, lambda y: y * 2] # Default: lambda a, b: a + b\n)\n\nexec_mode = ExecutionMode()\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nrun = Executor(exec_context=local_proc_ctx, configs=exp.configs)\n\nraw_result, tensor_field, sessions = run.execute()\nresult = pd.DataFrame(raw_result)\n\nprint()\nprint(\"Tensor Field:\")\nprint(tabulate(tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Output:\")\nprint(tabulate(result, headers='keys', tablefmt='psql'))\nprint()\n"
  },
  {
    "path": "documentation/examples/sys_model_A.py",
    "content": "import numpy as np\nfrom datetime import timedelta\n\nfrom cadCAD.configuration.utils import bound_norm_random, config_sim, time_step, env_trigger\nfrom cadCAD.configuration import Experiment\nfrom documentation.examples import system_model_AB_exp\n\nseeds = {\n    'z': np.random.RandomState(1),\n    'a': np.random.RandomState(2),\n    'b': np.random.RandomState(3),\n    'c': np.random.RandomState(4)\n}\n\n\n# Policies per Mechanism\ndef p1m1(_g, step, sH, s):\n    return {'param1': 1}\ndef p2m1(_g, step, sH, s):\n    return {'param1': 1, 'param2': 4}\n\ndef p1m2(_g, step, sH, s):\n    return {'param1': 'a', 'param2': 2}\ndef p2m2(_g, step, sH, s):\n    return {'param1': 'b', 'param2': 4}\n\ndef p1m3(_g, step, sH, s):\n    return {'param1': ['c'], 'param2': np.array([10, 100])}\ndef p2m3(_g, step, sH, s):\n    return {'param1': ['d'], 'param2': np.array([20, 200])}\n\n\n# Internal States per Mechanism\ndef s1m1(_g, step, sH, s, _input):\n    y = 's1'\n    x = s['s1'] + 1\n    return (y, x)\ndef s2m1(_g, step, sH, s, _input):\n    y = 's2'\n    x = _input['param2']\n    return (y, x)\n\ndef s1m2(_g, step, sH, s, _input):\n    y = 's1'\n    x = s['s1'] + 1\n    return (y, x)\ndef s2m2(_g, step, sH, s, _input):\n    y = 's2'\n    x = _input['param2']\n    return (y, x)\n\ndef s1m3(_g, step, sH, s, _input):\n    y = 's1'\n    x = s['s1'] + 1\n    return (y, x)\ndef s2m3(_g, step, sH, s, _input):\n    y = 's2'\n    x = _input['param2']\n    return (y, x)\n\ndef policies(_g, step, sH, s, _input):\n    y = 'policies'\n    x = _input\n    return (y, x)\n\n\n# Exogenous States\nproc_one_coef_A = 0.7\nproc_one_coef_B = 1.3\n\ndef es3(_g, step, sH, s, _input):\n    y = 's3'\n    x = s['s3'] * bound_norm_random(seeds['a'], proc_one_coef_A, proc_one_coef_B)\n    return (y, x)\n\ndef es4(_g, step, sH, s, _input):\n    y = 's4'\n    x = s['s4'] * bound_norm_random(seeds['b'], proc_one_coef_A, proc_one_coef_B)\n    return (y, x)\n\ndef update_timestamp(_g, step, sH, s, _input):\n    y = 'timestamp'\n    return y, time_step(dt_str=s[y], dt_format='%Y-%m-%d %H:%M:%S', _timedelta=timedelta(days=0, minutes=0, seconds=1))\n\n\n# Genesis States\ngenesis_states = {\n    's1': 0.0,\n    's2': 0.0,\n    's3': 1.0,\n    's4': 1.0,\n    'timestamp': '2018-10-01 15:16:24'\n}\n\n\n# Environment Process\ntrigger_timestamps = ['2018-10-01 15:16:25', '2018-10-01 15:16:27', '2018-10-01 15:16:29']\nenv_processes = {\n    \"s3\": [lambda _g, x: 5],\n    \"s4\": env_trigger(3)(trigger_field='timestamp', trigger_vals=trigger_timestamps, funct_list=[lambda _g, x: 10])\n}\n\n\npsubs = [\n    {\n        \"policies\": {\n            \"b1\": p1m1,\n            \"b2\": p2m1\n        },\n        \"variables\": {\n            \"s1\": s1m1,\n            \"s2\": s2m1,\n            \"s3\": es3,\n            \"s4\": es4,\n            \"timestamp\": update_timestamp\n        }\n    },\n    {\n        \"policies\": {\n            \"b1\": p1m2,\n            \"b2\": p2m2\n        },\n        \"variables\": {\n            \"s1\": s1m2,\n            \"s2\": s2m2,\n            # \"s3\": es3p1,\n            # \"s4\": es4p2,\n        }\n    },\n    {\n        \"policies\": {\n            \"b1\": p1m3,\n            \"b2\": p2m3\n        },\n        \"variables\": {\n            \"s1\": s1m3,\n            \"s2\": s2m3,\n            # \"s3\": es3p1,\n            # \"s4\": es4p2,\n        }\n    }\n]\n\n\nsim_config = config_sim(\n    {\n        \"N\": 2,\n        \"T\": range(1),\n    }\n)\n\nexp = Experiment()\nexp.append_model(\n    model_id='sys_model_A',\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    env_processes=env_processes,\n    partial_state_update_blocks=psubs,\n    policy_ops=[lambda a, b: a + b]\n)\n\nsystem_model_AB_exp.append_model(\n    model_id='sys_model_A',\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    env_processes=env_processes,\n    partial_state_update_blocks=psubs,\n    policy_ops=[lambda a, b: a + b]\n)\n"
  },
  {
    "path": "documentation/examples/sys_model_AB_exec.py",
    "content": "import pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom documentation.examples import sys_model_A, sys_model_B, system_model_AB_exp\n\nexec_mode = ExecutionMode()\n\n# Multiple Processes Execution using Multiple System Model Configurations:\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nsys_model_AB_simulation = Executor(exec_context=local_proc_ctx, configs=system_model_AB_exp.configs)\n\ni = 0\nconfig_names = ['sys_model_A', 'sys_model_B']\nsys_model_AB_raw_result, sys_model_AB_tensor_field, sessions = sys_model_AB_simulation.execute()\nsys_model_AB_result = pd.DataFrame(sys_model_AB_raw_result)\nprint()\nprint(f\"Tensor Field:\")\nprint(tabulate(sys_model_AB_tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Result: System Events DataFrame:\")\nprint(tabulate(sys_model_AB_result, headers='keys', tablefmt='psql'))\nprint()\n"
  },
  {
    "path": "documentation/examples/sys_model_A_exec.py",
    "content": "import pandas as pd\nfrom tabulate import tabulate\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom documentation.examples import sys_model_A\nfrom documentation.examples.sys_model_A import exp\n\nexec_mode = ExecutionMode()\n\n# Single Process Execution using a Single System Model Configuration:\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nsys_model_A_simulation = Executor(exec_context=local_proc_ctx, configs=exp.configs)\n\nsys_model_A_raw_result, sys_model_A_tensor_field, sessions = sys_model_A_simulation.execute()\nsys_model_A_result = pd.DataFrame(sys_model_A_raw_result)\nprint()\nprint(\"Tensor Field: sys_model_A\")\nprint(tabulate(sys_model_A_tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Result: System Events DataFrame\")\nprint(tabulate(sys_model_A_result, headers='keys', tablefmt='psql'))\nprint()\n"
  },
  {
    "path": "documentation/examples/sys_model_B.py",
    "content": "import numpy as np\nfrom datetime import timedelta\n\nfrom cadCAD.configuration.utils import bound_norm_random, config_sim, env_trigger, time_step\nfrom cadCAD.configuration import Experiment\nfrom documentation.examples import system_model_AB_exp\n\nseeds = {\n    'z': np.random.RandomState(1),\n    'a': np.random.RandomState(2),\n    'b': np.random.RandomState(3),\n    'c': np.random.RandomState(3)\n}\n\n\n# Policies per Mechanism\ndef p1m1(_g, step, sH, s):\n    return {'param1': 1}\ndef p2m1(_g, step, sH, s):\n    return {'param2': 4}\n\ndef p1m2(_g, step, sH, s):\n    return {'param1': 'a', 'param2': 2}\ndef p2m2(_g, step, sH, s):\n    return {'param1': 'b', 'param2': 4}\n\ndef p1m3(_g, step, sH, s):\n    return {'param1': ['c'], 'param2': np.array([10, 100])}\ndef p2m3(_g, step, sH, s):\n    return {'param1': ['d'], 'param2': np.array([20, 200])}\n\n\n# Internal States per Mechanism\ndef s1m1(_g, step, sH, s, _input):\n    y = 's1'\n    x = _input['param1']\n    return (y, x)\ndef s2m1(_g, step, sH, s, _input):\n    y = 's2'\n    x = _input['param2']\n    return (y, x)\n\ndef s1m2(_g, step, sH, s, _input):\n    y = 's1'\n    x = _input['param1']\n    return (y, x)\ndef s2m2(_g, step, sH, s, _input):\n    y = 's2'\n    x = _input['param2']\n    return (y, x)\n\ndef s1m3(_g, step, sH, s, _input):\n    y = 's1'\n    x = _input['param1']\n    return (y, x)\ndef s2m3(_g, step, sH, s, _input):\n    y = 's2'\n    x = _input['param2']\n    return (y, x)\n\n\n# Exogenous States\nproc_one_coef_A = 0.7\nproc_one_coef_B = 1.3\n\ndef es3(_g, step, sH, s, _input):\n    y = 's3'\n    x = s['s3'] * bound_norm_random(seeds['a'], proc_one_coef_A, proc_one_coef_B)\n    return (y, x)\n\ndef es4(_g, step, sH, s, _input):\n    y = 's4'\n    x = s['s4'] * bound_norm_random(seeds['b'], proc_one_coef_A, proc_one_coef_B)\n    return (y, x)\n\ndef update_timestamp(_g, step, sH, s, _input):\n    y = 'timestamp'\n    return y, time_step(dt_str=s[y], dt_format='%Y-%m-%d %H:%M:%S', _timedelta=timedelta(days=0, minutes=0, seconds=1))\n\n\n# Genesis States\ngenesis_states = {\n    's1': 0,\n    's2': 0,\n    's3': 1,\n    's4': 1,\n    'timestamp': '2018-10-01 15:16:24'\n}\n\n\n# Environment Process\ntrigger_timestamps = ['2018-10-01 15:16:25', '2018-10-01 15:16:27', '2018-10-01 15:16:29']\nenv_processes = {\n    \"s3\": [lambda _g, x: 5],\n    \"s4\": env_trigger(3)(trigger_field='timestamp', trigger_vals=trigger_timestamps, funct_list=[lambda _g, x: 10])\n}\n\npsubs = [\n    {\n        \"policies\": {\n            \"b1\": p1m1,\n            # \"b2\": p2m1\n        },\n        \"states\": {\n            \"s1\": s1m1,\n            # \"s2\": s2m1\n            \"s3\": es3,\n            \"s4\": es4,\n            \"timestep\": update_timestamp\n        }\n    },\n    {\n        \"policies\": {\n            \"b1\": p1m2,\n            # \"b2\": p2m2\n        },\n        \"states\": {\n            \"s1\": s1m2,\n            # \"s2\": s2m2\n        }\n    },\n    {\n        \"policies\": {\n            \"b1\": p1m3,\n            \"b2\": p2m3\n        },\n        \"states\": {\n            \"s1\": s1m3,\n            \"s2\": s2m3\n        }\n    }\n]\n\nsim_config = config_sim(\n    {\n        \"N\": 2,\n        \"T\": range(5),\n    }\n)\n\nexp = Experiment()\nexp.append_model(\n    model_id='sys_model_B',\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    env_processes=env_processes,\n    partial_state_update_blocks=psubs\n)\n\nsystem_model_AB_exp.append_model(\n    model_id='sys_model_B',\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    env_processes=env_processes,\n    partial_state_update_blocks=psubs,\n    policy_ops=[lambda a, b: a + b]\n)\n"
  },
  {
    "path": "documentation/examples/sys_model_B_exec.py",
    "content": "import pandas as pd\nfrom tabulate import tabulate\n# The following imports NEED to be in the exact order\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom documentation.examples import sys_model_B\nfrom documentation.examples.sys_model_B import exp\n\nexec_mode = ExecutionMode()\n\nprint(\"Simulation Execution: Single Configuration\")\nprint()\nlocal_proc_ctx = ExecutionContext(context=exec_mode.local_mode)\nrun = Executor(exec_context=local_proc_ctx, configs=exp.configs)\n\nraw_result, tensor_field, sessions = run.execute()\nresult = pd.DataFrame(raw_result)\nprint()\nprint(\"Tensor Field: sys_model_B\")\nprint(tabulate(tensor_field, headers='keys', tablefmt='psql'))\nprint(\"Output:\")\nprint(tabulate(result, headers='keys', tablefmt='psql'))\nprint()\n"
  },
  {
    "path": "requirements.txt",
    "content": "-i https://pypi.org/simple\n\nparameterized>=0.7.4\npytest>=6.0.2\ntabulate>=0.8.7\nwheel>=0.38.1\npandas>=1.1.5\nfuncy>=1.16\ndill>=0.3.4\npathos>=0.2.8\nnumpy>=1.22.0\npytz>=2021.1\nsetuptools>=69.0.2\ngraphviz>=0.20.1\ntqdm>=4.65.0\npytest>=7.4.3"
  },
  {
    "path": "setup.py",
    "content": "from setuptools import find_packages, setup\n\nshort_description = (\n    \"cadCAD: a differential games based simulation software package for research, validation, and \\\n        Computer Aided Design of economic systems\"\n)\n\nlong_description = \"\"\"\ncadCAD (complex adaptive systems computer-aided design) is a python based, unified modeling framework for stochastic\ndynamical systems and differential games for research, validation, and Computer Aided Design of economic systems created\nby BlockScience. It is capable of modeling systems at all levels of abstraction from Agent Based Modeling (ABM) to\nSystem Dynamics (SD), and enabling smooth integration of computational social science simulations with empirical data\nscience workflows.\n\nAn economic system is treated as a state-based model and defined through a set of endogenous and exogenous state\nvariables which are updated through mechanisms and environmental processes, respectively. Behavioral models, which may\nbe deterministic or stochastic, provide the evolution of the system within the action space of the mechanisms.\nMathematical formulations of these economic games treat agent utility as derived from the state rather than direct from\nan action, creating a rich, dynamic modeling framework. Simulations may be run with a range of initial conditions and\nparameters for states, behaviors, mechanisms, and environmental processes to understand and visualize network behavior\nunder various conditions. Support for A/B testing policies, Monte Carlo analysis, and other common numerical methods is\nprovided.\n\"\"\"\n\nname = \"cadCAD\"\nversion = \"0.5.3\"\n\nsetup(\n    name=name,\n    version=version,\n    description=short_description,\n    long_description=long_description,\n    url=\"https://github.com/cadCAD-org/cadCAD\",\n    author=\"cadCAD-org Developers\",\n    author_email=\"info@block.science\",\n    license=\"LICENSE.txt\",\n    packages=find_packages(),\n    install_requires=[\n        \"pandas\",\n        \"funcy\",\n        \"dill\",\n        \"pathos\",\n        \"numpy\",\n        \"pytz\",\n        \"six\",\n        \"tqdm\",\n    ],\n    python_requires=\">=3.9.0\",\n)\n"
  },
  {
    "path": "testing/__init__.py",
    "content": ""
  },
  {
    "path": "testing/experiments/__init__.py",
    "content": "from cadCAD.configuration import Experiment\n\nexp_param_sweep = Experiment()\nexp_policy_agg = Experiment()"
  },
  {
    "path": "testing/generic_test.py",
    "content": "import unittest\nfrom functools import reduce\nfrom tabulate import tabulate\n\ndef generate_assertions_df(df, expected_results, target_cols, evaluations):\n    test_names = []\n    for eval_f in evaluations:\n        def wrapped_eval(a, b):\n            try:\n                return eval_f(a, b)\n            except KeyError:\n                return True\n\n        test_name = f\"{eval_f.__name__}_test\"\n        test_names.append(test_name)\n        df[test_name] = df.apply(\n            lambda x: wrapped_eval(\n                x.filter(items=target_cols).to_dict(),\n                expected_results[(x['subset'], x['run'], x['timestep'], x['substep'])]\n            ),\n            axis=1\n        )\n\n    return df, test_names\n\n\ndef make_generic_test(params):\n    class TestSequence(unittest.TestCase):\n        def generic_test(self, tested_df, expected_reults, test_name):\n            erroneous = tested_df[(tested_df[test_name] == False)]\n            print(tabulate(tested_df, headers='keys', tablefmt='psql'))\n\n            if erroneous.empty is False:  # Or Entire df IS NOT erroneous\n                for index, row in erroneous.iterrows():\n                    # expected = expected_reults[(row['simulation'], row['run'], row['timestep'], row['substep'])]\n                    expected = expected_reults[(row['subset'], row['run'], row['timestep'], row['substep'])]\n                    unexpected = {f\"invalid_{k}\": expected[k] for k in expected if k in row and expected[k] != row[k]}\n\n                    for key in unexpected.keys():\n                        erroneous[key] = None\n                        erroneous.at[index, key] = unexpected[key]\n                # etc.\n\n            self.assertTrue(reduce(lambda a, b: a and b, tested_df[test_name]))\n\n        @parameterized.expand(params)\n        def test_validation(self, name, result_df, expected_results, target_cols, evaluations):\n            tested_df, test_names = generate_assertions_df(result_df, expected_results, target_cols, evaluations)\n\n            for test_name in test_names:\n                self.generic_test(tested_df, expected_results, test_name)\n\n    return TestSequence\n"
  },
  {
    "path": "testing/models/__init__.py",
    "content": "from cadCAD.configuration import Experiment\n\nexp = Experiment()"
  },
  {
    "path": "testing/models/param_sweep.py",
    "content": "import pprint\n\nfrom cadCAD import experiment\nfrom cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import env_trigger, var_substep_trigger, config_sim, psub_list\nfrom typing import Dict, List\n\npp = pprint.PrettyPrinter(indent=4)\n\ndef some_function(x):\n    return x\n\n# Optional\n# dict must contain lists opf 2 distinct lengths\ng: Dict[str, List[int]] = {\n    'alpha': [1],\n    'beta': [2, some_function],\n    'gamma': [3, 4],\n    # 'beta': [1],\n    # 'gamma': [4],\n    'omega': [7]\n}\n\npsu_steps = ['m1', 'm2', 'm3']\nsystem_substeps = len(psu_steps)\nvar_timestep_trigger = var_substep_trigger([0, system_substeps])\nenv_timestep_trigger = env_trigger(system_substeps)\nenv_process = {}\n\n\n# ['s1', 's2', 's3', 's4']\n# Policies per Mechanism\ndef gamma(_g, step, sL, s, **kwargs):\n    return {'gamma': _g['gamma']}\n\n\ndef omega(_g, step, sL, s, **kwargs):\n    return {'omega': _g['omega']}\n\n\n# Internal States per Mechanism\ndef alpha(_g, step, sL, s, _input, **kwargs):\n    return 'alpha', _g['alpha']\n\n\ndef beta(_g, step, sL, s, _input, **kwargs):\n    return 'beta', _g['beta']\n\n\ndef policies(_g, step, sL, s, _input, **kwargs):\n    return 'policies', _input\n\n\ndef sweeped(_g, step, sL, s, _input, **kwargs):\n    return 'sweeped', {'beta': _g['beta'], 'gamma': _g['gamma']}\n\npsu_block = {k: {\"policies\": {}, \"states\": {}} for k in psu_steps}\nfor m in psu_steps:\n    psu_block[m]['policies']['gamma'] = gamma\n    psu_block[m]['policies']['omega'] = omega\n    psu_block[m][\"states\"]['alpha'] = alpha\n    psu_block[m][\"states\"]['beta'] = beta\n    psu_block[m]['states']['policies'] = policies\n    psu_block[m][\"states\"]['sweeped'] = var_timestep_trigger(y='sweeped', f=sweeped)\n\n\n# Genesis States\ngenesis_states = {\n    'alpha': 0,\n    'beta': 0,\n    'policies': {},\n    'sweeped': {}\n}\n\n# Environment Process\nenv_process['sweeped'] = env_timestep_trigger(trigger_field='timestep', trigger_vals=[5], funct_list=[lambda _g, x: _g['beta']])\n\n\nsim_config = config_sim(\n    {\n        \"N\": 2,\n        \"T\": range(5),\n        \"M\": g, # Optional\n    }\n)\n\n# New Convention\npartial_state_update_blocks = psub_list(psu_block, psu_steps)\n\nexp = Experiment()\nexp.append_model(\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    env_processes=env_process,\n    partial_state_update_blocks=partial_state_update_blocks\n)\nexperiment.append_model(\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    env_processes=env_process,\n    partial_state_update_blocks=partial_state_update_blocks\n)\n"
  },
  {
    "path": "testing/models/policy_aggregation.py",
    "content": "from cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import config_sim\n\n# Policies per Mechanism\ndef p1m1(_g, step, sL, s, **kwargs):\n    return {'policy1': 1}\ndef p2m1(_g, step, sL, s, **kwargs):\n    return {'policy2': 2}\n\ndef p1m2(_g, step, sL, s, **kwargs):\n    return {'policy1': 2, 'policy2': 2}\ndef p2m2(_g, step, sL, s, **kwargs):\n    return {'policy1': 2, 'policy2': 2}\n\ndef p1m3(_g, step, sL, s, **kwargs):\n    return {'policy1': 1, 'policy2': 2, 'policy3': 3}\ndef p2m3(_g, step, sL, s, **kwargs):\n    return {'policy1': 1, 'policy2': 2, 'policy3': 3}\n\n\n# Internal States per Mechanism\ndef add(y, x):\n    return lambda _g, step, sH, s, _input, **kwargs: (y, s[y] + x)\n\ndef policies(_g, step, sH, s, _input, **kwargs):\n    y = 'policies'\n    x = _input\n    return (y, x)\n\n\n# Genesis States\ngenesis_states = {\n    'policies': {},\n    's1': 0\n}\n\nvariables = {\n    's1': add('s1', 1),\n    \"policies\": policies\n}\n\npartial_state_update_block = {\n    \"m1\": {\n        \"policies\": {\n            \"p1\": p1m1,\n            \"p2\": p2m1\n        },\n        \"variables\": variables\n    },\n    \"m2\": {\n        \"policies\": {\n            \"p1\": p1m2,\n            \"p2\": p2m2\n        },\n        \"variables\": variables\n    },\n    \"m3\": {\n        \"policies\": {\n            \"p1\": p1m3,\n            \"p2\": p2m3\n        },\n        \"variables\": variables\n    }\n}\n\n\nsim_config = config_sim(\n    {\n        \"N\": 1,\n        \"T\": range(3),\n    }\n)\n\nexp = Experiment()\nexp.append_model(\n    sim_configs=sim_config,\n    initial_state=genesis_states,\n    partial_state_update_blocks=partial_state_update_block,\n    policy_ops=[lambda a, b: a + b, lambda y: y * 2] # Default: lambda a, b: a + b\n)\n"
  },
  {
    "path": "testing/results_comparison.py",
    "content": "import unittest\nimport pandas as pd # type: ignore\nfrom tabulate import tabulate # type: ignore\nfrom pandas._testing import assert_frame_equal # type: ignore\nfrom testing.utils import assertEqual\n\ndef compare_results_pytest(result_diff):\n    val_error_status_ind = False not in result_diff.val_error_status.tolist()\n    type_error_status_ind = False not in result_diff.type_error_status.tolist()\n    df_out = None\n    erroneous_indexes = None\n    select_result_diff = None\n\n    if (val_error_status_ind is False) or (type_error_status_ind is False):\n        erroneous_indexes = list(result_diff.index[result_diff[\"val_error_status\"] == False])\n        select_result_diff = result_diff.iloc[erroneous_indexes]\n        df_out = tabulate(select_result_diff, headers='keys', tablefmt='psql')\n\n    assertEqual(val_error_status_ind, True, \"Value Error\")\n    assertEqual(type_error_status_ind, True, \"Type Error\")\n\ndef compare_results(result_diff):\n    class CompareResults(unittest.TestCase):\n        def setUp(self):\n            result_diff.columns\n            self.val_error_status_ind = False not in result_diff.val_error_status.tolist()\n            self.type_error_status_ind = False not in result_diff.type_error_status.tolist()\n            self.df_out = None\n            self.erroneous_indexes = None\n            self.select_result_diff = None\n\n            if (self.val_error_status_ind is False) or (self.type_error_status_ind is False):\n                self.erroneous_indexes = list(result_diff.index[result_diff[\"val_error_status\"] == False])\n                self.select_result_diff = result_diff.iloc[self.erroneous_indexes]\n                self.df_out = tabulate(self.select_result_diff, headers='keys', tablefmt='psql')\n\n        def test_val_error_status(self):\n            print(self.df_out)\n            self.assertEqual(self.val_error_status_ind, True, \"Value Error\")\n\n        def test_type_error_status(self):\n            print(self.df_out)\n            self.assertEqual(self.type_error_status_ind, True, \"Type Error\")\n\n    return CompareResults\n\n\ndef dataframe_difference(df1, df2):\n    def discrepancies(row):\n        return {\n            col: {'values': list(vals), 'type': [type(v) for v in vals]} for col, vals in row.items()\n            if vals[0] != vals[1]\n        }\n\n    def val_error_status(val):\n        if type(val) is dict and len(val) != 0:\n            return False\n        else:\n            return True\n\n    def type_error_status(val):\n        if type(val) is dict and len(val) != 0:\n            return list(set([v['type'][0] == v['type'][1] for k, v in val.items()]))[0]\n        else:\n            return True\n\n    df1_cols, df2_cols = list(df1.columns), list(df2.columns)\n    if set(df1_cols) == set(df2_cols) and df1.shape == df2.shape:\n        df_equal_ind = True\n        try:\n            assert_frame_equal(df1, df2)\n        except:\n            df_equal_ind = False\n\n        if df_equal_ind is False:\n            data = [list(zip(df1[col], df2[col])) for col in df1_cols]\n\n            df = pd.DataFrame(data).T\n            df.columns = df1_cols\n            df['discrepancies'] = df.apply(discrepancies, axis=1)\n\n            result_df1 = df1.reset_index()\n            discrepancies_df = df[['discrepancies']].reset_index()\n            result_diff = result_df1.merge(discrepancies_df, how='left', on='index')\n            result_diff['val_error_status'] = result_diff['discrepancies'].apply(val_error_status)\n            result_diff['type_error_status'] = result_diff['discrepancies'].apply(type_error_status)\n\n            return result_diff\n        else:\n            df1['discrepancies'] = None\n            df1['val_error_status'] = True\n            df1['type_error_status'] = True\n            return df1\n    else:\n        df1_row_count, df1_col_count = df1.shape\n        df2_row_count, df2_col_count = df2.shape\n        raise Exception(f\"\"\"\n        DataFrames have mismatched dimensions or columns:\n\n            Columns:\n                * df1: {df1_cols}\n                * df2: {df2_cols}     \n            Shapes:\n                * df1: \n                    *    Row Count: {df1_row_count}\n                    * Column Count: {df1_col_count}\n                * df2:\n                    *    Row Count: {df2_row_count}\n                    * Column Count: {df2_col_count}\n        \"\"\")\n"
  },
  {
    "path": "testing/test_additional_objs.py",
    "content": "from typing import Dict, List\nfrom cadCAD.engine import Executor, ExecutionContext, ExecutionMode\nfrom cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import env_trigger, var_substep_trigger, config_sim, psub_list\nfrom cadCAD.types import *\nimport pandas as pd # type: ignore\nimport types\nimport inspect\nimport pytest\n\ndef describe_or_return(v: object) -> object:\n    \"\"\"\n    Thanks @LinuxIsCool!\n    \"\"\"\n    if isinstance(v, types.FunctionType):\n        return f'function: {v.__name__}'\n    elif isinstance(v, types.LambdaType) and v.__name__ == '<lambda>':\n        return f'lambda: {inspect.signature(v)}'\n    else:\n        return v\n\n\ndef select_M_dict(M_dict: Dict[str, object], keys: set) -> Dict[str, object]:\n    \"\"\"\n    Thanks @LinuxIsCool!\n    \"\"\"\n    return {k: describe_or_return(v) for k, v in M_dict.items() if k in keys}\n\n\ndef select_config_M_dict(configs: list, i: int, keys: set) -> Dict[str, object]:\n    return select_M_dict(configs[i].sim_config['M'], keys)\n\n\ndef drop_substeps(_df):\n    first_ind = (_df.substep == 0) & (_df.timestep == 0)\n    last_ind = _df.substep == max(_df.substep)\n    inds_to_drop = first_ind | last_ind\n    return _df.copy().loc[inds_to_drop].drop(columns=['substep'])\n\n\ndef assign_params(_df: pd.DataFrame, configs) -> pd.DataFrame:\n    \"\"\"\n    Based on `cadCAD-tools` package codebase, by @danlessa\n    \"\"\"\n    M_dict = configs[0].sim_config['M']\n    params_set = set(M_dict.keys())\n    selected_params = params_set\n\n    # Attribute parameters to each row\n    # 1. Assign the parameter set from the first row first, so that\n    # columns are created\n    first_param_dict = select_config_M_dict(configs, 0, selected_params)\n\n    # 2. Attribute parameter on an (simulation, subset, run) basis\n    df = _df.assign(**first_param_dict).copy()\n    for i, (_, subset_df) in enumerate(df.groupby(['simulation', 'subset', 'run'])):\n        df.loc[subset_df.index] = subset_df.assign(**select_config_M_dict(configs,\n                                                                i,\n                                                                selected_params))\n    return df\n\n\n\n\nSWEEP_PARAMS: Dict[str, List] = {\n        'alpha': [1],\n        'beta': [lambda x: 2 * x, lambda x: x],\n        'gamma': [3, 4],\n        'omega': [7]\n }\n\nSINGLE_PARAMS: Dict[str, object] = {\n        'alpha': 1,\n        'beta': lambda x: x,\n        'gamma': 3,\n        'omega': 5\n }\n\n\ndef create_experiment(N_RUNS=2, N_TIMESTEPS=3, params: dict=SWEEP_PARAMS):\n    psu_steps = ['m1', 'm2', 'm3']\n    system_substeps = len(psu_steps)\n    var_timestep_trigger = var_substep_trigger([0, system_substeps])\n    env_timestep_trigger = env_trigger(system_substeps)\n    env_process = {}\n\n\n    # ['s1', 's2', 's3', 's4']\n    # Policies per Mechanism\n    def gamma(params: Parameters, substep: Substep, history: StateHistory, state: State, **kwargs):\n        return {'gamma': params['gamma']}\n\n\n    def omega(params: Parameters, substep: Substep, history: StateHistory, state: State, **kwarg):\n        return {'omega': params['omega']}\n\n\n    # Internal States per Mechanism\n    def alpha(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'alpha_var', params['alpha']\n\n\n    def beta(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'beta_var', params['beta']\n    \n    def gamma_var(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'gamma_var', params['gamma']\n    \n    def omega_var(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'omega_var', params['omega']\n\n\n    def policies(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'policies', _input\n\n\n    def sweeped(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'sweeped', {'beta': params['beta'], 'gamma': params['gamma']}\n\n    psu_block: dict = {k: {\"policies\": {}, \"states\": {}} for k in psu_steps}\n    for m in psu_steps:\n        psu_block[m]['policies']['gamma'] = gamma\n        psu_block[m]['policies']['omega'] = omega\n        psu_block[m][\"states\"]['alpha_var'] = alpha\n        psu_block[m][\"states\"]['beta_var'] = beta\n        psu_block[m][\"states\"]['gamma_var'] = gamma_var\n        psu_block[m][\"states\"]['omega_var'] = omega_var\n        psu_block[m]['states']['policies'] = policies\n        psu_block[m][\"states\"]['sweeped'] = var_timestep_trigger(y='sweeped', f=sweeped)\n\n\n    # Genesis States\n    genesis_states = {\n        'alpha_var': 0,\n        'beta_var': 0,\n        'gamma_var': 0,\n        'omega_var': 0,\n        'policies': {},\n        'sweeped': {}\n    }\n\n    # Environment Process\n    env_process['sweeped'] = env_timestep_trigger(trigger_field='timestep', trigger_vals=[5], funct_list=[lambda _g, x: _g['beta']])\n\n    sim_config = config_sim(\n        {\n            \"N\": N_RUNS,\n            \"T\": range(N_TIMESTEPS),\n            \"M\": params, # Optional\n        }\n    )\n\n    # New Convention\n    partial_state_update_blocks = psub_list(psu_block, psu_steps)\n\n    exp = Experiment()\n    exp.append_model(\n        sim_configs=sim_config,\n        initial_state=genesis_states,\n        env_processes=env_process,\n        partial_state_update_blocks=partial_state_update_blocks\n    )\n    return exp\n\n\ndef test_deepcopy_off():\n    exp = create_experiment()\n    mode = ExecutionMode().local_mode\n    exec_context = ExecutionContext(mode, additional_objs={'deepcopy_off': True})\n    executor = Executor(exec_context=exec_context, configs=exp.configs)\n    (records, tensor_field, _) = executor.execute()\n    df = drop_substeps(assign_params(pd.DataFrame(records), exp.configs))\n\n    # XXX: parameters should always be of the same type. Else, the test will fail\n    first_sim_config = exp.configs[0].sim_config['M']\n\n\n    for (i, row) in df.iterrows():\n        if row.timestep > 0:\n            \n            assert row['alpha_var'] == row['alpha']\n            assert type(row['alpha_var']) == type(first_sim_config['alpha'])\n            assert row['gamma_var'] == row['gamma']\n            assert type(row['gamma_var']) == type(first_sim_config['gamma'])\n            assert row['omega_var'] == row['omega']\n            assert type(row['omega_var']) == type(first_sim_config['omega'])\n\n"
  },
  {
    "path": "testing/test_arg_count.py",
    "content": "from typing import Dict, List\nfrom cadCAD.engine import Executor, ExecutionContext, ExecutionMode\nfrom cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import env_trigger, var_substep_trigger, config_sim, psub_list\nfrom cadCAD.types import *\nimport pandas as pd # type: ignore\nimport types\nimport inspect\nimport pytest\n\ndef test_sufs():\n\n    psubs = [\n        {\n            'policies': {\n                'p_A': lambda _1, _2, _3, _4: {}\n            },\n            'variables': {\n                'v_A': lambda _1, _2, _3, _4, _5: ('a', 1)\n            }\n        }\n    ]\n\n    initial_state = {\n        'v_A': None\n    }\n\n    params = {'p_A': [1]}\n\n    N_t = 5\n    N_r = 1\n\n    sim_config = config_sim(\n        {\n            \"N\": N_r,\n            \"T\": range(N_t),\n            \"M\": params, # Optional\n        }\n    )\n\n    exp = Experiment()\n    exp.append_model(\n        sim_configs=sim_config,\n        initial_state=initial_state,\n        partial_state_update_blocks=psubs\n    )\n\n    mode = ExecutionMode().local_mode\n    exec_context = ExecutionContext(mode, additional_objs={'deepcopy_off': True})\n    executor = Executor(exec_context=exec_context, configs=exp.configs)\n    (records, tensor_field, _) = executor.execute()\n"
  },
  {
    "path": "testing/test_param_count.py",
    "content": "from cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import config_sim\nfrom cadCAD.engine import Executor, ExecutionContext, ExecutionMode\nimport pytest\n\n\nP_no_lst = {'pA': 1, 'pB': 2, 'pC': 3}\nP_single_lst = {'pA': [1], 'pB': [1], 'pC': [3]}\nP_single_swp = {'pA': [4, 5, 6], 'pB': [1], 'pC': [3]}\nP_all_swp = {'pA': [7, 8, 9], 'pB': [1, 2, 3], 'pC': [1, 2, 3]}\nP_all_but_one_swp = {'pA': [7, 8, 9], 'pB': [1, 2, 3], 'pC': [1]}\nPs = [P_no_lst, P_single_lst, P_single_swp, P_all_swp, P_all_but_one_swp]\n\nCONFIG_SIGNATURES_TO_TEST = [(3, 3, 3, 3, 3),\n                             (1, 3, 3, 3, 3),\n                             (3, 1, 3, 3, 3),\n                             (1, 1, 3, 3, 3),\n                             (3, 3, 1, 3, 3),\n                             (1, 3, 1, 3, 3),\n                             (1, 1, 1, 3, 3)]\n\n\ndef run_experiment(exp: Experiment, mode: str):\n    exec_context = ExecutionContext(mode)\n    executor = Executor(exec_context=exec_context, configs=exp.configs)\n    (records, tensor_field, _) = executor.execute()\n    return records\n\n\ndef param_count_test_suf_generator(provided_params):\n    def s_test_param_count(params, _2, _3, _4, _5):\n        assert params.keys() == provided_params.keys(), 'Params are not matching'\n        return ('varA', None)\n    return s_test_param_count\n\n\ndef param_count_test_policy_generator(provided_params):\n    def p_test_param_count(params, _2, _3, _4):\n        assert params.keys() == provided_params.keys(), 'Params are not matching'\n        return {'sigA': None}\n    return p_test_param_count\n\n\ndef create_experiments(N_simulations=3, N_sweeps=3, N_runs=3, N_timesteps=3, N_substeps=3, params={}) -> Experiment:\n\n    INITIAL_STATE = {'varA': None}\n    PSUBs = [{'policies': {'sigA': param_count_test_policy_generator(\n        params)}, 'variables': {'varA': param_count_test_suf_generator(params)}}] * N_substeps\n\n    SIM_CONFIG = config_sim(\n        {\n            \"N\": N_runs,\n            \"T\": range(N_timesteps),\n            \"M\": params,  # Optional\n        }\n    )\n\n    exp = Experiment()\n    for i_sim in range(N_simulations):\n        exp.append_model(\n            sim_configs=SIM_CONFIG,\n            initial_state=INITIAL_STATE,\n            partial_state_update_blocks=PSUBs\n        )\n    return exp\n\n\ndef expected_rows(N_simulations, N_sweeps, N_runs, N_timesteps, N_substeps, P) -> int:\n    return N_simulations * N_sweeps * N_runs * (N_timesteps * N_substeps + 1)\n\n\n@pytest.mark.parametrize(\"N_sim,N_sw,N_r,N_t,N_s\", CONFIG_SIGNATURES_TO_TEST)\n@pytest.mark.parametrize(\"P\", Ps)\ndef test_row_count_single(N_sim, N_sw, N_r, N_t, N_s, P):\n    args = (N_sim, N_sw, N_r, N_t, N_s, P)\n    len(run_experiment(create_experiments(*args), 'single_proc'))\n\n\n@pytest.mark.parametrize(\"N_sim,N_sw,N_r,N_t,N_s\", CONFIG_SIGNATURES_TO_TEST)\n@pytest.mark.parametrize(\"P\", Ps)\ndef test_row_count_local(N_sim, N_sw, N_r, N_t, N_s, P):\n    args = (N_sim, N_sw, N_r, N_t, N_s, P)\n    len(run_experiment(create_experiments(*args), 'local_proc'))\n"
  },
  {
    "path": "testing/test_print.py",
    "content": "from cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import config_sim\nfrom cadCAD.engine import Executor, ExecutionContext, ExecutionMode\nimport pytest\n\nP_no_lst = {'pA': 1, 'pB': 2, 'pC': 3}\nP_single_lst = {'pA': [1], 'pB': [1], 'pC': [3]}\nP_single_swp = {'pA': [4, 5, 6], 'pB': [1], 'pC': [3]}\nP_all_swp = {'pA': [7, 8, 9], 'pB': [1, 2, 3], 'pC': [1, 2, 3]}\nP_all_but_one_swp = {'pA': [7, 8, 9], 'pB': [1, 2, 3], 'pC': [1]}\nPs = [P_no_lst, P_single_lst, P_single_swp, P_all_swp, P_all_but_one_swp]\n\nCONFIG_SIGNATURES_TO_TEST = [(3, 3, 3, 3, 3),\n                             (1, 3, 3, 3, 3),\n                             (3, 1, 3, 3, 3),\n                             (1, 1, 3, 3, 3),\n                             (3, 3, 1, 3, 3),\n                             (1, 3, 1, 3, 3),\n                             (1, 1, 1, 3, 3)]\n\n\ndef run_experiment(exp: Experiment, mode: str, supress_print=False):\n    exec_context = ExecutionContext(mode)\n    executor = Executor(exec_context=exec_context, configs=exp.configs, supress_print=supress_print)\n    (records, tensor_field, _) = executor.execute()\n    return records\n\n\ndef param_count_test_suf_generator(provided_params):\n    def s_test_param_count(params, _2, _3, _4, _5):\n        assert params.keys() == provided_params.keys(), 'Params are not matching'\n        return ('varA', None)\n    return s_test_param_count\n\n\ndef param_count_test_policy_generator(provided_params):\n    def p_test_param_count(params, _2, _3, _4):\n        assert params.keys() == provided_params.keys(), 'Params are not matching'\n        return {'sigA': None}\n    return p_test_param_count\n\n\ndef create_experiments(N_simulations=3, N_sweeps=3, N_runs=3, N_timesteps=3, N_substeps=3, params={}) -> Experiment:\n\n    INITIAL_STATE = {'varA': None}\n    PSUBs = [{'policies': {'sigA': param_count_test_policy_generator(\n        params)}, 'variables': {'varA': param_count_test_suf_generator(params)}}] * N_substeps\n\n    SIM_CONFIG = config_sim(\n        {\n            \"N\": N_runs,\n            \"T\": range(N_timesteps),\n            \"M\": params,  # Optional\n        }\n    )\n\n    exp = Experiment()\n    for i_sim in range(N_simulations):\n        exp.append_model(\n            sim_configs=SIM_CONFIG,\n            initial_state=INITIAL_STATE,\n            partial_state_update_blocks=PSUBs\n        )\n    return exp\n\n\n\ndef test_print(capfd):\n    exp = run_experiment(create_experiments(N_simulations=3, N_sweeps=3, N_runs=3, N_timesteps=3, N_substeps=3, params={'a': 0}), 'single_proc', supress_print=False)\n    out, err = capfd.readouterr()\n    assert \"                  ___________    ____\\n  ________ __ ___/ / ____/   |  / __ \\\\\\n / ___/ __` / __  / /   / /| | / / / /\\n/ /__/ /_/ / /_/ / /___/ ___ |/ /_/ /\\n\\\\___/\\\\__,_/\\\\__,_/\\\\____/_/  |_/_____/\\nby cadCAD\" in out\n    assert 'Initializing configurations' in err\n\n    exp = run_experiment(create_experiments(N_simulations=3, N_sweeps=3, N_runs=3, N_timesteps=3, N_substeps=3, params={'a': 0}), 'single_proc', supress_print=True)\n    out, err = capfd.readouterr()\n    assert out == ''\n    assert err == ''"
  },
  {
    "path": "testing/test_results_signature.py",
    "content": "from cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import config_sim\nfrom cadCAD.engine import Executor, ExecutionContext, ExecutionMode\nimport pytest\nimport pandas as pd  # type: ignore\nfrom typing import Dict, List\n\n# (N_simulations, N_sweeps, N_runs, N_timesteps, N_substeps)\n\n\nCONFIG_SIGNATURES_TO_TEST = [\n    (1, 20, 5, 10, 5), (3, 3, 3, 3, 3), (1, 3, 3, 3, 3),\n    (3, 1, 3, 3, 3), (1, 1, 3, 3, 3),\n    (3, 3, 1, 3, 3), (1, 3, 1, 3, 3), (1, 1, 1, 3, 3)]\n\n\ndef run_experiment(exp: Experiment, mode: str) -> List[Dict]:\n    exec_context = ExecutionContext(mode)\n    executor = Executor(exec_context=exec_context, configs=exp.configs)\n    (records, tensor_field, _) = executor.execute()\n    return records\n\n\ndef create_experiments(N_simulations=3, N_sweeps=3, N_runs=3, N_timesteps=3, N_substeps=3) -> Experiment:\n\n    INITIAL_STATE = {'varA': None}\n    PSUBs = [{'policies': {}, 'variables': {}}] * N_substeps\n    params = {'A': [None] * N_sweeps,\n              'B': [None]}\n\n    SIM_CONFIG = config_sim(\n        {\n            \"N\": N_runs,\n            \"T\": range(N_timesteps),\n            \"M\": params,  # Optional\n        }\n    )\n\n    exp = Experiment()\n    for i_sim in range(N_simulations):\n        exp.append_model(\n            sim_configs=SIM_CONFIG,\n            initial_state=INITIAL_STATE,\n            partial_state_update_blocks=PSUBs\n        )\n    return exp\n\n\ndef expected_rows(N_simulations, N_sweeps, N_runs, N_timesteps, N_substeps) -> int:\n    return N_simulations * N_sweeps * N_runs * (N_timesteps * N_substeps + 1)\n\n\n@pytest.mark.parametrize(\"N_sim,N_sw,N_r,N_t,N_s\", CONFIG_SIGNATURES_TO_TEST)\ndef test_identifiers_value_counts_single(N_sim, N_sw, N_r, N_t, N_s):\n    args = (N_sim, N_sw, N_r, N_t, N_s)\n    results = run_experiment(create_experiments(*args), 'single_proc')\n    df = pd.DataFrame(results).query(\"timestep > 0\")\n    assert len(set(df.timestep.value_counts().values)) == 1\n    assert len(set(df.subset.value_counts().values)) == 1\n    assert len(set(df.run.value_counts().values)) == 1\n\n\n@pytest.mark.parametrize(\"N_sim,N_sw,N_r,N_t,N_s\", CONFIG_SIGNATURES_TO_TEST[:-1])\ndef test_identifiers_value_counts_multi(N_sim, N_sw, N_r, N_t, N_s):\n    args = (N_sim, N_sw, N_r, N_t, N_s)\n    results = run_experiment(create_experiments(*args), 'multi_proc')\n    df = pd.DataFrame(results).query(\"timestep > 0\")\n    assert len(set(df.timestep.value_counts().values)) == 1\n    assert len(set(df.subset.value_counts().values)) == 1\n    assert len(set(df.run.value_counts().values)) == 1\n"
  },
  {
    "path": "testing/test_row_count.py",
    "content": "from cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import config_sim\nfrom cadCAD.engine import Executor, ExecutionContext, ExecutionMode\nimport pytest\nimport pandas as pd # type: ignore\nfrom typing import Dict, List\n\nCONFIG_SIGNATURES_TO_TEST = [(3, 3, 3, 3, 3), (1, 3, 3, 3, 3),\n (3, 1, 3, 3, 3), (1, 1, 3, 3, 3),\n (3, 3, 1, 3, 3), (1, 3, 1, 3, 3), (1, 1, 1, 3, 3)]\n\ndef run_experiment(exp: Experiment, mode: str) -> List[Dict]:\n    exec_context = ExecutionContext(mode)\n    executor = Executor(exec_context=exec_context, configs=exp.configs)\n    (records, tensor_field, _) = executor.execute()\n    return records\n\n\ndef create_experiments(N_simulations=3, N_sweeps=3, N_runs=3, N_timesteps=3, N_substeps=3) -> Experiment:\n\n    INITIAL_STATE = {'varA': None}\n    PSUBs = [{'policies': {}, 'variables': {}}] * N_substeps\n    params = {'A': [None] * N_sweeps,\n              'B': [None]}\n\n    SIM_CONFIG = config_sim(\n        {\n            \"N\": N_runs,\n            \"T\": range(N_timesteps),\n            \"M\": params,  # Optional\n        }\n    )\n\n    exp = Experiment()\n    for i_sim in range(N_simulations):\n        exp.append_model(\n            sim_configs=SIM_CONFIG,\n            initial_state=INITIAL_STATE,\n            partial_state_update_blocks=PSUBs\n        )\n    return exp\n\n\ndef expected_rows(N_simulations, N_sweeps, N_runs, N_timesteps, N_substeps) -> int:\n    return N_simulations * N_sweeps *  N_runs * (N_timesteps * N_substeps + 1)\n\n\n@pytest.mark.parametrize(\"N_sim,N_sw,N_r,N_t,N_s\", CONFIG_SIGNATURES_TO_TEST)\ndef test_row_count_single(N_sim, N_sw, N_r, N_t, N_s):\n    args = (N_sim, N_sw, N_r, N_t, N_s)\n    results = run_experiment(create_experiments(*args), 'single_proc')\n    assert len(results) == expected_rows(*args)\n\n\n@pytest.mark.parametrize(\"N_sim,N_sw,N_r,N_t,N_s\", CONFIG_SIGNATURES_TO_TEST)\ndef test_row_count_multi(N_sim, N_sw, N_r, N_t, N_s):\n    args = (N_sim, N_sw, N_r, N_t, N_s)\n\n    if N_sim == 1 and N_sw == 1 and N_r == 1:\n        with pytest.raises(ValueError) as e_info:\n            assert len(run_experiment(create_experiments(*args), 'multi_proc')) == expected_rows(*args)\n    else:\n        assert len(run_experiment(create_experiments(*args), 'multi_proc')) == expected_rows(*args)\n\n@pytest.mark.parametrize(\"N_sim,N_sw,N_r,N_t,N_s\", CONFIG_SIGNATURES_TO_TEST)\ndef test_row_count_local(N_sim, N_sw, N_r, N_t, N_s):\n    args = (N_sim, N_sw, N_r, N_t, N_s)\n    assert len(run_experiment(create_experiments(*args), 'local_proc')) == expected_rows(*args)\n"
  },
  {
    "path": "testing/test_runs.py",
    "content": "from typing import Dict, List, Optional\nfrom cadCAD.engine import Executor, ExecutionContext, ExecutionMode\nfrom cadCAD.configuration import Experiment\nfrom cadCAD.configuration.utils import env_trigger, var_substep_trigger, config_sim, psub_list\nfrom cadCAD.types import *\nimport pandas as pd  # type: ignore\nimport types\nimport inspect\nimport pytest\nfrom pandas import DataFrame\n\n\ndef describe_or_return(v: object) -> object:\n    \"\"\"\n    Thanks @LinuxIsCool!\n    \"\"\"\n    if isinstance(v, types.FunctionType):\n        return f'function: {v.__name__}'\n    elif isinstance(v, types.LambdaType) and v.__name__ == '<lambda>':\n        return f'lambda: {inspect.signature(v)}'\n    else:\n        return v\n\n\ndef select_M_dict(M_dict: Dict[str, object], keys: set) -> Dict[str, object]:\n    \"\"\"\n    Thanks @LinuxIsCool!\n    \"\"\"\n    return {k: describe_or_return(v) for k, v in M_dict.items() if k in keys}\n\n\ndef select_config_M_dict(configs: list, i: int, keys: set) -> Dict[str, object]:\n    return select_M_dict(configs[i].sim_config['M'], keys)\n\n\ndef drop_substeps(_df):\n    first_ind = (_df.substep == 0) & (_df.timestep == 0)\n    last_ind = _df.substep == max(_df.substep)\n    inds_to_drop = first_ind | last_ind\n    return _df.copy().loc[inds_to_drop].drop(columns=['substep'])\n\n\ndef assign_params(_df: pd.DataFrame, configs) -> pd.DataFrame:\n    \"\"\"\n    Based on `cadCAD-tools` package codebase, by @danlessa\n    \"\"\"\n    M_dict = configs[0].sim_config['M']\n    params_set = set(M_dict.keys())\n    selected_params = params_set\n\n    # Attribute parameters to each row\n    # 1. Assign the parameter set from the first row first, so that\n    # columns are created\n    first_param_dict = select_config_M_dict(configs, 0, selected_params)\n\n    # 2. Attribute parameter on an (simulation, subset, run) basis\n    df = _df.assign(**first_param_dict).copy()\n    for i, (_, subset_df) in enumerate(df.groupby(['simulation', 'subset', 'run'])):\n        df.loc[subset_df.index] = subset_df.assign(**select_config_M_dict(configs,\n                                                                          i,\n                                                                          selected_params))\n    return df\n\n\nSWEEP_PARAMS: Dict[str, List] = {\n    'alpha': [1],\n    'beta': [lambda x: 2 * x, lambda x: x, lambda x: x / 2],\n    'gamma': [3, 4, 5],\n    'omega': [7]\n}\n\nSINGLE_PARAMS: Dict[str, object] = {\n    'alpha': 1,\n    'beta': lambda x: x,\n    'gamma': 3,\n    'omega': 5\n}\n\n\ndef create_experiment(N_RUNS=2, N_TIMESTEPS=3, params: dict = SWEEP_PARAMS):\n    psu_steps = ['m1', 'm2', 'm3']\n    system_substeps = len(psu_steps)\n    var_timestep_trigger = var_substep_trigger([0, system_substeps])\n    env_timestep_trigger = env_trigger(system_substeps)\n    env_process = {}\n\n    # ['s1', 's2', 's3', 's4']\n    # Policies per Mechanism\n\n    def gamma(params: Parameters, substep: Substep, history: StateHistory, state: State, **kwargs):\n        return {'gamma': params['gamma']}\n\n    def omega(params: Parameters, substep: Substep, history: StateHistory, state: State, **kwarg):\n        return {'omega': params['omega']}\n\n    # Internal States per Mechanism\n\n    def alpha(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'alpha_var', params['alpha']\n\n    def beta(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'beta_var', params['beta']\n\n    def gamma_var(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'gamma_var', params['gamma']\n\n    def omega_var(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'omega_var', params['omega']\n\n    def policies(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'policies', _input\n\n    def sweeped(params: Parameters, substep: Substep, history: StateHistory, state: State, _input: PolicyOutput, **kwargs):\n        return 'sweeped', {'beta': params['beta'], 'gamma': params['gamma']}\n\n    psu_block: dict = {k: {\"policies\": {}, \"states\": {}} for k in psu_steps}\n    for m in psu_steps:\n        psu_block[m]['policies']['gamma'] = gamma\n        psu_block[m]['policies']['omega'] = omega\n        psu_block[m][\"states\"]['alpha_var'] = alpha\n        psu_block[m][\"states\"]['beta_var'] = beta\n        psu_block[m][\"states\"]['gamma_var'] = gamma_var\n        psu_block[m][\"states\"]['omega_var'] = omega_var\n        psu_block[m]['states']['policies'] = policies\n        psu_block[m][\"states\"]['sweeped'] = var_timestep_trigger(\n            y='sweeped', f=sweeped)\n\n    # Genesis States\n    genesis_states = {\n        'alpha_var': 0,\n        'beta_var': 0,\n        'gamma_var': 0,\n        'omega_var': 0,\n        'policies': {},\n        'sweeped': {}\n    }\n\n    # Environment Process\n    env_process['sweeped'] = env_timestep_trigger(trigger_field='timestep', trigger_vals=[\n                                                  5], funct_list=[lambda _g, x: _g['beta']])\n\n    sim_config = config_sim(\n        {\n            \"N\": N_RUNS,\n            \"T\": range(N_TIMESTEPS),\n            \"M\": params,  # Optional\n        }\n    )\n\n    # New Convention\n    partial_state_update_blocks = psub_list(psu_block, psu_steps)\n\n    exp = Experiment()\n    exp.append_model(\n        sim_configs=sim_config,\n        initial_state=genesis_states,\n        env_processes=env_process,\n        partial_state_update_blocks=partial_state_update_blocks\n    )\n    return exp\n\n@pytest.mark.parametrize(\"mode\", [\"local_proc\", \"single_proc\", \"multi_proc\"])\ndef test_mc_sweep_experiment(mode):\n    experiment_assertions(create_experiment(\n        N_RUNS=2, N_TIMESTEPS=2, params=SWEEP_PARAMS), mode)\n\n@pytest.mark.parametrize(\"mode\", [\"local_proc\", \"single_proc\", \"multi_proc\"])\ndef test_unique_sweep_experiment(mode):\n    experiment_assertions(create_experiment(\n        N_RUNS=1, N_TIMESTEPS=2, params=SWEEP_PARAMS), mode)\n\n@pytest.mark.parametrize(\"mode\", [\"local_proc\", \"single_proc\", \"multi_proc\"])\ndef test_mc_single_experiment(mode):\n    experiment_assertions(create_experiment(\n        N_RUNS=2, N_TIMESTEPS=2, params=SINGLE_PARAMS), mode)\n\n@pytest.mark.parametrize(\"mode\", [\"local_proc\", \"single_proc\", \"multi_proc\"])\ndef test_unique_single_experiment(mode):\n    if mode == \"multi_proc\":\n            with pytest.raises(ValueError) as e_info:\n                experiment_assertions(create_experiment(\n                    N_RUNS=1, N_TIMESTEPS=2, params=SINGLE_PARAMS), mode)\n    else:\n        experiment_assertions(create_experiment(\n                    N_RUNS=1, N_TIMESTEPS=2, params=SINGLE_PARAMS), mode)\n\n\ndef experiment_assertions(exp: Experiment, mode: Optional[str]=None) -> None:\n    if mode == None:\n        mode = ExecutionMode().local_mode\n    exec_context = ExecutionContext(mode)\n    executor = Executor(exec_context=exec_context, configs=exp.configs)\n    (records, tensor_field, _) = executor.execute()\n\n    df: DataFrame = assign_params(pd.DataFrame(records), exp.configs)\n    df = drop_substeps(df)\n\n    # XXX: parameters should always be of the same type. Else, the test will fail\n    first_sim_config = exp.configs[0].sim_config['M']\n\n    required_keys = {'simulation': int,\n                     'run': int,\n                     'subset': int,\n                     'timestep': int}\n\n    for (i, row) in df.iterrows():\n        if row.timestep > 0:\n\n            assert row['alpha_var'] == row['alpha']\n            assert type(row['alpha_var']) == type(first_sim_config['alpha'])\n            assert row['gamma_var'] == row['gamma']\n            assert type(row['gamma_var']) == type(first_sim_config['gamma'])\n            assert row['omega_var'] == row['omega']\n            assert type(row['omega_var']) == type(first_sim_config['omega'])\n            for k, v in required_keys.items():\n                assert k in row\n                assert type(row[k]) == v\n"
  },
  {
    "path": "testing/tests/__init__.py",
    "content": ""
  },
  {
    "path": "testing/tests/a_b_tests/0_4_23_record_count.json",
    "content": "{\"record_count\": 74}"
  },
  {
    "path": "testing/tests/a_b_tests/multi_model_row_count_0_4_23.py",
    "content": "import json, pathlib, pandas as pd\n\nfrom cadCAD import configs\nfrom cadCAD.configuration import Experiment\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom testing.models import param_sweep, policy_aggregation\n\n\ndel configs[:]\nexp = Experiment()\nsys_model_A_id = \"sys_model_A\"\nexp.append_configs(\n    sim_configs=param_sweep.sim_config,\n    initial_state=param_sweep.genesis_states,\n    env_processes=param_sweep.env_process,\n    partial_state_update_blocks=param_sweep.partial_state_update_blocks\n)\nsys_model_B_id = \"sys_model_B\"\nexp.append_configs(\n    sim_configs=param_sweep.sim_config,\n    initial_state=param_sweep.genesis_states,\n    env_processes=param_sweep.env_process,\n    partial_state_update_blocks=param_sweep.partial_state_update_blocks\n)\nsys_model_C_id = \"sys_model_C\"\nexp.append_configs(\n    sim_configs=policy_aggregation.sim_config,\n    initial_state=policy_aggregation.genesis_states,\n    partial_state_update_blocks=policy_aggregation.partial_state_update_block,\n    policy_ops=[lambda a, b: a + b, lambda y: y * 2] # Default: lambda a, b: a + b\n)\n\nexec_mode = ExecutionMode()\nlocal_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\nsimulation = Executor(exec_context=local_mode_ctx, configs=configs)\nraw_results, _, _ = simulation.execute()\n\nresults_df = pd.DataFrame(raw_results)\nresult_rows = len(results_df.index)\n\nfile_dir = pathlib.Path(__file__).parent.absolute()\nfile_path = f'{file_dir}/0_4_23_record_count.json'\nwith open(file_path, 'w') as json_file:\n    record_count = {'record_count': result_rows}\n    json.dump(record_count, json_file)\n"
  },
  {
    "path": "testing/tests/append_mod_test.py",
    "content": "import unittest\nfrom copy import deepcopy\n\nfrom testing.models import exp\nfrom testing.models.param_sweep import sim_config as sim_config_a\nfrom testing.models.param_sweep import genesis_states as genesis_states_a\nfrom testing.models.param_sweep import env_process as env_process_a\nfrom testing.models.param_sweep import partial_state_update_blocks as psubs_a\n\ndef append_model_id(model_ids, sim_config, genesis_states, env_process, psubs):\n    exp_copy = deepcopy(exp)\n    for mod_id in model_ids:\n        exp_copy.append_model(\n            model_id=mod_id,\n            sim_configs=sim_config,\n            initial_state=genesis_states,\n            env_processes=env_process,\n            partial_state_update_blocks=psubs,\n            policy_ops=[lambda a, b: a + b]\n        )\n    return exp_copy\n\n\nclass AppendModelTest(unittest.TestCase):\n    def test_index_model_ids(self):\n        no_id_exp = append_model_id(\n            model_ids=[None] * 10,\n            sim_config=sim_config_a,\n            genesis_states=genesis_states_a,\n            env_process=env_process_a,\n            psubs=psubs_a\n        )\n        expected = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']\n        self.assertEqual(no_id_exp.model_ids == expected, True, \"Incorrect Indexing of System Model IDs\")\n\n    def test_same_model_ids(self):\n        same_id_exp = append_model_id(\n            model_ids=['sys_model'] * 10,\n            sim_config=sim_config_a,\n            genesis_states=genesis_states_a,\n            env_process=env_process_a,\n            psubs=psubs_a\n        )\n        expected = [\n            'sys_model', 'sys_model@1', 'sys_model@2', 'sys_model@3', 'sys_model@4', 'sys_model@5',\n            'sys_model@6', 'sys_model@7', 'sys_model@8', 'sys_model@9'\n        ]\n        self.assertEqual(same_id_exp.model_ids == expected, True, \"Incorrect Duplicate Indexing of System Model IDs\")\n\n    def test_different_model_ids(self):\n        diff_id_exp = append_model_id(\n            model_ids=[f'sys_model_{i}' for i in list(range(10))],\n            sim_config=sim_config_a,\n            genesis_states=genesis_states_a,\n            env_process=env_process_a,\n            psubs=psubs_a\n        )\n        expected = [\n            'sys_model_0', 'sys_model_1', 'sys_model_2', 'sys_model_3', 'sys_model_4', 'sys_model_5',\n            'sys_model_6', 'sys_model_7', 'sys_model_8', 'sys_model_9'\n        ]\n        self.assertEqual(diff_id_exp.model_ids == expected, True, \"Incorrect Unique System Model IDs\")\n\n    def test_mix_model_ids(self):\n        mix_exp = append_model_id(\n            model_ids=[None, 'sys_model_A', None, 'sys_model_B', 'model@3', 'model@3'],\n            sim_config=sim_config_a,\n            genesis_states=genesis_states_a,\n            env_process=env_process_a,\n            psubs=psubs_a\n        )\n        expected = ['0', 'sys_model_A', '2', 'sys_model_B', 'model@3', 'model@3@5']\n        self.assertEqual(mix_exp.model_ids == expected, True, \"Incorrect System Model ID Mix\")\n\n\nif __name__ == '__main__':\n    unittest.main()"
  },
  {
    "path": "testing/tests/import_cadCAD.ipynb",
    "content": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 2,\n   \"id\": \"15b9b09a\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"import cadCAD, os, pathlib, json\"\n   ]\n  },\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 3,\n   \"id\": \"1b54b99a\",\n   \"metadata\": {},\n   \"outputs\": [],\n   \"source\": [\n    \"# dunder_file = os.path.abspath('')\\n\",\n    \"# file_path = f'{dunder_file}/expected_results/cadCAD_memory_address.json'\\n\",\n    \"file_path = f'{os.getcwd()}/cadCAD_memory_address.json'\\n\",\n    \"with open(file_path, 'w') as json_file:\\n\",\n    \"    memory_address = {'memory_address': hex(id(cadCAD))}\\n\",\n    \"    json.dump(memory_address, json_file)\"\n   ]\n  }\n ],\n \"metadata\": {\n  \"kernelspec\": {\n   \"display_name\": \"Python 3\",\n   \"language\": \"python\",\n   \"name\": \"python3\"\n  },\n  \"language_info\": {\n   \"codemirror_mode\": {\n    \"name\": \"ipython\",\n    \"version\": 3\n   },\n   \"file_extension\": \".py\",\n   \"mimetype\": \"text/x-python\",\n   \"name\": \"python\",\n   \"nbconvert_exporter\": \"python\",\n   \"pygments_lexer\": \"ipython3\",\n   \"version\": \"3.11.0\"\n  }\n },\n \"nbformat\": 4,\n \"nbformat_minor\": 5\n}\n"
  },
  {
    "path": "testing/tests/test_cadCAD_exp.py",
    "content": "import pandas as pd\nfrom tabulate import tabulate\nfrom testing.results_comparison import dataframe_difference, compare_results_pytest\nfrom cadCAD import configs\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nimport pytest\n\n\n@pytest.fixture\ndef empty_experiment():\n    exec_mode = ExecutionMode()\n    exec_ctx = ExecutionContext(context=exec_mode.local_mode)\n    run = Executor(exec_context=exec_ctx, configs=configs)\n    raw_result, _, _ = run.execute()\n\n    result_df = pd.DataFrame(raw_result)\n    expected_df = pd.read_pickle(\"expected_results/param_sweep_4.pkl\")\n    return dataframe_difference(result_df, expected_df)\n\n\ndef test_experiment(empty_experiment):\n    compare_results_pytest(empty_experiment)\n"
  },
  {
    "path": "testing/tests/test_import_cadCAD_test.py",
    "content": "import os, subprocess, json\nfrom testing.utils import assertEqual\n\ndef test_jupyter_nbconvert_row_count():\n    command = f'jupyter nbconvert --to=notebook --ExecutePreprocessor.enabled=True {os.getcwd()}/testing/tests/import_cadCAD.ipynb'\n    process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)\n    process.communicate()\n    json_path = f'{os.getcwd()}/testing/tests/cadCAD_memory_address.json'\n    memory_address = json.load(open(json_path))['memory_address']\n    assertEqual(type(memory_address) == str, True, \"cadCAD is not importable by jupyter server\")\n"
  },
  {
    "path": "testing/tests/test_multi_model_row_count.py",
    "content": "import json\nimport os\nimport pandas as pd # type: ignore\nfrom cadCAD.configuration import Experiment\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom testing.models import param_sweep, policy_aggregation\nimport pytest\nfrom dataclasses import dataclass\nfrom testing.utils import assertEqual\n\n@dataclass\nclass MultiModelRowCountResults():\n    expected_rows: object\n    expected_rows_from_api: object\n    result_rows: object\n    param_sweep_df_rows: object\n    policy_agg_df_rows: object\n    sys_model_A_id: object\n    sys_model_B_id: object\n    sys_model_C_id: object\n    model_A_rows: object\n    model_B_rows: object\n    model_C_rows: object\n\n@pytest.fixture\ndef multi_model_row_count():\n    exp = Experiment()\n    sys_model_A_id = \"sys_model_A\"\n    exp.append_model(\n        model_id=sys_model_A_id,\n        sim_configs=param_sweep.sim_config,\n        initial_state=param_sweep.genesis_states,\n        env_processes=param_sweep.env_process,\n        partial_state_update_blocks=param_sweep.partial_state_update_blocks\n    )\n    sys_model_B_id = \"sys_model_B\"\n    exp.append_model(\n        model_id=sys_model_B_id,\n        sim_configs=param_sweep.sim_config,\n        initial_state=param_sweep.genesis_states,\n        env_processes=param_sweep.env_process,\n        partial_state_update_blocks=param_sweep.partial_state_update_blocks\n    )\n    sys_model_C_id = \"sys_model_C\"\n    exp.append_model(\n        model_id=sys_model_C_id,\n        sim_configs=policy_aggregation.sim_config,\n        initial_state=policy_aggregation.genesis_states,\n        partial_state_update_blocks=policy_aggregation.partial_state_update_block,\n        policy_ops=[lambda a, b: a + b, lambda y: y * 2] # Default: lambda a, b: a + b\n    )\n\n    simulation = 3\n    model_A_sweeps = len(param_sweep.sim_config)\n    model_B_sweeps = len(param_sweep.sim_config)\n    model_C_sweeps = 1\n    # total_sweeps = model_A_sweeps + model_B_sweeps\n\n    model_A_runs = param_sweep.sim_config[0]['N']\n    model_B_runs = param_sweep.sim_config[0]['N']\n    model_C_runs = policy_aggregation.sim_config['N']\n    # total_runs = model_A_runs + model_B_runs\n\n    model_A_timesteps = len(param_sweep.sim_config[0]['T'])\n    model_B_timesteps = len(param_sweep.sim_config[0]['T'])\n    model_C_timesteps = len(policy_aggregation.sim_config['T'])\n\n    model_A_substeps = len(param_sweep.partial_state_update_blocks)\n    model_B_substeps = len(param_sweep.partial_state_update_blocks)\n    model_C_substeps = len(policy_aggregation.partial_state_update_block)\n    # total_substeps = model_A_substeps + model_B_substeps\n\n    model_A_init_rows = model_A_runs * model_A_sweeps\n    model_B_init_rows = model_B_runs * model_B_sweeps\n    model_C_init_rows = model_C_runs * 1\n    model_A_rows = model_A_init_rows + (model_A_sweeps * (model_A_runs * model_A_timesteps * model_A_substeps))\n    model_B_rows = model_B_init_rows + (model_B_sweeps * (model_B_runs * model_B_timesteps * model_B_substeps))\n    model_C_rows = model_C_init_rows + (model_C_sweeps * (model_C_runs * model_C_timesteps * model_C_substeps))\n\n\n    exec_mode = ExecutionMode()\n    local_mode_ctx = ExecutionContext(context=exec_mode.local_mode)\n    simulation = Executor(exec_context=local_mode_ctx, configs=exp.configs)\n    raw_results, _, _ = simulation.execute()\n\n    results_df = pd.DataFrame(raw_results)\n    param_sweep_df = pd.read_pickle(\"expected_results/param_sweep_4.pkl\")\n    policy_agg_df = pd.read_pickle(\"expected_results/policy_agg_4.pkl\")\n    param_sweep_df_rows = len(param_sweep_df.index)\n    policy_agg_df_rows = len(policy_agg_df.index)\n\n    expected_rows = param_sweep_df_rows + param_sweep_df_rows + policy_agg_df_rows\n    expected_rows_from_api = model_A_rows + model_B_rows + model_C_rows\n    result_rows = len(results_df.index)\n    return MultiModelRowCountResults(expected_rows,\n                                     expected_rows_from_api,\n                                     result_rows,\n                                     param_sweep_df_rows,\n                                     policy_agg_df_rows,\n                                     sys_model_A_id,\n                                     sys_model_B_id,\n                                     sys_model_C_id,\n                                     model_A_rows,\n                                     model_B_rows,\n                                     model_C_rows)\n\n\ndef test_row_count(multi_model_row_count: MultiModelRowCountResults):\n    equal_row_count = multi_model_row_count.expected_rows == multi_model_row_count.expected_rows_from_api == multi_model_row_count.result_rows\n    assertEqual(equal_row_count, True, \"Row Count Mismatch between Expected and Multi-Model simulation results\")\n\n    \ndef test_row_count_from_api(multi_model_row_count: MultiModelRowCountResults):\n    assertEqual(multi_model_row_count.expected_rows == multi_model_row_count.expected_rows_from_api, True, \"API not producing Expected simulation results\")\n\n    \ndef test_row_count_from_results(multi_model_row_count: MultiModelRowCountResults):\n    assertEqual(multi_model_row_count.expected_rows == multi_model_row_count.result_rows, True, \"Engine not producing Expected simulation results\")\n\n    \ndef test_row_count_from_sys_model_A(multi_model_row_count: MultiModelRowCountResults):\n    assertEqual(multi_model_row_count.model_A_rows == multi_model_row_count.param_sweep_df_rows, True, f\"{multi_model_row_count.sys_model_A_id}: Row Count Mismatch with Expected results\")\n\n    \ndef test_row_count_from_sys_model_B(multi_model_row_count: MultiModelRowCountResults):\n    assertEqual(multi_model_row_count.model_B_rows == multi_model_row_count.param_sweep_df_rows, True, f\"{multi_model_row_count.sys_model_B_id}: Row Count Mismatch with Expected results\")\n\n    \ndef test_row_count_from_sys_model_C(multi_model_row_count: MultiModelRowCountResults):\n    assertEqual(multi_model_row_count.model_C_rows == multi_model_row_count.policy_agg_df_rows, True, f\"{multi_model_row_count.sys_model_C_id}: Row Count Mismatch with Expected results\")\n\n    \ndef test_a_b_row_count(multi_model_row_count: MultiModelRowCountResults):\n    file_path = f'{os.getcwd()}/testing/tests/a_b_tests/0_4_23_record_count.json'\n    record_count_0_4_23 = json.load(open(file_path))['record_count']\n    record_count_current = multi_model_row_count.result_rows\n    assertEqual(record_count_current > record_count_0_4_23, True, \"Invalid Row Count for current version\")\n\n"
  },
  {
    "path": "testing/tests/test_param_sweep.py",
    "content": "from testing.models import param_sweep\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nimport pandas as pd # type: ignore\nfrom testing.results_comparison import dataframe_difference, compare_results_pytest\nimport pytest\n\n\n@pytest.fixture\ndef ParamSweep():\n    exec_mode = ExecutionMode()\n    exec_ctx = ExecutionContext(context=exec_mode.local_mode)\n    run = Executor(exec_context=exec_ctx, configs=param_sweep.exp.configs)\n    raw_result, _, _ = run.execute()\n\n    result_df = pd.DataFrame(raw_result)\n    expected_df = pd.read_pickle(\"expected_results/param_sweep_4.pkl\")\n    result_diff = dataframe_difference(result_df, expected_df)\n    return result_diff\n\ndef test_pytest_compare_results(ParamSweep):\n    compare_results_pytest(ParamSweep)\n"
  },
  {
    "path": "testing/tests/test_policy_aggregation.py",
    "content": "import pandas as pd # type: ignore\nfrom testing.models import policy_aggregation as policy_agg\nfrom testing.results_comparison import dataframe_difference\nfrom cadCAD.engine import ExecutionMode, ExecutionContext, Executor\nfrom testing.results_comparison import dataframe_difference, compare_results_pytest\nimport pytest\n\n@pytest.fixture\ndef PolicyAggregation():\n    exec_mode = ExecutionMode()\n    exec_ctx = ExecutionContext(context=exec_mode.local_mode)\n    run = Executor(exec_context=exec_ctx, configs=policy_agg.exp.configs)\n    raw_result, _, _ = run.execute()\n\n    result_df = pd.DataFrame(raw_result)\n    expected_df = pd.read_pickle(\"expected_results/policy_agg_4.pkl\")\n    result_diff = dataframe_difference(result_df, expected_df)\n    return result_diff\n\ndef test_pytest_compare_results(PolicyAggregation):\n    compare_results_pytest(PolicyAggregation)\n\n"
  },
  {
    "path": "testing/tests/test_run1psub0.py",
    "content": "import pandas as pd # type: ignore\nfrom testing.results_comparison import dataframe_difference, compare_results_pytest\nimport pytest\n\n\n@pytest.fixture\ndef Run1Psub0():\n    expected_df = pd.read_pickle(\"expected_results/param_sweep_psub0_4.pkl\")\n    param_sweep_df = pd.read_pickle(\"expected_results/param_sweep_4.pkl\")\n    result_df = param_sweep_df[\n        (param_sweep_df.index > 0) & (param_sweep_df['subset'] < 1) & (param_sweep_df['run'] == 1)\n    ]\n    result_diff = dataframe_difference(result_df, expected_df)\n    return result_diff\n\ndef test_pytest_compare_results(Run1Psub0):\n    compare_results_pytest(Run1Psub0)\n\n"
  },
  {
    "path": "testing/tests/test_runs_not_zero.py",
    "content": "from cadCAD.configuration.utils import config_sim\nfrom testing.utils import assertEqual\n\ndef test_runs_not_zero():\n    val_error_indicator = False\n    try:\n        sim_config = config_sim(\n            {\n                \"N\": 0,\n                \"T\": range(5)\n            }\n        )\n    except ValueError:\n        val_error_indicator = True\n    assertEqual(val_error_indicator, True, \"ValueError raised when runs (N) < 1\")\n"
  },
  {
    "path": "testing/tests/test_timestep1psub0.py",
    "content": "import pandas as pd\nfrom testing.results_comparison import dataframe_difference, compare_results_pytest\nimport pytest\n\n\n@pytest.fixture\ndef Timestep1Psub0():\n    expected_df = pd.read_pickle(\"expected_results/param_sweep_timestep1_4.pkl\")\n    param_sweep_df = pd.read_pickle(\"expected_results/param_sweep_4.pkl\")\n    result_df = param_sweep_df[\n        (param_sweep_df.index > 0) &\n        (param_sweep_df['subset'] < 1) &\n        (param_sweep_df['timestep'] < 2) &\n        (param_sweep_df['run'] == 1)\n    ]\n    return dataframe_difference(result_df, expected_df)\n\ndef test_timestep1psub0(Timestep1Psub0):\n    compare_results_pytest(Timestep1Psub0)\n"
  },
  {
    "path": "testing/tools/test_tools.py",
    "content": "from cadCAD.tools.execution import easy_run\n\n# def test_empty_easy_run():\n#     state_variables = {\n#     }\n#\n#     params = {\n#     }\n#\n#     psubs = [\n#         {\n#             'policies': {},\n#             'variables': {},\n#         },\n#     ]\n#\n#     N_timesteps = 2\n#\n#     N_samples = 1\n#\n#     results = easy_run(\n#         state_variables,\n#         params,\n#         psubs,\n#         N_timesteps,\n#         N_samples,\n#     )\n#     print(results)\n\n\n\ndef test_easy_run():\n    state_variables = {\n        'a':0.5,\n    }\n\n    params = {\n        'c':[1, 2],\n        'd':[1, 2],\n    }\n\n    def p(params, substep, state_history, previous_state):\n        a_delta = 1 - params['c'] * previous_state['a']\n        return {'a_delta': a_delta}\n\n    def s(params, substep, state_history, previous_state, policy_input):\n        return 'a', previous_state['a'] + policy_input['a_delta']\n\n    psubs = [\n        {\n            'policies': {'p': p},\n            'variables': {'a': s},\n        },\n    ]\n\n    N_timesteps = 2\n\n    N_samples = 1\n\n    results = easy_run(\n        state_variables,\n        params,\n        psubs,\n        N_timesteps,\n        N_samples,\n    )\n"
  },
  {
    "path": "testing/utils.py",
    "content": "#\n# def record_generator(row, cols):\n#     return {col: row[col] for col in cols}\n\ndef gen_metric_row(row, cols):\n    return ((row['run'], row['timestep'], row['substep']), {col: row[col] for col in cols})\n\n# def gen_metric_row(row):\n#     return ((row['run'], row['timestep'], row['substep']), {'s1': row['s1'], 'policies': row['policies']})\n\n# def gen_metric_row(row):\n#     return {\n#         'run': row['run'],\n#         'timestep': row['timestep'],\n#         'substep': row['substep'],\n#         's1': row['s1'],\n#         'policies': row['policies']\n#     }\n\ndef gen_metric_dict(df, cols):\n    return dict([gen_metric_row(row, cols) for index, row in df.iterrows()])\n\n\n\ndef assertEqual(_1, _2, _3=None):\n    if _3 == None:\n        assert _1 == _2\n    else:\n        assert _1 == _2, _3"
  }
]