Command-Line#

Note, you can follow this tutorial by cloning https://github.com/executablebooks/jupyter-cache, and running these commands inside it.: tox

$ jcache --help
Usage: jcache [OPTIONS] COMMAND [ARGS]...

  The command line interface of jupyter-cache.

Options:
  -v, --version       Show the version and exit.
  -p, --print-path    Print the current cache path and exit.
  -a, --autocomplete  Print the autocompletion command and exit.
  -h, --help          Show this message and exit.

Commands:
  cache     Work with cached execution(s) in a project.
  notebook  Work with notebook(s) in a project.
  project   Work with a project.

The first time the cache is required, it will be lazily created:

$ jcache notebook list 
Cache path: ../.jupyter_cache
The cache does not yet exist, do you want to create it? [y/N]: y
No notebooks in project

You can specify the path to the cache, with the --cache-path option, or set the JUPYTERCACHE environment variable.

You can also clear it at any time:

$ jcache project clear 
Cache path: ../.jupyter_cache
Are you sure you want to permanently clear the cache!? [y/N]: y
Cache cleared!
$ jcache notebook list 
Cache path: ../.jupyter_cache
The cache does not yet exist, do you want to create it? [y/N]: y
No notebooks in project

Tip

Execute this in the terminal for auto-completion:

eval "$(_JCACHE_COMPLETE=source jcache)"

Adding notebooks to the project#

$ jcache notebook --help
Usage: notebook [OPTIONS] COMMAND [ARGS]...

  Work with notebook(s) in a project.

Options:
  -p, --cache-path TEXT  Path to project cache.  [default: (.jupyter_cache)]
  --help                 Show this message and exit.

Commands:
  add              Add notebook(s) to the project.
  add-with-assets  Add notebook(s) to the project, with possible asset files.
  clear            Remove all notebooks from the project.
  execute          Execute specific notebooks in the project.
  info             Show details of a notebook (by ID).
  invalidate       Remove any matching cache of the notebook(s) (by ID/URI).
  list             List notebooks in the project.
  merge            Create notebook merged with cached outputs (by ID/URI).
  remove           Remove notebook(s) from the project (by ID/URI).

A project consist of a set of notebooks to be executed.

When adding notebooks to the project, they are recorded by their URI (e.g. file path), i.e. no physical copying takes place until execution time.

$ jcache notebook add tests/notebooks/basic.ipynb tests/notebooks/basic_failing.ipynb tests/notebooks/basic_unrun.ipynb tests/notebooks/complex_outputs.ipynb tests/notebooks/external_output.ipynb
Adding: ../tests/notebooks/basic.ipynb
Adding: ../tests/notebooks/basic_failing.ipynb
Adding: ../tests/notebooks/basic_unrun.ipynb
Adding: ../tests/notebooks/complex_outputs.ipynb
Adding: ../tests/notebooks/external_output.ipynb
Success!

You can list the notebooks in the project, at present none have an existing execution record in the cache:

$ jcache notebook list 
  ID  URI                                    Reader    Added             Status
----  -------------------------------------  --------  ----------------  --------
   1  tests/notebooks/basic.ipynb            nbformat  2022-08-02 21:06  -
   2  tests/notebooks/basic_failing.ipynb    nbformat  2022-08-02 21:06  -
   3  tests/notebooks/basic_unrun.ipynb      nbformat  2022-08-02 21:06  -
   4  tests/notebooks/complex_outputs.ipynb  nbformat  2022-08-02 21:06  -
   5  tests/notebooks/external_output.ipynb  nbformat  2022-08-02 21:06  -

You can remove a notebook from the project by its URI or ID:

$ jcache notebook remove 4
Removing: 4
Success!
$ jcache notebook list 
  ID  URI                                    Reader    Added             Status
----  -------------------------------------  --------  ----------------  --------
   1  tests/notebooks/basic.ipynb            nbformat  2022-08-02 21:06  -
   2  tests/notebooks/basic_failing.ipynb    nbformat  2022-08-02 21:06  -
   3  tests/notebooks/basic_unrun.ipynb      nbformat  2022-08-02 21:06  -
   5  tests/notebooks/external_output.ipynb  nbformat  2022-08-02 21:06  -

or clear all notebooks from the project:

$ jcache notebook clear 
Are you sure you want to permanently clear the project!? [y/N]: y
Project cleared!

Add a custom reader to read notebook files#

By default, notebook files are read using the nbformat reader. However, you can also specify a custom reader, defined by an entry point in the jcache.readers group. Included with jupyter_cache is the jupytext reader, for formats like MyST Markdown:

$ jcache notebook add --reader nbformat tests/notebooks/basic.ipynb tests/notebooks/basic_failing.ipynb
Adding: ../tests/notebooks/basic.ipynb
Adding: ../tests/notebooks/basic_failing.ipynb
Success!
$ jcache notebook add --reader jupytext tests/notebooks/basic.md
Adding: ../tests/notebooks/basic.md
Success!
$ jcache notebook list 
  ID  URI                                  Reader    Added             Status
----  -----------------------------------  --------  ----------------  --------
   1  tests/notebooks/basic.ipynb          nbformat  2022-08-02 21:06  -
   2  tests/notebooks/basic_failing.ipynb  nbformat  2022-08-02 21:06  -
   3  tests/notebooks/basic.md             jupytext  2022-08-02 21:06  -

Important

To use the jupytext reader, you must have the jupytext package installed.

Executing the notebooks#

Simply call the execute command, to execute all notebooks in the project that do not have an existing record in the cache.

Executors are defined by entry points in the jcache.executors group. jupyter-cache includes these executors:

  • local-serial: execute notebooks with the working directory set to their path, in serial mode (using a single process).

  • local-parallel: execute notebooks with the working directory set to their path, in parallel mode (using multiple processes).

  • temp-serial: execute notebooks with a temporary working directory, in serial mode (using a single process).

  • temp-parallel: execute notebooks with a temporary working directory, in parallel mode (using multiple processes).

$ jcache project execute --executor local-serial
Executing 3 notebook(s) in serial
Executing: ../tests/notebooks/basic.ipynb
Execution Successful: ../tests/notebooks/basic.ipynb
Executing: ../tests/notebooks/basic_failing.ipynb
warning: Execution Excepted: ../tests/notebooks/basic_failing.ipynb
warning: CellExecutionError: An error occurred while executing the following cell:
warning: ------------------
warning: raise Exception('oopsie!')
warning: ------------------
warning: 
warning: ---------------------------------------------------------------------------
warning: Exception                                 Traceback (most recent call last)
warning: Input In [1], in <cell line: 1>()
warning: ----> 1 raise Exception('oopsie!')
warning: 
warning: Exception: oopsie!
warning: Exception: oopsie!
Executing: ../tests/notebooks/basic.md
Execution Successful: ../tests/notebooks/basic.md
Finished! Successfully executed notebooks have been cached.
succeeded:
- ../tests/notebooks/basic.ipynb
- ../tests/notebooks/basic.md
excepted:
- ../tests/notebooks/basic_failing.ipynb
errored: []

Successfully executed notebooks will now have a record in the cache, uniquely identified by the a hash of their code and metadata content:

$ jcache cache list --hashkeys
  ID  Origin URI                Created           Accessed          Hashkey
----  ------------------------  ----------------  ----------------  --------------------------------
   1  tests/notebooks/basic.md  2022-08-02 21:06  2022-08-02 21:06  94c17138f782c75df59e989fffa64e3a

These records are then compared to the hashes of notebooks in the project, to find which have up-to-date executions. Note here both notebooks share the same cached notebook (denoted by [1] in the status):

$ jcache notebook list 
  ID  URI                                  Reader    Added             Status
----  -----------------------------------  --------  ----------------  --------
   1  tests/notebooks/basic.ipynb          nbformat  2022-08-02 21:06  ✅ [1]
   2  tests/notebooks/basic_failing.ipynb  nbformat  2022-08-02 21:06  ❌
   3  tests/notebooks/basic.md             jupytext  2022-08-02 21:06  ✅ [1]

Next time you execute the project, only notebooks which don’t match a cached record will be executed:

$ jcache project execute --executor local-serial -v CRITICAL
Finished! Successfully executed notebooks have been cached.
succeeded: []
excepted:
- ../tests/notebooks/basic_failing.ipynb
errored: []

You can also force all notebooks to be re-executed:

$ jcache project execute --force
Executing 3 notebook(s) in serial
Executing: ../tests/notebooks/basic.ipynb
Execution Successful: ../tests/notebooks/basic.ipynb
Executing: ../tests/notebooks/basic_failing.ipynb
warning: Execution Excepted: ../tests/notebooks/basic_failing.ipynb
warning: CellExecutionError: An error occurred while executing the following cell:
warning: ------------------
warning: raise Exception('oopsie!')
warning: ------------------
warning: 
warning: ---------------------------------------------------------------------------
warning: Exception                                 Traceback (most recent call last)
warning: Input In [1], in <cell line: 1>()
warning: ----> 1 raise Exception('oopsie!')
warning: 
warning: Exception: oopsie!
warning: Exception: oopsie!
Executing: ../tests/notebooks/basic.md
Execution Successful: ../tests/notebooks/basic.md
Finished! Successfully executed notebooks have been cached.
succeeded:
- ../tests/notebooks/basic.ipynb
- ../tests/notebooks/basic.md
excepted:
- ../tests/notebooks/basic_failing.ipynb
errored: []

If you modify a code cell, the notebook will no longer match a cached notebook or, if you wish to re-execute unchanged notebook(s) (for example if the runtime environment has changed), you can remove their records from the cache (keeping the project record):

$ jcache cache clear 
Are you sure you want to permanently clear the cache!? [y/N]: n
Aborted!

Note

The number of notebooks in the cache is limited (current default 1000). Once this limit is reached, the oldest (last accessed) notebooks begin to be deleted. change this default with jcache config cache-limit

Analysing executed/excepted notebooks#

You can see the elapsed execution time of a notebook via its ID in the cache:

$ jcache cache info 1
ID: 1
Origin URI: ../tests/notebooks/basic.md
Created: 2022-08-02 21:06
Accessed: 2022-08-02 21:06
Hashkey: 94c17138f782c75df59e989fffa64e3a
Data:
  execution_seconds: 1.3199840659999609

Failed execution tracebacks are also available on the project record:

$ jcache notebook info --tb tests/notebooks/basic_failing.ipynb
ID: 2
URI: ../tests/notebooks/basic_failing.ipynb
Reader:
  name: nbformat
  type: plugin
Added: 2022-08-02 21:06
Status: ❌
Failed Last Execution!
Traceback (most recent call last):
  File "/home/docs/checkouts/readthedocs.org/user_builds/jupyter-cache/envs/latest/lib/python3.8/site-packages/jupyter_cache/executors/utils.py", line 58, in single_nb_execution
    executenb(
  File "/home/docs/checkouts/readthedocs.org/user_builds/jupyter-cache/envs/latest/lib/python3.8/site-packages/nbclient/client.py", line 1204, in execute
    return NotebookClient(nb=nb, resources=resources, km=km, **kwargs).execute()
  File "/home/docs/checkouts/readthedocs.org/user_builds/jupyter-cache/envs/latest/lib/python3.8/site-packages/nbclient/util.py", line 84, in wrapped
    return just_run(coro(*args, **kwargs))
  File "/home/docs/checkouts/readthedocs.org/user_builds/jupyter-cache/envs/latest/lib/python3.8/site-packages/nbclient/util.py", line 62, in just_run
    return loop.run_until_complete(coro)
  File "/home/docs/.pyenv/versions/3.8.6/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "/home/docs/checkouts/readthedocs.org/user_builds/jupyter-cache/envs/latest/lib/python3.8/site-packages/nbclient/client.py", line 663, in async_execute
    await self.async_execute_cell(
  File "/home/docs/checkouts/readthedocs.org/user_builds/jupyter-cache/envs/latest/lib/python3.8/site-packages/nbclient/client.py", line 965, in async_execute_cell
    await self._check_raise_for_error(cell, cell_index, exec_reply)
  File "/home/docs/checkouts/readthedocs.org/user_builds/jupyter-cache/envs/latest/lib/python3.8/site-packages/nbclient/client.py", line 862, in _check_raise_for_error
    raise CellExecutionError.from_cell_and_msg(cell, exec_reply_content)
nbclient.exceptions.CellExecutionError: An error occurred while executing the following cell:
------------------
raise Exception('oopsie!')
------------------

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
Input In [1], in <cell line: 1>()
----> 1 raise Exception('oopsie!')

Exception: oopsie!
Exception: oopsie!

Tip

Code cells can be tagged with raises-exception to let the executor known that a cell may raise an exception (see this issue on its behaviour).

Retrieving executed notebooks#

Notebooks added to the project are not modified in any way during or after execution:

You can create a new “final” notebook, with the cached outputs merged into the source notebook with:

$ jcache notebook merge tests/notebooks/basic.md final_notebook.ipynb
Merged with cache PK 1
Success!

Invalidating cached notebooks#

If you want to invalidate a notebook’s cached execution, for example if you have changed the notebook’s execution environment, you can do so by calling the invalidate command:

$ jcache notebook invalidate tests/notebooks/basic.ipynb
Invalidating: tests/notebooks/basic.ipynb
Success!
$ jcache notebook list 
  ID  URI                                  Reader    Added             Status
----  -----------------------------------  --------  ----------------  --------
   1  tests/notebooks/basic.ipynb          nbformat  2022-08-02 21:06  -
   2  tests/notebooks/basic_failing.ipynb  nbformat  2022-08-02 21:06  ❌
   3  tests/notebooks/basic.md             jupytext  2022-08-02 21:06  -

Specifying notebooks with assets#

When executing in a temporary directory, you may want to specify additional “asset” files that also need to be be copied to this directory for the notebook to run.

$ jcache notebook remove tests/notebooks/basic.ipynb
Removing: tests/notebooks/basic.ipynb
Success!
$ jcache notebook add-with-assets -nb tests/notebooks/basic.ipynb tests/notebooks/artifact_folder/artifact.txt
Success!
$ jcache notebook info tests/notebooks/basic.ipynb
ID: 4
URI: ../tests/notebooks/basic.ipynb
Reader:
  name: nbformat
  type: plugin
Added: 2022-08-02 21:07
Status: '-'
Assets:
- ../tests/notebooks/artifact_folder/artifact.txt

Adding notebooks directly to the cache#

Pre-executed notebooks can be added to the cache directly, without executing them.

A check will be made that the notebooks look to have been executed correctly, i.e. the cell execution counts go sequentially up from 1.

$ jcache cache add tests/notebooks/complex_outputs.ipynb
Caching: ../tests/notebooks/complex_outputs.ipynb
Validity Error: Expected cell 0 to have execution_count 1 not None
The notebook may not have been executed, continue caching? [y/N]: y
Success!

Or to skip the validation:

$ jcache cache add --no-validate tests/notebooks/external_output.ipynb
Caching: ../tests/notebooks/external_output.ipynb
Success!
$ jcache cache list 
  ID  Origin URI                             Created           Accessed
----  -------------------------------------  ----------------  ----------------
   2  tests/notebooks/external_output.ipynb  2022-08-02 21:07  2022-08-02 21:07
   1  tests/notebooks/complex_outputs.ipynb  2022-08-02 21:07  2022-08-02 21:07

Tip

To only show the latest versions of cached notebooks.

$ jcache cache list --latest-only

Diffing notebooks#

You can diff any of the cached notebooks with any (external) notebook:

Warning

This requires pip install nbdime

$ jcache cache diff 1 tests/notebooks/basic_unrun.ipynb
nbdiff
--- cached pk=1
+++ other: ../tests/notebooks/basic_unrun.ipynb
## inserted before nb/cells/0:
+  code cell:
+    source:
+      a=1
+      print(a)

## deleted nb/cells/0-6:
-  code cell:
-    metadata (unknown keys):
-      init_cell: True
-      slideshow:
-        slide_type: skip
-    source:
-      from ipypublish.scripts.ipynb_latex_setup import *
-  code cell:
-    execution_count: 3
-    metadata (unknown keys):
-      ipub:
-        text:
-          format:
-            backgroundcolor: \color{blue!10}
-    source:
-      print("""
-      This is some printed text,
-      with a nicely formatted output.
-      """)
-    outputs:
-      output 0:
-        output_type: stream
-        name: stdout
-        text:
-          
-          This is some printed text,
-          with a nicely formatted output.
-          
-  code cell:
-    execution_count: 3
-    metadata (unknown keys):
-      ipub:
-        figure:
-          caption: A nice picture.
-          label: fig:example
-          placement: !bh
-    source:
-      Image('example.jpg',height=400)
-    outputs:
-      output 0:
-        output_type: execute_result
-        execution_count: 3
-        data:
-          image/jpeg: /9j/4RB6...<snip base64, md5=b3f071e0466de0eb...>
-          text/plain: <IPython.core.display.Image object>
-        metadata (unknown keys):
-          image/jpeg:
-            height: 400
-  code cell:
-    execution_count: 9
-    metadata (unknown keys):
-      ipub:
-        code:
-          asfloat: True
-          caption: a
-          label: code:example_mpl
-          widefigure: False
-        figure:
-          caption: 
-          label: fig:example_mpl
-          widefigure: False
-    source:
-      plt.scatter(np.random.rand(10), np.random.rand(10), 
-                  label='data label')
-      plt.ylabel(r'a y label with latex $\alpha$')
-      plt.legend();
-    outputs:
-      output 0:
-        output_type: display_data
-        data:
-          application/pdf: JVBERi0x...<snip base64, md5=e244f7ca0e270cb0...>
-          image/svg+xml:
-            <?xml version="1.0" encoding="utf-8" standalone="no"?>
-            <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
-              "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-            <!-- Created with matplotlib (http://matplotlib.org/) -->
-            <svg height="258pt" version="1.1" viewBox="0 0 455 258" width="455pt" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
-             <defs>
-              <style type="text/css">
-            *{stroke-linecap:butt;stroke-linejoin:round;}
-              </style>
-             </defs>
-             <g id="figure_1">
-              <g id="patch_1">
-               <path d="M 0 258.561146 
-            L 455.384887 258.561146 
-            L 455.384887 0 
-            L 0 0 
-            z
-            " style="fill:none;"/>
-              </g>
-              <g id="axes_1">
-               <g id="patch_2">
-                <path d="M 54.084887 230.192082 
-            L 444.684887 230.192082 
-            L 444.684887 12.752082 
-            L 54.084887 12.752082 
-            z
-            " style="fill:#ffffff;"/>
-               </g>
-               <g id="PathCollection_1">
-                <defs>
-                 <path d="M 0 4 
-            C 1.060812 4 2.078319 3.578535 2.828427 2.828427 
-            C 3.578535 2.078319 4 1.060812 4 0 
-            C 4 -1.060812 3.578535 -2.078319 2.828427 -2.828427 
-            C 2.078319 -3.578535 1.060812 -4 0 -4 
-            C -1.060812 -4 -2.078319 -3.578535 -2.828427 -2.828427 
-            C -3.578535 -2.078319 -4 -1.060812 -4 0 
-            C -4 1.060812 -3.578535 2.078319 -2.828427 2.828427 
-            C -2.078319 3.578535 -1.060812 4 0 4 
-            z
-            " id="m6b5534bdeb" style="stroke:#1f77b4;"/>
-                </defs>
-                <g clip-path="url(#pb6c7af1790)">
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="422.721916" xlink:href="#m6b5534bdeb" y="184.497127"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="405.972863" xlink:href="#m6b5534bdeb" y="39.575749"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="118.670055" xlink:href="#m6b5534bdeb" y="216.499778"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="418.516455" xlink:href="#m6b5534bdeb" y="49.912552"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="102.973672" xlink:href="#m6b5534bdeb" y="48.69341"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="202.070038" xlink:href="#m6b5534bdeb" y="81.608013"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="184.303117" xlink:href="#m6b5534bdeb" y="174.733258"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="204.975328" xlink:href="#m6b5534bdeb" y="126.363393"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="388.76488" xlink:href="#m6b5534bdeb" y="26.444385"/>
-                 <use style="fill:#1f77b4;stroke:#1f77b4;" x="76.047857" xlink:href="#m6b5534bdeb" y="179.117964"/>
-                </g>
-               </g>
-               <g id="matplotlib.axis_1">
-                <g id="xtick_1">
-                 <g id="line2d_1">
-                  <defs>
-                   <path d="M 0 0 
-            L 0 3.5 
-            " id="m6755c82402" style="stroke:#000000;stroke-width:0.8;"/>
-                  </defs>
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="67.238851" xlink:href="#m6755c82402" y="230.192082"/>
-                  </g>
-                 </g>
-                 <g id="text_1">
-                  <!-- $0.0$ -->
-                  <defs>
-                   <path d="M 42 31.640625 
-            C 42 37.75 41.90625 48.125 37.703125 56.109375 
-            C 34 63.109375 28.09375 65.59375 22.90625 65.59375 
-            C 18.09375 65.59375 12 63.40625 8.203125 56.203125 
-            C 4.203125 48.71875 3.796875 39.4375 3.796875 31.640625 
-            C 3.796875 25.953125 3.90625 17.28125 7 9.671875 
-            C 11.296875 -0.609375 19 -2 22.90625 -2 
-            C 27.5 -2 34.5 -0.109375 38.59375 9.375 
-            C 41.59375 16.28125 42 24.359375 42 31.640625 
-            z
-            M 22.90625 -0.40625 
-            C 16.5 -0.40625 12.703125 5.078125 11.296875 12.6875 
-            C 10.203125 18.5625 10.203125 27.15625 10.203125 32.75 
-            C 10.203125 40.4375 10.203125 46.828125 11.5 52.921875 
-            C 13.40625 61.390625 19 64 22.90625 64 
-            C 27 64 32.296875 61.296875 34.203125 53.125 
-            C 35.5 47.4375 35.59375 40.734375 35.59375 32.75 
-            C 35.59375 26.25 35.59375 18.265625 34.40625 12.375 
-            C 32.296875 1.484375 26.40625 -0.40625 22.90625 -0.40625 
-            z
-            " id="CMR17-48"/>
-                   <path d="M 18.40625 4.796875 
-            C 18.40625 7.6875 16 9.671875 13.59375 9.671875 
-            C 10.703125 9.671875 8.703125 7.28125 8.703125 4.890625 
-            C 8.703125 2 11.09375 0 13.5 0 
-            C 16.40625 0 18.40625 2.390625 18.40625 4.796875 
-            z
-            " id="CMMI12-58"/>
-                  </defs>
-                  <g transform="translate(57.26709 248.26167)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-48"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="xtick_2">
-                 <g id="line2d_2">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="149.429385" xlink:href="#m6755c82402" y="230.192082"/>
-                  </g>
-                 </g>
-                 <g id="text_2">
-                  <!-- $0.2$ -->
-                  <defs>
-                   <path d="M 41.703125 15.453125 
-            L 39.90625 15.453125 
-            C 38.90625 8.375 38.09375 7.171875 37.703125 6.5625 
-            C 37.203125 5.765625 30 5.765625 28.59375 5.765625 
-            L 9.40625 5.765625 
-            C 13 9.671875 20 16.75 28.5 24.953125 
-            C 34.59375 30.734375 41.703125 37.53125 41.703125 47.421875 
-            C 41.703125 59.21875 32.296875 66 21.796875 66 
-            C 10.796875 66 4.09375 56.3125 4.09375 47.34375 
-            C 4.09375 43.4375 7 42.9375 8.203125 42.9375 
-            C 9.203125 42.9375 12.203125 43.546875 12.203125 47.03125 
-            C 12.203125 50.109375 9.59375 51 8.203125 51 
-            C 7.59375 51 7 50.90625 6.59375 50.703125 
-            C 8.5 59.21875 14.296875 63.40625 20.40625 63.40625 
-            C 29.09375 63.40625 34.796875 56.515625 34.796875 47.421875 
-            C 34.796875 38.734375 29.703125 31.25 24 24.75 
-            L 4.09375 2.28125 
-            L 4.09375 0 
-            L 39.296875 0 
-            z
-            " id="CMR17-50"/>
-                  </defs>
-                  <g transform="translate(139.457624 248.26167)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-50"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="xtick_3">
-                 <g id="line2d_3">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="231.619919" xlink:href="#m6755c82402" y="230.192082"/>
-                  </g>
-                 </g>
-                 <g id="text_3">
-                  <!-- $0.4$ -->
-                  <defs>
-                   <path d="M 33.59375 64.40625 
-            C 33.59375 66.5 33.5 66.5 31.703125 66.5 
-            L 2 19.59375 
-            L 2 17 
-            L 27.796875 17 
-            L 27.796875 7.140625 
-            C 27.796875 3.5 27.59375 2.5 20.59375 2.5 
-            L 18.703125 2.5 
-            L 18.703125 0 
-            C 21.90625 0 27.296875 0 30.703125 0 
-            C 34.09375 0 39.5 0 42.703125 0 
-            L 42.703125 2.5 
-            L 40.796875 2.5 
-            C 33.796875 2.5 33.59375 3.5 33.59375 7.140625 
-            L 33.59375 17 
-            L 43.796875 17 
-            L 43.796875 19.59375 
-            L 33.59375 19.59375 
-            z
-            M 28.09375 57.859375 
-            L 28.09375 19.59375 
-            L 4 19.59375 
-            z
-            " id="CMR17-52"/>
-                  </defs>
-                  <g transform="translate(221.648158 248.26167)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-52"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="xtick_4">
-                 <g id="line2d_4">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="313.810453" xlink:href="#m6755c82402" y="230.192082"/>
-                  </g>
-                 </g>
-                 <g id="text_4">
-                  <!-- $0.6$ -->
-                  <defs>
-                   <path d="M 10.59375 34 
-            C 10.59375 57.65625 21.796875 63 28.296875 63 
-            C 30.40625 63 35.5 62.640625 37.5 59 
-            C 35.90625 59 32.90625 59 32.90625 55.515625 
-            C 32.90625 52.828125 35.09375 51.921875 36.5 51.921875 
-            C 37.40625 51.921875 40.09375 52.3125 40.09375 55.625 
-            C 40.09375 61.78125 35.09375 65.296875 28.203125 65.296875 
-            C 16.296875 65.296875 3.796875 52.96875 3.796875 31 
-            C 3.796875 3.953125 15.09375 -2 23.09375 -2 
-            C 32.796875 -2 42 6.671875 42 20.046875 
-            C 42 32.515625 33.90625 41.59375 23.703125 41.59375 
-            C 17.59375 41.59375 13.09375 37.609375 10.59375 30.625 
-            z
-            M 23.09375 0.390625 
-            C 10.796875 0.390625 10.796875 18.75 10.796875 22.4375 
-            C 10.796875 29.625 14.203125 40 23.5 40 
-            C 25.203125 40 30.09375 40 33.40625 33.125 
-            C 35.203125 29.21875 35.203125 25.140625 35.203125 20.140625 
-            C 35.203125 14.75 35.203125 10.78125 33.09375 6.78125 
-            C 30.90625 2.671875 27.703125 0.390625 23.09375 0.390625 
-            z
-            " id="CMR17-54"/>
-                  </defs>
-                  <g transform="translate(303.838692 248.26167)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-54"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="xtick_5">
-                 <g id="line2d_5">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="396.000988" xlink:href="#m6755c82402" y="230.192082"/>
-                  </g>
-                 </g>
-                 <g id="text_5">
-                  <!-- $0.8$ -->
-                  <defs>
-                   <path d="M 27.203125 35.375 
-            C 33.5 38.546875 39.90625 43.328125 39.90625 50.984375 
-            C 39.90625 60.015625 31.09375 65.296875 23 65.296875 
-            C 13.90625 65.296875 5.90625 58.734375 5.90625 49.6875 
-            C 5.90625 47.203125 6.5 42.921875 10.40625 39.140625 
-            C 11.40625 38.15625 15.59375 35.171875 18.296875 33.28125 
-            C 13.796875 30.984375 3.296875 25.53125 3.296875 14.59375 
-            C 3.296875 4.359375 13.09375 -2 22.796875 -2 
-            C 33.5 -2 42.5 5.65625 42.5 15.78125 
-            C 42.5 24.84375 36.40625 29.015625 32.40625 31.703125 
-            z
-            M 14.09375 44.09375 
-            C 13.296875 44.59375 9.296875 47.671875 9.296875 52.359375 
-            C 9.296875 58.421875 15.59375 63 22.796875 63 
-            C 30.703125 63 36.5 57.4375 36.5 50.96875 
-            C 36.5 41.703125 26.09375 36.421875 25.59375 36.421875 
-            C 25.5 36.421875 25.40625 36.421875 24.59375 37.03125 
-            z
-            M 32.5 23.734375 
-            C 34 22.640625 38.796875 19.375 38.796875 13.296875 
-            C 38.796875 5.953125 31.40625 0.390625 23 0.390625 
-            C 13.90625 0.390625 7 6.84375 7 14.6875 
-            C 7 22.546875 13.09375 29.09375 20 32.1875 
-            z
-            " id="CMR17-56"/>
-                  </defs>
-                  <g transform="translate(386.029227 248.26167)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-56"/>
-                  </g>
-                 </g>
-                </g>
-               </g>
-               <g id="matplotlib.axis_2">
-                <g id="ytick_1">
-                 <g id="line2d_6">
-                  <defs>
-                   <path d="M 0 0 
-            L -3.5 0 
-            " id="me4dbc141a7" style="stroke:#000000;stroke-width:0.8;"/>
-                  </defs>
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="54.084887" xlink:href="#me4dbc141a7" y="219.773958"/>
-                  </g>
-                 </g>
-                 <g id="text_6">
-                  <!-- $0.0$ -->
-                  <g transform="translate(27.141364 225.308752)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-48"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="ytick_2">
-                 <g id="line2d_7">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="54.084887" xlink:href="#me4dbc141a7" y="178.366125"/>
-                  </g>
-                 </g>
-                 <g id="text_7">
-                  <!-- $0.2$ -->
-                  <g transform="translate(27.141364 183.900919)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-50"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="ytick_3">
-                 <g id="line2d_8">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="54.084887" xlink:href="#me4dbc141a7" y="136.958292"/>
-                  </g>
-                 </g>
-                 <g id="text_8">
-                  <!-- $0.4$ -->
-                  <g transform="translate(27.141364 142.493087)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-52"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="ytick_4">
-                 <g id="line2d_9">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="54.084887" xlink:href="#me4dbc141a7" y="95.55046"/>
-                  </g>
-                 </g>
-                 <g id="text_9">
-                  <!-- $0.6$ -->
-                  <g transform="translate(27.141364 101.085254)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-54"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="ytick_5">
-                 <g id="line2d_10">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="54.084887" xlink:href="#me4dbc141a7" y="54.142627"/>
-                  </g>
-                 </g>
-                 <g id="text_10">
-                  <!-- $0.8$ -->
-                  <g transform="translate(27.141364 59.677421)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-48"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-56"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="ytick_6">
-                 <g id="line2d_11">
-                  <g>
-                   <use style="stroke:#000000;stroke-width:0.8;" x="54.084887" xlink:href="#me4dbc141a7" y="12.734794"/>
-                  </g>
-                 </g>
-                 <g id="text_11">
-                  <!-- $1.0$ -->
-                  <defs>
-                   <path d="M 26.59375 63.40625 
-            C 26.59375 65.5 26.5 65.5 25.09375 65.5 
-            C 21.203125 61.1875 15.296875 59.796875 9.703125 59.796875 
-            C 9.40625 59.796875 8.90625 59.796875 8.796875 59.5 
-            C 8.703125 59.296875 8.703125 59.09375 8.703125 57 
-            C 11.796875 57 17 57.59375 21 59.984375 
-            L 21 7.203125 
-            C 21 3.6875 20.796875 2.5 12.203125 2.5 
-            L 9.203125 2.5 
-            L 9.203125 0 
-            C 14 0 19 0 23.796875 0 
-            C 28.59375 0 33.59375 0 38.40625 0 
-            L 38.40625 2.5 
-            L 35.40625 2.5 
-            C 26.796875 2.5 26.59375 3.59375 26.59375 7.15625 
-            z
-            " id="CMR17-49"/>
-                  </defs>
-                  <g transform="translate(27.141364 18.269588)scale(0.16 -0.16)">
-                   <use transform="scale(0.996264)" xlink:href="#CMR17-49"/>
-                   <use transform="translate(45.690477 0)scale(0.996264)" xlink:href="#CMMI12-58"/>
-                   <use transform="translate(72.787654 0)scale(0.996264)" xlink:href="#CMR17-48"/>
-                  </g>
-                 </g>
-                </g>
-                <g id="text_12">
-                 <!-- a y label with latex $\alpha$ -->
-                 <defs>
-                  <path d="M 36 25.828125 
-            C 36 32.375 36 35.84375 31.796875 39.734375 
-            C 28.09375 43 23.796875 44 20.40625 44 
-            C 12.5 44 6.796875 37.609375 6.796875 30.796875 
-            C 6.796875 27 9.796875 27 10.40625 27 
-            C 11.703125 27 14 27.78125 14 30.53125 
-            C 14 33 12.09375 34.078125 10.40625 34.078125 
-            C 10 34.078125 9.5 33.96875 9.203125 33.875 
-            C 11.296875 40.5 16.703125 42.40625 20.203125 42.40625 
-            C 25.203125 42.40625 30.703125 37.953125 30.703125 29.453125 
-            L 30.703125 25 
-            C 24.796875 25 17.703125 24.203125 12.09375 21.203125 
-            C 5.796875 17.703125 4 12.703125 4 8.90625 
-            C 4 1.203125 13 -1 18.296875 -1 
-            C 23.796875 -1 28.90625 2.171875 31.09375 7.984375 
-            C 31.296875 3.640625 34.09375 -0.28125 38.5 -0.28125 
-            C 40.59375 -0.28125 45.90625 1.09375 45.90625 8.859375 
-            L 45.90625 14.375 
-            L 44.09375 14.375 
-            L 44.09375 8.78125 
-            C 44.09375 2.78125 41.40625 2 40.09375 2 
-            C 36 2 36 7.15625 36 11.53125 
-            z
-            M 30.703125 13.59375 
-            C 30.703125 4.953125 24.5 0.59375 19 0.59375 
-            C 14 0.59375 10.09375 4.296875 10.09375 8.90625 
-            C 10.09375 11.890625 11.40625 17.1875 17.203125 20.390625 
-            C 22 23.09375 27.5 23.5 30.703125 23.5 
-            z
-            " id="CMR17-97"/>
-                  <path d="M 39 34.328125 
-            C 41.5 40.40625 46 40.40625 47.40625 40.40625 
-            L 47.40625 43 
-            C 45.5 43 43 43 41.09375 43 
-            C 39 43 35.703125 43 33.703125 43.09375 
-            L 33.703125 40.5 
-            C 37.5 40.203125 37.59375 37.40625 37.59375 36.609375 
-            C 37.59375 35.625 37.40625 35.125 36.90625 33.921875 
-            L 26 7.015625 
-            L 14.09375 36.03125 
-            C 13.59375 37.21875 13.59375 37.90625 13.59375 38.015625 
-            C 13.59375 40.203125 15.90625 40.40625 18.296875 40.40625 
-            L 18.296875 43.09375 
-            C 15.90625 43 11.59375 43 9.09375 43 
-            C 6.40625 43 3.203125 43 1 43.09375 
-            L 1 40.40625 
-            C 6.40625 40.40625 7 39.90625 8.296875 36.71875 
-            L 23.203125 0.234375 
-            C 18.703125 -11.53125 16.09375 -18.40625 9.796875 -18.40625 
-            C 8.703125 -18.40625 6.203125 -18.109375 4.40625 -16.3125 
-            C 6.703125 -16.109375 7.703125 -14.71875 7.703125 -13.015625 
-            C 7.703125 -11.328125 6.5 -9.828125 4.5 -9.828125 
-            C 2.296875 -9.828125 1.203125 -11.328125 1.203125 -13.125 
-            C 1.203125 -17.109375 5.296875 -20 9.796875 -20 
-            C 15.59375 -20 19.203125 -14.40625 21.203125 -9.4375 
-            z
-            " id="CMR17-121"/>
-                  <path d="M 15.296875 68.6875 
-            L 3.40625 67.59375 
-            L 3.40625 65 
-            C 9.296875 65 10.203125 64.40625 10.203125 59.640625 
-            L 10.203125 6.65625 
-            C 10.203125 2.875 9.796875 2.390625 3.40625 2.390625 
-            L 3.40625 -0.203125 
-            C 5.796875 0 10.203125 0 12.703125 0 
-            C 15.296875 0 19.703125 0 22.09375 -0.203125 
-            L 22.09375 2.390625 
-            C 15.703125 2.390625 15.296875 2.78125 15.296875 6.65625 
-            z
-            " id="CMR17-108"/>
-                  <path d="M 15 68.6875 
-            L 3.09375 67.59375 
-            L 3.09375 65 
-            C 9 65 9.90625 64.40625 9.90625 59.640625 
-            L 9.90625 -0.203125 
-            L 11.703125 -0.203125 
-            L 14.59375 6.890625 
-            C 17.5 2.203125 21.796875 -1 27.59375 -1 
-            C 37.59375 -1 47.703125 7.8125 47.703125 21.40625 
-            C 47.703125 34.1875 38.703125 43.59375 28.59375 43.59375 
-            C 22.40625 43.59375 18 40.296875 15 36.40625 
-            z
-            M 15.203125 31.3125 
-            C 15.203125 33.09375 15.203125 33.40625 16.59375 35.5 
-            C 20.5 41.515625 26.09375 42 28 42 
-            C 31 42 41.296875 40.390625 41.296875 21.5 
-            C 41.296875 1.6875 29.5 0.59375 27.09375 0.59375 
-            C 24 0.59375 19.5 1.78125 16.296875 7.59375 
-            C 15.203125 9.5 15.203125 9.703125 15.203125 11.484375 
-            z
-            " id="CMR17-98"/>
-                  <path d="M 38.09375 23 
-            C 38.5 23.40625 38.5 23.609375 38.5 24.625 
-            C 38.5 34.96875 33.09375 44 21.703125 44 
-            C 11.09375 44 2.703125 33.890625 2.703125 21.609375 
-            C 2.703125 8.609375 12.203125 -1 22.796875 -1 
-            C 34 -1 38.40625 9.484375 38.40625 11.5625 
-            C 38.40625 12.25 37.796875 12.25 37.59375 12.25 
-            C 36.90625 12.25 36.796875 12.046875 36.40625 10.875 
-            C 34.203125 4.140625 28.703125 0.796875 23.5 0.796875 
-            C 19.203125 0.796875 14.90625 3.171875 12.203125 7.5 
-            C 9.09375 12.546875 9.09375 18.375 9.09375 23 
-            z
-            M 9.203125 24.5 
-            C 9.90625 39.140625 17.59375 42.40625 21.59375 42.40625 
-            C 28.40625 42.40625 33 35.890625 33.09375 24.5 
-            z
-            " id="CMR17-101"/>
-                  <path d="M 58.203125 34.109375 
-            C 60.203125 40 64.203125 40 65.703125 40 
-            L 65.703125 42.6875 
-            C 63.703125 42.6875 61.703125 42.6875 59.703125 42.6875 
-            C 57.796875 42.6875 53.5 42.6875 51.796875 42.78125 
-            L 51.796875 40 
-            C 54.90625 40 56.59375 38.203125 56.59375 35.71875 
-            C 56.59375 35.015625 56.40625 34.125 56.203125 33.4375 
-            L 46.796875 6.359375 
-            L 36.59375 35.546875 
-            C 36.40625 36.234375 36.09375 37.03125 36.09375 37.421875 
-            C 36.09375 40 39.5 40 41.09375 40 
-            L 41.09375 42.78125 
-            C 38.796875 42.6875 34.59375 42.6875 32.203125 42.6875 
-            C 29.703125 42.6875 27.09375 42.6875 24.796875 42.78125 
-            L 24.796875 40 
-            C 30.296875 40 30.296875 39.796875 32.40625 33.578125 
-            L 23.203125 7.046875 
-            L 13.296875 35.640625 
-            C 12.796875 36.921875 12.796875 37.125 12.796875 37.421875 
-            C 12.796875 40 16.203125 40 17.796875 40 
-            L 17.796875 42.78125 
-            C 15.40625 42.6875 11.203125 42.6875 8.703125 42.6875 
-            C 6.5 42.6875 3.09375 42.6875 1 42.78125 
-            L 1 40 
-            C 5.40625 40 6.5 39.703125 7.59375 36.421875 
-            L 19.90625 0.765625 
-            C 20.296875 -0.515625 20.59375 -0.8125 21.40625 -0.8125 
-            C 22.09375 -0.8125 22.5 -0.609375 23 0.875 
-            L 33.296875 30.9375 
-            L 43.703125 0.875 
-            C 44.203125 -0.609375 44.59375 -0.8125 45.296875 -0.8125 
-            C 46.09375 -0.8125 46.40625 -0.515625 46.796875 0.78125 
-            z
-            " id="CMR17-119"/>
-                  <path d="M 15.5 61.078125 
-            C 15.5 63.265625 13.703125 65.15625 11.40625 65.15625 
-            C 9.203125 65.15625 7.296875 63.375 7.296875 61.078125 
-            C 7.296875 58.890625 9.09375 57 11.40625 57 
-            C 13.59375 57 15.5 58.796875 15.5 61.078125 
-            z
-            M 3.796875 42.28125 
-            L 3.796875 39.703125 
-            C 9.40625 39.703125 10.203125 39.09375 10.203125 34.328125 
-            L 10.203125 6.671875 
-            C 10.203125 2.875 9.796875 2.390625 3.40625 2.390625 
-            L 3.40625 -0.203125 
-            C 5.796875 0 10.09375 0 12.59375 0 
-            C 15 0 19.09375 0 21.40625 -0.203125 
-            L 21.40625 2.390625 
-            C 15.5 2.390625 15.296875 2.984375 15.296875 6.5625 
-            L 15.296875 43.375 
-            z
-            " id="CMR17-105"/>
-                  <path d="M 15.09375 40 
-            L 29.09375 40 
-            L 29.09375 42.578125 
-            L 15.09375 42.578125 
-            L 15.09375 61 
-            L 13.296875 61 
-            C 13.09375 50.703125 9.59375 41.6875 1.09375 41.6875 
-            L 1.09375 40 
-            L 9.796875 40 
-            L 9.796875 12.046875 
-            C 9.796875 10.15625 9.796875 -1 21.40625 -1 
-            C 27.296875 -1 30.703125 4.78125 30.703125 12.140625 
-            L 30.703125 17.8125 
-            L 28.90625 17.8125 
-            L 28.90625 12.234375 
-            C 28.90625 5.375 26.203125 0.796875 22 0.796875 
-            C 19.09375 0.796875 15.09375 2.78125 15.09375 11.84375 
-            z
-            " id="CMR17-116"/>
-                  <path d="M 41.5 30.203125 
-            C 41.5 35.296875 40.5 43.59375 28.703125 43.59375 
-            C 20.5 43.59375 16.5 37 15.296875 33.703125 
-            L 15.203125 33.703125 
-            L 15.203125 68.6875 
-            L 3.296875 67.59375 
-            L 3.296875 65 
-            C 9.203125 65 10.09375 64.40625 10.09375 59.640625 
-            L 10.09375 6.65625 
-            C 10.09375 2.875 9.703125 2.390625 3.296875 2.390625 
-            L 3.296875 -0.203125 
-            C 5.703125 0 10.09375 0 12.703125 0 
-            C 15.296875 0 19.796875 0 22.203125 -0.203125 
-            L 22.203125 2.390625 
-            C 15.796875 2.390625 15.40625 2.78125 15.40625 6.6875 
-            L 15.40625 25.90625 
-            C 15.40625 35.109375 21 42 28 42 
-            C 35.40625 42 36.203125 35.40625 36.203125 30.59375 
-            L 36.203125 6.6875 
-            C 36.203125 2.875 35.796875 2.390625 29.40625 2.390625 
-            L 29.40625 -0.203125 
-            C 31.796875 0 36.203125 0 38.796875 0 
-            C 41.40625 0 45.90625 0 48.296875 -0.203125 
-            L 48.296875 2.390625 
-            C 41.90625 2.390625 41.5 2.78125 41.5 6.6875 
-            z
-            " id="CMR17-104"/>
-                  <path d="M 26 23.078125 
-            C 29 26.96875 32.40625 31.34375 35.203125 34.625 
-            C 38.5 38.40625 42.296875 40 46.703125 40 
-            L 46.703125 42.59375 
-            C 45 42.59375 41.5 42.59375 39.703125 42.59375 
-            C 37 42.59375 33.90625 42.59375 31.59375 42.6875 
-            L 31.59375 40.09375 
-            C 33 39.890625 33.796875 38.890625 33.796875 37.5 
-            C 33.796875 35.703125 32.796875 34.609375 32.296875 33.921875 
-            L 24.90625 24.578125 
-            L 16.09375 36.03125 
-            C 15.203125 37.125 15.203125 37.3125 15.203125 37.8125 
-            C 15.203125 39.015625 16.203125 40 17.90625 40 
-            L 17.90625 42.6875 
-            C 15.5 42.59375 11.203125 42.59375 8.703125 42.59375 
-            C 6 42.59375 2.796875 42.59375 0.59375 42.6875 
-            L 0.59375 40 
-            C 6 40 7.203125 39.59375 9.59375 36.609375 
-            L 21.09375 21.796875 
-            C 21.296875 21.59375 21.796875 21 21.796875 20.703125 
-            C 21.796875 20.296875 13.09375 9.671875 12 8.28125 
-            C 7.5 2.890625 2.796875 2.5 0.09375 2.5 
-            L 0.09375 0 
-            C 1.796875 0 5.296875 0 7.09375 0 
-            C 9.09375 0 13.5 0 15.296875 -0.09375 
-            L 15.296875 2.5 
-            C 14.703125 2.59375 13.09375 2.796875 13.09375 5.078125 
-            C 13.09375 6.875 13.90625 7.96875 14.796875 9.15625 
-            L 23.09375 19.3125 
-            L 31.796875 8 
-            C 32.59375 6.90625 33.796875 5.40625 33.796875 4.703125 
-            C 33.796875 3.296875 32.59375 2.5 31 2.5 
-            L 31 -0.09375 
-            C 33.40625 0 37.703125 0 40.203125 0 
-            C 42.90625 0 46.09375 0 48.296875 -0.09375 
-            L 48.296875 2.5 
-            C 43.296875 2.5 41.796875 2.6875 39.40625 5.78125 
-            z
-            " id="CMR17-120"/>
-                  <path d="M 46.296875 25.25 
-            C 46.296875 34.921875 40.796875 43.984375 30.203125 43.984375 
-            C 17.09375 43.984375 4 29.71875 4 15.5625 
-            C 4 6.890625 9.40625 -1 19.59375 -1 
-            C 25.796875 -1 33.203125 1.390625 40.296875 7.375 
-            C 41.703125 1.796875 44.796875 -1 49.09375 -1 
-            C 54.5 -1 57.203125 4.59375 57.203125 5.890625 
-            C 57.203125 6.78125 56.5 6.78125 56.203125 6.78125 
-            C 55.40625 6.78125 55.296875 6.484375 55 5.6875 
-            C 54.09375 3.1875 51.796875 1 49.40625 1 
-            C 46.296875 1 46.296875 7.375 46.296875 13.46875 
-            C 56.5 25.640625 58.90625 38.21875 58.90625 38.3125 
-            C 58.90625 39.21875 58.09375 39.21875 57.796875 39.21875 
-            C 56.90625 39.21875 56.796875 38.921875 56.40625 37.125 
-            C 55.09375 32.734375 52.5 24.953125 46.296875 16.765625 
-            z
-            M 40 9.78125 
-            C 31.203125 1.890625 23.296875 1 19.796875 1 
-            C 12.703125 1 10.703125 7.28125 10.703125 11.96875 
-            C 10.703125 16.25 12.90625 26.4375 16 31.9375 
-            C 20.09375 38.921875 25.703125 42 30.203125 42 
-            C 39.90625 42 39.90625 29.328125 39.90625 20.953125 
-            C 39.90625 18.46875 39.796875 15.875 39.796875 13.375 
-            C 39.796875 11.375 39.90625 10.875 40 9.78125 
-            z
-            " id="CMMI12-11"/>
-                 </defs>
-                 <g transform="translate(19.6533 199.592384)rotate(-90)scale(0.18 -0.18)">
-                  <use transform="scale(0.996264)" xlink:href="#CMR17-97"/>
-                  <use transform="translate(75.766443 0)scale(0.996264)" xlink:href="#CMR17-121"/>
-                  <use transform="translate(154.135326 0)scale(0.996264)" xlink:href="#CMR17-108"/>
-                  <use transform="translate(179.006384 0)scale(0.996264)" xlink:href="#CMR17-97"/>
-                  <use transform="translate(224.696861 0)scale(0.996264)" xlink:href="#CMR17-98"/>
-                  <use transform="translate(278.19467 0)scale(0.996264)" xlink:href="#CMR17-101"/>
-                  <use transform="translate(318.68033 0)scale(0.996264)" xlink:href="#CMR17-108"/>
-                  <use transform="translate(373.627355 0)scale(0.996264)" xlink:href="#CMR17-119"/>
-                  <use transform="translate(440.137236 0)scale(0.996264)" xlink:href="#CMR17-105"/>
-                  <use transform="translate(465.008294 0)scale(0.996264)" xlink:href="#CMR17-116"/>
-                  <use transform="translate(500.289062 0)scale(0.996264)" xlink:href="#CMR17-104"/>
-                  <use transform="translate(581.260398 0)scale(0.996264)" xlink:href="#CMR17-108"/>
-                  <use transform="translate(606.131457 0)scale(0.996264)" xlink:href="#CMR17-97"/>
-                  <use transform="translate(651.821934 0)scale(0.996264)" xlink:href="#CMR17-116"/>
-                  <use transform="translate(687.102701 0)scale(0.996264)" xlink:href="#CMR17-101"/>
-                  <use transform="translate(727.588362 0)scale(0.996264)" xlink:href="#CMR17-120"/>
-                  <use transform="translate(805.957244 0)scale(0.996264)" xlink:href="#CMMI12-11"/>
-                 </g>
-                </g>
-               </g>
-               <g id="patch_3">
-                <path d="M 54.084887 230.192082 
-            L 54.084887 12.752082 
-            " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
-               </g>
-               <g id="patch_4">
-                <path d="M 444.684887 230.192082 
-            L 444.684887 12.752082 
-            " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
-               </g>
-               <g id="patch_5">
-                <path d="M 54.084887 230.192082 
-            L 444.684887 230.192082 
-            " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
-               </g>
-               <g id="patch_6">
-                <path d="M 54.084887 12.752082 
-            L 444.684887 12.752082 
-            " style="fill:none;stroke:#000000;stroke-linecap:square;stroke-linejoin:miter;stroke-width:0.8;"/>
-               </g>
-               <g id="legend_1">
-                <g id="patch_7">
-                 <path d="M 63.884887 43.46411 
-            L 168.244482 43.46411 
-            Q 171.044482 43.46411 171.044482 40.66411 
-            L 171.044482 22.552082 
-            Q 171.044482 19.752082 168.244482 19.752082 
-            L 63.884887 19.752082 
-            Q 61.084887 19.752082 61.084887 22.552082 
-            L 61.084887 40.66411 
-            Q 61.084887 43.46411 63.884887 43.46411 
-            z
-            " style="fill:#ffffff;opacity:0.8;stroke:#cccccc;stroke-linejoin:miter;"/>
-                </g>
-                <g id="PathCollection_2">
-                 <g>
-                  <use style="fill:#1f77b4;stroke:#1f77b4;" x="80.684887" xlink:href="#m6b5534bdeb" y="31.477082"/>
-                 </g>
-                </g>
-                <g id="text_13">
-                 <!-- data label -->
-                 <defs>
-                  <path d="M 29.203125 67.59375 
-            L 29.203125 65 
-            C 35.09375 65 36 64.40625 36 59.6875 
-            L 36 36.640625 
-            C 35.59375 37.140625 31.5 43.59375 23.40625 43.59375 
-            C 13.203125 43.59375 3.296875 34.5 3.296875 21.3125 
-            C 3.296875 8.203125 12.59375 -1 22.40625 -1 
-            C 30.90625 -1 35.296875 5.265625 35.796875 5.9375 
-            L 35.796875 -0.984375 
-            L 47.90625 -0.984375 
-            L 47.90625 2 
-            C 42 2 41.09375 2.59375 41.09375 7.390625 
-            L 41.09375 68.6875 
-            z
-            M 35.796875 11.796875 
-            C 35.796875 8.796875 34 6.09375 31.703125 4.09375 
-            C 28.296875 1.09375 24.90625 0.59375 23 0.59375 
-            C 20.09375 0.59375 9.703125 2.09375 9.703125 21.1875 
-            C 9.703125 40.8125 21.296875 42 23.90625 42 
-            C 28.5 42 32.203125 39.40625 34.5 35.796875 
-            C 35.796875 33.703125 35.796875 33.40625 35.796875 31.609375 
-            z
-            " id="CMR17-100"/>
-                 </defs>
-                 <g transform="translate(105.884887 35.152082)scale(0.14 -0.14)">
-                  <use transform="scale(0.996264)" xlink:href="#CMR17-100"/>
-                  <use transform="translate(50.89537 0)scale(0.996264)" xlink:href="#CMR17-97"/>
-                  <use transform="translate(96.585847 0)scale(0.996264)" xlink:href="#CMR17-116"/>
-                  <use transform="translate(131.866615 0)scale(0.996264)" xlink:href="#CMR17-97"/>
-                  <use transform="translate(207.633058 0)scale(0.996264)" xlink:href="#CMR17-108"/>
-                  <use transform="translate(232.504117 0)scale(0.996264)" xlink:href="#CMR17-97"/>
-                  <use transform="translate(278.194594 0)scale(0.996264)" xlink:href="#CMR17-98"/>
-                  <use transform="translate(331.692402 0)scale(0.996264)" xlink:href="#CMR17-101"/>
-                  <use transform="translate(372.178063 0)scale(0.996264)" xlink:href="#CMR17-108"/>
-                 </g>
-                </g>
-               </g>
-              </g>
-             </g>
-             <defs>
-              <clipPath id="pb6c7af1790">
-               <rect height="217.44" width="390.6" x="54.084887" y="12.752082"/>
-              </clipPath>
-             </defs>
-            </svg>
-          text/plain: <matplotlib.figure.Figure at 0x11be4df98>
-  code cell:
-    execution_count: 8
-    metadata (unknown keys):
-      ipub:
-        code:
-          asfloat: True
-          caption: 
-          label: code:example_pd
-          placement: H
-          widefigure: False
-        table:
-          alternate: gray!20
-          caption: An example of a table created with pandas dataframe.
-          label: tbl:example
-          placement: H
-    source:
-      df = pd.DataFrame(np.random.rand(3,4),columns=['a','b','c','d'])
-      df.a = ['$\delta$','x','y']
-      df.b = ['l','m','n']
-      df.set_index(['a','b'])
-      df.round(3)
-    outputs:
-      output 0:
-        output_type: execute_result
-        execution_count: 8
-        data:
-          text/html:
-            <div>
-            <style>
-                .dataframe thead tr:only-child th {
-                    text-align: right;
-                }
-            
-                .dataframe thead th {
-                    text-align: left;
-                }
-            
-                .dataframe tbody tr th {
-                    vertical-align: top;
-                }
-            </style>
-            <table border="1" class="dataframe">
-              <thead>
-                <tr style="text-align: right;">
-                  <th></th>
-                  <th>a</th>
-                  <th>b</th>
-                  <th>c</th>
-                  <th>d</th>
-                </tr>
-              </thead>
-              <tbody>
-                <tr>
-                  <th>0</th>
-                  <td>$\delta$</td>
-                  <td>l</td>
-                  <td>0.583</td>
-                  <td>0.279</td>
-                </tr>
-                <tr>
-                  <th>1</th>
-                  <td>x</td>
-                  <td>m</td>
-                  <td>0.914</td>
-                  <td>0.021</td>
-                </tr>
-                <tr>
-                  <th>2</th>
-                  <td>y</td>
-                  <td>n</td>
-                  <td>0.333</td>
-                  <td>0.116</td>
-                </tr>
-              </tbody>
-            </table>
-            </div>
-          text/latex:
-            \begin{tabular}{lllrr}
-            \toprule
-            {} &         a &  b &      c &      d \\
-            \midrule
-            0 &  $\delta$ &  l &  0.583 &  0.279 \\
-            1 &         x &  m &  0.914 &  0.021 \\
-            2 &         y &  n &  0.333 &  0.116 \\
-            \bottomrule
-            \end{tabular}
-          text/plain:
-                      a  b      c      d
-            0  $\delta$  l  0.583  0.279
-            1         x  m  0.914  0.021
-            2         y  n  0.333  0.116
-  code cell:
-    execution_count: 9
-    metadata (unknown keys):
-      ipub:
-        equation:
-          label: eqn:example_ipy
-    source:
-      Latex('$$ a = b+c $$')
-    outputs:
-      output 0:
-        output_type: execute_result
-        execution_count: 9
-        data:
-          text/latex: $$ a = b+c $$
-          text/plain: <IPython.core.display.Latex object>
-  code cell:
-    execution_count: 10
-    metadata (unknown keys):
-      ipub:
-        code:
-          asfloat: True
-          caption: 
-          label: code:example_sym
-          placement: H
-          widefigure: False
-        equation:
-          environment: equation
-          label: eqn:example_sympy
-    source:
-      y = sym.Function('y')
-      n = sym.symbols(r'\alpha')
-      f = y(n)-2*y(n-1/sym.pi)-5*y(n-2)
-      sym.rsolve(f,y(n),[1,4])
-    outputs:
-      output 0:
-        output_type: execute_result
-        execution_count: 10
-        data:
-          image/png: iVBORw0K...<snip base64, md5=d55c437a08cce58f...>
-          text/latex: $$\left(\sqrt{5} i\right)^{\alpha} \left(\frac{1}{2} - \frac{2 i}{5} \sqrt{5}\right) + \left(- \sqrt{5} i\right)^{\alpha} \left(\frac{1}{2} + \frac{2 i}{5} \sqrt{5}\right)$$

## deleted nb/metadata/celltoolbar:
-  Edit Metadata

## deleted nb/metadata/hide_input:
-  False

## deleted nb/metadata/ipub:
-  bibliography: example.bib
-  biboptions:
-    ['super', 'sort']
-  bibstyle: unsrtnat
-  language: portuges
-  listcode: True
-  listfigures: True
-  listtables: True
-  pandoc:
-    at_notation: True
-    use_numref: True
-  sphinx:
-    bib_title: My Bibliography
-  titlepage:
-    author: Authors Name
-    email: authors@email.com
-    institution:
-      ['Institution1', 'Institution2']
-    logo: logo_example.png
-    subtitle: Sub-Title
-    supervisors:
-      ['First Supervisor', 'Second Supervisor']
-    tagline: A tagline for the report.
-    title: Main-Title
-  toc:
-    depth: 2

## deleted nb/metadata/jupytext:
-  metadata_filter:
-    notebook: ipub

## modified nb/metadata/language_info/version:
-  3.6.2
+  3.6.1

## deleted nb/metadata/latex_envs:
-  LaTeX_envs_menu_present: True
-  autocomplete: True
-  bibliofile: example.bib
-  cite_by: apalike
-  current_citInitial: 1
-  eqLabelWithNumbers: True
-  eqNumInitial: 1
-  hotkeys:
-    equation: Ctrl-E
-    itemize: Ctrl-I
-  labels_anchors: False
-  latex_user_defs: False
-  report_style_numbering: False
-  user_envs_cfg: True

## deleted nb/metadata/nav_menu:

## added nb/metadata/test_name:
+  notebook1

## deleted nb/metadata/toc:
-  colors:
-    hover_highlight: #DAA520
-    navigate_num: #000000
-    navigate_text: #333333
-    running_highlight: #FF0000
-    selected_highlight: #FFD700
-    sidebar_border: #EEEEEE
-    wrapper_background: #FFFFFF
-  moveMenuLeft: True
-  nav_menu:
-    height: 161px
-    width: 252px
-  navigate_menu: True
-  number_sections: True
-  sideBar: True
-  threshold: 4
-  toc_cell: False
-  toc_section_display: block
-  toc_window_display: True
-  widenNotebook: False

## deleted nb/metadata/varInspector:
-  cols:
-    lenName: 16
-    lenType: 16
-    lenVar: 40
-  kernels_config:
-    python:
-      delete_cmd_postfix: 
-      delete_cmd_prefix: del 
-      library: var_list.py
-      varRefreshCmd: print(var_dic_list())
-    r:
-      delete_cmd_postfix: ) 
-      delete_cmd_prefix: rm(
-      library: var_list.r
-      varRefreshCmd: cat(var_dic_list()) 
-  types_to_exclude:
-    item[0]: module
-    item[1]: function
-    item[2]: builtin_function_or_method
-    item[3]: instance
-    item[4]: _Feature
-  window_display: False


Success!