From b85805111b9ce203baab56e8a22d533ac712c266 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Fri, 6 Oct 2023 15:42:09 +0200 Subject: [PATCH 01/49] Rename Executors to Submitters to avoid name clash Also generalize it so that it can take any object that follows the concurrent.futures interface --- pyiron_contrib/tinybase/creator.py | 57 +++++++++++++++++-------- pyiron_contrib/tinybase/executor.py | 65 ++++++----------------------- pyiron_contrib/tinybase/job.py | 10 ++--- 3 files changed, 56 insertions(+), 76 deletions(-) diff --git a/pyiron_contrib/tinybase/creator.py b/pyiron_contrib/tinybase/creator.py index ba9986739..a8b23cb96 100644 --- a/pyiron_contrib/tinybase/creator.py +++ b/pyiron_contrib/tinybase/creator.py @@ -18,6 +18,10 @@ import importlib from typing import Union from functools import wraps +from concurrent.futures import ( + ProcessPoolExecutor, + ThreadPoolExecutor +) try: from os import sched_getaffinity @@ -28,16 +32,14 @@ import pyiron_contrib.tinybase.job from pyiron_contrib.tinybase.project import JobNotFoundError -from pyiron_contrib.tinybase.executor import ( - Executor, - ProcessExecutor, - BackgroundExecutor, - DaskExecutor, -) +from pyiron_contrib.tinybase.executor import Submitter, FuturesSubmitter from pyiron_atomistics import ase_to_pyiron, Atoms import ase.build +from pympipool import PoolExecutor as PyMPIPoolExecutor +from dask.distributed import Client, LocalCluster + class Creator(abc.ABC): @abc.abstractmethod @@ -194,25 +196,44 @@ def f(self, *args, **kwargs): return f - @wraps(ProcessExecutor) + @wraps(ProcessPoolExecutor) + @_save + def process(self, max_processes=_DEFAULT_CPUS, **kwargs): + return FuturesSubmitter( + ProcessPoolExecutor(max_processes=max_processes, **kwargs) + ) + + @_save + def foreground(self): + return Submitter() + + @wraps(ThreadPoolExecutor) @_save - def process(self, max_processes=_DEFAULT_CPUS): - return ProcessExecutor(max_processes=max_processes) + def background(self, max_workers=4, **kwargs): + return FuturesSubmitter( + ThreadPoolExecutor(max_workers=max_workers, **kwargs) + ) - @wraps(BackgroundExecutor) + @wraps(LocalCluster) @_save - def background(self, max_threads=4): - return BackgroundExecutor(max_threads=max_threads) + def dask_local(self, n_workers=_DEFAULT_CPUS, **kwargs): + return FuturesSubmitter( + LocalCluster(n_workers=n_workers, **kwargs) + ) - @wraps(DaskExecutor.from_localcluster) + @wraps(Client) @_save - def dask_local(self, max_workers=_DEFAULT_CPUS, **kwargs): - return DaskExecutor.from_localcluster(max_workers=max_workers, **kwargs) + def dask_cluster(self, cluster, **kwargs): + return FuturesSubmitter( + Client(cluster, **kwargs) + ) - @wraps(DaskExecutor.from_cluster) + @wraps(PyMPIPoolExecutor) @_save - def dask_cluster(self, cluster): - return DaskExecutor.from_cluster(cluster) + def pympipool(self, max_workers=_DEFAULT_CPUS, **kwargs): + return FuturesSubmitter( + PyMPIPoolExecutor(max_workers=max_workers, **kwargs) + ) del _save diff --git a/pyiron_contrib/tinybase/executor.py b/pyiron_contrib/tinybase/executor.py index 5a0a7a202..8c457de02 100644 --- a/pyiron_contrib/tinybase/executor.py +++ b/pyiron_contrib/tinybase/executor.py @@ -8,7 +8,6 @@ from pyiron_contrib.tinybase.task import AbstractTask, TaskGenerator - class RunMachine: class Code(enum.Enum): INIT = "init" @@ -150,7 +149,13 @@ def output(self): return self._run_machine._data["output"] -class Executor: +class Submitter: + """ + Simple wrapper around ExecutionContext and its sub classes. + + Exists only to have a single object from which multiple contexts can be + spawned. + """ def submit(self, tasks: List[AbstractTask]) -> ExecutionContext: return ExecutionContext(tasks) @@ -247,55 +252,11 @@ def _run_running(self): else: logging.info("Some tasks are still executing!") - -class BackgroundExecutor(Executor): - def __init__(self, max_threads): - self._max_threads = max_threads - self._pool = None - - def submit(self, tasks): - if self._pool is None: - self._pool = ThreadPoolExecutor(max_workers=self._max_threads) - return FuturesExecutionContext(self._pool, tasks) - - -class ProcessExecutor(Executor): - def __init__(self, max_processes): - self._max_processes = max_processes - self._pool = None - - def submit(self, tasks): - if self._pool is None: - self._pool = ProcessPoolExecutor(max_workers=self._max_processes) - return FuturesExecutionContext(self._pool, tasks) - - -from dask.distributed import Client, LocalCluster - - -class DaskExecutor(Executor): - def __init__(self, client): - self._client = client - - @classmethod - def from_cluster(cls, cluster): - return cls(Client(cluster)) - - @classmethod - def from_localcluster(cls, max_processes=None, **kwargs): - return cls(Client(LocalCluster(n_workers=max_processes, **kwargs))) +class FuturesSubmitter(Submitter): + def __init__(self, executor): + self._executor = executor def submit(self, tasks): - return FuturesExecutionContext(self._client, tasks) - - -from pympipool.mpi import PyMPIExecutor - - -class PyMPIExecutor(Executor): - def __init__(self, max_workers, **kwargs): - self._max_workers = max_workers - self._pool = PyMPIExecutor(max_workers=max_workers, **kwargs) - - def submit(self, tasks): - return FuturesExecutionContext(self._pool, tasks) + return FuturesExecutionContext( + self._executor, tasks + ) diff --git a/pyiron_contrib/tinybase/job.py b/pyiron_contrib/tinybase/job.py index d3fbc08c0..d0a665e93 100644 --- a/pyiron_contrib/tinybase/job.py +++ b/pyiron_contrib/tinybase/job.py @@ -8,10 +8,8 @@ GenericStorage, ) from pyiron_contrib.tinybase.executor import ( - Executor, + Submitter, ExecutionContext, - BackgroundExecutor, - ProcessExecutor, ) from pyiron_contrib.tinybase.database import DatabaseEntry from pyiron_contrib.tinybase.project import ProjectInterface, ProjectAdapter @@ -124,7 +122,7 @@ def _setup_executor_callbacks(self): self._executor._run_machine.observe("finished", self._update_status("finished")) def run( - self, executor: Union[Executor, str, None] = None + self, submitter: Union[Submitter, str, None] = None ) -> Optional[ExecutionContext]: """ Start execution of the job. @@ -132,12 +130,12 @@ def run( If the job already has a database id and is not in "ready" state, do nothing. Args: - executor (:class:`~.Executor`, str): specifies which executor to + submitter (:class:`~.Submitter`, str): specifies which executor to use, if `str` must be a method name of :class:`.ExecutorCreator`; if not given use the last created executor Returns: - :class:`.Executor`: the executor that is running the task or nothing. + :class:`.ExecutionContext`: the executor that is running the task or nothing. """ if ( self._id is None From 7e177fea7644015926035e0f9b49c7a98daabad1 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Tue, 2 Jan 2024 21:14:35 +0100 Subject: [PATCH 02/49] REBASE: rename executor --- notebooks/tinybase/TinyJob.ipynb | 1540 ++++++++++++++++++---------- pyiron_contrib/tinybase/creator.py | 4 +- pyiron_contrib/tinybase/job.py | 55 +- 3 files changed, 1031 insertions(+), 568 deletions(-) diff --git a/notebooks/tinybase/TinyJob.ipynb b/notebooks/tinybase/TinyJob.ipynb index c2ed74c9a..e558603e0 100644 --- a/notebooks/tinybase/TinyJob.ipynb +++ b/notebooks/tinybase/TinyJob.ipynb @@ -20,7 +20,7 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", + "/home/ponder/science/phd/dev/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" ] } @@ -92,30 +92,10 @@ "tags": [] }, "outputs": [ - { - "data": { - "text/html": [ - "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/html": [
-       "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "fcabf727e97b4c06943de99599aaa7dd",
+       "model_id": "ce40e4194af0455e84cabb747fa7786c",
        "version_major": 2,
        "version_minor": 0
       },
@@ -138,7 +118,7 @@
    },
    "outputs": [],
    "source": [
-    "j.input.structure = pr.create.structure.bulk('Fe', a=1.2, cubic=True).repeat(2)\n",
+    "j.input.structure = pr.create.structure.bulk('Fe', a=1.2, cubic=True).repeat(2).to_ase()\n",
     "j.input.calculator = MorsePotential()"
    ]
   },
@@ -168,7 +148,7 @@
     {
      "data": {
       "text/plain": [
-       ""
+       ""
       ]
      },
      "execution_count": 8,
@@ -183,18 +163,6 @@
   {
    "cell_type": "code",
    "execution_count": 9,
-   "id": "74c84007-e3e0-4071-978f-388abdfffbc5",
-   "metadata": {
-    "tags": []
-   },
-   "outputs": [],
-   "source": [
-    "j.wait()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 10,
    "id": "2c533085-ade1-4585-9d3c-ed2e200f387c",
    "metadata": {
     "tags": []
@@ -206,7 +174,7 @@
        "'finished'"
       ]
      },
-     "execution_count": 10,
+     "execution_count": 9,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -217,15 +185,29 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 10,
    "id": "49ccfe01-7b7e-4615-bf43-21c1bbffec66",
    "metadata": {
     "tags": []
    },
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "0d21ad69059544b9967cf5eeeec71900",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "NGLWidget(max_frame=21)"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
    "source": [
-    "# Testing env doesn't have nglview\n",
-    "# j.output.animate_structures()"
+    "j.output.animate_structures()"
    ]
   },
   {
@@ -238,7 +220,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 11,
    "id": "7b807119-da8d-475c-9aa8-c8e8c9afa115",
    "metadata": {
     "tags": []
@@ -250,7 +232,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 12,
    "id": "3a8cda32-df2e-4884-8cfd-84e438c5be69",
    "metadata": {
     "tags": []
@@ -268,7 +250,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 13,
    "id": "d4b81c3f-4667-4b99-a2b3-08c7ee7e2c82",
    "metadata": {
     "tags": []
@@ -283,7 +265,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 14,
    "id": "e7494fee-d565-45e3-a819-c77ab0d2c7f6",
    "metadata": {
     "scrolled": true,
@@ -295,62 +277,62 @@
      "output_type": "stream",
      "text": [
       "       Step     Time          Energy         fmax\n",
-      "LBFGS:    0 12:27:58       11.288146      189.5231\n",
-      "LBFGS:    1 12:27:58        1.168671       43.6957\n",
-      "LBFGS:    2 12:27:58        0.860403       38.6924\n",
-      "LBFGS:    3 12:27:58        0.362400       30.3554\n",
-      "LBFGS:    4 12:27:58        0.004806       24.0865\n",
-      "LBFGS:    5 12:27:58       -0.267437       19.0615\n",
-      "LBFGS:    6 12:27:58       -0.471646       15.0628\n",
-      "LBFGS:    7 12:27:58       -0.623506       11.8810\n",
-      "LBFGS:    8 12:27:58       -0.735237        9.3518\n",
-      "LBFGS:    9 12:27:58       -0.816458        7.3435\n",
-      "LBFGS:   10 12:27:58       -0.874705        5.7512\n",
-      "LBFGS:   11 12:27:58       -0.915849        4.4909\n",
-      "LBFGS:   12 12:27:58       -0.944435        3.4955\n",
-      "LBFGS:   13 12:27:58       -0.963943        2.7113\n",
-      "LBFGS:   14 12:27:58       -0.977006        2.0956\n",
-      "LBFGS:   15 12:27:58       -0.985585        1.6137\n",
-      "LBFGS:   16 12:27:58       -0.991109        1.2382\n",
-      "LBFGS:   17 12:27:58       -0.994598        0.9468\n",
-      "LBFGS:   18 12:27:58       -0.996763        0.7216\n",
-      "LBFGS:   19 12:27:58       -0.998083        0.5484\n",
-      "LBFGS:   20 12:27:58       -0.998876        0.4157\n",
-      "LBFGS:   21 12:27:58       -0.999347        0.3144\n",
-      "LBFGS:   22 12:27:58       -0.999623        0.2374\n",
-      "LBFGS:   23 12:27:58       -0.999784        0.1790\n",
-      "LBFGS:   24 12:27:58       -0.999877        0.1348\n",
-      "LBFGS:   25 12:27:58       -0.999930        0.1014\n",
-      "LBFGS:   26 12:27:58       -0.999960        0.0762\n",
-      "LBFGS:   27 12:27:58       -0.999977        0.0573\n",
-      "LBFGS:   28 12:27:58       -0.999987        0.0430\n",
-      "LBFGS:   29 12:27:58       -0.999993        0.0323\n",
-      "LBFGS:   30 12:27:58       -0.999996        0.0242\n",
-      "LBFGS:   31 12:27:58       -0.999998        0.0182\n",
-      "LBFGS:   32 12:27:58       -0.999999        0.0136\n",
-      "LBFGS:   33 12:27:58       -0.999999        0.0102\n",
-      "LBFGS:   34 12:27:58       -1.000000        0.0077\n",
-      "LBFGS:   35 12:27:58       -1.000000        0.0058\n",
-      "LBFGS:   36 12:27:58       -1.000000        0.0043\n",
-      "LBFGS:   37 12:27:58       -1.000000        0.0032\n",
-      "LBFGS:   38 12:27:58       -1.000000        0.0024\n",
-      "LBFGS:   39 12:27:58       -1.000000        0.0018\n",
-      "LBFGS:   40 12:27:58       -1.000000        0.0014\n",
-      "LBFGS:   41 12:27:58       -1.000000        0.0010\n",
-      "LBFGS:   42 12:27:58       -1.000000        0.0008\n"
+      "LBFGS:    0 21:52:05       11.288146      189.5231\n",
+      "LBFGS:    1 21:52:05        1.168671       43.6957\n",
+      "LBFGS:    2 21:52:05        0.860403       38.6924\n",
+      "LBFGS:    3 21:52:05        0.362400       30.3554\n",
+      "LBFGS:    4 21:52:05        0.004806       24.0865\n",
+      "LBFGS:    5 21:52:05       -0.267437       19.0615\n",
+      "LBFGS:    6 21:52:05       -0.471646       15.0628\n",
+      "LBFGS:    7 21:52:05       -0.623506       11.8810\n",
+      "LBFGS:    8 21:52:05       -0.735237        9.3518\n",
+      "LBFGS:    9 21:52:05       -0.816458        7.3435\n",
+      "LBFGS:   10 21:52:05       -0.874705        5.7512\n",
+      "LBFGS:   11 21:52:05       -0.915849        4.4909\n",
+      "LBFGS:   12 21:52:05       -0.944435        3.4955\n",
+      "LBFGS:   13 21:52:05       -0.963943        2.7113\n",
+      "LBFGS:   14 21:52:05       -0.977006        2.0956\n",
+      "LBFGS:   15 21:52:05       -0.985585        1.6137\n",
+      "LBFGS:   16 21:52:05       -0.991109        1.2382\n",
+      "LBFGS:   17 21:52:05       -0.994598        0.9468\n",
+      "LBFGS:   18 21:52:05       -0.996763        0.7216\n",
+      "LBFGS:   19 21:52:05       -0.998083        0.5484\n",
+      "LBFGS:   20 21:52:05       -0.998876        0.4157\n",
+      "LBFGS:   21 21:52:05       -0.999347        0.3144\n",
+      "LBFGS:   22 21:52:05       -0.999623        0.2374\n",
+      "LBFGS:   23 21:52:05       -0.999784        0.1790\n",
+      "LBFGS:   24 21:52:05       -0.999877        0.1348\n",
+      "LBFGS:   25 21:52:05       -0.999930        0.1014\n",
+      "LBFGS:   26 21:52:05       -0.999960        0.0762\n",
+      "LBFGS:   27 21:52:05       -0.999977        0.0573\n",
+      "LBFGS:   28 21:52:05       -0.999987        0.0430\n",
+      "LBFGS:   29 21:52:05       -0.999993        0.0323\n",
+      "LBFGS:   30 21:52:05       -0.999996        0.0242\n",
+      "LBFGS:   31 21:52:05       -0.999998        0.0182\n",
+      "LBFGS:   32 21:52:05       -0.999999        0.0136\n",
+      "LBFGS:   33 21:52:05       -0.999999        0.0102\n",
+      "LBFGS:   34 21:52:05       -1.000000        0.0077\n",
+      "LBFGS:   35 21:52:05       -1.000000        0.0058\n",
+      "LBFGS:   36 21:52:05       -1.000000        0.0043\n",
+      "LBFGS:   37 21:52:05       -1.000000        0.0032\n",
+      "LBFGS:   38 21:52:05       -1.000000        0.0024\n",
+      "LBFGS:   39 21:52:05       -1.000000        0.0018\n",
+      "LBFGS:   40 21:52:05       -1.000000        0.0014\n",
+      "LBFGS:   41 21:52:05       -1.000000        0.0010\n",
+      "LBFGS:   42 21:52:05       -1.000000        0.0008\n"
      ]
     }
    ],
    "source": [
     "j.run(\n",
-    "    executor=pr.create.executor.process(4)\n",
+    "    submitter=pr.create.executor.process(4)\n",
     ")\n",
     "j.wait()"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 15,
    "id": "7c16a615-0913-4880-9694-2c125285babc",
    "metadata": {
     "tags": []
@@ -397,7 +379,7 @@
        "      1\n",
        "      1\n",
        "      1\n",
-       "      /home/poul/pyiron/contrib/notebooks/tinybase/t...\n",
+       "      /home/ponder/science/phd/dev/contrib/notebooks...\n",
        "      finished\n",
        "      AseMDTask\n",
        "    \n",
@@ -408,8 +390,8 @@
        "      min\n",
        "      2\n",
        "      1\n",
-       "      3\n",
-       "      /home/poul/pyiron/contrib/notebooks/tinybase/t...\n",
+       "      2\n",
+       "      /home/ponder/science/phd/dev/contrib/notebooks...\n",
        "      finished\n",
        "      AseMinimizeTask\n",
        "    \n",
@@ -420,18 +402,18 @@
       "text/plain": [
        "   id username name  jobtype_id  project_id  status_id  \\\n",
        "0   1   pyiron   md           1           1          1   \n",
-       "1   2   pyiron  min           2           1          3   \n",
+       "1   2   pyiron  min           2           1          2   \n",
        "\n",
        "                                            location    status  \\\n",
-       "0  /home/poul/pyiron/contrib/notebooks/tinybase/t...  finished   \n",
-       "1  /home/poul/pyiron/contrib/notebooks/tinybase/t...  finished   \n",
+       "0  /home/ponder/science/phd/dev/contrib/notebooks...  finished   \n",
+       "1  /home/ponder/science/phd/dev/contrib/notebooks...  finished   \n",
        "\n",
        "              type  \n",
        "0        AseMDTask  \n",
        "1  AseMinimizeTask  "
       ]
      },
-     "execution_count": 27,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -442,7 +424,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 16,
    "id": "59ea5510-b6ce-4317-90c3-4af77db3d59a",
    "metadata": {
     "tags": []
@@ -450,7 +432,7 @@
    "outputs": [
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAur0lEQVR4nO3de3SU9b3v8c8zk2Ryn4QEAoEAkQTkjoBySyi2lb2osmX12GprFd1dbV0Fhc3qrtJ2V7e1ZrfdbemSA7v2rKN4rOJaW6Wcs6wt1UIICOVikC0WEogQLiEkkJlcJ8lkzh/JDERuuTwzz1zer7We1c4zT+b5Osu15uPv93u+P8Pn8/kEAAAQIjarCwAAALGF8AEAAEKK8AEAAEKK8AEAAEKK8AEAAEKK8AEAAEKK8AEAAEKK8AEAAEIqzuoCPqurq0tnz55VWlqaDMOwuhwAANAHPp9PjY2Nys3Nlc1247GNsAsfZ8+eVV5entVlAACAAaiurtaoUaNueE3YhY+0tDRJ3cWnp6dbXA0AAOgLt9utvLy8wO/4jYRd+PBPtaSnpxM+AACIMH1ZMsGCUwAAEFKEDwAAEFKEDwAAEFJht+YDAACreb1edXR0WF1G2LHb7YqLixt0KwzCBwAAV2hqatLp06fl8/msLiUsJScna8SIEUpISBjwZxA+AADo4fV6dfr0aSUnJ2vo0KE0u7yCz+dTe3u7Lly4oKqqKhUWFt60mdj1ED4AAOjR0dEhn8+noUOHKikpyepywk5SUpLi4+N18uRJtbe3KzExcUCfw4JTAAA+gxGP6xvoaEevzzChDgAAgD4jfAAAgJAifAAAEONefvllZWRkhOx+hA8AABBSMRM+GlratXH7cX3/vw5ZXQoAAKZatGiRVq5cqZUrVyojI0NZWVn60Y9+FOhVcunSJT388MPKzMxUcnKylixZooqKCknS9u3b9eijj8rlcskwDBmGoWeeeSao9cbUo7Y//9Pf5fNJa+6aoOHOgT0eBACIHT6fT60dXkvunRRv79dTN5s2bdI3v/lN7d27V/v379e3v/1tjRkzRt/61rf0yCOPqKKiQlu3blV6erqefPJJfelLX9KRI0c0f/58rVu3Tj/+8Y919OhRSVJqamqw/rEkxVD4yEhO0LSRTh067dLOigv6yuw8q0sCAIS51g6vJv34T5bc+8iz/6DkhL7/TOfl5enXv/61DMPQhAkTdPjwYf3617/WokWLtHXrVu3atUvz58+XJP3+979XXl6etmzZoq985StyOp0yDEPDhw8P1j9OLzEz7SJJRYXZkqSyyjqLKwEAwFxz587tNVIyb948VVRU6MiRI4qLi9OcOXMC72VlZWnChAn65JNPrCg1dkY+JKm4cKj+51+Pa1dlnbq6fLLZaCIDALi+pHi7jjz7D5bdO5h8Pp9lzdT6PfJRWlqqpUuXKjc3V4ZhaMuWLYH3Ojo69OSTT2rq1KlKSUlRbm6uHn74YZ09e9bMmgds5uhMJSfYVdfUrk9q3FaXAwAIc4ZhKDkhzpKjv8Fgz549V70uLCzUpEmT1NnZqb179wbeq6+v17FjxzRx4kRJUkJCgrze0K1t6Xf4aG5u1vTp07V+/fqr3mtpadHBgwf1r//6rzp48KDeeustHTt2TP/4j/9oSrGDlRBn09xbsiRJZRVMvQAAokd1dbXWrFmjo0eP6vXXX9cLL7ygVatWqbCwUPfee6++9a1vqaysTIcOHdI3vvENjRw5Uvfee68kaezYsWpqatJ7772nuro6tbS0BLXWfk+7LFmyREuWLLnme06nU9u2bet17oUXXtAdd9yhU6dOafTo0QOr0kRFBdl6/++12llRp+98bpzV5QAAYIqHH35Yra2tuuOOO2S32/X444/r29/+tiTppZde0qpVq3TPPfeovb1dCxcu1DvvvKP4+HhJ0vz58/XYY4/p/vvvV319vZ5++umgPm4b9DUf/ueGr9c5zePxyOPxBF673cGdDinuWXT6t08vqq3Dq8Qgz6kBABAK8fHxWrdunTZu3HjVe5mZmXrllVdu+PcbN2685t8GQ1Cfdmlra9NTTz2lr3/960pPT7/mNSUlJXI6nYEjLy+4j8AWDEvV8PREtXd2ad+nF4N6LwAAcLWghY+Ojg498MAD6urq0oYNG6573dq1a+VyuQJHdXV1sEqS1L14yP/I7U7WfQAAEHJBmXbp6OjQV7/6VVVVVen999+/7qiHJDkcDjkcjmCUcV3Fhdn6rwOnCR8AgKiwfft2q0voF9NHPvzBo6KiQn/5y1+UlZVl9i0GbUFB98jHJ+fcutDoucnVAADATP0OH01NTSovL1d5ebkkqaqqSuXl5Tp16pQ6Ozt13333af/+/fr9738vr9ermpoa1dTUqL293ezaByw71aHJud2jMbvodgoAQEj1O3zs379ft912m2677TZJ0po1a3Tbbbfpxz/+sU6fPq2tW7fq9OnTmjFjhkaMGBE4du/ebXrxg+Ff91FaccHiSgAAiC39XvOxaNGiwBa913Kj98JJccFQ/XbHCZVV1FnaYhYAgFgTUxvLXWn22Ew54myqbfSoorbJ6nIAAIgZMRs+EuPtuiN/iCSp9BhTLwAAhErMhg9JWlg4VJJUxqJTAEAEW7RokVavXn3N9x555BEtW7YspPXcTNDbq4cz/6LTPSfq5en0yhFHq3UAQHT5zW9+E3brMWN65OPW4WnKTnWoraNLB05esrocAABM53Q6r7u/mlViOnwYhhHYaK6MbqcAgCjx7rvvyul06pVXXrlq2mXRokV64okn9P3vf19DhgzR8OHDg7qD7bXEdPiQpKIC9nkBAFyHzye1N1tzDHCqZPPmzfrqV7+qV155RQ8//PA1r9m0aZNSUlK0d+9e/fznP9ezzz6rbdu2Deab6peYXvMhKTDy8d9nXbrY3K4hKQkWVwQACBsdLdLzudbc+wdnpYSUfv3Jhg0b9IMf/EB/+MMfdOedd173umnTpunpp5+WJBUWFmr9+vV67733dNdddw2q5L6K+fAxLD1RE3LSdPR8o3ZV1mnpdIv+JQMAYBDefPNNnT9/XmVlZbrjjjtueO20adN6vR4xYoRqa2uDWV4vMR8+pO7Rj6PnG1VWQfgAAFwhPrl7BMKqe/fDjBkzdPDgQb300ku6/fbbb9i5Oz4+vtdrwzDU1dU1oDIHgvCh7kdu/1dZlXZWXKDVOgDgMsPo99SHVcaNG6df/vKXWrRokex2u9avX291SdcV8wtOJWlOfpYS7DaddbXpRF2z1eUAADAg48eP11//+le9+eab1206Fg4Y+ZCUlGDX7LGZ2n28XmUVdRo3NNXqkgAAGJAJEybo/fffD4yAhCPCR4+iwmztPl6vnRUXtHz+WKvLAQCgz7Zv397r9cSJE3X+/Pk+XStJW7ZsMb+oG2DapYd/n5cPjterwxu6RTcAAMQawkePSSPSNSQlQc3tXn14qsHqcgAAiFqEjx42m6EFBf5W6xcsrgYAgOhF+LhCsb/VeiWt1gEACBbCxxWKelqtH6pukKulw+JqAACIToSPK+RmJGnc0BR1+aQPTjD6AQCxyjfATd1igRnfDeHjM4p7nnopZZdbAIg5/r4Y7e3tFlcSvlpaWiRd3aK9P+jz8RnFhdl6efenKiN8AEDMiYuLU3Jysi5cuKD4+HjZbPw3up/P51NLS4tqa2uVkZExqAZmhI/PmHNLluJshk5dbNHJ+maNyYqMnv4AgMEzDEMjRoxQVVWVTp48aXU5YSkjI0PDhw8f1GcQPj4j1RGnmWMy9beqi9pZUUf4AIAYk5CQoMLCQqZeriE+Pt6Ulu2Ej2soLsjW36ouqqyiTt+YO8bqcgAAIWaz2ZSYmGh1GVGLyaxr8D9yu+t4nTpptQ4AgKkIH9cwbVSG0hPj1NjWqY/OuKwuBwCAqEL4uAb7Fa3Wdx7jqRcAAMxE+LgOf7+Pskr2eQEAwEyEj+so7ln38eGpBjW20WodAACzED6uI29IssZkJauzy6c9Jy5aXQ4AAFGD8HED/tGPsgqmXgAAMAvh4waKCrrXfeyk1ToAAKYhfNzAvHFZstsMnahr1ulLLVaXAwBAVCB83IAzKV7TRzkliY3mAAAwCeHjJvyP3O6sJHwAAGAGwsdN+Bed7qqsk7fLZ3E1AABEPsLHTUzPy1CqI04NLR36+Cyt1gEAGCzCx03E222aNy5LEk+9AABgBsJHH/inXnbS7wMAgEEjfPSBf9HpgZOX1NLeaXE1AABENsJHH4zNStbIjCR1eH3aW0WrdQAABoPw0QeGYVyeejnGug8AAAaD8NFH/qmXskrWfQAAMBj9Dh+lpaVaunSpcnNzZRiGtmzZ0ut9n8+nZ555Rrm5uUpKStKiRYv08ccfm1WvZeaPy5JhSMfON6nG1WZ1OQAARKx+h4/m5mZNnz5d69evv+b7P//5z/WrX/1K69ev1759+zR8+HDdddddamxsHHSxVspMSdC0kT2t1ul2CgDAgPU7fCxZskTPPfecvvzlL1/1ns/n07p16/TDH/5QX/7ylzVlyhRt2rRJLS0teu2110wp2EpFPHILAMCgmbrmo6qqSjU1NVq8eHHgnMPh0Oc+9znt3r37mn/j8Xjkdrt7HeHKv+5jV2Wdumi1DgDAgJgaPmpqaiRJOTk5vc7n5OQE3vuskpISOZ3OwJGXl2dmSaaaOTpTyQl21TW16+81kT2NBACAVYLytIthGL1e+3y+q875rV27Vi6XK3BUV1cHoyRTJMTZNCd/iCSmXgAAGChTw8fw4cMl6apRjtra2qtGQ/wcDofS09N7HeHs8iO3LDoFAGAgTA0f+fn5Gj58uLZt2xY4197erh07dmj+/Plm3soy/mZje6suqq3Da3E1AABEnrj+/kFTU5MqKysDr6uqqlReXq4hQ4Zo9OjRWr16tZ5//nkVFhaqsLBQzz//vJKTk/X1r3/d1MKtUjAsVcPTE1XjbtO+Ty8GRkIAAEDf9Dt87N+/X3feeWfg9Zo1ayRJy5cv18svv6zvf//7am1t1Xe/+11dunRJc+bM0Z///GelpaWZV7WFDMNQUWG2/uvAaZVV1BE+AADoJ8Pn84XVM6Nut1tOp1Mulyts13/8ofyMVm0u18QR6frjqmKrywEAwHL9+f1mb5cBWFDQve7jk3NuXWj0WFwNAACRhfAxANmpDk0a0Z3qdvHUCwAA/UL4GKDi8f5W64QPAAD6g/AxQMUF3QtNd1ZcUJgtmwEAIKwRPgZo9thMOeJsqm30qKK2yepyAACIGISPAUqMt+uOQKt1pl4AAOgrwscg+Ludss8LAAB9R/gYBH+Dsb0nLsrTSat1AAD6gvAxCLcOT1N2qkOtHV4dOHnJ6nIAAIgIhI9BMAwjMPVSxroPAAD6hPAxSEUF9PsAAKA/CB+D5B/5+O+zLl1qbre4GgAAwh/hY5CGpSdqQk6afD5p13FGPwAAuBnChwmK/I/cHiN8AABwM4QPEwQWnVbW0WodAICbIHyYYE5+lhLsNp1paNWJumarywEAIKwRPkyQlGDX7LGZknjkFgCAmyF8mCSw7oPwAQDADRE+TLKwp9X6nhP16vB2WVwNAADhi/Bhkkkj0jUkJUFNnk6VVzdYXQ4AAGGL8GESm83Q/HFZkqSdx9jlFgCA6yF8mMg/9bKzknUfAABcD+HDRP5Fp4eqG+Rq6bC4GgAAwhPhw0S5GUkaNzRFXT7pgxOMfgAAcC2ED5MV+6deeOQWAIBrInyYrKiAfh8AANwI4cNkc8dlKc5m6NTFFp2sp9U6AACfRfgwWaojTjNHd7daZ/QDAICrET6CILDLLeEDAICrED6CwP/I7e7jdeqk1ToAAL0QPoJg2qgMpSfGyd3WqY/OuKwuBwCAsEL4CAK7zdCCAqZeAAC4FsJHkPinXnZWsM8LAABXInwEiX+flw9PNaixjVbrAAD4ET6CJG9IssZkJauzy6c9Jy5aXQ4AAGGD8BFElx+5ZeoFAAA/wkcQFRX07PNSyaJTAAD8CB9BNG9clmyGdOJCs840tFpdDgAAYYHwEUTOpHjNyMuQxNQLAAB+hI8gK+p56qWUfh8AAEgifATdQn+r9co6dXX5LK4GAADrET6CbHpehlIdcbrU0qGPz7qtLgcAAMsRPoIs3m7TvHFZkqRS1n0AAED4CIXL/T5Y9wEAgOnho7OzUz/60Y+Un5+vpKQk3XLLLXr22WfV1RW7W8sX9Wwyt//kRbW0d1pcDQAA1ooz+wN/9rOf6T//8z+1adMmTZ48Wfv379ejjz4qp9OpVatWmX27iJCfnaKRGUk609CqvVUXdeeEYVaXBACAZUwf+fjggw9077336u6779bYsWN13333afHixdq/f7/Zt4oYhmEEpl52HmPqBQAQ20wPH0VFRXrvvfd07NgxSdKhQ4dUVlamL33pS9e83uPxyO129zqiUXFPv4+yShadAgBim+nTLk8++aRcLpduvfVW2e12eb1e/fSnP9XXvva1a15fUlKif/u3fzO7jLAzf1yWDEM6dr5J591tyklPtLokAAAsYfrIxxtvvKFXX31Vr732mg4ePKhNmzbpP/7jP7Rp06ZrXr927Vq5XK7AUV1dbXZJYSEzJUHTRjolSTt56gUAEMNMH/n4l3/5Fz311FN64IEHJElTp07VyZMnVVJSouXLl191vcPhkMPhMLuMsFRUmK1Dp10qq7ig+2aNsrocAAAsYfrIR0tLi2y23h9rt9tj+lFbv6IC/7oPWq0DAGKX6SMfS5cu1U9/+lONHj1akydP1ocffqhf/epX+qd/+iezbxVxZo7JUHKCXXVN7fp7TaMm5aZbXRIAACFn+sjHCy+8oPvuu0/f/e53NXHiRH3ve9/Td77zHf3kJz8x+1YRxxFn15z8IZJ46gUAELsMn88XVuP/brdbTqdTLpdL6enRNzLwv8uq9Oz/O6Liwmz9n2/OsbocAABM0Z/fb/Z2CTF/s7G/VV1UW4fX4moAAAg9wkeIFQxLVU66Q57OLu379KLV5QAAEHKEjxDrbrXe89QL/T4AADGI8GEB/9RLKeEDABCDCB8WWFDQHT4+OefWhUaPxdUAABBahA8LZKc6NGlE90rg3ccZ/QAAxBbCh0WKx/dMvRwjfAAAYgvhwyLFgVbrFxRmrVYAAAgqwodFZo/NlCPOpvNujypqm6wuBwCAkCF8WCQx3q47elqt7+SpFwBADCF8WMj/yG1ZBfu8AABiB+HDQv5mY3tOXJSnk1brAIDYQPiw0K3D05Sd6lBrh1cHTzZYXQ4AACFB+LBQd6v17qmXnUy9AABiBOHDYkU93U7LKll0CgCIDYQPixX1jHwcPuPSpeZ2i6sBACD4CB8Wy0lP1IScNPl80i5arQMAYgDhIwwUBR65JXwAAKIf4SMMXF50WkerdQBA1CN8hIE5+VlKsNt0pqFVVXXNVpcDAEBQET7CQFKCXbPGZEqi1ToAIPoRPsJE8fjLUy8AAEQzwkeYKC7wt1qvV4e3y+JqAAAIHsJHmJicm67M5Hg1eTpVXt1gdTkAAAQN4SNM2GyGFhQw9QIAiH6EjzCysGeXW/Z5AQBEM8JHGPE3GztU3SBXa4fF1QAAEByEjzCSm5GkW4amqMsnfUCrdQBAlCJ8hJnLUy+EDwBAdCJ8hJminkWnZZWEDwBAdCJ8hJm547IUZzN0sr5Fp+pbrC4HAADTET7CTKojTjNH97Rar+SpFwBA9CF8hCH/Uy87jzH1AgCIPoSPMFTcEz52H69TJ63WAQBRhvARhqaNylB6YpzcbZ366IzL6nIAADAV4SMM2a9otV7GI7cAgChD+AhT/nUfhA8AQLQhfIQpf7Oxg6cuqcnTaXE1AACYh/ARpvKGJGtMVrI6u3zac7ze6nIAADAN4SOM+budssstACCaED7CWLF/nxdarQMAogjhI4zNG5clmyGduNCsMw2tVpcDAIApCB9hzJkUrxl5GZKkMqZeAABRIijh48yZM/rGN76hrKwsJScna8aMGTpw4EAwbhX1ivxTLzxyCwCIEqaHj0uXLmnBggWKj4/XH//4Rx05ckS//OUvlZGRYfatYsLCnn4fuyrr1NXls7gaAAAGL87sD/zZz36mvLw8vfTSS4FzY8eONfs2MWN6XoZSHXG61NKhj8+6NXWU0+qSAAAYFNNHPrZu3arZs2frK1/5ioYNG6bbbrtNv/vd7657vcfjkdvt7nXgsni7TXNvyZIklbLuAwAQBUwPHydOnNDGjRtVWFioP/3pT3rsscf0xBNP6JVXXrnm9SUlJXI6nYEjLy/P7JIi3sLxtFoHAEQPw+fzmbqQICEhQbNnz9bu3bsD55544gnt27dPH3zwwVXXezweeTyewGu32628vDy5XC6lp6ebWVrEOnGhSZ//5Q4l2G0qf/ouJSeYPlsGAMCguN1uOZ3OPv1+mz7yMWLECE2aNKnXuYkTJ+rUqVPXvN7hcCg9Pb3Xgd7ys1M0MiNJ7d4u7a26aHU5AAAMiunhY8GCBTp69Givc8eOHdOYMWPMvlXMMAxDxexyCwCIEqaHj3/+53/Wnj179Pzzz6uyslKvvfaaXnzxRa1YscLsW8WUokL2eQEARAfTw8ftt9+ut99+W6+//rqmTJmin/zkJ1q3bp0efPBBs28VUxaMy5ZhSMfON+m8u83qcgAAGLCgrFy85557dM899wTjo2NWZkqCpo506qPTLpVV1Ol/zBpldUkAAAwIe7tEkGKmXgAAUYDwEUGKCrr3eSmrrKfVOgAgYhE+IsjMMRlKTrCrrsmjv9c0Wl0OAAADQviIII44u+bkD5EklVUy9QIAiEyEjwhTVNg99bKTfh8AgAhF+IgwC3sWnf6t6qLaOrwWVwMAQP8RPiJMwbBU5aQ75Ons0v5PL1ldDgAA/Ub4iDDdrdb9Uy+s+wAARB7CRwS63O+DdR8AgMhD+IhACwq6w8eRc25daPRYXA0AAP1D+IhA2akOTRqRLknafZzRDwBAZCF8RCimXgAAkYrwEaGuXHTq89FqHQAQOQgfEWr22Ew54mw67/aosrbJ6nIAAOgzwkeESoy3646eVuulTL0AACII4SOC+dd9lNHvAwAQQQgfEayooHvdx54TF+XppNU6ACAyED4i2K3D05Sd6lBrh1cHTzZYXQ4AAH1C+IhgNpuhooIsSVJZJVMvAIDIQPiIcJcfuWXRKQAgMhA+IlxRz6LTw2dcutTcbnE1AADcHOEjwuWkJ2pCTpp8PmkXrdYBABGA8BEFigKP3BI+AADhj/ARBYqu2OeFVusAgHBH+IgCc/KHKMFu05mGVlXVNVtdDgAAN0T4iALJCXGaNSZTklRWydQLACC8ET6iRPH47qmX0mOEDwBAeCN8RIniQKv1enV4uyyuBgCA6yN8RInJuenKTI5Xk6dT5dUNVpcDAMB1ET6ihM1maEHB5adeAAAIV4SPKFIc6PfBPi8AgPBF+IgiRT37vJRXN8jV2mFxNQAAXBvhI4qMzEjSLUNT1OWTPjheb3U5AABcE+EjyiwM7HLL1AsAIDwRPqJMUc+iU5qNAQDCFeEjyswdl6U4m6GT9S06Vd9idTkAAFyF8BFlUh1xmjm6u9X6zkqmXgAA4YfwEYWKAo/cMvUCAAg/hI8o5O/3sauyTt4un8XVAADQG+EjCk0blaH0xDi52zr10ekGq8sBAKAXwkcUstNqHQAQxggfUYp1HwCAcEX4iFLFBd3Nxg6euqQmT6fF1QAAcBnhI0qNzkrWmKxkdXb5tIdW6wCAMBL08FFSUiLDMLR69epg3wqfQbdTAEA4Cmr42Ldvn1588UVNmzYtmLfBdRT37PNSyj4vAIAwErTw0dTUpAcffFC/+93vlJmZGazb4AbmjcuSzZBOXGjWmYZWq8sBAEBSEMPHihUrdPfdd+uLX/ziDa/zeDxyu929DpjDmRSv6XkZkqQyRj8AAGEiKOFj8+bNOnjwoEpKSm56bUlJiZxOZ+DIy8sLRkkxyz/1Qr8PAEC4MD18VFdXa9WqVXr11VeVmJh40+vXrl0rl8sVOKqrq80uKaZd2Wq9i1brAIAwEGf2Bx44cEC1tbWaNWtW4JzX61VpaanWr18vj8cju90eeM/hcMjhcJhdBnrMyMtQqiNOl1o69PFZt6aOclpdEgAgxpkePr7whS/o8OHDvc49+uijuvXWW/Xkk0/2Ch4Ivni7TXNvydJfPjmvnZUXCB8AAMuZHj7S0tI0ZcqUXudSUlKUlZV11XmExsLx2d3h41idvruowOpyAAAxjg6nMcDfbOzAyUtqbfdaXA0AINaZPvJxLdu3bw/FbXAd+dkpGpmRpDMNrdpbVa9FE4ZZXRIAIIYx8hEDDMMIPPXCI7cAAKsRPmJEUU/4KCN8AAAsRviIEQvGZcswpKPnG3Xe3WZ1OQCAGEb4iBGZKQmaOrL7MVtGPwAAViJ8xJDL6z7Y5wUAYB3CRwwpKuje56Wssl4+H63WAQDWIHzEkJljMpQUb1ddk0d/r2m0uhwAQIwifMQQR5xdc28ZIompFwCAdQgfMaaosHvqhX4fAACrED5izMKeRad/q7qotg5arQMAQo/wEWMKhqUqJ90hT2eX9n96yepyAAAxiPARYwzDCDz1srOSdR8AgNAjfMSgheN7+n0cY90HACD0CB8xaEFBd/g4cs6tuiaPxdUAAGIN4SMGZac6NGlEuiRpVyWjHwCA0CJ8xKjLrdYJHwCA0CJ8xKjiQL+PC7RaBwCEFOEjRs0emylHnE3n3R5V1jZZXQ4AIIYQPmJUYrxdd+T7W60z9QIACB3CRwy7vO6Dfh8AgNAhfMQwf7OxPScuytNJq3UAQGgQPmLYrcPTlJ3qUGuHVwdPNlhdDgAgRhA+YpjNZqioIEuSVEardQBAiBA+YlxRzyO3ZSw6BQCECOEjxvkXnX50xqVLze0WVwMAiAWEjxiXk56o8Tmp8vmk3cfrrS4HABADCB/o1e0UAIBgI3xARVfs80KrdQBAsBE+oDn5Q5Rgt+lMQ6uq6pqtLgcAEOUIH1ByQpxmjcmUJJVV8tQLACC4CB+Q1HvqBQCAYCJ8QJK0sGfR6QfH69Xh7bK4GgBANCN8QJI0OTddmcnxavJ06lB1g9XlAACiGOEDkrpbrS8o6J56KWXqBQAQRIQPBPi7nZbR7wMAEESEDwT493k5dNolV2uHxdUAAKIV4QMBIzOSdMvQFHm7fPqAVusAgCAhfKCX4p51H2WVTL0AAIKD8IFeLu/zwqJTAEBwED7Qy9xxWYqzGTpZ36JT9S1WlwMAiEKED/SS6ojTzNHdrdZ3MvUCAAgCwgeuUhR45JapFwCA+QgfuIo/fOyqrJO3y2dxNQCAaEP4wFWmjXQqPTFO7rZOfXS6wepyAABRxvTwUVJSottvv11paWkaNmyYli1bpqNHj5p9GwRRnN2m+eOYegEABIfp4WPHjh1asWKF9uzZo23btqmzs1OLFy9Wc3Oz2bdCEBWP7w4fPHILADBbnNkf+O677/Z6/dJLL2nYsGE6cOCAFi5caPbtECTFBd39Pg6euqQmT6dSHab/qwIAiFFBX/PhcrkkSUOGDLnm+x6PR263u9cB643OStaYrGR1dvm09wSt1gEA5glq+PD5fFqzZo2Kioo0ZcqUa15TUlIip9MZOPLy8oJZEvqhqICpFwCA+YIaPlauXKmPPvpIr7/++nWvWbt2rVwuV+Corq4OZknoh+JCf/ig2RgAwDxBm8h//PHHtXXrVpWWlmrUqFHXvc7hcMjhcASrDAzCvHHZshnS8QvNOtvQqtyMJKtLAgBEAdNHPnw+n1auXKm33npL77//vvLz882+BULEmRSv6XkZknjkFgBgHtPDx4oVK/Tqq6/qtddeU1pammpqalRTU6PW1lazb4UQ8O9yW8rUCwDAJKaHj40bN8rlcmnRokUaMWJE4HjjjTfMvhVCwL/uY/fxenXRah0AYALT13z4fPxARZMZeRlKdcTpYnO7jpxza8pIp9UlAQAiHHu74Ibi7TbNvSVLElMvAABzED5wU/6pFxadAgDMQPjATfnDx/5PL6m13WtxNQCASEf4wE3lZ6doZEaS2r1d2ltFq3UAwOAQPnBThmEw9QIAMA3hA31SVMg+LwAAcxA+0CcLxmXLMKSj5xtV626zuhwAQAQjfKBPMlMSNLWnxwejHwCAwSB8oM+KCnrWfVQSPgAAA0f4QJ/593nZWVFHJ1sAwIARPtBnM8dkKCnerromj/5e02h1OQCACEX4QJ854uyae8sQSTxyCwAYOMIH+qWoZ+qFfV4AAANF+EC/+JuN/a3qoto6aLUOAOg/wgf6pXBYqnLSHfJ0dmn/p5esLgcAEIEIH+gXwzBUVNDz1EslUy8AgP4jfKDfFo7vabV+jEWnAID+I3yg3xb0NBs7cs6tuiaPxdUAACIN4QP9lp3q0MQR6ZKkXXQ7BQD0E+EDA7KQXW4BAANE+MCAFPWEjzJarQMA+onwgQG5fewQOeJsqnG3qbK2yepyAAARhPCBAUmMt+uO/O5W60y9AAD6g/CBAfN3Oy1j0SkAoB8IHxgwf7OxPSfq1d7ZZXE1AIBIQfjAgN06PE3ZqQlqaffq4ClarQMA+obwgQGz2QwVFfgfuaXVOgCgbwgfGJSiwu6plzIWnQIA+ojwgUHxLzr96IxLl5rbLa4GABAJCB8YlJz0RI3PSZXPJ+0+Xm91OQCACED4wKAV+6deKln3AQC4OcIHBs3far30GK3WAQA3R/jAoM3JH6IEu01nGlr1aX2L1eUAAMIc4QODlpwQp1ljMiXxyC0A4OYIHzCFf+qFfV4AADdD+IApFvYsOt1zvF4dXlqtAwCuj/ABU0zOTVdmcrwaPZ06VN1gdTkAgDBG+IApbDZD8wuYegEA3BzhA6ZZWMg+LwCAmyN8wDT+fV4OnXbJ1dphcTUAgHBF+IBpRmYk6ZahKfJ2+fQBrdYBANdB+ICpinvWfdBqHQBwPYQPmCqwzwuLTgEA1xEXrA/esGGDfvGLX+jcuXOaPHmy1q1bp+Li4mDdDmFi7rgsxdkMfVrfoilP/0mJ8XYlxtuUFG9XUoJdiXF2JSbYlRRvU2K8XUnx9p5r/P/f1n3dFef85xP9n3HFeUecTTabYfU/NgCgH4ISPt544w2tXr1aGzZs0IIFC/Tb3/5WS5Ys0ZEjRzR69Ohg3BJhItURpyVTR+j/HjqrJk+nmjydQb+nI+5ykElK6A4kSQmXg83lgHNFCPrsuStDUELv846e/423GzIMgg4ADJbhC8I2pHPmzNHMmTO1cePGwLmJEydq2bJlKikpueHfut1uOZ1OuVwupaenm1eUzyd1sOlZKPh8PtU2etTa0aW2Du/lo9Ortvbuc60dXnk6L7/f2t6ltk6vPD3XtbZ71dbRpbbOz3xGR/f5dgu6qNpthhJ7go4j7ooQE2cLjMxcOWLjuHJ0x/93PaEm0T8KdEUISuwJTYlxdkZzAARffLJk4n9Q9ef32/SRj/b2dh04cEBPPfVUr/OLFy/W7t27r7re4/HI4/EEXrvdbrNL6tbRIj2fG5zPRi+GpJxg3iC+57CKt+fw3OxCAAhjPzgrJaRYcmvTF5zW1dXJ6/UqJ6f3z09OTo5qamquur6kpEROpzNw5OXlmV0SAAAII0FbcPrZuXGfz3fN+fK1a9dqzZo1gddutzs4ASQ+uTvlAWGqq8snT2eXWv1TVB1dam33T0V1n/f4p6x6zrV19H36qT8TrD71bza2f58dpA/u92f351LTZ6cBS9lsNj0Rn2zZ/U0PH9nZ2bLb7VeNctTW1l41GiJJDodDDofD7DKuZhiWDS8BfWGTlNRzAEA0M33aJSEhQbNmzdK2bdt6nd+2bZvmz59v9u0AAECECcq0y5o1a/TQQw9p9uzZmjdvnl588UWdOnVKjz32WDBuBwAAIkhQwsf999+v+vp6Pfvsszp37pymTJmid955R2PGjAnG7QAAQAQJSp+PwQhanw8AABA0/fn9Zm8XAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUkFprz4Y/oarbrfb4koAAEBf+X+3+9I4PezCR2NjoyQpLy/P4koAAEB/NTY2yul03vCasNvbpaurS2fPnlVaWpoMwzD1s91ut/Ly8lRdXc2+MUHE9xwafM+hw3cdGnzPoRGs79nn86mxsVG5ubmy2W68qiPsRj5sNptGjRoV1Hukp6fzL3YI8D2HBt9z6PBdhwbfc2gE43u+2YiHHwtOAQBASBE+AABASMVU+HA4HHr66aflcDisLiWq8T2HBt9z6PBdhwbfc2iEw/ccdgtOAQBAdIupkQ8AAGA9wgcAAAgpwgcAAAgpwgcAAAipmAkfGzZsUH5+vhITEzVr1izt3LnT6pKiTmlpqZYuXarc3FwZhqEtW7ZYXVJUKikp0e233660tDQNGzZMy5Yt09GjR60uK+ps3LhR06ZNCzRimjdvnv74xz9aXVbUKykpkWEYWr16tdWlRJ1nnnlGhmH0OoYPH25JLTERPt544w2tXr1aP/zhD/Xhhx+quLhYS5Ys0alTp6wuLao0Nzdr+vTpWr9+vdWlRLUdO3ZoxYoV2rNnj7Zt26bOzk4tXrxYzc3NVpcWVUaNGqV///d/1/79+7V//359/vOf17333quPP/7Y6tKi1r59+/Tiiy9q2rRpVpcStSZPnqxz584FjsOHD1tSR0w8ajtnzhzNnDlTGzduDJybOHGili1bppKSEgsri16GYejtt9/WsmXLrC4l6l24cEHDhg3Tjh07tHDhQqvLiWpDhgzRL37xC33zm9+0upSo09TUpJkzZ2rDhg167rnnNGPGDK1bt87qsqLKM888oy1btqi8vNzqUqJ/5KO9vV0HDhzQ4sWLe51fvHixdu/ebVFVgHlcLpek7h9GBIfX69XmzZvV3NysefPmWV1OVFqxYoXuvvtuffGLX7S6lKhWUVGh3Nxc5efn64EHHtCJEycsqSPsNpYzW11dnbxer3Jycnqdz8nJUU1NjUVVAebw+Xxas2aNioqKNGXKFKvLiTqHDx/WvHnz1NbWptTUVL399tuaNGmS1WVFnc2bN+vgwYPat2+f1aVEtTlz5uiVV17R+PHjdf78eT333HOaP3++Pv74Y2VlZYW0lqgPH36GYfR67fP5rjoHRJqVK1fqo48+UllZmdWlRKUJEyaovLxcDQ0NevPNN7V8+XLt2LGDAGKi6upqrVq1Sn/+85+VmJhodTlRbcmSJYH/P3XqVM2bN0/jxo3Tpk2btGbNmpDWEvXhIzs7W3a7/apRjtra2qtGQ4BI8vjjj2vr1q0qLS3VqFGjrC4nKiUkJKigoECSNHv2bO3bt0+/+c1v9Nvf/tbiyqLHgQMHVFtbq1mzZgXOeb1elZaWav369fJ4PLLb7RZWGL1SUlI0depUVVRUhPzeUb/mIyEhQbNmzdK2bdt6nd+2bZvmz59vUVXAwPl8Pq1cuVJvvfWW3n//feXn51tdUszw+XzyeDxWlxFVvvCFL+jw4cMqLy8PHLNnz9aDDz6o8vJygkcQeTweffLJJxoxYkTI7x31Ix+StGbNGj300EOaPXu25s2bpxdffFGnTp3SY489ZnVpUaWpqUmVlZWB11VVVSovL9eQIUM0evRoCyuLLitWrNBrr72mP/zhD0pLSwuM6jmdTiUlJVlcXfT4wQ9+oCVLligvL0+NjY3avHmztm/frnfffdfq0qJKWlraVeuVUlJSlJWVxTomk33ve9/T0qVLNXr0aNXW1uq5556T2+3W8uXLQ15LTISP+++/X/X19Xr22Wd17tw5TZkyRe+8847GjBljdWlRZf/+/brzzjsDr/1ziMuXL9fLL79sUVXRx//I+KJFi3qdf+mll/TII4+EvqAodf78eT300EM6d+6cnE6npk2bpnfffVd33XWX1aUBA3L69Gl97WtfU11dnYYOHaq5c+dqz549lvwWxkSfDwAAED6ifs0HAAAIL4QPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUv8fCM/lx7x5X9QAAAAASUVORK5CYII=",
       "text/plain": [
        "
" ] @@ -465,15 +447,29 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 17, "id": "3fb09d42-f800-46ee-9919-83180863e1ee", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fa5ea10926a449d4b77abc162d70178d", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "NGLWidget(max_frame=5)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Testing env doesn't have nglview\n", - "# j.output.animate_structures()" + "j.output.animate_structures()" ] }, { @@ -486,7 +482,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 18, "id": "d32508b9-2854-4076-9109-08ede1b52dc2", "metadata": { "tags": [] @@ -495,15 +491,11 @@ { "data": { "text/plain": [ - "[11.28814567708869,\n", - " -0.8747049787590951,\n", - " -0.9988764739052705,\n", - " -0.9999959367316252,\n", - " -0.9999999870081488,\n", - " -0.999999995888409]" + "array([11.28814568, -0.87470498, -0.99887647, -0.99999594, -0.99999999,\n", + " -1. ])" ] }, - "execution_count": 30, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -514,7 +506,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 26, "id": "db691097-72c6-45a4-89b1-6ec16018c8b8", "metadata": { "tags": [] @@ -522,7 +514,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -537,13 +529,27 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 28, "id": "23ce6822-b38b-41f3-9269-109dbb152ecf", "metadata": {}, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "6ea3657f68ca462188997ae2514683ce", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "NGLWidget(max_frame=5)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Testing env doesn't have nglview\n", - "# j.project.load(j.name).output.animate_structures()" + "j.project.load(j.name).output.animate_structures()" ] }, { @@ -556,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 29, "id": "654ce992-b73f-42e3-a32e-2e0dafa7c952", "metadata": { "tags": [] @@ -568,7 +574,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 30, "id": "253237f0-b338-470c-bc54-3c7400a757b7", "metadata": {}, "outputs": [], @@ -579,7 +585,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 31, "id": "c801093b-499e-48a7-8444-77602ed88a96", "metadata": {}, "outputs": [], @@ -589,7 +595,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 32, "id": "1e30b36e-11e6-47d1-836e-cffea7b73cdd", "metadata": {}, "outputs": [], @@ -599,7 +605,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 34, "id": "18b5305a-8950-44af-bc2e-c9734b059713", "metadata": {}, "outputs": [ @@ -607,26 +613,26 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1.08 s, sys: 415 ms, total: 1.5 s\n", - "Wall time: 11.9 s\n" + "CPU times: user 489 ms, sys: 262 ms, total: 751 ms\n", + "Wall time: 5.04 s\n" ] } ], "source": [ "%%time\n", - "murn.run(executor='process')\n", + "murn.run(submitter='process')\n", "murn.wait()" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 35, "id": "836bb2ec-4295-4a3c-b976-7a35d04aad36", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGdCAYAAAAvwBgXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5+UlEQVR4nO3dd3hc9bnu/XtGXbJ6b5ZkuchVtmVs3ABTTDVJCC34UA3BG0hCeJPsEPa7gZ3s7fMGwsmBBAKJKUls42A6odgB3HCX5V5kW5LVexlZvaz3DxVbuEm2ZtaM5vu5rrmC1sxoPcqyPbd+5VkWwzAMAQAAmMBqdgEAAMB9EUQAAIBpCCIAAMA0BBEAAGAagggAADANQQQAAJiGIAIAAExDEAEAAKbxNLuAc+ns7FRxcbECAwNlsVjMLgcAAPSDYRiqr69XXFycrNZzj3k4dRApLi5WYmKi2WUAAIALUFBQoISEhHO+xqmDSGBgoKSuHyQoKMjkagAAQH/YbDYlJib2fo6fi1MHkZ7pmKCgIIIIAAAupj/LKlisCgAATEMQAQAApiGIAAAA0xBEAACAaQgiAADANAQRAABgGoIIAAAwDUEEAACYhiACAABMQxABAACmIYgAAADTEEQAAIBpnPqmd/ZyuLRe7+4sVKi/t/7tilSzywEAwG255YhISV2TXlufow93FZldCgAAbs0tg0h8iJ8kqbi2yeRKAABwb24ZRGK7g4ituV31zW0mVwMAgPtyyyAyzMdTQb5dy2NK6ppNrgYAAPfllkFEkuKYngEAwHRuG0ROrhNhRAQAALO4bRCJDfGV1LWDBgAAmMNtg0jP1EwRUzMAAJjGbYMIW3gBADCf2waR2OCuIMKuGQAAzOO2QSSuZ41IbbM6Ow2TqwEAwD25bRCJDvKV1SK1dnSqsqHF7HIAAHBLbhtEvDysigo8OSoCAAAcz22DiHRyeoYFqwAAmMPNgwhbeAEAMBNBROycAQDALO4dRIKZmgEAwEzuHURoagYAgKkIIpKKmZoBAMAUBBFJFfUtamnvMLkaAADcj8OCyJIlS2SxWPT444876pTnFervJV+vrv8LShkVAQDA4RwSRLZv367XXntNkyZNcsTp+s1isSguuGedCEEEAABHs3sQOXHihBYuXKg///nPCg0NtffpBowFqwAAmMfuQeTRRx/VjTfeqKuvvvq8r21paZHNZuvzsDe6qwIAYB5Pe37zt99+Wzt37tT27dv79folS5bo2WeftWdJp4kNZucMAABmsduISEFBgX7yk5/o73//u3x9ffv1nieffFJ1dXW9j4KCAnuV1yueqRkAAExjtxGRzMxMlZeXKyMjo/dYR0eH1q9frz/84Q9qaWmRh4dHn/f4+PjIx8fHXiWdEWtEAAAwj92CyFVXXaW9e/f2OXb//fcrLS1N//7v/35aCDFL7ClrRAzDkMViMbkiAADch92CSGBgoCZMmNDnWEBAgMLDw087bqaeqZmG1g7VNbUpxN/b5IoAAHAfbt1ZVZJ8vTwUGdg1HVRYw/QMAACOZNddM9+2du1aR56u3xJC/VRR36LCmkZNiA82uxwAANyG24+ISFJCqL8kRkQAAHA0goi6RkQkgggAAI5GENGpQaTR5EoAAHAvBBExNQMAgFkIIuo7NWMYhsnVAADgPggiOtlL5ERLu+qa2kyuBgAA90EQEb1EAAAwC0GkGwtWAQBwPIJINxasAgDgeASRbvQSAQDA8Qgi3ZiaAQDA8Qgi3ZiaAQDA8Qgi3eglAgCA4xFEutFLBAAAxyOIdKOXCAAAjkcQOQULVgEAcCyCyClYsAoAgGMRRE5BLxEAAByLIHIKpmYAAHAsgsgpmJoBAMCxCCKnoJcIAACORRA5xam9RGob6SUCAIC9EUROcWovkQLWiQAAYHcEkW9JCutaJ5JfTRABAMDeCCLfMrw7iByvIogAAGBvBJFvGR7eFUQKGBEBAMDuCCLfwogIAACOQxD5lqRw1ogAAOAoBJFvSeweESmpa1Jre6fJ1QAAMLQRRL4lcpiP/Lw81GlIRbV0WAUAwJ4IIt9isVhOWSfSYHI1AAAMbQSRM2DnDAAAjkEQOQN2zgAA4BgEkTNg5wwAAI5BEDmDRNq8AwDgEASRMzj1fjOGYZhcDQAAQxdB5AziQ/1ksUiNrR2qPNFqdjkAAAxZBJEz8PH0UFywnySmZwAAsCeCyFkkhvUEEXqJAABgLwSRs0gKC5Ak5VfRXRUAAHshiJxFT1Oz44yIAABgNwSRs+hpakZ3VQAA7IcgchZ0VwUAwP4IImfR0121vL5FTa0dJlcDAMDQRBA5i2A/LwX6ekqSCmoYFQEAwB4IImdhsVh6R0WYngEAwD4IIueQFN61hTevkp0zAADYA0HkHEZEdAWR3CqCCAAA9mDXILJkyRJdcsklCgwMVFRUlL773e/q8OHD9jzloEpmRAQAALuyaxBZt26dHn30UW3ZskVr1qxRe3u75s+fr4YG1/hgT+4ZESGIAABgF572/Oaff/55n6/feOMNRUVFKTMzU5dddpk9Tz0oUrqDSElds5paO+Tn7WFyRQAADC12DSLfVldXJ0kKCws74/MtLS1qaWnp/dpmszmkrrMJ9fdSkK+nbM3tOl7doLSYIFPrAQBgqHHYYlXDMPTEE09ozpw5mjBhwhlfs2TJEgUHB/c+EhMTHVXeGVksFqVEDpPEOhEAAOzBYUHkscce0549e7RixYqzvubJJ59UXV1d76OgoMBR5Z1VSncvkRyCCAAAg84hUzM/+tGP9NFHH2n9+vVKSEg46+t8fHzk4+PjiJL6rWfBKiMiAAAMPrsGEcMw9KMf/Ujvv/++1q5dq5SUFHuezi5SeoMI3VUBABhsdg0ijz76qJYvX64PP/xQgYGBKi0tlSQFBwfLz8/PnqceND29RGhqBgDA4LPrGpFXXnlFdXV1uuKKKxQbG9v7WLlypT1PO6h6pmYq6ltU39xmcjUAAAwtdp+acXXBfl4KD/BWVUOrjlc1akJ8sNklAQAwZHCvmX6gwyoAAPZBEOkH7jkDAIB9EET6YUQkIyIAANgDQaQf2DkDAIB9EET6ITmiq7sqUzMAAAwugkg/9IyI1DS2qbax1eRqAAAYOggi/RDg46mowK7W86wTAQBg8BBE+qm31TvrRAAAGDQEkX7q2TmTU0EQAQBgsBBE+ik1cpgkgggAAIOJINJPPUHkaPkJkysBAGDoIIj0U08Qya1sUEen699DBwAAZ0AQ6af4UD95e1rV2tGpwppGs8sBAGBIIIj0k4fVohHdO2eOVTA9AwDAYCCIDEBqVNf0zLFyFqwCADAYCCID0LNOhBERAAAGB0FkAFIjmZoBAGAwEUQGgC28AAAMLoLIAPR0V61pbFN1Aze/AwDgYhFEBsDf21PxIX6SmJ4BAGAwEEQG6OTOGYIIAAAXiyAyQCxYBQBg8BBEBujkFl56iQAAcLEIIgNELxEAAAYPQWSARnavESmoblRzW4fJ1QAA4NoIIgMUMcxbQb6e6jSkvCqmZwAAuBgEkQGyWCzccwYAgEFCELkArBMBAGBwEEQuQM86kSP0EgEA4KIQRC7AqJ4gUlZvciUAALg2gsgFGB0dKEnKqWhQe0enydUAAOC6CCIXID7ET/7eHmrt6FReVaPZ5QAA4LIIIhfAarX0Ts9kMz0DAMAFI4hcoJ7pGYIIAAAXjiBygXqCyJEyds4AAHChCCIXaFR019TMYUZEAAC4YASRCzQmpmtEJK+yQa3t7JwBAOBCEEQuUEyQrwJ9PNXeaSi3klbvAABcCILIBbJYLEzPAABwkQgiF6FneoYOqwAAXBiCyEUYFcUWXgAALgZB5CKc7CXCFl4AAC4EQeQijO5eI3K8qkHNbR0mVwMAgOshiFyEyEAfhfh7qdOQjlUwKgIAwEARRC6CxWLR6Cg6rAIAcKEIIheJLbwAAFw4gshF6tnCm11KEAEAYKAIIhepZ+fMIYIIAAAD5pAg8vLLLyslJUW+vr7KyMjQhg0bHHFahxgbEyRJKqptUl1Tm8nVAADgWuweRFauXKnHH39cTz31lLKysjR37lxdf/31ys/Pt/epHSLY30vxIX6SpMOMigAAMCB2DyIvvPCCFi1apAcffFBjx47V73//eyUmJuqVV16x96kdJq17ncjBEpvJlQAA4FrsGkRaW1uVmZmp+fPn9zk+f/58bdq06bTXt7S0yGaz9Xm4grGxXdMzBBEAAAbGrkGksrJSHR0dio6O7nM8OjpapaWlp71+yZIlCg4O7n0kJibas7xBQxABAODCOGSxqsVi6fO1YRinHZOkJ598UnV1db2PgoICR5R30cbGdk3NHC6rV0enYXI1AAC4Dk97fvOIiAh5eHicNvpRXl5+2iiJJPn4+MjHx8eeJdlFUniAfL2sam7rVF5Vg1Ijh5ldEgAALsGuIyLe3t7KyMjQmjVr+hxfs2aNZs2aZc9TO5SH1aIxMUzPAAAwUHafmnniiSf0l7/8Ra+//roOHjyon/70p8rPz9fixYvtfWqHGhfLzhkAAAbKrlMzknTHHXeoqqpK//Vf/6WSkhJNmDBBn376qZKSkux9aoc6uWCVXiIAAPSX3YOIJD3yyCN65JFHHHEq06R1T80cYkQEAIB+414zgySte2qmuK5ZtY2tJlcDAIBrIIgMkiBfLyWEdrV6Z3oGAID+IYgMIhqbAQAwMASRQTS2+54zh0oJIgAA9AdBZBCxcwYAgIEhiAyicXFdQeRwWb3aOjpNrgYAAOdHEBlEw8P8Fejrqdb2Th0pO2F2OQAAOD2CyCCyWCwa3z0qsq+4zuRqAABwfgSRQTYxPliStK+IIAIAwPkQRAbZBIIIAAD9RhAZZD1B5ECJTe0sWAUA4JwIIoMsJTxAAd4eam7rVE5lg9nlAADg1Agig8xqtWh8XNeoyN5CpmcAADgXgogdjI9n5wwAAP1BELEDds4AANA/BBE76Fmwur/Yps5Ow+RqAABwXgQRO0iNHCZfL6saWztYsAoAwDkQROzAw2rRuO4b4O1nnQgAAGdFELGTnnUi7JwBAODsCCJ2Mr5nwSojIgAAnBVBxE56RkT2F7FgFQCAsyGI2MnIqGHy8bSqvqVdeVUsWAUA4EwIInbi5WHt3ca7u7DW3GIAAHBSBBE7mpwYIknalV9rah0AADgrgogdpfcEkYJaU+sAAMBZEUTsaEp3EDlQYlNLe4e5xQAA4IQIInaUEOqnsABvtXUYOlBsM7scAACcDkHEjiwWS+86kd1MzwAAcBqCiJ2lJ4RIYp0IAABnQhCxs8nDQyRJu2n1DgDAaQgidpae0NVLJLeyQbWNrSZXAwCAcyGI2FmIv7dSIgIkMSoCAMC3EUQcgMZmAACcGUHEAXqmZ3YV1JhcCQAAzoUg4gCTh4dK6pqaMQzuxAsAQA+CiAOMjQ2Ut4dV1Q2tKqhuMrscAACcBkHEAXw8PTQuLkiStDOf6RkAAHoQRBxkWlLX9MyO49UmVwIAgPMgiDhIRk8QyWNEBACAHgQRB8lI7goih8vqZWtuM7kaAACcA0HEQaICfTU8zF+GIWXRTwQAAEkEEYfqWSeSmcc6EQAAJIKIQ/VMz+w4zjoRAAAkgohDTUsKkyTtKqhVe0enydUAAGA+gogDjYoapiBfTzW2duhgSb3Z5QAAYDqCiANZrRZNpZ8IAAC9CCIOdrKxGetEAAAgiDhYRvc6kcy8Gm6ABwBwe3YLInl5eVq0aJFSUlLk5+en1NRUPf3002ptbbXXKV3C5MQQeVotKrU1q6iWG+ABANybp72+8aFDh9TZ2alXX31VI0eO1L59+/TQQw+poaFBzz//vL1O6/T8vD00Pi5IuwvrlHm8Rgmh/maXBACAaewWRK677jpdd911vV+PGDFChw8f1iuvvOLWQUSSLkkO0+7COm3NrdZ3JsebXQ4AAKZx6BqRuro6hYWFnfX5lpYW2Wy2Po+h6NIR4ZKkLTlVJlcCAIC5HBZEjh07ppdeekmLFy8+62uWLFmi4ODg3kdiYqKjynOoS1LCZLFIORUNKrc1m10OAACmGXAQeeaZZ2SxWM752LFjR5/3FBcX67rrrtNtt92mBx988Kzf+8knn1RdXV3vo6CgYOA/kQsI9vPS+LggSdKWXPqJAADc14DXiDz22GO68847z/ma5OTk3v8uLi7WvHnzNHPmTL322mvnfJ+Pj498fHwGWpJLmpESrn1FNm3JqdLN6XFmlwMAgCkGHEQiIiIUERHRr9cWFRVp3rx5ysjI0BtvvCGrlbYlPS4dEa6lG3O1lXUiAAA3ZrddM8XFxbriiis0fPhwPf/886qoqOh9LiYmxl6ndRnTk7vWiRyraFB5fbOiAn3NLgkAAIezWxBZvXq1jh49qqNHjyohIaHPc3QUlYL9vTQ2JkgHSmzamlOtBUzPAADckN3mSu677z4ZhnHGB7qwjRcA4O5YtGGiS0d09VTZys4ZAICbIoiYaHp3P5Gj5SdUUd9idjkAADgcQcREIf7eSovp6ieyNZfpGQCA+yGImKxnembTMYIIAMD9EERMNju1qyfLN0crTa4EAADHI4iY7NLUcHlaLTpe1aiC6kazywEAwKEIIiYb5uOpKcNDJEkbjjAqAgBwLwQRJzBnZKQkaePRivO8EgCAoYUg4gTmjOpZJ1Kljk4avgEA3AdBxAmkJwQr0NdTdU1t2ldUZ3Y5AAA4DEHECXh6WDWzu937RnbPAADcCEHEScztnp7ZcIR1IgAA90EQcRJzRnUtWM08XqPG1naTqwEAwDEIIk4iOdxf8SF+auswuAkeAMBtEESchMVi6Z2e2Ug/EQCAmyCIOJG53dMz67NZJwIAsJ/65jZ9ebBMv/7kgFZsyze1Fk9Tz44+5oyKkIfVoiPlJ1RQ3ajEMH+zSwIADAFtHZ3Kyq/VxqOV2nikQrsL63r7Vk1PDtMPpg83rTaCiBMJ9vNSRlKotuVW6+vD5bpnZrLZJQEAXJBhGDpafkIbjlRq49FKbc2pUkNrR5/XJIf7a2ZqhC4fHWFSlV0IIk7myrQobcut1leHCCIAgP4rtzXrm2OV2nCkUt8crVSZraXP82EB3po9MkJzR0Zo1shwJYQ6x6g7QcTJzBsTpf/92SFtPlalptYO+Xl7mF0SAMAJNba2a2tOdfd0S6UOl9X3ed7H06rpKWGaMzJCc0ZFaGxMkKxWi0nVnh1BxMmMjh6m+BA/FdU2aXNOpa5Miza7JACAE+jsNHSgxKZ12RVan12hnfk1aus4eX8yi0UaHxekOSMjNXdUhDKSQuXr5fy/zBJEnIzFYtEVYyK1bGu+vjpUThABADdW09CqDUcrtfZwudZnV6ryRN/plvgQP80d1TXiMSs1QmEB3iZVeuEIIk7oyrQoLduar68PVcgwDFkszjeUBgAYfB2dhvYU1mpddoXWHq7Q7sJaGafclN3f20OzuheYzhkVqeRwf5f/jCCIOKFZqRHy9rSqqLZJR8pPaHR0oNklAQDspKK+RRuOdAWPDUcqVNPY1uf5MdGBumJMpC4fHamM5FD5eDr/dMtAEESckJ+3h2aOCNe67Ap9daicIAIAQ0hHp6Gs/BqtPVyhddkV2ltU1+f5QB9PzRkVoctHR+ryMZGKDfYzqVLHIIg4qSvTonqDyOLLU80uBwBwEWzNbVqfXaGvDpbr68Plp416jI8L6h71iNKU4SHy8nCfxucEESd1ZVqUnv5ov3bkVau6odUlFyABgDvLrWzQlwfL9OXBcm3Pq1Z758nFHsF+Xpo7KkJXjInSZaMjFBXoa2Kl5iKIOKnEMH+NjQ3SwRKb/nWwTLdPSzS7JADAObR1dGpHXo2+OtQVPnIqG/o8nxoZoKvHRuvKtChlJIXK041GPc6FIOLErh0frYMlNq3eX0oQAQAnVNPQqnXZFfrXwTKty65QfXN773NeHhbNSAnXlWlRujItSskRASZW6rwIIk7s2vEx+v2/jmj9kUo1tLQrwIfLBQBmO17VoNX7y7T6QKkyj9folBkXhQV4a96YKF01NkpzR0Uo0NfLvEJdBJ9sTiwtJlDDw/yVX92o9dkVun5irNklAYDbMQxD+4tt+mJ/qVbvLzutlXpaTKCuGhulK9OiNTkxRB5O2EbdmRFEnJjFYtH8cdH6y8ZcfbG/lCACAA7S3tGpbbnVWn2gTKv3l6q4rrn3OU+rRZeOCNc146J11dgop7l5nKsiiDi5ayfE6C8bc/XloXK1tnfK25PFTQBgD02tHVqXXaHVB0r11aFy1Z6yxdbPy0NXjInU/PHRunJMtIL9mXIZLAQRJzd1eKgihnmr8kSrtuRU6bLRkWaXBABDRnVDq748WKbVB8q04UiFmts6e58LC/DW1WOjNH9cjOaMinCJG8i5IoKIk/OwWnTNuGit2FagL/aXEkQA4CJV1Lfoi/2l+mxfibbkVKvjlNWmCaF+unZ8jOaPi9a05DDWezgAQcQFzB8foxXbCrT6QJl+/Z0JsvIXAwAGpNzWrM/3l+rTvSXallvdZ6fL2NggXTs+WvPHxWhsbKDL30TO1RBEXMCs1HAF+nqqor5FO47XaHpKmNklAYDTK6lr0md7u0Y+dhyv6XMX2/SEYF0/MVbXT4hRUjj9PcxEEHEBPp4eunZ8jFZlFurj3cUEEQA4i8KaRn2+r2vkY2d+bZ/npgwP0Y0TY3Xt+BglhrHTxVkQRFzETZNitSqzUJ/uLdHTC8bRGhgAuhVUN+rTvSX6dF+pdhfU9h63WKRpSaG6fkKsrpsQo7iQoX0XW1dFEHERs0dGKNTfS1UNrdqSU605oyLMLgkATFNa16xP9hTr4z0lp4WP6clhumFiV/iIDnLfm8m5CoKIi/DysOr6ibFavjVfH+8uJogAcDvVDa36dG+JPt5drG151b1rPqwWaUZKuG6YFKtrx0e79Z1sXRFBxIUsmBSn5Vvz9dm+Ev36uxNobgZgyLM1t2n1/jJ9vLtYG49W9tlqOy0pVAvS43TDxFhFBvqYWCUuBkHEhUxPCVNkoI8q6lu08WiFrkyLNrskABh0Ta0d+vJQV/j4+nCFWttPNhmbEB+kBZPidFN6nOJZ8zEkEERciIfVohsnxurNTXn6eHcJQQTAkNHa3qn12RX6eE+x1hwoU2NrR+9zqZEBujk9XgvSYzUicpiJVcIeCCIuZkF6nN7clKfV+0vV3NZBy2EALsswDO04XqP3s4r0zz0lqms6eW+XhFA/LUiP083pcUqLocnYUEYQcTFTh4coPsRPRbVN+tfBMt00Kc7skgBgQI5VnNAHWUV6P6tIhTVNvcejAn1046RY3Zwep8mJIYQPN0EQcTEWi0XfmxKvP3x9VKsyCwkiAFxC5YkWfbK7WO9nFWl3YV3v8QBvD10/MVbfmxKvS0eEc28XN0QQcUG3TO0KIuuzK1Rua1YU++QBOKGm1g6tOVimD7KKtC67onfHi4fVostGReh7UxN0zdho+XkzxezOHBJEWlpaNGPGDO3evVtZWVmaPHmyI047ZI2IHKaMpFBlHq/RB7uK9MPLUs0uCQAkSR2dhrbmVOm9rCJ9vq9UJ1rae59LTwjW96bE66b0OEUMY7stujgkiPziF79QXFycdu/e7YjTuYXvT01Q5vEarcos1ENzRzCXCsBUR8vr9U5moT7MKlaprbn3eEKon743JV7fnRKvVHa84AzsHkQ+++wzrV69Wu+++64+++wze5/Obdw4KVbPfLxf2WUntK/IpokJwWaXBMDN1DW16ePdxVqVWahdp7RZD/bz0o2TutZ9TEsK5RclnJNdg0hZWZkeeughffDBB/L3P/+dDltaWtTS0tL7tc1ms2d5Li3Yz0vzx0Xrkz0lendnIUEEgEN0dBr65mil3sks1Bf7S3ubjXlYLZo3Jkq3ZsRrXlqUfDxZ94H+sVsQMQxD9913nxYvXqxp06YpLy/vvO9ZsmSJnn32WXuVNOR8PyNBn+wp0Ye7ivSrG8bS8h2A3eRUnNC7Owv13s4ildSdnHoZEx2o26Yl6DuT42mzjgsy4CDyzDPPnDcsbN++XZs2bZLNZtOTTz7Z7+/95JNP6oknnuj92mazKTExcaAluo25IyMUFeij8voWfXmwTNdPjDW7JABDSH1zm/65p0SrMgu143hN7/FgPy99Z3KcbstI1IT4IKZecFEshmEY53/ZSZWVlaqsrDzna5KTk3XnnXfq448/7vMHtKOjQx4eHlq4cKHeeuut857LZrMpODhYdXV1CgoKGkiZbuP/+/yQXll7THNHRehvi2aYXQ4AF9fZaWhLTpXeySzUZ/tK1NzWNfVitUiXj47UrRmJunocUy84t4F8fg84iPRXfn5+nzUexcXFuvbaa7Vq1SrNmDFDCQkJ5/0eBJHzy69q1GXPfS1JWv/zeRoefv61OADwbSV1TVq1o1ArdxT06XaaGhmgWzMSdcvUeEXTswj9NJDPb7utERk+fHifr4cN69q2lZqa2q8Qgv4ZHu6vy0ZHan12hZZvy9cvr08zuyQALqK9o1NfHSrXyu0F+vpwubr7jSnQx1MLJsfp1owETaHVOuyMzqpDwF3Th2t9doVWZRboiWtGs2gVwDkdr2rQP3YU6J0dhSqvP7lTcXpymO6cnqjrJ8TS7RQO47AgkpycLDvNArm9q8ZGKTrIR2W2Fq0+UMr9ZwCcpqW9Q1/sL9PK7fn65mhV7/HwAG99PyNBd1ySSMMxmIIRkSHAy8OqO6Yl6sWvjmrZlnyCCIBeR8rq9fb2Ar23s1A1jW2SJItFmjsqUndekqirx0YzigpTEUSGiDumD9cfvj6qzTlVyqk4oRH8ZgO4rcbWdn2yp0Qrtxco85RttzFBvrp9WoJum5aoxDAWtsM5EESGiPgQP80bE6UvD5Xrb1uO6+kF480uCYCDHS6t17Ktx/X+ziLVd99szsNq0VVpUbpzeqIuHx0lDysLT+FcCCJDyD2zkvXloXK9s6NQT1wzWoG+XmaXBMDOWto79NneUv19y/E+TceSwv11xyWJunVqgqLYdgsnRhAZQi4bFaGRUcN0tPyE/rGjUIvmpJhdEgA7OV7VoOVb8/VOZqGqG1oldY1+zB8XrYUzkjQrNVxWRj/gAggiQ4jFYtEDs1P0q/f36s1NubpvVjLDsMAQ0t7RqS8PlWvZ1nytz67oPR4b7Ks7LxmuO6cn0nQMLocgMsTcMjVez31xSAXVTVpzoFTXTeD+M4CrK61r1tvb8/X2tgKV2rpuOGexSJeNitTCGcN1ZVqUPD3Y+QLXRBAZYny9PHTXjOH649fHtHRjLkEEcFGdnYa+OVapZVvyteZgmTq6256GBXjr9mmJumv6cG7pgCGBIDIE3TMzWa+uy9H2vBrtKazVpIQQs0sC0E81Da1alVmoZVuPK6+qsff49OQwLbx0uK6bEMMN5zCkEESGoOggX900KVYf7CrWXzbk6sUfTDG7JADnsb+4Tn/ddFwf7CpSS3vXHW8DfTx1y9R43TUjSWNiAk2uELAPgsgQ9eDcEfpgV7E+2VOsJ64ZreSIALNLAvAtbR2d+nxfqd7alNdn6+242CDdMzNJC9LjFODDP9MY2vgTPkRNiA/WFWMitfZwhf607pj+9/cnmV0SgG7l9c1avjVfy7fm9950ztNq0fUTY3XfrCRNHR7KHW/hNggiQ9hj80Zq7eEKvbuzUD+5epRig/3MLglwW4ZhaGd+rd7alKfP9pWoraNr8WlkoI/umj5cC2cMp/EY3BJBZAiblhym6Slh2pZbrdfW59D2HTBBc1uHPtpdrL9uztO+Ilvv8YykUN0zM0nXT4jlpnNwawSRIe6xeSN1T+42rdiWr0fnjVTEMB+zSwLcQmFNo/6+JV8rt+f33vXW29Oq76TH6d5ZyZoQH2xyhYBzIIgMcXNHRWhSQrD2FNbp9Y25+sV1aWaXBAxZhmFo07EqvbUpT/86WKbu1h+KD/HT/7o0SXdckqiwAG9ziwScDEFkiLNYLHp03kg9/LdMvbUpTw/OHcE/hMAga27r0Hs7i/TGN7k6Un6i9/jskeG6d2ayrhobze0WgLMgiLiBa8ZGa0J8kPYV2fTK2qN66sZxZpcEDAlltmb9dXOelm89Of3i7+2h709N0D0zkzQqmt4fwPkQRNyA1WrR/zN/jO5/Y7ve2nxci+aMUEwwq/OBC7W3sE6vf5OrT/YU9+5+SQj1032zknX7JYkK8vUyuULAdRBE3MQVoyN1SXKotufV6KWvjui/vzfR7JIAl9LRaWjNgTK9vjFX2/Kqe49fkhyqRXNSdM24GKZfgAtAEHETFotFP782Tbe/ulkrtxfoh5eNUFI43VaB86lvbtM/dhTqzU25KqhuktTVfOymSbF6YE4K93ICLhJBxI1MTwnT5aMjtS67Qv9nTbZ+fyf3oAHOpqC6UW9uytPK7QU60dIuSQrx99Jd04frnpnJTG8Cg4Qg4mZ+Nn+M1mVX6MPdxVo0Z4QmJtDLAOhhGIZ2HK/R0g25Wn2gtHf7bWpkgB6Yk6JbpiTIz5s73wKDiSDiZiYmBOu7k+P0wa5i/fqTA1r58KXc0wJur7W9U5/uLdHr3+RqT2Fd7/G5oyL0wJwUXT4qUlbWfwB2QRBxQ7+4Lk2f7y/Vtrxqfbq3VDdOijW7JMAUNQ2tWr4tX3/dnKcyW9fN57w9rbplSrwemJOi0Wy/BeyOIOKG4kL89PBlqfq/Xx7R/3x6UFeNjZKvF8PNcB9Hy0/o9W9y9d7OQjW3dUqSIob56J6ZSVo4Y7jCuRUC4DAEETe1+PJU/WNHgYpqm7R0Y64enTfS7JIAuzIMQxuPVmrpxlytPVzRe3xcbJAWzUnRTemx8vEkkAOORhBxU37eHvr369L0+Mpd+uPXR3XL1HjFBvuZXRYw6JrbOvRBVpFe/yZX2WVd7dctFunqsdF6YHaKLh0RxjopwEQEETd2c3qc/ro5Tzvza/XsRwf0p7szzC4JGDTl9c36++bj+vvWfFU3tErqar9++7RE3TcrWckR9NEBnAFBxI1ZrRb99/cmasFLG/X5/lKtOVCma8ZFm10WcFH2F9dp6cZcfbz7ZPv1+JCT7deD/Wi/DjgTgoibGxsbpAfnjtCf1h3T0x/u06zUcAX48McCrqWj09CXB8v0+je52pJzsv16RlKoHpidomvHR8vTw2pihQDOhk8c6CdXjdI/9xaroLpJL6zJ1v97E3fnhWtoaGnXOzsK9MamPB2vapQkeVgtumFirBbNSdHkxBBzCwRwXgQRyM/bQ7/+zgTd98Z2vfFNrr4zOY77Z8CpFdY06q1NeXp7e4Hqm7varwf5euquGUm6Z2aS4kJYeA24CoIIJElXjInSzelx+mh3sZ74x2598qM59BaBUzEMQzvza/T6xjx9vr9UHd3910dEBOj+2cn6fkaC/L35Jw1wNfytRa9nbx6vzTlVOlp+Qs99cZgpGjiFto5OfbavVEs35mp3QW3v8dkjw7VoToquGB1F+3XAhRFE0Cs0wFu//f4k3f/mdi3dmKurxkZpVmqE2WXBTdU1tvW2Xy+pa5YkeXtY9Z3JcXpgTorGxgaZXCGAwUAQQR/z0qL0g+nDtWJbvn7+zh59/vhcBfqy3RGOc6zihN78Jk+rMgvV1NYhSYoY5q3/dWmSFs5IUmQg7deBoYQggtP8x41j9c3RSuVXN+rJ9/bqpR9MofMk7Kqn/frrG3P19Snt19NiAvXAnBTdnB7HmiVgiCKI4DQBPp76P3dM1h2vbtYne0o0Y0S47r40yeyyMASdrf36VWlRemB2imamhhOCgSGOIIIzykgK1b9fl6b//vSgfv3xAU1JDNGE+GCzy8IQUWZr1t82H9eyrcdV09gm6WT79XtnJSuF9uuA2yCI4KwenJuibXnVWnOgTI8s26mPfzSH9ti4KHsL67R0Y44+2VOi9s6T7dfvn52s26bRfh1wRwQRnJXFYtHzt6brxpc2KL+6UU+s3KXX7pkmD7ZKYgDaOzq15kBX+/XteTW9xy9J7mq/fs042q8D7owggnMK9vfSywun6rY/bdaXh8r1288P6ckbxppdFlyArblNK7cV6M1NeSqqbZIkeVotWpAep/tnJ9O9F4Akggj6YVJCiJ67LV0/XpGlV9fnKDVqmG6flmh2WXBSeZUNenNTnt7ZUaCG1q7tt6H+Xlo4I0l3z0xSdJCvyRUCcCYEEfTLzelxOlp+Qi9+eURPvb9XyeEBmp4SZnZZcBKdnYbWH6nQW5vytDa7QkbX8g+Njh6mB2an6LtT4tl+C+CMCCLot8evGqWj5fX6dG+pHvrrDv3j4ZkaExNodlkwUV1Tm1ZlFupvm/OU1333W0maNyZSi+aM0OyRbL8FcG4EEfSb1WrR726brNK6LdqZX6u7l27Vu/82S4lh/maXBgc7XFqvv27O0/tZRWrsnn4J9PXUbRmJuntmEttvAfSbxTB6BlGdj81mU3BwsOrq6hQUxH0lnEVtY6vueHWLDpfVKyncX6sWz6Ltthvo2f3y1uY8bcmp7j0+OnqY7p2VrO9OjleAD7/bABjY57fd98z985//1IwZM+Tn56eIiAjdcsst9j4l7CzE31t/XTRdiWF+Ol7VqLuXblXViRazy4KdVJ5o0R+/Pqq5v/1a/7Zsp7bkVMvDatH1E2K04qFL9cXjl2nhjCRCCIALYtd/Od5991099NBD+p//+R9deeWVMgxDe/futecp4SDRQb762wMzdNurm3WotF53vrZFyx6aoahAdkQMBYZhKPN4jZZvzdcne0rU2tEpSQoL8NYPpidq4YwkxYX4mVwlgKHAblMz7e3tSk5O1rPPPqtFixZd0Pdgasb5Has4obv+vEVlthaNiAjQ8ocuVUwwYcRV1TW16f2dhVqxrUCHy+p7j6cnBOveWcm6YWIsu18AnNdAPr/tNiKyc+dOFRUVyWq1asqUKSotLdXkyZP1/PPPa/z48Wd8T0tLi1paTg7x22w2e5WHQZIaOUz/eHim7vrzVuVUNuj2VzfrrQems1jRhRiGoV0FtVq+NV8f7ylWc1vX6Ievl1ULJsVp4aVJmpwYYm6RAIYsu42IvP322/rBD36g4cOH64UXXlBycrJ+97vfafXq1crOzlZY2Ok9KJ555hk9++yzpx1nRMT5FdY06q4/b1V+daNC/b30l3unKSOJPiPOrL65TR/sKtbyrfk6WHIy9I+OHqaFM5L03Snx3PsFwAUZyIjIgIPI2cLCqbZv367s7GwtXLhQr776qn74wx9K6hrxSEhI0G9+8xs9/PDDp73vTCMiiYmJBBEXUV7frAff2qE9hXXy9rTq93dM1g0TY80uC6cwDENZBbX6x/YCfbS7uHfrrbenVTdNjNVdM4YrIymU3h8ALopdp2Yee+wx3Xnnned8TXJysurru+aXx40b13vcx8dHI0aMUH5+/hnf5+PjIx8ftoG6qqhAX739w0v14xVZ+tfBcj2ybKd+fNUo/eSqUdwoz2Tltma9l1WkVZmFOlp+ovf4iMgALZyRpO9PjVeIv7eJFQJwVwMOIhEREYqIiDjv6zIyMuTj46PDhw9rzpw5kqS2tjbl5eUpKSlp4JXCJfh7e+rVu6fp158c0Jub8vTil0e0q6BW//eOyQoN4IPOkVrbO/XlwTK9k1moddkV6ujsGvz09bLq+gmxuuOSRM1ICWP0A4Cp7LZYNSgoSIsXL9bTTz+txMREJSUl6bnnnpMk3XbbbfY6LZyAh9WiZ24er0kJwfrV+3u1PrtCN720US/+YDLrRuzMMAwdKLHpnR2F+nBXkWoa23qfmzo8RLdNS9SNk2IV5MvaDwDOwa59RJ577jl5enrq7rvvVlNTk2bMmKGvvvpKoaGh9jwtnMQtUxM0NjZI//b3TOVVNeq2P23W4stT9fjVo+Xtafdeem6loLpRH+0u1oe7ipRddnLqJSrQR7dMTdCtGQkaGTXMxAoB4Mxo8Q67szW36ZmP9uu9nUWSpLGxQXru1kmaEB9scmWuraK+Rf/cU6yPdhdrZ35t73FvD6uuGRetW6claO7ICHl6EPoAOJZdd804EkFkaPl8X4l+9f4+VTe0ymqR7pmZrCfmj2aaYABqG1u15kCZPtpdrG+OVqp72YesFmlWaoRuTo/TtRNi2HYLwFQEETit8vpm/fqTg/p4d7EkKWKYj35x3RjdMiWe39zPotzWrC8OlOmLfaXanFPVu+hUktITQ/Sd9DjdNClWUUF0tAXgHAgicHobj1TqPz/ap5yKBknSyKhh+tn8Mbp2fDS7ONS15uOL/aX6bF+pdubX6NS/pWkxgbphYqxuTo9TMh1sATghgghcQkt7h97alKeX1x5TbffujgnxQfrhZam6YUKMW42QtLZ3antetdYeLtfXhyv69PqQpCnDQ3Td+BhdOz6G8AHA6RFE4FJszW36y/oc/WVjbm+nz/gQP90/O1m3TE1Q2BDsP2IYhgprmrThSKXWHi7XN0cr1dD9s0tdW6CnJ4fp+okxmj8uhhsJAnApBBG4pOqGVv1t83G9tTlP1Q2tkk7uALltWoLmuPgOkMKaRm0+VqUtOdXaklOlotqmPs9HDPPRFWMiNW9MlOaMimDBKQCXRRCBS2tu69C7Owu1Ylu+9hWdvBlbWIC3rkqL0rXjYzRnVIRT346+pb1D+4tt2pVfq10FtdqZX6PCmr7Bw9NqUXpiiK4YHal5aVEaFxskK63wAQwBBBEMGfuL6/TOjkJ9sKuodx2J1NWmPCMpVDNSwnXpiHBNSgg2LZjUNrbqcGm9ssvqdbisXnsL63SgxKa2jr5/tTysFk1KCNbMEV01T0sOlb+3XXsKAoApCCIYcto7OrUtt1qrD5Rp9f5SFdc193new2pRamSAxsUGaWxskJLC/ZUQ6q/EMP+LnuLo6DRU09iqopomFdQ0qqC6538blV1WrzJbyxnfFxbgrcmJIb2PqUmhGuZD8AAw9BFEMKQZhqGj5Se0JadKW3KrtTWnWpUnzhwGJCnQ11PhAd4K9vdWiJ+Xgv285O1plafVIg+rRZ5Wi1o7DLW0dai5vUMtbZ2qb2lXdUOrqhtaVdPYqvP9LYkP8dOYmECNjg7U2NhATUkMVWKYH1uRAbglggjcimEYKrO16EBJnQ4U23SotF4FNU0qrG5UVfei18EQHeSjxO5RloRQPyWG+is1aphGRw9TIN1hAaDXQD6/GSeGy7NYLIoJ9lVMsK+uTIvu81xja7uKa5tU09im2sY21Ta2qq6pTe2dhto7OtXeaaij05CXh1W+Xlb5eHrI18sqf++uUZSwYd4KD/BRqL+XS+/YAQBnRRDBkObv7amRUYFmlwEAOAt+xQMAAKYhiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqCCAAAMA1BBAAAmIYgAgAATEMQAQAApiGIAAAA0xBEAACAaQgiAADANAQRAABgGqe++65hGJIkm81mciUAAKC/ej63ez7Hz8Wpg0h9fb0kKTEx0eRKAADAQNXX1ys4OPicr7EY/YkrJuns7FRxcbECAwNlsVh6j9tsNiUmJqqgoEBBQUEmVogz4fo4P66Rc+P6OD+u0bkZhqH6+nrFxcXJaj33KhCnHhGxWq1KSEg46/NBQUH8AXBiXB/nxzVyblwf58c1OrvzjYT0YLEqAAAwDUEEAACYxiWDiI+Pj55++mn5+PiYXQrOgOvj/LhGzo3r4/y4RoPHqRerAgCAoc0lR0QAAMDQQBABAACmIYgAAADTEEQAAIBpnDaIvPzyy0pJSZGvr68yMjK0YcOGfr3vm2++kaenpyZPnmzfAt3cQK9PS0uLnnrqKSUlJcnHx0epqal6/fXXHVStexroNVq2bJnS09Pl7++v2NhY3X///aqqqnJQte5l/fr1WrBggeLi4mSxWPTBBx+c9z3r1q1TRkaGfH19NWLECP3pT3+yf6FuaqDX57333tM111yjyMhIBQUFaebMmfriiy8cU+wQ4JRBZOXKlXr88cf11FNPKSsrS3PnztX111+v/Pz8c76vrq5O99xzj6666ioHVeqeLuT63H777fryyy+1dOlSHT58WCtWrFBaWpoDq3YvA71GGzdu1D333KNFixZp//79euedd7R9+3Y9+OCDDq7cPTQ0NCg9PV1/+MMf+vX63Nxc3XDDDZo7d66ysrL0q1/9Sj/+8Y/17rvv2rlS9zTQ67N+/Xpdc801+vTTT5WZmal58+ZpwYIFysrKsnOlQ4ThhKZPn24sXry4z7G0tDTjl7/85Tnfd8cddxj/8R//YTz99NNGenq6HSt0bwO9Pp999pkRHBxsVFVVOaI8GAO/Rs8995wxYsSIPsdefPFFIyEhwW41oosk4/333z/na37xi18YaWlpfY49/PDDxqWXXmrHymAY/bs+ZzJu3Djj2WefHfyChiCnGxFpbW1VZmam5s+f3+f4/PnztWnTprO+74033tCxY8f09NNP27tEt3Yh1+ejjz7StGnT9Nvf/lbx8fEaPXq0fvazn6mpqckRJbudC7lGs2bNUmFhoT799FMZhqGysjKtWrVKN954oyNKxnls3rz5tOt57bXXaseOHWprazOpKpxNZ2en6uvrFRYWZnYpLsHpbnpXWVmpjo4ORUdH9zkeHR2t0tLSM77nyJEj+uUvf6kNGzbI09PpfqQh5UKuT05OjjZu3ChfX1+9//77qqys1COPPKLq6mrWidjBhVyjWbNmadmyZbrjjjvU3Nys9vZ23XzzzXrppZccUTLOo7S09IzXs729XZWVlYqNjTWpMpzJ7373OzU0NOj22283uxSX4HQjIj0sFkufrw3DOO2YJHV0dOiuu+7Ss88+q9GjRzuqPLfX3+sjdf12YLFYtGzZMk2fPl033HCDXnjhBb355puMitjRQK7RgQMH9OMf/1j/+Z//qczMTH3++efKzc3V4sWLHVEq+uFM1/NMx2GuFStW6JlnntHKlSsVFRVldjkuwemGDyIiIuTh4XHab27l5eWn/UYgSfX19dqxY4eysrL02GOPSer64DMMQ56enlq9erWuvPJKh9TuDgZ6fSQpNjZW8fHxfW4JPXbsWBmGocLCQo0aNcquNbubC7lGS5Ys0ezZs/Xzn/9ckjRp0iQFBARo7ty5+s1vfsNv3CaLiYk54/X09PRUeHi4SVXh21auXKlFixbpnXfe0dVXX212OS7D6UZEvL29lZGRoTVr1vQ5vmbNGs2aNeu01wcFBWnv3r3atWtX72Px4sUaM2aMdu3apRkzZjiqdLcw0OsjSbNnz1ZxcbFOnDjReyw7O1tWq1UJCQl2rdcdXcg1amxslNXa958DDw8PSSd/84Z5Zs6cedr1XL16taZNmyYvLy+TqsKpVqxYofvuu0/Lly9nbdVAmbdO9uzefvttw8vLy1i6dKlx4MAB4/HHHzcCAgKMvLw8wzAM45e//KVx9913n/X97Jqxr4Fen/r6eiMhIcG49dZbjf379xvr1q0zRo0aZTz44INm/QhD3kCv0RtvvGF4enoaL7/8snHs2DFj48aNxrRp04zp06eb9SMMafX19UZWVpaRlZVlSDJeeOEFIysryzh+/LhhGKdfn5ycHMPf39/46U9/ahw4cMBYunSp4eXlZaxatcqsH2FIG+j1Wb58ueHp6Wn88Y9/NEpKSnoftbW1Zv0ILsUpg4hhGMYf//hHIykpyfD29jamTp1qrFu3rve5e++917j88svP+l6CiP0N9PocPHjQuPrqqw0/Pz8jISHBeOKJJ4zGxkYHV+1eBnqNXnzxRWPcuHGGn5+fERsbayxcuNAoLCx0cNXu4euvvzYknfa49957DcM48/VZu3atMWXKFMPb29tITk42XnnlFccX7iYGen0uv/zyc74e52YxDMZdAQCAOZxujQgAAHAfBBEAAGAagggAADANQQQAAJiGIAIAAExDEAEAAKYhiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqCCAAAMA1BBAAAmOb/B1fpR6+u9qvRAAAAAElFTkSuQmCC", "text/plain": [ "
" ] @@ -651,7 +657,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 36, "id": "79a2bb61-0a5e-4a3a-b195-46d027738a0e", "metadata": {}, "outputs": [], @@ -661,7 +667,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 37, "id": "b4e6e0c9-a2c6-40ab-884e-a46e16c37b04", "metadata": {}, "outputs": [ @@ -699,7 +705,7 @@ "Index: []" ] }, - "execution_count": 40, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -710,13 +716,13 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 39, "id": "cef7c46f-551f-401e-96c2-214628e23967", "metadata": {}, "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -731,14 +737,14 @@ "murn.input.task.input.calculator = MorsePotential()\n", "murn.input.structure = pr.create.structure.bulk(\"Fe\", a=1.2).to_ase() # since our Atoms cannot be pickled, but parallel execution needs that we still convert back here\n", "murn.input.set_strain_range(.5, 500)\n", - "murn.run(executor='process')\n", + "murn.run(submitter='process')\n", "murn.wait()\n", "murn.output.plot()" ] }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 40, "id": "e8a7ee30-d7a6-46fc-bf98-1b52c981470f", "metadata": {}, "outputs": [ @@ -799,7 +805,7 @@ "0 MurnaghanTask " ] }, - "execution_count": 42, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -810,7 +816,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 42, "id": "30871447-3e20-46ee-a58e-853d4f4cb5d9", "metadata": {}, "outputs": [], @@ -822,13 +828,13 @@ "j.input.timestep = 3.0\n", "j.input.temperature = 600.0\n", "j.input.output_steps = 20\n", - "j.run(executor='background')\n", + "j.run(submitter='background')\n", "j.wait()" ] }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 43, "id": "e63d43c1-341f-4ec0-b0cf-9cd5ead51926", "metadata": {}, "outputs": [ @@ -903,7 +909,7 @@ "1 AseMDTask " ] }, - "execution_count": 44, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -922,17 +928,17 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 44, "id": "80da39e2-76d1-42e6-977f-241d2683188d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 45, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -951,7 +957,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 45, "id": "a567f96a-cbb3-4d2d-95d1-6dcecee7ddb8", "metadata": {}, "outputs": [ @@ -1040,7 +1046,7 @@ "2 AseMDTask " ] }, - "execution_count": 46, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1066,94 +1072,12 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.8" + "version": "3.11.0" }, "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { - "01513848d0e142c19b486707145aac2b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_2baff459d76d4d4195b376c513f20464", - "max": 11, - "style": "IPY_MODEL_6a1e7e89d69443f3af1d3070dcd5f743" - } - }, - "02942fbc3e1c40f4becd44b4acfb0325": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", - "state": { - "description_width": "" - } - }, - "10be40fdff5d48f59854385a9e7437e0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "152f5a5b455b49b587903b4c8ce65857": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "ColormakerRegistryModel", - "state": { - "_msg_ar": [], - "_msg_q": [], - "_ready": true, - "layout": "IPY_MODEL_b7fef6c8c4f54afc8b0ab6cd8df3e66b" - } - }, - "1f676bc52a71404cac6436e0a83bfa43": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", - "state": { - "description_width": "" - } - }, - "232c6544e5134d6db790fe885e75a4e0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_d03c7a1320874169b1cb7f506bedf1d3", - "max" - ], - "target": [ - "IPY_MODEL_9c1507f4d5c84e2d9f390ba74bdf4dc8", - "max_frame" - ] - } - }, - "2baff459d76d4d4195b376c513f20464": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3027a3adbccc481d8e44bd6a73c2f3b5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "32b56ca3d2714a919e6fda2bda75b840": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_d77cbd6d9a6b4f379349ba2242da96be", - "IPY_MODEL_414a367a402644e6a24ec7f61e79689f" - ], - "layout": "IPY_MODEL_d219818914194ca796dcd6620d67e1da" - } - }, - "3412eb1b649d487496b8c2287ff0cc1d": { + "02b5f410cf1f4c918efe5b60df593d97": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", @@ -1161,198 +1085,40 @@ "width": "34px" } }, - "357b9196051d4d8cade7e554e5a8e789": { + "0a4cb31165cd4eb89830dd0f36aa7c1e": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_01513848d0e142c19b486707145aac2b", - "value" - ], - "target": [ - "IPY_MODEL_d03c7a1320874169b1cb7f506bedf1d3", - "value" - ] - } - }, - "377a7e31f31445758b9fe5b9d7b35922": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "39b6391e86da45ffa8c513e8653fc6c5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", + "model_name": "ButtonStyleModel", "state": {} }, - "414a367a402644e6a24ec7f61e79689f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_39b6391e86da45ffa8c513e8653fc6c5", - "max": 11, - "style": "IPY_MODEL_02942fbc3e1c40f4becd44b4acfb0325" - } - }, - "44934da01fab4ddeb34ec8fce1793432": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "45e8ce58f366409db6a65035b3c7e8ea": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "0d21ad69059544b9967cf5eeeec71900": { + "model_module": "nglview-js-widgets", + "model_module_version": "3.0.1", + "model_name": "NGLModel", "state": { - "children": [ - "IPY_MODEL_01513848d0e142c19b486707145aac2b", - "IPY_MODEL_d03c7a1320874169b1cb7f506bedf1d3" - ], - "layout": "IPY_MODEL_6af4147c8e36483783d861307e4208f8" - } - }, - "46e9ec85470c49bbae783ccb989baac6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "486d6774e21240209db01f3a304dceb4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_3412eb1b649d487496b8c2287ff0cc1d", - "style": "IPY_MODEL_c6092c42c17b4fadbf8ba80b0145cede" - } - }, - "4e8c55c8836a40e2bc91a8cb2224f8ca": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_d77cbd6d9a6b4f379349ba2242da96be", - "max" - ], - "target": [ - "IPY_MODEL_ac63e7c8d2b84a478b194a451a0ede25", - "max_frame" - ] - } - }, - "50a64a1dc31641abbacfb82be21fe493": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_529f43bed2a445419cdaa8c9f1b748c1", - "value" - ], - "target": [ - "IPY_MODEL_6f48caf2815c4b6696c4a3709aa50497", - "value" - ] - } - }, - "529f43bed2a445419cdaa8c9f1b748c1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_a1c548569b5e4dd298b096a8be070a6d", - "max": 21, - "style": "IPY_MODEL_90b9fb050b0f4966aaa958aac04a9143" - } - }, - "69e28476441f48fe95232e86889454d1": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6a1e7e89d69443f3af1d3070dcd5f743": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "6af4147c8e36483783d861307e4208f8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6ec27eda3b6e461d821642ef264200ce": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "6f48caf2815c4b6696c4a3709aa50497": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_83a7f768dc3545b085ff8b5dda276104", - "max": 21, - "style": "IPY_MODEL_1f676bc52a71404cac6436e0a83bfa43" - } - }, - "767f5dc744e84d9ebff773d9d352cdec": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_529f43bed2a445419cdaa8c9f1b748c1", - "value" - ], - "target": [ - "IPY_MODEL_76b5f43e298747c2b94d0904a444374c", - "frame" - ] - } - }, - "76b5f43e298747c2b94d0904a444374c": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "NGLModel", - "state": { - "_camera_orientation": [ - 14.593602577909778, - 0, - 0, - 0, - 0, - 14.593602577909778, - 0, - 0, - 0, - 0, - 14.593602577909778, - 0, - -0.8999999761581421, - -0.8999999761581421, - -0.8999999761581421, - 1 + "_camera_orientation": [ + 14.593602577909778, + 0, + 0, + 0, + 0, + 14.593602577909778, + 0, + 0, + 0, + 0, + 14.593602577909778, + 0, + -0.8999999761581421, + -0.8999999761581421, + -0.8999999761581421, + 1 ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_92336429a0a04914a5c2a0241a4c44ae", + "_ibtn_fullscreen": "IPY_MODEL_ae3762f2f98947db868664c6a1326dda", "_igui": null, - "_iplayer": "IPY_MODEL_caf558fa0d2c435389c51dceae9fe832", + "_iplayer": "IPY_MODEL_c0be76a3a96f46bc902e8db25764c74f", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -1385,7 +1151,7 @@ "args": [ { "binary": false, - "data": "CRYST1 2.400 2.400 2.400 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 5 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 6 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 7 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 8 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 9 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 10 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 11 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 12 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 13 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 14 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 15 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nENDMDL\n", + "data": "CRYST1 2.400 2.400 2.400 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 5 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 6 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 7 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 8 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 9 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 10 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 11 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 12 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 13 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 14 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 15 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nENDMDL\n", "type": "blob" } ], @@ -1606,7 +1372,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "32F2B45E-F16D-4184-922C-AB66ECAD88AF" + "17FDED62-14FB-438F-87A5-82E2F2E20B22" ], "_player_dict": {}, "_scene_position": {}, @@ -1618,112 +1384,329 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_9875bab03c8f4bfbaec33570279cf115", + "layout": "IPY_MODEL_bc38255e7dd44daba29fe69ad6911a47", "max_frame": 21, "n_components": 1, "picked": {} } }, - "77aacc13b5bc4330afef3f15fa27c15c": { + "0ee967c30c1c44ed8568e24a17c0cfa0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "icon": "compress", + "layout": "IPY_MODEL_a62a0f1514744ec08d5f939ed5df94be", + "style": "IPY_MODEL_14affce9cab74f108c3ee8ad4d1e8f47" + } + }, + "108bed51860b4b21b253466ea3f75f0f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "description_width": "" + } + }, + "144d080b0b5e4fb28be472546e16c9c9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_19cdf24fc8ab4e62a05219ff1ef81263", + "IPY_MODEL_249936014f0646f3a14d1080cec78d0b" + ], + "layout": "IPY_MODEL_f471943fcb1947f18d166b6b02d9f3ef" + } + }, + "14affce9cab74f108c3ee8ad4d1e8f47": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "19cdf24fc8ab4e62a05219ff1ef81263": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_9cab2efc281e4fc6835c0716effdd15f", + "max": 5, + "style": "IPY_MODEL_6497230e502c48ee92a49cb06c32ab6d" + } + }, + "19fdca61c5f5464b9ee1799459ff329b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_42116a5e97384eee940be8ebe701cfd1", + "IPY_MODEL_30139e4607d244578e5b2b2771ddf407" + ], + "layout": "IPY_MODEL_9183457e6d744b1abbf704716cf04236" + } + }, + "1bbb9155a2fd43769c452976e012fe73": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "description_width": "" + } + }, + "1e7d0bf41e01493892a04d95894ac486": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "7e14e24a4172450c9f2b8d366842a726": { + "20bc654a50454aeba96a0f1d2273e252": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_51a7fd1dea30444999e7050824658395", + "width": "900.0" + } + }, + "249936014f0646f3a14d1080cec78d0b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "layout": "IPY_MODEL_1e7d0bf41e01493892a04d95894ac486", + "max": 5, + "style": "IPY_MODEL_ba0ac2e4973841049708071c20c31c48" + } + }, + "282b842cb9b24c7e978aedd18d52ecd4": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "34px" + } + }, + "30139e4607d244578e5b2b2771ddf407": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "layout": "IPY_MODEL_4dbee46bfb174ba19723a81852d9735f", + "max": 5, + "style": "IPY_MODEL_1bbb9155a2fd43769c452976e012fe73" + } + }, + "30f9cad1b04a4916868b8ae3157977b8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "825db80ef9144c50b608e08bfc0ad89c": { + "318214da17704d589cc9437bde628146": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_c35f800d041d41c48de7daa2488616d8", + "max": 5, + "style": "IPY_MODEL_ecc84bee67f34ec18b809756316263f8" + } + }, + "35f8b938909d48f2bd8c627d402b5dc3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_d77cbd6d9a6b4f379349ba2242da96be", + "IPY_MODEL_6f16f8622af8405ea222c85bdf91548f", "value" ], "target": [ - "IPY_MODEL_414a367a402644e6a24ec7f61e79689f", - "value" + "IPY_MODEL_0d21ad69059544b9967cf5eeeec71900", + "frame" + ] + } + }, + "36504819ed7c4eb8abd8d6e8de959ca8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_6f16f8622af8405ea222c85bdf91548f", + "max" + ], + "target": [ + "IPY_MODEL_0d21ad69059544b9967cf5eeeec71900", + "max_frame" ] } }, - "83a7f768dc3545b085ff8b5dda276104": { + "38995112aba54857937c34fc40cd6109": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "85c3044bc6714b30bdff4f451f7a5dab": { + "3993fa9407cf4943a63cdbb989c9e614": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_318214da17704d589cc9437bde628146", + "value" + ], + "target": [ + "IPY_MODEL_87d92ef628f84c388d6c6501af28ea4d", + "frame" + ] + } + }, + "3c6c4f598c47480aabfb6700bf7dffb2": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_529f43bed2a445419cdaa8c9f1b748c1", + "IPY_MODEL_318214da17704d589cc9437bde628146", "max" ], "target": [ - "IPY_MODEL_76b5f43e298747c2b94d0904a444374c", + "IPY_MODEL_87d92ef628f84c388d6c6501af28ea4d", "max_frame" ] } }, - "89088764b9f54bef9878c78ba26c5b42": { + "3c6ca5e2a2c24696b73c91f5f552d378": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ImageModel", "state": { - "layout": "IPY_MODEL_bcb522f35abc417591714281f15b6231", + "layout": "IPY_MODEL_7b52194dea4a4ba39d0815d775374cf8", "width": "900.0" } }, - "8a4e3529d09f4a2bab53ca611f490a74": { + "42116a5e97384eee940be8ebe701cfd1": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_d02698f84c534ed4b032d37f01b0e767", + "max": 5, + "style": "IPY_MODEL_e00fb3b115994e60bdeac8b05fef8a3c" + } + }, + "46b81ba49b57444cab1bbe2f5fd00d92": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "layout": "IPY_MODEL_5a2c40a2636344469ac96c615b224224", + "max": 21, + "style": "IPY_MODEL_ab354c8b82d64580944bec964608e0ee" + } + }, + "4d7d755c8cda40c4bf20417cf3049bd9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_01513848d0e142c19b486707145aac2b", - "max" + "IPY_MODEL_19cdf24fc8ab4e62a05219ff1ef81263", + "value" ], "target": [ - "IPY_MODEL_9c1507f4d5c84e2d9f390ba74bdf4dc8", - "max_frame" + "IPY_MODEL_6ea3657f68ca462188997ae2514683ce", + "frame" ] } }, - "90b9fb050b0f4966aaa958aac04a9143": { + "4dbee46bfb174ba19723a81852d9735f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "5003ecf2331640f2a2205ee1f76eb02b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_name": "LinkModel", "state": { - "description_width": "" + "source": [ + "IPY_MODEL_46b81ba49b57444cab1bbe2f5fd00d92", + "max" + ], + "target": [ + "IPY_MODEL_0d21ad69059544b9967cf5eeeec71900", + "max_frame" + ] } }, - "92336429a0a04914a5c2a0241a4c44ae": { + "50ab2142131544a7a0bb42d42938f511": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "51a7fd1dea30444999e7050824658395": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "5970304140b7436db540551f6d0c1db0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "5a283c2cfdbe4d09b592ea746c8a85d5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ButtonModel", + "model_name": "ImageModel", "state": { - "icon": "compress", - "layout": "IPY_MODEL_44934da01fab4ddeb34ec8fce1793432", - "style": "IPY_MODEL_6ec27eda3b6e461d821642ef264200ce" + "layout": "IPY_MODEL_5f93c65b33084646a6267bfef85e6247", + "width": "900.0" } }, - "9875bab03c8f4bfbaec33570279cf115": { + "5a2c40a2636344469ac96c615b224224": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "9c1507f4d5c84e2d9f390ba74bdf4dc8": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "NGLModel", + "5f93c65b33084646a6267bfef85e6247": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "6497230e502c48ee92a49cb06c32ab6d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "670da71dec414c05a5e43ec82d0510e4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "icon": "compress", + "layout": "IPY_MODEL_282b842cb9b24c7e978aedd18d52ecd4", + "style": "IPY_MODEL_7b64f3398f9945c58380cf703c798003" + } + }, + "6ea3657f68ca462188997ae2514683ce": { + "model_module": "nglview-js-widgets", + "model_module_version": "3.0.1", + "model_name": "NGLModel", "state": { "_camera_orientation": [ 11.095162889756295, @@ -1745,9 +1728,9 @@ ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_486d6774e21240209db01f3a304dceb4", + "_ibtn_fullscreen": "IPY_MODEL_0ee967c30c1c44ed8568e24a17c0cfa0", "_igui": null, - "_iplayer": "IPY_MODEL_45e8ce58f366409db6a65035b3c7e8ea", + "_iplayer": "IPY_MODEL_144d080b0b5e4fb28be472546e16c9c9", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -2001,7 +1984,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "699B59EB-55CE-4425-ADFE-ED47C0293DDA" + "67151EDF-7CA9-4FB8-BFE3-F5828AA885A5" ], "_player_dict": {}, "_scene_position": {}, @@ -2013,19 +1996,29 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_69e28476441f48fe95232e86889454d1", - "max_frame": 11, + "layout": "IPY_MODEL_a07edf26c9904bb4978b9b27e1d43fbe", + "max_frame": 5, "n_components": 1, "picked": {} } }, - "a1c548569b5e4dd298b096a8be070a6d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", + "6f16f8622af8405ea222c85bdf91548f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_38995112aba54857937c34fc40cd6109", + "max": 21, + "style": "IPY_MODEL_dd7c1edbe0914479bb138a1f6a611f8a" + } + }, + "71b7199638db42b0844d1f1a798219e6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", "state": {} }, - "a6fe37986c1241b09ff3ff3f085ed7c2": { + "7abe5e28714a45ed9c9815d1814610f8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", @@ -2033,7 +2026,19 @@ "width": "34px" } }, - "ac63e7c8d2b84a478b194a451a0ede25": { + "7b52194dea4a4ba39d0815d775374cf8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "7b64f3398f9945c58380cf703c798003": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "87d92ef628f84c388d6c6501af28ea4d": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", @@ -2058,9 +2063,9 @@ ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_cdf89c40e3344be6afa00e1f39128993", + "_ibtn_fullscreen": "IPY_MODEL_670da71dec414c05a5e43ec82d0510e4", "_igui": null, - "_iplayer": "IPY_MODEL_32b56ca3d2714a919e6fda2bda75b840", + "_iplayer": "IPY_MODEL_9cc5b4ff85c94432940499596a4c7e36", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -2314,7 +2319,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "4FE92B85-322A-43FB-A544-B442042ECB09" + "5F9674E3-B045-4A3D-BD17-2F238CCAE006" ], "_player_dict": {}, "_scene_position": {}, @@ -2326,177 +2331,648 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_d4f483bcea5f4ca2aac4272eed22083a", - "max_frame": 11, + "layout": "IPY_MODEL_30f9cad1b04a4916868b8ae3157977b8", + "max_frame": 5, "n_components": 1, "picked": {} } }, - "b7fef6c8c4f54afc8b0ab6cd8df3e66b": { + "8c6336bad9064f9cad3ed19754274617": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_30139e4607d244578e5b2b2771ddf407", + "max" + ], + "target": [ + "IPY_MODEL_fa5ea10926a449d4b77abc162d70178d", + "max_frame" + ] + } + }, + "9183457e6d744b1abbf704716cf04236": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "b8bba1376ea54a03b1c8714a6ca64559": { + "92dc4568b3c24f2b95c85d633473568a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ImageModel", + "model_name": "LinkModel", "state": { - "layout": "IPY_MODEL_377a7e31f31445758b9fe5b9d7b35922", - "width": "900.0" + "source": [ + "IPY_MODEL_42116a5e97384eee940be8ebe701cfd1", + "value" + ], + "target": [ + "IPY_MODEL_fa5ea10926a449d4b77abc162d70178d", + "frame" + ] + } + }, + "9a30c0daa6d347ed86caf7455f202fe3": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_e0e998fd8c8d441d825a664d118b29f8", + "max" + ], + "target": [ + "IPY_MODEL_87d92ef628f84c388d6c6501af28ea4d", + "max_frame" + ] } }, - "bcb522f35abc417591714281f15b6231": { + "9cab2efc281e4fc6835c0716effdd15f": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "c6092c42c17b4fadbf8ba80b0145cede": { + "9cc5b4ff85c94432940499596a4c7e36": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_318214da17704d589cc9437bde628146", + "IPY_MODEL_e0e998fd8c8d441d825a664d118b29f8" + ], + "layout": "IPY_MODEL_cbac2cdd8ee84d029d09e7ff29bc9766" + } + }, + "a07edf26c9904bb4978b9b27e1d43fbe": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", "state": {} }, - "caf558fa0d2c435389c51dceae9fe832": { + "a54bf8b51b5a40578622dde9979c8005": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_name": "LinkModel", "state": { - "children": [ - "IPY_MODEL_529f43bed2a445419cdaa8c9f1b748c1", - "IPY_MODEL_6f48caf2815c4b6696c4a3709aa50497" + "source": [ + "IPY_MODEL_19cdf24fc8ab4e62a05219ff1ef81263", + "max" + ], + "target": [ + "IPY_MODEL_6ea3657f68ca462188997ae2514683ce", + "max_frame" + ] + } + }, + "a62a0f1514744ec08d5f939ed5df94be": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "34px" + } + }, + "ab354c8b82d64580944bec964608e0ee": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "description_width": "" + } + }, + "ab9618d8d07842b59fdbaf17971d54f7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_249936014f0646f3a14d1080cec78d0b", + "max" ], - "layout": "IPY_MODEL_7e14e24a4172450c9f2b8d366842a726" + "target": [ + "IPY_MODEL_6ea3657f68ca462188997ae2514683ce", + "max_frame" + ] } }, - "cdf89c40e3344be6afa00e1f39128993": { + "ae3762f2f98947db868664c6a1326dda": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonModel", "state": { "icon": "compress", - "layout": "IPY_MODEL_a6fe37986c1241b09ff3ff3f085ed7c2", - "style": "IPY_MODEL_10be40fdff5d48f59854385a9e7437e0" + "layout": "IPY_MODEL_7abe5e28714a45ed9c9815d1814610f8", + "style": "IPY_MODEL_0a4cb31165cd4eb89830dd0f36aa7c1e" } }, - "ce093890ee6649b1a970930fbdbbe878": { + "b1fc7050885149dba9ca3a00e99b4746": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_name": "LinkModel", "state": { - "description_width": "" + "source": [ + "IPY_MODEL_318214da17704d589cc9437bde628146", + "value" + ], + "target": [ + "IPY_MODEL_e0e998fd8c8d441d825a664d118b29f8", + "value" + ] } }, - "cf19b664d4d9466eae5313a530dc4c62": { + "b29c77988356427db507c1298a9db38d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ImageModel", + "model_name": "LinkModel", "state": { - "layout": "IPY_MODEL_77aacc13b5bc4330afef3f15fa27c15c", - "width": "900.0" + "source": [ + "IPY_MODEL_42116a5e97384eee940be8ebe701cfd1", + "value" + ], + "target": [ + "IPY_MODEL_30139e4607d244578e5b2b2771ddf407", + "value" + ] } }, - "d03c7a1320874169b1cb7f506bedf1d3": { + "ba0ac2e4973841049708071c20c31c48": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "IntSliderModel", + "model_name": "SliderStyleModel", "state": { - "layout": "IPY_MODEL_46e9ec85470c49bbae783ccb989baac6", - "max": 11, - "style": "IPY_MODEL_dcd8bcf8e7064370aafdaf883581e209" + "description_width": "" } }, - "d219818914194ca796dcd6620d67e1da": { + "bc38255e7dd44daba29fe69ad6911a47": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "d4f483bcea5f4ca2aac4272eed22083a": { + "c0be76a3a96f46bc902e8db25764c74f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_6f16f8622af8405ea222c85bdf91548f", + "IPY_MODEL_46b81ba49b57444cab1bbe2f5fd00d92" + ], + "layout": "IPY_MODEL_d7bf3da906d94e838dd999ef1832f397" + } + }, + "c35f800d041d41c48de7daa2488616d8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "d77cbd6d9a6b4f379349ba2242da96be": { + "c884b3f5cf674e4d8478167fc058fa11": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "PlayModel", + "model_name": "LinkModel", "state": { - "layout": "IPY_MODEL_3027a3adbccc481d8e44bd6a73c2f3b5", - "max": 11, - "style": "IPY_MODEL_ce093890ee6649b1a970930fbdbbe878" + "source": [ + "IPY_MODEL_6f16f8622af8405ea222c85bdf91548f", + "value" + ], + "target": [ + "IPY_MODEL_46b81ba49b57444cab1bbe2f5fd00d92", + "value" + ] } }, - "dcd8bcf8e7064370aafdaf883581e209": { + "cb3ddd01b79b46d6b23cbd789e8e3e46": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", + "model_name": "ButtonModel", "state": { - "description_width": "" + "icon": "compress", + "layout": "IPY_MODEL_02b5f410cf1f4c918efe5b60df593d97", + "style": "IPY_MODEL_71b7199638db42b0844d1f1a798219e6" + } + }, + "cb565f66fad540a18bac03d70da6d804": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "cbac2cdd8ee84d029d09e7ff29bc9766": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "ce40e4194af0455e84cabb747fa7786c": { + "model_module": "nglview-js-widgets", + "model_module_version": "3.0.1", + "model_name": "ColormakerRegistryModel", + "state": { + "_msg_ar": [], + "_msg_q": [], + "_ready": true, + "layout": "IPY_MODEL_e68bbb6b940e4a3ebff909e3b2571ac8" } }, - "f21b59c26c3a4bfab6b5c4c3aeccb961": { + "d02698f84c534ed4b032d37f01b0e767": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "d7bf3da906d94e838dd999ef1832f397": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "dd7c1edbe0914479bb138a1f6a611f8a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", + "model_name": "DescriptionStyleModel", "state": { - "source": [ - "IPY_MODEL_414a367a402644e6a24ec7f61e79689f", - "max" - ], - "target": [ - "IPY_MODEL_ac63e7c8d2b84a478b194a451a0ede25", - "max_frame" - ] + "description_width": "" } }, - "f2d3d7b0885944d09a1d9723dc507b5e": { + "e00fb3b115994e60bdeac8b05fef8a3c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", + "model_name": "DescriptionStyleModel", "state": { - "source": [ - "IPY_MODEL_d77cbd6d9a6b4f379349ba2242da96be", - "value" - ], - "target": [ - "IPY_MODEL_ac63e7c8d2b84a478b194a451a0ede25", - "frame" - ] + "description_width": "" } }, - "f3319be68c4944e9832bdd57da448d71": { + "e0e998fd8c8d441d825a664d118b29f8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", + "model_name": "IntSliderModel", "state": { - "source": [ - "IPY_MODEL_01513848d0e142c19b486707145aac2b", - "value" - ], - "target": [ - "IPY_MODEL_9c1507f4d5c84e2d9f390ba74bdf4dc8", - "frame" - ] + "layout": "IPY_MODEL_50ab2142131544a7a0bb42d42938f511", + "max": 5, + "style": "IPY_MODEL_108bed51860b4b21b253466ea3f75f0f" } }, - "f44ec76bf085463d85525d2c8363acca": { + "e68bbb6b940e4a3ebff909e3b2571ac8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "ea1cb25d0a354ad481fa5c9584c17e0d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_6f48caf2815c4b6696c4a3709aa50497", + "IPY_MODEL_42116a5e97384eee940be8ebe701cfd1", "max" ], "target": [ - "IPY_MODEL_76b5f43e298747c2b94d0904a444374c", + "IPY_MODEL_fa5ea10926a449d4b77abc162d70178d", "max_frame" ] } + }, + "ecc84bee67f34ec18b809756316263f8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "f471943fcb1947f18d166b6b02d9f3ef": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "fa5ea10926a449d4b77abc162d70178d": { + "model_module": "nglview-js-widgets", + "model_module_version": "3.0.1", + "model_name": "NGLModel", + "state": { + "_camera_orientation": [ + 12.150049792069682, + 0, + 0, + 0, + 0, + 12.150049792069682, + 0, + 0, + 0, + 0, + 12.150049792069682, + 0, + -0.0010000000474974513, + 0, + -0.3755000000237487, + 1 + ], + "_camera_str": "orthographic", + "_gui_theme": null, + "_ibtn_fullscreen": "IPY_MODEL_cb3ddd01b79b46d6b23cbd789e8e3e46", + "_igui": null, + "_iplayer": "IPY_MODEL_19fdca61c5f5464b9ee1799459ff329b", + "_ngl_color_dict": {}, + "_ngl_coordinate_resource": {}, + "_ngl_full_stage_parameters": { + "ambientColor": 14540253, + "ambientIntensity": 0.2, + "backgroundColor": "white", + "cameraEyeSep": 0.3, + "cameraFov": 40, + "cameraType": "orthographic", + "clipDist": 10, + "clipFar": 100, + "clipNear": 0, + "fogFar": 100, + "fogNear": 50, + "hoverTimeout": 0, + "impostor": true, + "lightColor": 14540253, + "lightIntensity": 1, + "mousePreset": "default", + "panSpeed": 1, + "quality": "medium", + "rotateSpeed": 2, + "sampleLevel": 0, + "tooltip": true, + "workerDefault": true, + "zoomSpeed": 1.2 + }, + "_ngl_msg_archive": [ + { + "args": [ + { + "binary": false, + "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 -0.000 0.001 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.002 -0.000 0.750 1.00 0.00 FE \nENDMDL\n", + "type": "blob" + } + ], + "kwargs": { + "defaultRepresentation": true, + "ext": "pdb", + "name": "nglview.adaptor.ASETrajectory" + }, + "methodName": "loadFile", + "reconstruc_color_scheme": false, + "target": "Stage", + "type": "call_method" + }, + { + "args": [ + "spacefill" + ], + "component_index": 0, + "kwargs": { + "radius": 0.5, + "radiusType": "vdw", + "scale": 0.5, + "sele": "all" + }, + "methodName": "addRepresentation", + "reconstruc_color_scheme": false, + "target": "compList", + "type": "call_method" + }, + { + "args": [ + "ball+stick", + 0 + ], + "kwargs": {}, + "methodName": "removeRepresentationsByName", + "reconstruc_color_scheme": false, + "target": "Widget", + "type": "call_method" + }, + { + "args": [ + "unitcell" + ], + "component_index": 0, + "kwargs": { + "sele": "all" + }, + "methodName": "addRepresentation", + "reconstruc_color_scheme": false, + "target": "compList", + "type": "call_method" + }, + { + "args": [], + "kwargs": { + "cameraType": "orthographic" + }, + "methodName": "setParameters", + "reconstruc_color_scheme": false, + "target": "Stage", + "type": "call_method" + } + ], + "_ngl_original_stage_parameters": { + "ambientColor": 14540253, + "ambientIntensity": 0.2, + "backgroundColor": "white", + "cameraEyeSep": 0.3, + "cameraFov": 40, + "cameraType": "perspective", + "clipDist": 10, + "clipFar": 100, + "clipNear": 0, + "fogFar": 100, + "fogNear": 50, + "hoverTimeout": 0, + "impostor": true, + "lightColor": 14540253, + "lightIntensity": 1, + "mousePreset": "default", + "panSpeed": 1, + "quality": "medium", + "rotateSpeed": 2, + "sampleLevel": 0, + "tooltip": true, + "workerDefault": true, + "zoomSpeed": 1.2 + }, + "_ngl_repr_dict": { + "0": { + "0": { + "params": { + "assembly": "default", + "clipCenter": { + "x": 0, + "y": 0, + "z": 0 + }, + "clipNear": 0, + "clipRadius": 0, + "colorMode": "hcl", + "colorReverse": false, + "colorScale": "", + "colorScheme": "element", + "colorValue": 9474192, + "defaultAssembly": "", + "depthWrite": true, + "diffuse": 16777215, + "diffuseInterior": false, + "disableImpostor": false, + "disablePicking": false, + "flatShaded": false, + "interiorColor": 2236962, + "interiorDarkening": 0, + "lazy": false, + "matrix": { + "elements": [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ] + }, + "metalness": 0, + "opacity": 1, + "quality": "medium", + "radiusData": {}, + "radiusScale": 1, + "radiusSize": 0.5, + "radiusType": "size", + "roughness": 0.4, + "sele": "all", + "side": "double", + "sphereDetail": 1, + "useInteriorColor": true, + "visible": true, + "wireframe": false + }, + "type": "spacefill" + }, + "1": { + "params": { + "clipCenter": { + "x": 0, + "y": 0, + "z": 0 + }, + "clipNear": 0, + "clipRadius": 0, + "colorMode": "hcl", + "colorReverse": false, + "colorScale": "", + "colorScheme": "element", + "colorValue": "orange", + "defaultAssembly": "", + "depthWrite": true, + "diffuse": 16777215, + "diffuseInterior": false, + "disableImpostor": false, + "disablePicking": false, + "flatShaded": false, + "interiorColor": 2236962, + "interiorDarkening": 0, + "lazy": false, + "matrix": { + "elements": [ + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1, + 0, + 0, + 0, + 0, + 1 + ] + }, + "metalness": 0, + "opacity": 1, + "quality": "medium", + "radialSegments": 10, + "radiusData": {}, + "radiusScale": 1, + "radiusSize": 0.5, + "radiusType": "vdw", + "roughness": 0.4, + "sele": "all", + "side": "double", + "sphereDetail": 1, + "useInteriorColor": true, + "visible": true, + "wireframe": false + }, + "type": "unitcell" + } + } + }, + "_ngl_serialize": false, + "_ngl_version": "2.0.0-dev.36", + "_ngl_view_id": [ + "1EE99A66-3185-4EED-811D-A42CC0C0CAF3" + ], + "_player_dict": {}, + "_scene_position": {}, + "_scene_rotation": {}, + "_synced_model_ids": [], + "_synced_repr_model_ids": [], + "_view_height": "", + "_view_width": "", + "background": "white", + "frame": 0, + "gui_style": null, + "layout": "IPY_MODEL_cb565f66fad540a18bac03d70da6d804", + "max_frame": 5, + "n_components": 1, + "picked": {} + } + }, + "faf39035440f42ecb929d79a3dc32b64": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_19cdf24fc8ab4e62a05219ff1ef81263", + "value" + ], + "target": [ + "IPY_MODEL_249936014f0646f3a14d1080cec78d0b", + "value" + ] + } + }, + "fcfe62c7f1294d71ad0d98a74568349b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_5970304140b7436db540551f6d0c1db0", + "width": "900.0" + } } }, "version_major": 2, diff --git a/pyiron_contrib/tinybase/creator.py b/pyiron_contrib/tinybase/creator.py index a8b23cb96..1d9657b3e 100644 --- a/pyiron_contrib/tinybase/creator.py +++ b/pyiron_contrib/tinybase/creator.py @@ -185,7 +185,7 @@ def __init__(self, project, config): def most_recent(self): if self._most_recent is None: - self._most_recent = Executor() + self._most_recent = Submitter() return self._most_recent def _save(func): @@ -200,7 +200,7 @@ def f(self, *args, **kwargs): @_save def process(self, max_processes=_DEFAULT_CPUS, **kwargs): return FuturesSubmitter( - ProcessPoolExecutor(max_processes=max_processes, **kwargs) + ProcessPoolExecutor(max_workers=max_processes, **kwargs) ) @_save diff --git a/pyiron_contrib/tinybase/job.py b/pyiron_contrib/tinybase/job.py index d0a665e93..bfc14ad69 100644 --- a/pyiron_contrib/tinybase/job.py +++ b/pyiron_contrib/tinybase/job.py @@ -18,26 +18,13 @@ class TinyJob(Storable): """ - A tiny job unifies an executor, a task and its output. + A tiny job unifies an submitter, a task and its output. The job adds the task to the database and persists its input and output in a storage location. The input of the task is available from :attr:`~.input`. After the job has finished the output of the task can be accessed from :attr:`~.output` and the data written to storage from :attr:`.~storage`. - - This is an abstracat base class that works with any execution task without specifying it. To create specialized - jobs you can derive from it and overload :meth:`._get_task()` to return an - instance of the task, e.g. - - >>> from somewhere import MyTask - >>> class MyJob(TinyJob): - ... def _get_task(self): - ... return MyTask() - - The return value of :meth:`._get_task()` is persisted during the life time of the job. - - You can use :class:`.GenericTinyJob` to dynamically specify which task the job should execute. """ def __init__(self, task: AbstractTask, project: ProjectInterface, job_name: str): @@ -56,7 +43,7 @@ def __init__(self, task: AbstractTask, project: ProjectInterface, job_name: str) self._task = task self._output = None self._storage = None - self._executor = None + self._submitter = None self._id = None @property @@ -109,17 +96,17 @@ def storage(self): def _set_output(self, data): self._output = data["output"][0] - def _setup_executor_callbacks(self): - self._executor._run_machine.observe("ready", lambda _: self.store(self.storage)) - self._executor._run_machine.observe("finished", self._set_output) - self._executor._run_machine.observe( + def _setup_submitter_callbacks(self): + self._submitter._run_machine.observe("ready", lambda _: self.store(self.storage)) + self._submitter._run_machine.observe("finished", self._set_output) + self._submitter._run_machine.observe( "finished", lambda _: self.store(self.storage) ) - self._executor._run_machine.observe("ready", self._add_to_database) - self._executor._run_machine.observe("running", self._update_status("running")) - self._executor._run_machine.observe("collect", self._update_status("collect")) - self._executor._run_machine.observe("finished", self._update_status("finished")) + self._submitter._run_machine.observe("ready", self._add_to_database) + self._submitter._run_machine.observe("running", self._update_status("running")) + self._submitter._run_machine.observe("collect", self._update_status("collect")) + self._submitter._run_machine.observe("finished", self._update_status("finished")) def run( self, submitter: Union[Submitter, str, None] = None @@ -130,23 +117,23 @@ def run( If the job already has a database id and is not in "ready" state, do nothing. Args: - submitter (:class:`~.Submitter`, str): specifies which executor to + submitter (:class:`~.Submitter`, str): specifies which submitter to use, if `str` must be a method name of :class:`.ExecutorCreator`; - if not given use the last created executor + if not given use the last created submitter Returns: - :class:`.ExecutionContext`: the executor that is running the task or nothing. + :class:`.ExecutionContext`: the submitter that is running the task or nothing. """ if ( self._id is None or self.project.database.get_item(self.id).status == "ready" ): - if executor is None: - executor = "most_recent" - if isinstance(executor, str): - executor = getattr(self.project.create.executor, executor)() - exe = self._executor = executor.submit(tasks=[self.task]) - self._setup_executor_callbacks() + if submitter is None: + submitter = "most_recent" + if isinstance(submitter, str): + submitter = getattr(self.project.create.executor, submitter)() + exe = self._submitter = submitter.submit(tasks=[self.task]) + self._setup_submitter_callbacks() exe.run() return exe else: @@ -167,7 +154,7 @@ def wait(self, timeout: Optional[float] = None): return if self.status != "running": raise ValueError("Job not running!") - self._executor.wait(timeout=timeout) + self._submitter.wait(timeout=timeout) def remove(self): """ @@ -179,7 +166,7 @@ def remove(self): self._id = None self._output = None self._storage = None - self._executor = None + self._submitter = None def _add_to_database(self, _data): if self._id is None: From c606d06baf90e014ba65e4d3997316c95663bdbe Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Tue, 2 Jan 2024 22:58:12 +0100 Subject: [PATCH 03/49] Move to dataclass based storage classes This required some rearchitecting of some of the nodes, but in particular made SeriesNodes much nicer --- notebooks/tinybase/ASE.ipynb | 2842 ++++---------------------- notebooks/tinybase/Basic.ipynb | 451 ++-- notebooks/tinybase/TinyJob.ipynb | 207 ++ pyiron_contrib/tinybase/ase.py | 79 +- pyiron_contrib/tinybase/container.py | 169 +- pyiron_contrib/tinybase/murn.py | 46 +- pyiron_contrib/tinybase/shell.py | 19 +- pyiron_contrib/tinybase/task.py | 135 +- 8 files changed, 1127 insertions(+), 2821 deletions(-) diff --git a/notebooks/tinybase/ASE.ipynb b/notebooks/tinybase/ASE.ipynb index 5659687a2..cfc563457 100644 --- a/notebooks/tinybase/ASE.ipynb +++ b/notebooks/tinybase/ASE.ipynb @@ -47,43 +47,21 @@ { "cell_type": "code", "execution_count": 4, - "id": "b3108213-1d94-4354-9537-84982e45683d", - "metadata": { - "tags": [] - }, + "id": "1ff173d1-4bd5-4094-906b-3010dd38bf6b", + "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ - "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", + "/home/ponder/science/phd/dev/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" ] }, - { - "data": { - "text/html": [ - "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/html": [
-       "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "d27ff0773fea4e2eb6c66ecab365bffb",
+       "model_id": "4585059f23074248b390928e085da7ef",
        "version_major": 2,
        "version_minor": 0
       },
@@ -94,238 +72,175 @@
     }
    ],
    "source": [
-    "from pyiron_contrib.tinybase.ase import AseStaticTask, AseMDTask, AseMinimizeTask"
+    "from pyiron_contrib.tinybase.task import FunctionTask, SeriesTask"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 5,
-   "id": "0029125a-55e6-4181-a59b-09f606a1b4dd",
+   "id": "b3108213-1d94-4354-9537-84982e45683d",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "from pyiron_contrib.tinybase.murn import MurnaghanTask"
+    "from pyiron_contrib.tinybase.ase import AseStaticTask, AseMDTask, AseMinimizeTask"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 6,
-   "id": "c7c74920-c6b3-4577-a60f-951a0d3276ec",
-   "metadata": {
-    "tags": []
-   },
+   "id": "7c9ae645-f2de-455c-8d69-017d1c7e0b9c",
+   "metadata": {},
    "outputs": [],
    "source": [
-    "from pyiron_contrib.tinybase.executor import ProcessExecutor, BackgroundExecutor, Executor"
+    "import numpy as np"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 7,
-   "id": "c6630920-6ab7-4273-883e-999020b1fe5a",
+   "id": "0029125a-55e6-4181-a59b-09f606a1b4dd",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "import logging\n",
-    "logging.getLogger().setLevel(20)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "4d6f4eab-7660-4e66-b85b-8d9969512c00",
-   "metadata": {},
-   "source": [
-    "# Simple ASE Static Calculation"
+    "from pyiron_contrib.tinybase.murn import MurnaghanTask"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 8,
-   "id": "a6af72cb-989b-46c3-a2b5-4d2b9c5fd1eb",
-   "metadata": {
-    "tags": []
-   },
+   "id": "dbf0218a-9c88-452d-bc1e-f93270185cfa",
+   "metadata": {},
    "outputs": [],
    "source": [
-    "a = AseStaticTask()"
+    "from pyiron_contrib.tinybase.executor import FuturesSubmitter, Submitter"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 9,
-   "id": "5b2a9d62-3f74-4acf-acb6-e72dcd984704",
-   "metadata": {
-    "tags": []
-   },
+   "id": "021275a0-ec78-4779-b828-2465a695b318",
+   "metadata": {},
    "outputs": [],
    "source": [
-    "a.input.structure = bulk(\"Fe\")"
+    "from concurrent.futures import ThreadPoolExecutor"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 10,
-   "id": "1af70322-897e-487d-ba18-239ba5bfb7ba",
-   "metadata": {
-    "tags": []
-   },
+   "id": "8f060055-93c4-4917-9836-0f70d165b6c7",
+   "metadata": {},
    "outputs": [],
    "source": [
-    "a.input.calculator = MorsePotential()"
+    "from concurrent.futures import ProcessPoolExecutor"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 11,
-   "id": "273902ef-03f3-4f68-8668-4e6c6055a302",
-   "metadata": {
-    "tags": []
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "(ReturnStatus(Code.DONE, None),\n",
-       " )"
-      ]
-     },
-     "execution_count": 11,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "id": "5b792cf3-1db6-4945-bad9-60fd1d16801a",
+   "metadata": {},
+   "outputs": [],
    "source": [
-    "ret, output = a.execute(); ret, output"
+    "make_process = lambda n: FuturesSubmitter(ProcessPoolExecutor(max_workers=n))"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 12,
-   "id": "497de0b9-5e11-4d6c-8c19-664d0e759ac4",
-   "metadata": {
-    "tags": []
-   },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "-0.00013307075712109978"
-      ]
-     },
-     "execution_count": 12,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
-   "source": [
-    "output.energy_pot"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "id": "8a102a81-df04-4527-8739-7fe542f0c1fc",
+   "id": "f1bfdf31-84ee-42bd-a230-d990f2cc6116",
    "metadata": {},
+   "outputs": [],
    "source": [
-    "# ASE MD"
+    "from pympipool import PoolExecutor"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 13,
-   "id": "02cfe01b-0b24-4723-a79b-d41ffb146bf9",
-   "metadata": {
-    "tags": []
-   },
+   "id": "54df86b3-1986-4395-bd06-ee89d88f5213",
+   "metadata": {},
    "outputs": [],
    "source": [
-    "md = AseMDTask()"
+    "process = make_process(4)\n",
+    "thread = FuturesSubmitter(ThreadPoolExecutor(max_workers=4))"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 14,
-   "id": "466d1f9a-b707-4c05-a8af-5414d76bd8eb",
-   "metadata": {
-    "tags": []
-   },
+   "id": "ea7fe786-3c55-40b0-a309-4428e06fa3d7",
+   "metadata": {},
    "outputs": [],
    "source": [
-    "md.input.structure = bulk(\"Fe\", a=1.2, cubic=True).repeat(3)\n",
-    "md.input.calculator = MorsePotential()"
+    "process = FuturesSubmitter(PoolExecutor(4))"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 15,
-   "id": "dfdfc027-1608-43ad-9d15-0c649986eb73",
+   "id": "c6630920-6ab7-4273-883e-999020b1fe5a",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "md.input.steps = 100\n",
-    "md.input.timestep = 3.0\n",
-    "md.input.temperature = 600.0\n",
-    "md.input.output_steps = 20"
+    "import logging\n",
+    "logging.getLogger().setLevel(20)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "4d6f4eab-7660-4e66-b85b-8d9969512c00",
+   "metadata": {},
+   "source": [
+    "# Simple ASE Static Calculation"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 16,
-   "id": "a91f71b6-25f9-4977-b5b7-563a34f30016",
+   "id": "a6af72cb-989b-46c3-a2b5-4d2b9c5fd1eb",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "exe = ProcessExecutor(max_processes=4).submit([md])\n",
-    "exe.run()"
+    "a = AseStaticTask()"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 17,
-   "id": "80155255-4dcf-48cb-9825-015da13d6ac0",
+   "id": "5b2a9d62-3f74-4acf-acb6-e72dcd984704",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "exe.wait()"
+    "a.input.structure = bulk(\"Fe\")"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 18,
-   "id": "6f7aff4e-9e89-459b-843f-46a4d4139bcf",
+   "id": "1af70322-897e-487d-ba18-239ba5bfb7ba",
    "metadata": {
     "tags": []
    },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "{'status': [ReturnStatus(Code.DONE, None)],\n",
-       " 'output': []}"
-      ]
-     },
-     "execution_count": 18,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
-    "exe._run_machine._data"
+    "a.input.calculator = MorsePotential()"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 19,
-   "id": "62ce8439-bf95-4818-b35c-b4e2ef649bd2",
+   "id": "273902ef-03f3-4f68-8668-4e6c6055a302",
    "metadata": {
     "tags": []
    },
@@ -333,7 +248,8 @@
     {
      "data": {
       "text/plain": [
-       ""
+       "(ReturnStatus(Code.DONE, None),\n",
+       " EnergyPotOutput(energy_pot=-0.00013307075712109978))"
       ]
      },
      "execution_count": 19,
@@ -342,58 +258,80 @@
     }
    ],
    "source": [
-    "exe._run_machine.state"
+    "ret, output = a.execute(); ret, output"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "id": "8a102a81-df04-4527-8739-7fe542f0c1fc",
+   "metadata": {},
+   "source": [
+    "# ASE MD"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 20,
-   "id": "5bcd1b68-6a48-4a08-92d4-143419071618",
+   "id": "02cfe01b-0b24-4723-a79b-d41ffb146bf9",
    "metadata": {
     "tags": []
    },
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "11.99578764900798"
-      ]
-     },
-     "execution_count": 20,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "outputs": [],
    "source": [
-    "exe._run_time"
+    "md = AseMDTask(capture_exceptions=False)"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 21,
-   "id": "d21371e0-fa36-44bd-b7bf-a0092177ba17",
+   "id": "466d1f9a-b707-4c05-a8af-5414d76bd8eb",
+   "metadata": {
+    "tags": []
+   },
+   "outputs": [],
+   "source": [
+    "md.input.structure = bulk(\"Fe\", a=1.2, cubic=True).repeat(3)\n",
+    "md.input.calculator = MorsePotential()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 22,
+   "id": "dfdfc027-1608-43ad-9d15-0c649986eb73",
    "metadata": {
     "tags": []
    },
+   "outputs": [],
+   "source": [
+    "md.input.steps = 100\n",
+    "md.input.timestep = 3.0\n",
+    "md.input.temperature = 600.0\n",
+    "md.input.output_steps = 20"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "id": "57192a54-cd0f-4d2d-a675-33c3248738ad",
+   "metadata": {},
    "outputs": [
     {
-     "data": {
-      "text/plain": [
-       "2.5072979042306542e-05"
-      ]
-     },
-     "execution_count": 21,
-     "metadata": {},
-     "output_type": "execute_result"
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "CPU times: user 30.4 s, sys: 1min 34s, total: 2min 4s\n",
+      "Wall time: 8.37 s\n"
+     ]
     }
    ],
    "source": [
-    "exe._collect_time"
+    "%%time\n",
+    "status, output = md.execute()"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 24,
    "id": "412aed30-6adf-4a54-8496-bea647bb520e",
    "metadata": {
     "tags": []
@@ -402,42 +340,26 @@
     {
      "data": {
       "text/plain": [
-       "[-303.20813267693006,\n",
-       " -303.20813267693006,\n",
-       " -299.50793416220245,\n",
-       " -300.5497430006916,\n",
-       " -300.2227526899692,\n",
-       " -299.9803776735141,\n",
-       " -300.4174233564278,\n",
-       " -300.47761929956704,\n",
-       " -300.9284829694475,\n",
-       " -300.7290011651538,\n",
-       " -300.13461682002395,\n",
-       " -299.6448595164918,\n",
-       " -300.7999265006333,\n",
-       " -300.61980282686807,\n",
-       " -299.87975459727386,\n",
-       " -300.00429868718913,\n",
-       " -300.03868103245054,\n",
-       " -300.10316958162093,\n",
-       " -300.94069501802824,\n",
-       " -300.33250647975046,\n",
-       " -300.6353629828311,\n",
-       " -300.6098904517182]"
+       "array([-303.20813268, -303.20813268, -299.50417176, -300.69291846,\n",
+       "       -300.88356067, -299.87440092, -300.56706777, -300.41201114,\n",
+       "       -300.53923815, -300.01925116, -300.52098807, -300.26017925,\n",
+       "       -299.78016937, -300.92936235, -300.34657506, -300.3104632 ,\n",
+       "       -300.78479057, -300.66513799, -301.17922564, -300.44390943,\n",
+       "       -300.40110099, -300.76322532])"
       ]
      },
-     "execution_count": 22,
+     "execution_count": 24,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "exe.output[0].pot_energies"
+    "output.pot_energies"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 25,
    "id": "9e06cd6d-e0f7-40dd-93f2-777f86ffe2eb",
    "metadata": {
     "tags": []
@@ -445,7 +367,7 @@
    "outputs": [
     {
      "data": {
-      "image/png": "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\n",
+      "image/png": "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jbS0NIWiorvp3LkzFi9ejD///BPz589HWloaunXrhszMTKVDo0oYX0t8nbmGAQMGYOnSpdiyZQs+/fRT7N+/H3369IFWq1U6tGpNkiRMmzYNPXr0QMuWLQFUzdeWw3c3tZfbt2CXJEnWbdnJdgMGDDBdb9WqFbp27YqGDRti0aJFmDZtmoKRkbn4OnMNI0aMMF1v2bIl4uLiEB0djd9//x2PPPKIgpFVb88//zyOHTuGnTt33vG9qvTacvkRixo1asDd3f2OzC4jI+OODJCci5+fH1q1aoVz584pHQpVwrh6h68z1xQREYHo6Gi+1hT0wgsvYP369fjnn39Qt25d0/1V8bXl8omFl5cXOnTogE2bNpW5f9OmTejWrZtCUZE5tFotTp06hYiICKVDoUrUr18f4eHhZV5nOp0O27Zt4+vMBWRmZiIlJYWvNQVIkoTnn38ev/zyC7Zs2YL69euX+X5VfG1ViamQadOmYcyYMYiLi0PXrl0xb948JCcnY9KkSUqHRrd4+eWXMWjQINSrVw8ZGRl47733oNFoMHbsWKVDIwB5eXk4f/686falS5dw5MgRhIaGol69epg6dSo++OADxMbGIjY2Fh988AF8fX3x+OOPKxh19VTR7yo0NBQzZszAo48+ioiICCQmJuL1119HjRo18PDDDysYdfU0efJkLFu2DOvWrUNAQIBpZCIoKAg+Pj5QqVRV77Wl6JoUGX311VdSdHS05OXlJbVv3960lIecx4gRI6SIiAjJ09NTioyMlB555BHpxIkTSodFpf755x8JwB2XsWPHSpIklsW99dZbUnh4uKRWq6V77rlHSkhIUDboaqqi31VBQYHUv39/qWbNmpKnp6dUr149aezYsVJycrLSYVdLd/s9AZAWLFhgekxVe21x23QiIiKSjcvXWBAREZHzYGJBREREsmFiQURERLJhYkFERESyYWJBREREsmFiQURERLJhYkFERESyYWJBREREsmFiQURERLJhYkFERESyYWJBREREsmFiQURERLL5fxnur+hAic6yAAAAAElFTkSuQmCC",
       "text/plain": [
        "
" ] @@ -455,20 +377,34 @@ } ], "source": [ - "exe.output[0].plot_energies()" + "output.plot_energies()" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 26, "id": "bb70a653-6231-4f4e-9bbe-279811acc895", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "application/vnd.jupyter.widget-view+json": { + "model_id": "fed07636a64848c6abeb00752bbf5123", + "version_major": 2, + "version_minor": 0 + }, + "text/plain": [ + "NGLWidget(max_frame=21)" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "# Testing env doesn't have nglview\n", - "# exe.output[0].animate_structures()" + "output.animate_structures()" ] }, { @@ -481,7 +417,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 27, "id": "f816e2af-0455-4e05-9c39-2e9f615d8f34", "metadata": { "tags": [] @@ -493,7 +429,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 28, "id": "22314020-8f48-487b-a765-229a77d79a2f", "metadata": { "tags": [] @@ -505,19 +441,19 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 29, "id": "ff411a05-82e1-4581-b06e-ab2fd7e0be3b", "metadata": { "tags": [] }, "outputs": [], "source": [ - "dimer = Atoms(symbols=['Fe', 'Fe'], positions=[[0,0,0], [0,0, .75]], cell=[10,10,10])" + "dimer = Atoms(symbols=['Fe', 'Fe'], positions=[[0,0,0], [0,0, 1.2]], cell=[10,10,10])" ] }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 30, "id": "5574f0d5-d800-472a-9418-8c6ccc1e555b", "metadata": { "tags": [] @@ -530,7 +466,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 31, "id": "9e02d6dd-0fa6-4dd6-a7ab-3e648958eb20", "metadata": { "tags": [] @@ -539,7 +475,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "b5a8f7fe55124036a47dc318938cbc7d", + "model_id": "e55ea3654a284592b217e1abb8293151", "version_major": 2, "version_minor": 0 }, @@ -552,13 +488,12 @@ } ], "source": [ - "# Testing env doesn't have nglview\n", - "# ase_to_pyiron(mi.input.structure).plot3d()" + "ase_to_pyiron(mi.input.structure).plot3d()" ] }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 32, "id": "663e4435-1cd0-4ce2-9593-85453f4c846a", "metadata": { "tags": [] @@ -572,87 +507,67 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 33, "id": "37440e5a-75ff-4601-813a-f5c8df9413ad", "metadata": { "tags": [] }, "outputs": [], "source": [ - "mi.input.gpmin()" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "id": "00fbac35-11cd-468b-990e-0b97c3f4dec1", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "exe = Executor().submit([mi])" + "mi.input.lbfgs()" ] }, { "cell_type": "code", - "execution_count": 33, - "id": "8506cba9-b045-40f9-8514-2982db2470ca", - "metadata": { - "tags": [] - }, + "execution_count": 34, + "id": "91e4fcdb-5a4b-4499-9ed7-742dae88b2ad", + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Step Time Energy fmax\n", - "GPMin: 0 12:25:12 11.122159 187.2462\n", - "GPMin: 1 12:25:12 -0.278268 1.5338\n", - "GPMin: 2 12:25:12 -0.996055 0.8010\n", - "GPMin: 3 12:25:12 -0.000000 0.0000\n" + "LBFGS: 0 00:07:16 -0.511670 2.5257\n", + "LBFGS: 1 00:07:16 -0.713127 2.9848\n", + "LBFGS: 2 00:07:16 -0.082483 0.4842\n", + "LBFGS: 3 00:07:16 -0.052236 0.3092\n", + "LBFGS: 4 00:07:16 -0.023154 0.1381\n", + "LBFGS: 5 00:07:16 -0.011968 0.0716\n", + "LBFGS: 6 00:07:16 -0.005874 0.0352\n", + "LBFGS: 7 00:07:16 -0.002950 0.0177\n", + "LBFGS: 8 00:07:16 -0.001470 0.0088\n", + "LBFGS: 9 00:07:16 -0.000735 0.0044\n", + "LBFGS: 10 00:07:16 -0.000368 0.0022\n", + "LBFGS: 11 00:07:16 -0.000184 0.0011\n", + "LBFGS: 12 00:07:16 -0.000092 0.0006\n", + "LBFGS: 13 00:07:16 -0.000046 0.0003\n", + "LBFGS: 14 00:07:16 -0.000023 0.0001\n", + "LBFGS: 15 00:07:16 -0.000011 0.0001\n", + "LBFGS: 16 00:07:16 -0.000006 0.0000\n", + "LBFGS: 17 00:07:16 -0.000003 0.0000\n", + "LBFGS: 18 00:07:16 -0.000001 0.0000\n", + "LBFGS: 19 00:07:16 -0.000001 0.0000\n", + "LBFGS: 20 00:07:16 -0.000000 0.0000\n", + "LBFGS: 21 00:07:16 -0.000000 0.0000\n", + "LBFGS: 22 00:07:16 -0.000000 0.0000\n" ] } ], "source": [ - "exe.run()" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "id": "5977dd10-c4cf-40c9-944e-5aa52cfa263d", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "(ReturnStatus(Code.DONE, None),)" - ] - }, - "execution_count": 34, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "exe.status" + "_, output = mi.execute()" ] }, { "cell_type": "code", "execution_count": 35, - "id": "dd164778-634c-4785-903a-08a5243999ce", - "metadata": { - "tags": [] - }, + "id": "e74b7e76-2078-42fd-96a2-89ae04d551a7", + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "2.136147842601888e-07" + "StaticOutput(energy_kin=0.0, energy_pot=-8.972451867356014e-08)" ] }, "execution_count": 35, @@ -661,36 +576,34 @@ } ], "source": [ - "abs(exe.output[0].forces[-1]).max()" + "output.static_output()" ] }, { "cell_type": "code", "execution_count": 36, - "id": "515ea06d-9026-4d9e-9df0-b9c249f0758a", - "metadata": { - "tags": [] - }, + "id": "d36a445c-eee6-4189-a376-4a6ba7446740", + "metadata": {}, "outputs": [ { "data": { + "image/png": "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", "text/plain": [ - "" + "
" ] }, - "execution_count": 36, "metadata": {}, - "output_type": "execute_result" + "output_type": "display_data" } ], "source": [ - "exe._run_machine.state" + "output.plot_energies()" ] }, { "cell_type": "code", "execution_count": 37, - "id": "52b7231f-8978-46ec-b698-ea8724a6fea3", + "id": "dd164778-634c-4785-903a-08a5243999ce", "metadata": { "tags": [] }, @@ -698,7 +611,7 @@ { "data": { "text/plain": [ - "0.04363919500610791" + "5.383470999656264e-07" ] }, "execution_count": 37, @@ -707,85 +620,12 @@ } ], "source": [ - "exe._run_time" + "abs(output.forces[-1]).max()" ] }, { "cell_type": "code", "execution_count": 38, - "id": "c845430c-119d-4566-88e1-8465e378fde1", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "1.127301948145032e-05" - ] - }, - "execution_count": 38, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "exe._collect_time" - ] - }, - { - "cell_type": "code", - "execution_count": 39, - "id": "35291d7f-33a9-41ab-9b80-f052c5eb2e55", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA2gklEQVR4nO3deXRV9b3//9c+ORlIyDkZCBkgQFAMM0QQBCdaFIuKib22vbfWqet3b73FgbK66tDettcOqXbQViq91n69uqzDWtcSaB1TZShFkCFhnoQAIQMJJORkgIz790dyjoYMJOGcs8/wfKx1luZkn+z39uMiL/bnsz9vwzRNUwAAAH5is7oAAAAQXggfAADArwgfAADArwgfAADArwgfAADArwgfAADArwgfAADArwgfAADAr+xWF3Chjo4OlZeXKz4+XoZhWF0OAAAYANM0VV9fr4yMDNls/d/bCLjwUV5erszMTKvLAAAAQ1BaWqrRo0f3e0zAhY/4+HhJncU7HA6LqwEAAAPhcrmUmZnp+T3en4ALH+6pFofDQfgAACDIDGTJBAtOAQCAXxE+AACAXxE+AACAXwXcmg8AAKzW3t6u1tZWq8sIOBEREbLb7Ze8FQbhAwCAz2loaNDJkydlmqbVpQSk2NhYpaenKyoqasg/g/ABAECX9vZ2nTx5UrGxsUpJSWGzy88xTVMtLS2qrq5WSUmJJkyYcNHNxPpC+AAAoEtra6tM01RKSoqGDRtmdTkBZ9iwYYqMjNTx48fV0tKimJiYIf0cFpwCAHAB7nj0bah3O7r9DC/UAQAAMGCEDwAA4FeEDwAAwtz//u//KiEhwW/nI3wAAAC/CpvwUXeuVS/+46ge/b9dVpcCAIBXLViwQA8++KAefPBBJSQkKDk5WT/4wQ88e5XU1tbqnnvuUWJiomJjY7V48WIdPnxYkrRu3Trdf//9qqurk2EYMgxDP/7xj31a76DDx4YNG7RkyRJlZGTIMAwVFBR4vtfa2qpHH31U06ZNU1xcnDIyMnTPPfeovLzcmzUPSXNru37+zn69ua1UJ840WV0OACAImKapppY2S16D3eTs5Zdflt1u15YtW/S73/1OzzzzjF588UVJ0n333adt27ZpzZo1+vjjj2Wapm655Ra1trZq/vz5evbZZ+VwOFRRUaGKigp997vf9cV/To9B7/PR2NioGTNm6P7779e//Mu/dPteU1OTduzYof/6r//SjBkzVFtbq2XLlun222/Xtm3bvFb0UIx0xOiay0foH4dPq6C4TA8vnGBpPQCAwHeutV2Tf/i+Jefe9+TNio0a+K/pzMxMPfPMMzIMQ9nZ2dq9e7eeeeYZLViwQGvWrNE///lPzZ8/X5L05z//WZmZmSooKNBXvvIVOZ1OGYahtLQ0X11ON4MOH4sXL9bixYt7/Z7T6VRhYWG395577jnNmTNHJ06c0JgxY4ZWpZfkzhzlCR8PffFynuMGAISMq6++utvvtXnz5unXv/619u3bJ7vdrrlz53q+l5ycrOzsbO3fv9+KUn2/w6l7DqmvVbTNzc1qbm72fO1yuXxWy81TUvWDApuOVjdqT5lL00Y7fXYuAEDwGxYZoX1P3mzZuX3JNE3L/hLu0/Bx/vx5PfbYY/r6178uh8PR6zH5+fn67//+b1+W4REfE6kbJ6Xqb7sqVFBcRvgAAPTLMIxBTX1YafPmzT2+njBhgiZPnqy2tjZt2bLFM+1y5swZHTp0SJMmTZIkRUVFqb293W+1+uxpl9bWVv3rv/6rOjo69Pzzz/d53OOPP666ujrPq7S01FclSZLyZo6SJK3ZWa72DjoWAgBCQ2lpqZYvX66DBw/q9ddf13PPPadHHnlEEyZMUG5urv793/9dGzdu1M6dO/WNb3xDo0aNUm5uriRp3Lhxamho0IcffqjTp0+rqcm3D2b4JHy0trbqq1/9qkpKSlRYWNjnXQ9Jio6OlsPh6PbypeuvSFFCbKSq65u16chpn54LAAB/ueeee3Tu3DnNmTNHS5cu1UMPPaT/+I//kCS99NJLmjVrlm677TbNmzdPpmnqnXfeUWRkpCRp/vz5euCBB/S1r31NKSkpevrpp31aq9fvJbmDx+HDh7V27VolJyd7+xSXJMpu023T0/Xq5hMqKCrXdRNSrC4JAIBLFhkZqWeffVYrV67s8b3ExES98sor/X5+5cqVvX7WFwZ956OhoUHFxcUqLi6WJJWUlKi4uFgnTpxQW1ub7rzzTm3btk1//vOf1d7ersrKSlVWVqqlpcXbtQ+Ze+rlvT0VOtfivzkuAAAwhPCxbds25eTkKCcnR5K0fPly5eTk6Ic//KFOnjypNWvW6OTJk5o5c6bS09M9r02bNnm9+KGaNTZRoxOHqbGlXX/ff8rqcgAACCuDnnZZsGBBv7uuDXZHNisYhqG8maO0Yu2nWl1cpiUzMqwuCQCAIVu3bp3VJQxK2PR2uVBeTmfgWHewWjWNgTMlBABAqAvb8HH5yHhNyXCorcPU27srrC4HAICwEbbhQ5LuyOlceLq6qMziSgAACB9hHT6WzMiQYUjbjteqtIZOtwAA+ENYh49UR4zmX9a5D8nqYu5+AADgD2EdPqTOTreSVFBcHhRP6gAAEOzCPnx8aWqaou02fVrVoL3lvuuoCwCAryxYsEDLli3r9Xv33Xef8vLy/FrPxQRHqz4fcnR1un17d4UKiso0dRSdbgEAoeO3v/1twN3ZD/s7H5KUO7Nzzw863QIAQo3T6VRCQoLVZXRD+JC0IHukEmIjVVXfrM1Hz1hdDgAAl+S9996T0+nUK6+80mPaZcGCBXr44Yf1ve99T0lJSUpLS9OPf/xjv9ZH+FBnp9tbpqVLkgrY8wMA4GaaUkujNa8hTpW88cYb+upXv6pXXnlF99xzT6/HvPzyy4qLi9OWLVv09NNP68knn1RhYeGl/JcalLBf8+GWN3OUXttyQu/uqdRP8qYqJjLC6pIAAFZrbZJ+blH/ryfKpai4QX3k+eef1xNPPKHVq1frC1/4Qp/HTZ8+XT/60Y8kSRMmTNCKFSv04Ycf6qabbrqkkgeK8NFl9thEjUoYprKz5/Th/irdOj3d6pIAABiwt956S6dOndLGjRs1Z86cfo+dPn16t6/T09NVVVXly/K6IXx0sdkM5c7M0PPrjqiguIzwAQCQImM770BYde5BmDlzpnbs2KGXXnpJV111lQzD6PtHR0Z2+9owDHV0dAypzKEgfHxOXs4oPb/uiNYdrNLZphYlxEZZXRIAwEqGMeipD6tcdtll+vWvf60FCxYoIiJCK1assLqkPrHg9HOuSI3XpHSHWtvpdAsACD5XXHGF1q5dq7feeqvPTccCAXc+LnBHTob2V7i0uqhcd80da3U5AAAMSnZ2tj766CPPHZBARPi4wO0zRin/3QP65FiNTtY2aXTi4ObcAADwt3Xr1nX7etKkSTp16tSAjpWkgoIC7xfVD6ZdLpDmjNHVWe5OtxYtMgIAIIQRPnpxR05np9vVxWUBtx8+AADBjvDRiy9NS1OU3aZDpxq0v6Le6nIAAAgphI9eOGIitXDiSElSQTHbrQMA4E2Ejz7kzuycellTTKdbAAC8ifDRhy9MTJEjxq5K13ltKaHTLQCEE9b79c0b/20IH32Itkd4tlin0y0AhAf3vhgtLS0WVxK4mpqaJPXcon0w2OejH7kzR+n1T0r17u5KPZlLp1sACHV2u12xsbGqrq5WZGSkbDb+ju5mmqaamppUVVWlhISES9rAjPDRjznjkpThjFF53XmtPVClxdNoNgcAocwwDKWnp6ukpETHjx+3upyAlJCQoLS0tEv6GYSPfthshm6fOUp/WH9Eq4rKCB8AEAaioqI0YcIEpl56ERkZ6ZUt2wkfF5GXk6E/rD+idQerVdfUKmfs0Oe4AADBwWazKSYmxuoyQhaTWRcxMc2hiWnxamnv0Dt76HQLAMClInwMQF7Xdus89QIAwKUjfAzA7TMyZBjSlpIalZ09Z3U5AAAENcLHAGQkDNOccUmSOnc8BQAAQ0f4GKDPd7oFAABDR/gYoMXT0hUVYdOBynrtr3BZXQ4AAEGL8DFAzmGR+sLEFEl0ugUA4FIQPgbBPfXy1+JyddDpFgCAISF8DMKC7JGKj7GrvO68PjlWY3U5AAAEJcLHIMRERuiWqXS6BQDgUhA+Bsm94dg7uyvU3NZucTUAAAQfwscgzc1KUrozRq7zbVp7oNrqcgAACDqEj0Gy2QzdPiNDElMvAAAMBeFjCHJndk69fHSgSnXnWi2uBgCA4EL4GIJJ6fHKTu3sdPsenW4BABiUQYePDRs2aMmSJcrIyJBhGCooKOj2fdM09eMf/1gZGRkaNmyYFixYoL1793qr3oBgGIZyczqnXlYx9QIAwKAMOnw0NjZqxowZWrFiRa/ff/rpp/Wb3/xGK1as0NatW5WWlqabbrpJ9fX1l1xsIHGv+9hSUqOKOjrdAgAwUIMOH4sXL9ZPf/pTffnLX+7xPdM09eyzz+r73/++vvzlL2vq1Kl6+eWX1dTUpNdee80rBQeK0YmxmpOVJNOk0y0AAIPh1TUfJSUlqqys1KJFizzvRUdH64YbbtCmTZt6/Uxzc7NcLle3V7DI61p4WkD4AABgwLwaPiorKyVJqamp3d5PTU31fO9C+fn5cjqdnldmZqY3S/KpW6alKTLC0P4Klw5Whta0EgAAvuKTp10Mw+j2tWmaPd5ze/zxx1VXV+d5lZaW+qIkn0iIjdKC7JGS6HQLAMBAeTV8pKWlSVKPuxxVVVU97oa4RUdHy+FwdHsFE3en2zV0ugUAYEC8Gj6ysrKUlpamwsJCz3stLS1av3695s+f781TBYwvThyp+Gi7ys6e01Y63QIAcFGDDh8NDQ0qLi5WcXGxpM5FpsXFxTpx4oQMw9CyZcv085//XKtWrdKePXt03333KTY2Vl//+te9XXtAiImM0Jemdt7xYeEpAAAXN+jwsW3bNuXk5CgnJ0eStHz5cuXk5OiHP/yhJOl73/ueli1bpm9/+9uaPXu2ysrK9MEHHyg+Pt67lQeQO+h0CwDAgBmmaQbUQgWXyyWn06m6urqgWf/R3mFq/i8+1ClXs/7n7lm6eUqa1SUBAOBXg/n9TW8XL4j4XKfb1Tz1AgBAvwgfXpLXNfXy9/1Vcp2n0y0AAH0hfHjJ5HSHJowcrpa2Dr23p/cN1QAAAOHDawzD8Nz9KKDTLQAAfSJ8eJF73cfHR8+osu68xdUAABCYCB9elJkUq6vGJco0pb/uZM8PAAB6Q/jwstyuTrermHoBAKBXhA8vu3Vauuw2Q/sqXDp8ik63AABciPDhZYlxdLoFAKA/hA8fyMtxbzhGp1sAAC5E+PCBGyelani0XSdrz2n7iVqrywEAIKAQPnygW6dbFp4CANAN4cNH8rqeenl7d4Va2josrgYAgMBB+PCReZcla2R8tM42tWr9oWqrywEAIGAQPnwkwmZoSdeOpzz1AgDAZwgfPnSHu9PtvlOqp9MtAACSCB8+NSXDoctS4tRMp1sAADwIHz5kGIZn4enqYnq9AAAgET58zt3rZdOR06py0ekWAADCh4+NSY7VrLGJ6jClNXS6BQCA8OEPeTN56gUAADfChx/cOj1DdpuhPWUufVrVYHU5AABYivDhB0lxUbrhihRJ0mrufgAAwhzhw09yu/b8KCguk2nS6RYAEL4IH35y06RUxUVFqLTmnHbQ6RYAEMYIH34yLCpCN3s63fLUCwAgfBE+/Mi94djfdpWrtZ1OtwCA8ET48KP5lyVrxPBo1Ta1agOdbgEAYYrw4Uf2CJtu93S6ZeoFABCeCB9+lpfTGT4K91WqobnN4moAAPA/woefTRvl1PgRcTrf2qH36XQLAAhDhA8/MwzD02yO7dYBAOGI8GEB99TLPz89rap6Ot0CAMIL4cMCY5PjlDMmQR2m9NedFVaXAwCAXxE+LOLe84NeLwCAcEP4sMht09MVYTO062SdjlbT6RYAED4IHxZJHh6t6yeMkMSeHwCA8EL4sFCeu9NtEZ1uAQDhg/BhoZsmpyo2KkInappUVHrW6nIAAPALwoeFYqPsunlKZ6fb1UUsPAUAhAfCh8VyZ3bu+fHXXRV0ugUAhAXCh8WuvXyERgyPUk1jizYePm11OQAA+Bzhw2L2CJtum+7udMvUCwAg9BE+AoD7qZcP9p5SI51uAQAhzuvho62tTT/4wQ+UlZWlYcOGafz48XryySfV0cF6hr7MGO3UuORYnWtt1wf76HQLAAhtXg8fTz31lP7whz9oxYoV2r9/v55++mn98pe/1HPPPeftU4UMwzA+t+cHG44BAEKb18PHxx9/rNzcXN16660aN26c7rzzTi1atEjbtm3z9qlCirvXy8ZPT6u6vtniagAA8B2vh49rr71WH374oQ4dOiRJ2rlzpzZu3KhbbrnF26cKKeNGxGlGZoLaO0z9bRd3PwAAocvu7R/46KOPqq6uThMnTlRERITa29v1s5/9TP/2b//W6/HNzc1qbv7sb/oul8vbJQWNvJkZ2ll6VgXF5br/miyrywEAwCe8fufjzTff1KuvvqrXXntNO3bs0Msvv6xf/epXevnll3s9Pj8/X06n0/PKzMz0dklB47bpGYqwGdpZelYlpxutLgcAAJ8wTC93NMvMzNRjjz2mpUuXet776U9/qldffVUHDhzocXxvdz4yMzNVV1cnh8PhzdKCwr3/7xOtP1StRxZO0HduusLqcgAAGBCXyyWn0zmg399ev/PR1NQkm637j42IiOjzUdvo6Gg5HI5ur3CWl9O54djqYjrdAgBCk9fXfCxZskQ/+9nPNGbMGE2ZMkVFRUX6zW9+o29+85vePlVIWjQ5TcMi9+jYmSbtPFmnmZkJVpcEAIBXef3Ox3PPPac777xT3/72tzVp0iR997vf1be+9S395Cc/8fapQlJctF2LpqRKkgrodAsACEFeX/NxqQYzZxSq1h6o0v3/u1Ujhkdp8+MLZY9gF3wAQGCzdM0HLt21E0YoOS5KpxtatPFTOt0CAEIL4SMARUbYdNv0dEnS6mI2HAMAhBbCR4DK7er18v7eSjW10OkWABA6CB8BKiczQWOTY9XU0q7CfaesLgcAAK8hfAQowzCUO9Pd6ZanXgAAoYPwEcDyZnZuOLbh8GmdbqDTLQAgNBA+Atj4lOGaPtqp9g5Tb++qsLocAAC8gvAR4PLcUy/FTL0AAEID4SPA3TYjXTZDKjpxVsfP0OkWABD8CB8BbmR8jK65fIQkqaCIPT8AAMGP8BEE3FMvdLoFAIQCwkcQuHlqmmIibTp6ulG7y+qsLgcAgEtC+AgCw6PtumlymiRpFXt+AACCHOEjSLj3/Pjrzgq1tXdYXA0AAENH+AgS11+RosTYSJ1uaNamI2esLgcAgCEjfASJzk63nXc/2G4dABDMCB9BJC+nM3y8v7dS51raLa4GAIChIXwEkSvHJCozaZgaW9pVuJ9OtwCA4ET4CCKGYXy25wdTLwCAIEX4CDK5XeFj/aFq1TS2WFwNAACDR/gIMpePHK6poxxq6zD19i62WwcABB/CRxD6rNMt4QMAEHwIH0Ho9hkZshnS9uO1OnGmyepyAAAYFMJHEBrpiNH8yzo73a4uZuEpACC4ED6CVF6Oe+qFTrcAgOBC+AhSN09JVbTdpiPVjdpT5rK6HAAABozwEaTiYyJ14+RUSZ13PwAACBaEjyB2R9dTL3/dWa72DqZeAADBgfARxK6/IkUJsZGqqm/Wx3S6BQAECcJHEIuy23TrtHRJ0iq2WwcABAnCR5BzP/Xy/t5KnW+l0y0AIPARPoLcrDGJGp04TA3Nbfo7nW4BAEGA8BHkbDZDuTMzJEkFTL0AAIIA4SMEuHu9rDtYrVo63QIAAhzhIwRMSI3XlIyuTre7K6wuBwCAfhE+QoT77ge9XgAAgY7wESKWzMiQYUhbj9WqtIZOtwCAwEX4CBFpzhjNG58sSVqzs9ziagAA6BvhI4S49/xYVUSnWwBA4CJ8hJAvTU1TlN2mT6satLecTrcAgMBE+AghjphI3ThppCQWngIAAhfhI8S4n3pZQ6dbAECAInyEmAXZI+UcFqlTrmZtPkqnWwBA4CF8hJgou023dHW6Zbt1AEAgInyEoDu6nnp5bw+dbgEAgccn4aOsrEzf+MY3lJycrNjYWM2cOVPbt2/3xanQi9ljEzUqYZjqm9v00YEqq8sBAKAbr4eP2tpaXXPNNYqMjNS7776rffv26de//rUSEhK8fSr0wWYzdHtXp9tVTL0AAAKM3ds/8KmnnlJmZqZeeuklz3vjxo3z9mlwEXkzR2nluiNad7BKZ5talBAbZXVJAABI8sGdjzVr1mj27Nn6yle+opEjRyonJ0d//OMf+zy+ublZLper2wuXLjstXpPSHWptN/XO7kqrywEAwMPr4ePo0aNauXKlJkyYoPfff18PPPCAHn74Yb3yyiu9Hp+fny+n0+l5ZWZmeruksJXXNfXCUy8AgEBimF5uAhIVFaXZs2dr06ZNnvcefvhhbd26VR9//HGP45ubm9Xc3Oz52uVyKTMzU3V1dXI4HN4sLexU1J3T/F98JNOUNj76BY1OjLW6JABAiHK5XHI6nQP6/e31Ox/p6emaPHlyt/cmTZqkEydO9Hp8dHS0HA5Htxe8I905TFdn0ekWABBYvB4+rrnmGh08eLDbe4cOHdLYsWO9fSoMQF7OZ1MvdLoFAAQCr4eP73znO9q8ebN+/vOf69NPP9Vrr72mF154QUuXLvX2qTAAX5qarqgImw6datD+inqrywEAwPvh46qrrtKqVav0+uuva+rUqfrJT36iZ599VnfddZe3T4UBcA6L1EI63QIAAojXF5xeqsEsWMHAvLenUg+8ul1pjhhteuyLstkMq0sCAIQYSxecIvB8YWKKHDF2VbrOa3MJnW4BANYifISBaHuEp9Pt6iKeegEAWIvwESbyujrdvrOngk63AABLET7CxJxxScpwxqj+fJvW0ukWAGAhwkeYsNkMLXFvt85TLwAACxE+wsgdXVMvaw9Uq66p1eJqAADhivARRiamOTQxLV4t7R16d0+F1eUAAMIU4SPM5M7svPuxik63AACLED7CzO1d6z62lNSo/Ow5i6sBAIQjwkeYGZUwTHOzkiTR6RYAYA3CRxhy7/lRwNQLAMAChI8wdEtXp9sDlfU6UOmyuhwAQJghfIQhZ2ykvjAxRZJUwHbrAAA/I3yEqbyup17WFJepoyOgGhsDAEIc4SNMfWHiSMXH2FVed16fHKuxuhwAQBghfISpmMgI3TK1q9Mt260DAPyI8BHGcnM69/x4e1eFmtvodAsA8A/CRxi7OitZaY4Yuc63ae2BaqvLAQCECcJHGLPZDM+Op0y9AAD8hfAR5txPvXx4oEp15+h0CwDwPcJHmJuUHq8rUoerpa1D79HpFgDgB4SPMGcYhqfTLRuOAQD8gfAB5Xat+9hcckYVdXS6BQD4FuEDGp0YqznjkmSa0ppi7n4AAHyL8AFJn+35UUD4AAD4GOEDkqRbp6UrMsLQ/gqXDp2qt7ocAEAII3xAkpQQG6UF2SMlSQVF7PkBAPAdwgc83Ht+rC4up9MtAMBnCB/wWDhppIZH21V29py2Ha+1uhwAQIgifMAjJjJCi6emSZIK2G4dAOAjhA90k5fTOfXy9q4KtbR1WFwNACAUET7QzdXjkzUyPlp151q17mCV1eUAAEIQ4QPdRNgMz46nq9nzAwDgA4QP9ODu9fL3/afkOk+nWwCAdxE+0MOUDIcuHzlczW0dem9PpdXlAABCDOEDPRiGoTzP1AtPvQAAvIvwgV65p142HTmjU67zFlcDAAglhA/0KjMpVrPHJtLpFgDgdYQP9Cm3a88PNhwDAHgT4QN9um1auuw2Q3vLXTpMp1sAgJcQPtCnxLgoLchOkcTdDwCA9xA+0K/cz3W6NU063QIALh3hA/26cVKqhkfbdbL2nLbT6RYA4AWED/RrWFSEbp5Cp1sAgPf4PHzk5+fLMAwtW7bM16eCj+TldG449jc63QIAvMCn4WPr1q164YUXNH36dF+eBj42/7IRSomP1tmmVm04VG11OQCAIOez8NHQ0KC77rpLf/zjH5WYmOir08APImyGbp/RefeDqRcAwKXyWfhYunSpbr31Vt14442+OgX8KK/rqZfCfadUT6dbAMAlsPvih77xxhvasWOHtm7detFjm5ub1dzc7Pna5XL5oiRcoqmjHBqfEqej1Y16f+8p3TlrtNUlAQCClNfvfJSWluqRRx7Rq6++qpiYmIsen5+fL6fT6XllZmZ6uyR4gWEYusOz5wdTLwCAoTNML+8cVVBQoDvuuEMRERGe99rb22UYhmw2m5qbm7t9r7c7H5mZmaqrq5PD4fBmabhEJ8406fpfrpXNkDY/vlAjHRcPlwCA8OByueR0Ogf0+9vr0y4LFy7U7t27u713//33a+LEiXr00Ue7BQ9Jio6OVnR0tLfLgA+MSY7VlWMStOPEWa3ZWa7/77rxVpcEAAhCXg8f8fHxmjp1arf34uLilJyc3ON9BJ87ckZpx4mzWl1M+AAADA07nGJQbp2eIbvN0O6yOn1a1WB1OQCAIOSX8LFu3To9++yz/jgVfCwpLkrXX9HZ6ZaFpwCAoeDOBwYtd2bnhmN0ugUADAXhA4O2aHKa4qIidKKmSTtOnLW6HABAkCF8YNC6dbotYuoFADA4hA8MSW5O54Zjb++uUGs7nW4BAANH+MCQXHNZskYMj1ZNY4v+cZhOtwCAgSN8YEjsETYtmZEuSSooKre4GgBAMCF8YMjcnW4/2FephuY2i6sBAAQLwgeGbPpop7JGxOl8a4c+2FtpdTkAgCBB+MCQGYbhuftRUMzUCwBgYAgfuCTuDcc2Hq5WVf15i6sBAAQDwgcuybgRcZqZmaAOU/rbzgqrywEABAHCBy7ZHV17ftDrBQAwEIQPXLJbp6crwmZo58k6Ha2m0y0AoH+ED1yyEcOjdd2EEZJYeAoAuDjCB7zi81MvdLoFAPSH8AGvuGlyqmKjInT8TJOKS89aXQ4AIIARPuAVsVF2LZqcKolOtwCA/hE+4DXuTrd/20WnWwBA3wgf8JrrLh+h5LgonWls0cZPT1tdDgAgQBE+4DWdnW47dzxl6gUA0BfCB7zKvd36B3tPqZFOtwCAXhA+4FUzMxM0LjlW51rbVbjvlNXlAAACEOEDXmUYhnK7Ot2uYuoFANALwge8Lq/rqZeNn57W6YZmi6sBAAQawge8LmtEnGZkJqi9w9TfdrLdOgCgO8IHfCKva+EpvV4AABcifMAnbpueoQiboeLSsyo53Wh1OQCAAEL4gE+kxEfrmss7O92uLmbhKQDgM4QP+MwdOZ1TL6uLy+l0CwDwIHzAZxZNTtOwyAiVnG7UzpN1VpcDAAgQhA/4TFy0XTfR6RYAcAHCB3zqDk+n23K10ekWACDCB3zs2gkjlBQXpdMNLfrnkTNWlwMACACED/hUZIRNt01Pl8TUCwCgE+EDPufu9fL+3ko1tdDpFgDCHeEDPnflmASNSYpVUwudbgEAhA/4gWEYn223ztQLAIQ9wgf8IrfrqZcNh0/rDJ1uASCsET7gF5elDNf00U61d5h6e3eF1eUAACxE+IDfuBeermLqBQDCGuEDfrNkRrpshlR04qyOn6HTLQCEK8IH/GZkfMznOt2WW1wNAMAqhA/4VV7X1EtBcRmdbgEgTBE+4Fc3T01TTKRNR6sbtbuMTrcAEI4IH/Cr4dF23TjJ3emWqRcACEdeDx/5+fm66qqrFB8fr5EjRyovL08HDx709mkQxNydbv9Kp1sACEteDx/r16/X0qVLtXnzZhUWFqqtrU2LFi1SYyNPN6DT9VekKDE2UtX1zdpEp1sACDt2b//A9957r9vXL730kkaOHKnt27fr+uuv9/bpEIQiI2y6dXq6Xt18QgXFZbr+ihSrSwIA+JHP13zU1XUuKkxKSur1+83NzXK5XN1eCH3uqZf391TqXEu7xdUAAPzJp+HDNE0tX75c1157raZOndrrMfn5+XI6nZ5XZmamL0tCgLhyTKIyk4apsaVdhfvpdAsA4cSn4ePBBx/Url279Prrr/d5zOOPP666ujrPq7S01JclIUAYhqHcGZ13P1az3ToAhBWfhY+HHnpIa9as0dq1azV69Og+j4uOjpbD4ej2QnjIy8mQJK0/VK2axhaLqwEA+IvXw4dpmnrwwQf1l7/8RR999JGysrK8fQqEiMtHxmvqKIfa6HQLAGHF6+Fj6dKlevXVV/Xaa68pPj5elZWVqqys1Llz57x9KoQAz3brTL0AQNjwevhYuXKl6urqtGDBAqWnp3teb775prdPhRCwZEaGDEPafrxWpTVNVpcDAPADn0y79Pa67777vH0qhIBUR4yuuczd6Za7HwAQDujtAsvlzuxceLqqiE63ABAOCB+w3JempinabtOR6kbtLWeTOQAIdYQPWC4+JlI3TnZ3umXqBQBCHeEDAcH91MuaneVq72DqBQBCGeEDAeGGK1KUEBupqvpmfUynWwAIaYQPBIQou023TEuXJBXw1AsAhDTCBwKGu9Pte3sqdb6VTrcAEKoIHwgYs8YkalTCMDU0t+nvdLoFgJBF+EDAsNkMz54fBUXlFlcDAPAVwgcCinvqZf2hKtXS6RYAQhLhAwFlQmq8Jqc71NpOp1sACFWEDwScvJzOqRd6vQBAaCJ8IODcPmOUDEPaeqxWJ2vpdAsAoYbwgYCT5ozRvPHJkqTVxSw8BYBQQ/hAQHJvt15Ap1sACDmEDwSkL01LU5TdpsNVDdpXQadbAAglhA8EJEdMpG6cNFISUy8AEGoIHwhYuV1TL6uLy+h0CwAhhPCBgLUgO0WOGLtOuZq15SidbgEgVNitLgDoS7Q9QrdOz9Drn5xQQXGZ5l8+wuqSgLDnOt+qstpzVpeBS2QY0sQ0h2XnJ3wgoOXN7Awf7+6u1JO5UxUTGWF1SUBYqW1s0dZjNdpSUqMtJWe0r9wlZkGDX5TdpkM/XWzZ+QkfCGhXjUtShjNG5XXn9dGBKt0yLd3qkoCQVl3frE9KavRJyRltKanRgcr6HsckxUUpwmZYUB28JSrC2lUXhA8ENJvN0O0zR+kP64+ooKiM8AF4WWXdeW3pChpbjp7RkerGHsdcPnK45mQlaW5WkuZmJSvNGWNBpQglhA8EvDtyOsPHuoPVOtvUooTYKKtLAoJWaU2TtnzuzsbxMz1bGExMi+8MGuOTNScrSSOGR1tQKUIZ4QMBLzstXhPT4nWgsl7v7K7U1+eOsbokICiYpqljZ5q05eiZrsBRo7Kz3ReL2gxpSoZTc7OSNKfrRcCHrxE+EBTyckbpF+8eUEFxGeED6INpmvq0qkGbu6ZQPimpUVV9c7dj7DZD00Y7NTcrWXOzkjRrXKIcMZEWVYxwRfhAULh9Roaeeu+A529uoxKGWV0SYLmODlMHKus712wcrdEnx2pU09jS7ZioCJtmZiZo7vjOuxqzxiYqNoo/+mEt/g9EUMhIGKa5WUnafLRGv1/7qe6ZN1bjRwxXlJ198hA+2to7tLfcpU+6Hnv9pKRGrvNt3Y6JibTpyjGJmpvVuV4jZ0wCj6gj4BA+EDTuyBmlzUdr9NqWE3ptywlFRhi6LGW4stPiPetCstMcynDGyDB4DBDBr6WtQ7vLznY9iVKj7cdr1dDcPWzERUVo1rjOJ1GuHp+kaaMSCOUIeIQPBI28nFE6Ut2oHcdrdbCyXvXNbTpQWd9jH4L4GHtXEOkMI+5/Z14bge58a7uKS892TaGc0fbjtTrf2tHtmPgYu+aMS9Lc8Z2PvU7JcMhu8Z4NwGAZpmkG1F51LpdLTqdTdXV1cjis2/oVgc00TZWdPaeDXeGj858uHa1uVFsf2y+OShjW7S7JxDSHxqfEKZI/uGGRppY27Th+1rPPRnHpWbW0dQ8bibGRXXtsJGvu+CRNTHOwwRcC0mB+fxM+EFJa2jp0pLrBE0oOVLp0sLJeFXXnez3+wqmbSWkOZafFK52pG/hA/flWbTteqy1HO9ds7D5Z1yMsp8RHd23m1bnPxuUpw2UjbCAIDOb3N9MuCClRdpsmpTs0Kb37//h1Ta06eKpeBytd2t91p+RgZb0a+pi6ccTYP3eXpHPq5gqmbjBIdU2t+uRY12Ovx2q0p6yuR1+UDGeMZzOvuVlJyhoRR/BFyOPOB8LWhVM3ndM3A5u6mfi5YMLUDdzONDR3PYlSo81Hz+jgqXpd+CfsmKRYz12NuVlJGp04jLCBkMC0C3AJmtvadbS6UQcqXZ71JAOZupl4wQJXpm5C3ynXeU9PlC0lNfq0qqHHMeNT4jQ3K1lXd+2zke5kjxqEJsIH4AN1Ta2da0hO1XcLJRc++ujmiLFrYtcaEvfdEqZugtvJ2qbOOxtdazaO9dIXJTs13vMkypysJKXE0xcF4YHwAfiJaZo6Wds5dfNZKLn41M1njwIzdROoTNPU8TNNn+v42ntflMkZDs0Z1/kkypxxSUqMoy8KwhPhA7BYc1u7jlQ16uAppm6ChWmaOlLdoM1Hazw7iJ5yde+LEmEzNG2Us2vNRpJmj0viThbQhfABBChvTN1kp8Urnl94l6yjw9TBU/XdOr6e6aUvyoxMp2cKZdbYRMVF85Ag0BvCBxBE+pq6OVLdqPYBTt1MSncoawRTN/1pa+/Q/orOJmybj9Zo67Ea1Z1r7XZMtL2rL0rX4tArxyTSFwUYIMIHEAJ6m7o5UFGvStcAp27SO++UpDnCc+qmtb1Du8vqPItDtx3r2RclNipCs8Ym6uqux16njXYq2k7YAIaC8AGEsLNNLd3ukhyocOnQqYYBTd24A8kVqaE3ddPc1q6dpXWeaZTtx2t1rrW92zHxMXZdNe6z3UOnZDi4WwR4CeEDCDMXTt3sr+jcVv7o6YtP3UxM/2yRazBN3ZxradeOE7WefTaKeumLkhAb2dWErfPOxqR0+qIAvkL4ACDpgqmbis8WufY1dRMVYdP4lLiuUOLwLHINhKmbhuY2bTtW49lBdNfJs2pt7/7H14jh0V17bHTuszFhJH1RAH8JiPDx/PPP65e//KUqKio0ZcoUPfvss7ruuusu+jnCB+B77qmbz28r39/UjXNYpLJT3XdJ/DN1U3euVVu7Hnn9pKRGe8pdPe7ipDtjNDcrSXO6Or6Opy8KYBnLw8ebb76pu+++W88//7yuueYa/c///I9efPFF7du3T2PGjOn3s4QPwBruqRt3GHHfJbnY1M2kdPdTN5c2dVPT2KJPup5E+aSkRvsrXT36omQmDetsLd91ZyMzib4oQKCwPHzMnTtXV155pVauXOl5b9KkScrLy1N+fn6/n/VZ+DBNqbXnVsgA+tfc1q4j1Y06fKpeh0816GDXP0/V9z11k5UyXNmpwzUhNV4TUjv/PTW++9RNVf15bTtWq63HarTtWK0+re7ZFyUrOU6zsxJ11dgkzR6XSF8UwJsiYyUvhvfB/P72+m45LS0t2r59ux577LFu7y9atEibNm3qcXxzc7Oamz/bRdDlcnm7pE6tTdLPM3zzs4EQFi1pcterm5h+PnS263Ww70NGSrql69Xnz2uUtKfrBcC7niiXouIsObXXl7WfPn1a7e3tSk1N7fZ+amqqKisrexyfn58vp9PpeWVmZnq7JAAAEEB8tk/whfOwpmn2Ojf7+OOPa/ny5Z6vXS6XbwJIZGxnygPgd+db23X0dOfUTUXdeWWnxevKMYlyDgutvUaAoBIZa9mpvR4+RowYoYiIiB53OaqqqnrcDZGk6OhoRUf7oeW0YVh2ewkIdzFR0uQ4hyaPTbe6FAABwOvTLlFRUZo1a5YKCwu7vV9YWKj58+d7+3QAACDI+GTaZfny5br77rs1e/ZszZs3Ty+88IJOnDihBx54wBenAwAAQcQn4eNrX/uazpw5oyeffFIVFRWaOnWq3nnnHY0dO9YXpwMAAEGE7dUBAMAlG8zv7+DoIAUAAEIG4QMAAPgV4QMAAPgV4QMAAPgV4QMAAPgV4QMAAPgV4QMAAPgV4QMAAPgV4QMAAPiVT7ZXvxTuDVddLpfFlQAAgIFy/94eyMbpARc+6uvrJUmZmZkWVwIAAAarvr5eTqez32MCrrdLR0eHysvLFR8fL8MwvPqzXS6XMjMzVVpaGpJ9Y0L9+qTQv0auL/iF+jWG+vVJoX+Nvro+0zRVX1+vjIwM2Wz9r+oIuDsfNptNo0eP9uk5HA5HSP4P5Rbq1yeF/jVyfcEv1K8x1K9PCv1r9MX1XeyOhxsLTgEAgF8RPgAAgF+FVfiIjo7Wj370I0VHR1tdik+E+vVJoX+NXF/wC/VrDPXrk0L/GgPh+gJuwSkAAAhtYXXnAwAAWI/wAQAA/IrwAQAA/IrwAQAA/Crkwsfzzz+vrKwsxcTEaNasWfrHP/7R7/Hr16/XrFmzFBMTo/Hjx+sPf/iDnyodmsFc37p162QYRo/XgQMH/FjxwG3YsEFLlixRRkaGDMNQQUHBRT8TbOM32GsMpjHMz8/XVVddpfj4eI0cOVJ5eXk6ePDgRT8XTGM4lGsMpjFcuXKlpk+f7tl8at68eXr33Xf7/UwwjZ80+GsMpvHrTX5+vgzD0LJly/o9zt/jGFLh480339SyZcv0/e9/X0VFRbruuuu0ePFinThxotfjS0pKdMstt+i6665TUVGRnnjiCT388MN66623/Fz5wAz2+twOHjyoiooKz2vChAl+qnhwGhsbNWPGDK1YsWJAxwfb+EmDv0a3YBjD9evXa+nSpdq8ebMKCwvV1tamRYsWqbGxsc/PBNsYDuUa3YJhDEePHq1f/OIX2rZtm7Zt26YvfvGLys3N1d69e3s9PtjGTxr8NboFw/hdaOvWrXrhhRc0ffr0fo+zZBzNEDJnzhzzgQce6PbexIkTzccee6zX47/3ve+ZEydO7Pbet771LfPqq6/2WY2XYrDXt3btWlOSWVtb64fqvEuSuWrVqn6PCbbxu9BArjGYx7CqqsqUZK5fv77PY4J9DAdyjcE8hqZpmomJieaLL77Y6/eCffzc+rvGYB2/+vp6c8KECWZhYaF5ww03mI888kifx1oxjiFz56OlpUXbt2/XokWLur2/aNEibdq0qdfPfPzxxz2Ov/nmm7Vt2za1trb6rNahGMr1ueXk5Cg9PV0LFy7U2rVrfVmmXwXT+F2qYBzDuro6SVJSUlKfxwT7GA7kGt2CbQzb29v1xhtvqLGxUfPmzev1mGAfv4Fco1uwjd/SpUt166236sYbb7zosVaMY8iEj9OnT6u9vV2pqand3k9NTVVlZWWvn6msrOz1+La2Np0+fdpntQ7FUK4vPT1dL7zwgt566y395S9/UXZ2thYuXKgNGzb4o2SfC6bxG6pgHUPTNLV8+XJde+21mjp1ap/HBfMYDvQag20Md+/ereHDhys6OloPPPCAVq1apcmTJ/d6bLCO32CuMdjGT5LeeOMN7dixQ/n5+QM63opxDLiutpfKMIxuX5um2eO9ix3f2/uBYjDXl52drezsbM/X8+bNU2lpqX71q1/p+uuv92md/hJs4zdYwTqGDz74oHbt2qWNGzde9NhgHcOBXmOwjWF2draKi4t19uxZvfXWW7r33nu1fv36Pn85B+P4DeYag238SktL9cgjj+iDDz5QTEzMgD/n73EMmTsfI0aMUERERI+7AFVVVT0SnVtaWlqvx9vtdiUnJ/us1qEYyvX15uqrr9bhw4e9XZ4lgmn8vCnQx/Chhx7SmjVrtHbtWo0ePbrfY4N1DAdzjb0J5DGMiorS5ZdfrtmzZys/P18zZszQb3/7216PDdbxG8w19iaQx2/79u2qqqrSrFmzZLfbZbfbtX79ev3ud7+T3W5Xe3t7j89YMY4hEz6ioqI0a9YsFRYWdnu/sLBQ8+fP7/Uz8+bN63H8Bx98oNmzZysyMtJntQ7FUK6vN0VFRUpPT/d2eZYIpvHzpkAdQ9M09eCDD+ovf/mLPvroI2VlZV30M8E2hkO5xt4E6hj2xjRNNTc39/q9YBu/vvR3jb0J5PFbuHChdu/ereLiYs9r9uzZuuuuu1RcXKyIiIgen7FkHH22lNUCb7zxhhkZGWn+6U9/Mvft22cuW7bMjIuLM48dO2aapmk+9thj5t133+05/ujRo2ZsbKz5ne98x9y3b5/5pz/9yYyMjDT/7//+z6pL6Ndgr++ZZ54xV61aZR46dMjcs2eP+dhjj5mSzLfeesuqS+hXfX29WVRUZBYVFZmSzN/85jdmUVGRefz4cdM0g3/8THPw1xhMY/if//mfptPpNNetW2dWVFR4Xk1NTZ5jgn0Mh3KNwTSGjz/+uLlhwwazpKTE3LVrl/nEE0+YNpvN/OCDD0zTDP7xM83BX2MwjV9fLnzaJRDGMaTCh2ma5u9//3tz7NixZlRUlHnllVd2ewTu3nvvNW+44YZux69bt87Myckxo6KizHHjxpkrV670c8WDM5jre+qpp8zLLrvMjImJMRMTE81rr73WfPvtty2oemDcj7Rd+Lr33ntN0wyN8RvsNQbTGPZ2XZLMl156yXNMsI/hUK4xmMbwm9/8pufPl5SUFHPhwoWeX8qmGfzjZ5qDv8ZgGr++XBg+AmEcDdPsWlUCAADgByGz5gMAAAQHwgcAAPArwgcAAPArwgcAAPArwgcAAPArwgcAAPArwgcAAPArwgcAAPArwgcAAPArwgcAAPArwgcAAPArwgcAAPCr/x815Xy9al4DZQAAAABJRU5ErkJggg==\n", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "exe.output[0].plot_energies()" - ] - }, - { - "cell_type": "code", - "execution_count": 40, - "id": "1d5b5203-d07f-485b-9553-9150f4a674e7", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[11.122158782511535,\n", - " -0.2782678462106827,\n", - " -0.9960554302957411,\n", - " -3.560246436024868e-08,\n", - " -3.560246436024868e-08]" - ] - }, - "execution_count": 40, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "exe.output[0].pot_energies" - ] - }, - { - "cell_type": "code", - "execution_count": 41, "id": "d2cc3b3a-5daa-49bb-9d6d-2994ebc74273", "metadata": { "tags": [] @@ -794,12 +634,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c3200a77ee174a69be92ace9fb8e5993", + "model_id": "9c99afded50e4b3ea8654240ad965b50", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "NGLWidget(max_frame=4)" + "NGLWidget(max_frame=23)" ] }, "metadata": {}, @@ -807,7 +647,7 @@ } ], "source": [ - "exe.output[0].animate_structures()" + "output.animate_structures()" ] }, { @@ -830,7 +670,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 39, "id": "4acdeafc-90b5-4b3f-9559-c74b9fa221ab", "metadata": { "tags": [] @@ -842,7 +682,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 40, "id": "f8cf3136-9b7c-4f1e-b630-962795527946", "metadata": { "tags": [] @@ -856,7 +696,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 41, "id": "fef21aa4-d9f1-4d4a-8761-af1bc3121e5b", "metadata": { "tags": [] @@ -865,10 +705,10 @@ { "data": { "text/plain": [ - "" + "AseStaticInput(structure=Sentinel(USERINPUT), calculator=)" ] }, - "execution_count": 44, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -879,19 +719,19 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 42, "id": "41a68b17-c7c4-4a5f-8f04-11bee18fe55a", "metadata": { "tags": [] }, "outputs": [], "source": [ - "m.input.set_strain_range(.5, 50)" + "m.input.set_strain_range(.5, 15)" ] }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 43, "id": "fd107556-99b6-4042-9209-9412b4bbff94", "metadata": { "tags": [] @@ -900,19 +740,12 @@ { "data": { "text/plain": [ - "array([0.79370053, 0.8043555 , 0.81473542, 0.82485739, 0.83473686,\n", - " 0.84438786, 0.85382314, 0.86305437, 0.87209225, 0.88094658,\n", - " 0.88962642, 0.89814011, 0.90649538, 0.9146994 , 0.92275884,\n", - " 0.93067991, 0.93846839, 0.94612969, 0.95366889, 0.96109074,\n", - " 0.96839969, 0.97559996, 0.98269548, 0.98968999, 0.996587 ,\n", - " 1.00338986, 1.01010169, 1.0167255 , 1.02326411, 1.0297202 ,\n", - " 1.03609634, 1.04239496, 1.04861836, 1.05476875, 1.06084824,\n", - " 1.06685884, 1.07280247, 1.07868096, 1.08449606, 1.09024946,\n", - " 1.09594278, 1.10157754, 1.10715524, 1.11267731, 1.1181451 ,\n", - " 1.12355993, 1.12892306, 1.13423572, 1.13949907, 1.14471424])" + "array([0.79370053, 0.82982653, 0.86305437, 0.89390354, 0.92275884,\n", + " 0.94991425, 0.97559996, 1. , 1.02326411, 1.04551592,\n", + " 1.06685884, 1.08738037, 1.10715524, 1.12624788, 1.14471424])" ] }, - "execution_count": 46, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -923,30 +756,7 @@ }, { "cell_type": "code", - "execution_count": 47, - "id": "0715614a-7284-4388-ac6b-c97bfedf7184", - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 47, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "m.input.check_ready()" - ] - }, - { - "cell_type": "code", - "execution_count": 48, + "execution_count": 44, "id": "9820e859-f1c2-4b25-b121-feea7843a9c5", "metadata": { "tags": [] @@ -958,30 +768,32 @@ }, { "cell_type": "code", - "execution_count": 49, - "id": "47c6edf6-1ecf-484e-b352-0b2e070e70a3", - "metadata": { - "tags": [] - }, + "execution_count": 45, + "id": "aa6720b1-f59c-48c9-85da-ae0cff8f856a", + "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "ReturnStatus(Code.DONE, None)" + "MurnaghanOutput(base_structure=Atoms(symbols='Fe', pbc=True, cell=[[-0.6, 0.6, 0.6], [0.6, -0.6, 0.6], [0.6, 0.6, -0.6]]), volumes=array([0.432 , 0.49371429, 0.55542857, 0.61714286, 0.67885714,\n", + " 0.74057143, 0.80228571, 0.864 , 0.92571429, 0.98742857,\n", + " 1.04914286, 1.11085714, 1.17257143, 1.23428571, 1.296 ]), energies=array([ 4.78924238, -2.02281605, -5.08315968, -6.30258662, -6.60273036,\n", + " -6.44718724, -6.07592945, -5.61496542, -5.13100331, -4.65872214,\n", + " -4.21510997, -3.8073844 , -3.43743364, -3.10432631, -2.80567942]))" ] }, - "execution_count": 49, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "_" + "output" ] }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 46, "id": "98c712a2-ee74-4c28-bce0-cb4824a930e6", "metadata": { "tags": [] @@ -989,7 +801,7 @@ "outputs": [ { "data": { - "image/png": "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\n", + "image/png": "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", "text/plain": [ "
" ] @@ -1004,17 +816,17 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 47, "id": "14162f5b-1318-4595-8c8c-d6346a21721d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.6788586373205143" + "0.6788605670604869" ] }, - "execution_count": 51, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -1025,17 +837,17 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 48, "id": "0f5ff296-df33-40d2-851b-02d6ded72dd6", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0.6788586373205143" + "0.6788605670604871" ] }, - "execution_count": 52, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1046,17 +858,17 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 49, "id": "92b06330-b1fc-41d0-8bd8-bf1b11bf448c", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Atoms(symbols='Fe', pbc=True, cell=[[-0.5536557129291797, 0.5536557129291797, 0.5536557129291797], [0.5536557129291797, -0.5536557129291797, 0.5536557129291797], [0.5536557129291797, 0.5536557129291797, -0.5536557129291797]])" + "Atoms(symbols='Fe', pbc=True, cell=[[-0.553656237540387, 0.553656237540387, 0.553656237540387], [0.553656237540387, -0.553656237540387, 0.553656237540387], [0.553656237540387, 0.553656237540387, -0.553656237540387]])" ] }, - "execution_count": 53, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1075,7 +887,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 50, "id": "89169376-be36-4ceb-9f4e-6e1f3247bc62", "metadata": {}, "outputs": [], @@ -1085,7 +897,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 51, "id": "2ee9f1d4-5b14-4340-98d4-4bd293af89a4", "metadata": {}, "outputs": [], @@ -1097,17 +909,17 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 52, "id": "3d73a9de-7b4e-476a-b50a-ac6a3957a7ab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "AseStaticInput(structure=Sentinel(USERINPUT), calculator=)" ] }, - "execution_count": 56, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -1118,7 +930,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 53, "id": "0f075d90-e636-49be-b1a6-741a56363f54", "metadata": {}, "outputs": [], @@ -1128,9 +940,10 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 54, "id": "79c89012-5b28-4124-9681-2507e0690b49", "metadata": { + "scrolled": true, "tags": [] }, "outputs": [ @@ -1138,166 +951,295 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 490 ms, sys: 280 ms, total: 770 ms\n", - "Wall time: 3.56 s\n" + "CPU times: user 335 ms, sys: 257 ms, total: 591 ms\n", + "Wall time: 30.6 s\n" ] } ], "source": [ "%%time\n", - "exe = ProcessExecutor(max_processes=8).submit([m])\n", + "exe = process.submit([m])\n", "exe.run()\n", "exe.wait()" ] }, + { + "cell_type": "code", + "execution_count": 55, + "id": "d8244dd3-f388-43c2-94de-0862ae3b0c7a", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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lZXJZrNp3Lhx+s1vfhOlauPLUM/ts88+q8mTJystLU1FRUX6p3/6JzU1NUWp2vjx1ltvaf78+SouLpbFYtFLL710xtesX79eU6ZMkd1u19ixY/Uf//EfkS80Dg313P7xj3/UnDlzlJeXp8zMTE2fPl2vvfZadIqNM6H8ve0Tzu8ygkgIVq1apYULF+r+++/Xtm3bNHPmTM2bN08HDhw47evcbre++c1v6qqrropSpfEnlHP75S9/WX/5y1/05JNP6uOPP9Zzzz2niRMnRrHq+DDUc/v222/rm9/8pm655Rbt2LFDL7zwgjZv3qxbb701ypXHvra2Nk2ePFnLly8f1PHV1dW65pprNHPmTG3btk333XefvvOd7+gPf/hDhCuNP0M9t2+99ZbmzJmj1atXa+vWrZo9e7bmz5+vbdu2RbjS+DPUc9sn7N9lBobskksuMW6//fZ++yZOnGjce++9p33djTfeaPzwhz80HnjgAWPy5MkRrDB+DfXcvvrqq4bL5TKampqiUV5cG+q5/elPf2qMHTu2376f//znRklJScRqHAkkGS+++OJpj1m8eLExceLEfvtuu+0249JLL41gZfFvMOf2VM455xzjwQcfDH9BI8hQzm24v8toERmizs5Obd26VXPnzu23f+7cudq4ceOAr3vqqae0Z88ePfDAA5EuMW6Fcm5ffvllTZ06VY888ohGjx6tCRMm6Hvf+568Xm80So4boZzbGTNm6ODBg1q9erUMw9Dhw4f1+9//Xp/97GejUfKI9u677570Z/GZz3xGW7ZsUVdXl0lVjUx+v18tLS3Kzs42u5QRIRLfZTF90btY1NjYqJ6eHhUUFPTbX1BQoPr6+lO+pqqqSvfee682bNig5GRO+UBCObd79+7V22+/LbvdrhdffFGNjY264447dPToUcaJnCCUcztjxgw9++yzuvHGG9XR0aHu7m59/vOf1y9+8YtolDyi1dfXn/LPoru7W42NjSoqKjKpspHn0UcfVVtbm7785S+bXUrci9R3GS0iIbJYLP0eG4Zx0j5J6unp0U033aQHH3xQEyZMiFZ5cW2w51YK/LZjsVj07LPP6pJLLtE111yjxx57TE8//TStIqcwlHP74Ycf6jvf+Y5+9KMfaevWrVqzZo2qq6t1++23R6PUEe9Ufxan2o/QPffcc1q6dKlWrVql/Px8s8uJa5H8LuPX8yHKzc1VUlLSSb9FNjQ0nPQbjiS1tLRoy5Yt2rZtm+666y5JgS9PwzCUnJys119/XVdeeWVUao91Qz23klRUVKTRo0f3u9z02WefLcMwdPDgQVVWVka05ngRyrldtmyZPvWpT+n73/++JOn8889Xenq6Zs6cqZ/85Cf81j4MhYWFp/yzSE5OVk5OjklVjSyrVq3SLbfcohdeeEGf/vSnzS4n7kXyu4wWkSFKTU3VlClTtHbt2n77165dqxkzZpx0fGZmprZv3673338/uN1+++0666yz9P7772vatGnRKj3mDfXcStKnPvUp1dbWqrW1Nbhv165dslqtKikpiWi98SSUc9ve3i6rtf9/EUlJSZKO//aO0EyfPv2kP4vXX39dU6dOVUpKiklVjRzPPfecbr75Zq1cuZIxTWES0e+yYQ93TUDPP/+8kZKSYjz55JPGhx9+aCxcuNBIT0839u3bZxiGYdx7773GN77xjQFfz6yZgQ313La0tBglJSXGDTfcYOzYscNYv369UVlZadx6661m/Qgxa6jn9qmnnjKSk5ONJ554wtizZ4/x9ttvG1OnTjUuueQSs36EmNXS0mJs27bN2LZtmyHJeOyxx4xt27YZ+/fvNwzj5HO7d+9eIy0tzbjnnnuMDz/80HjyySeNlJQU4/e//71ZP0LMGuq5XblypZGcnGz88pe/NOrq6oJbc3OzWT9CzBrquf2kcH2XEURC9Mtf/tIoKyszUlNTjYsuushYv3598LkFCxYYV1xxxYCvJYic3lDP7c6dO41Pf/rThsPhMEpKSoxFixYZ7e3tUa46Pgz13P785z83zjnnHMPhcBhFRUXG1772NePgwYNRrjr2vfnmm4akk7YFCxYYhnHqc7tu3TrjwgsvNFJTU43y8nJjxYoV0S88Dgz13F5xxRWnPR7HhfL39kTh+i6zGAZtrAAAwByMEQEAAKYhiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqCCAAAMA1BBAAAmIYgAgAATEMQAQAApiGIAAAA0xBEAACAaQgiAADANP8f+Ziut0B0zN0AAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "exe.output[0].plot()" + ] + }, + { + "cell_type": "markdown", + "id": "e21f6582-e7ec-43be-80ec-e9ad53aabc43", + "metadata": {}, + "source": [ + "# Combine Minimize and Murnaghan" + ] + }, + { + "cell_type": "code", + "execution_count": 56, + "id": "149c52b5-a0ce-4e6b-ba55-d94d33aa2f8a", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "m = MurnaghanTask(capture_exceptions=False)" + ] + }, + { + "cell_type": "code", + "execution_count": 57, + "id": "5a965b5b-40e6-4689-aab0-06b3e658cf65", + "metadata": {}, + "outputs": [], + "source": [ + "mint = AseMinimizeTask(capture_exceptions=False)\n", + "mint.input.calculator = MorsePotential()\n", + "mint.input.max_steps = 100\n", + "mint.input.output_steps = 10\n", + "mint.input.ionic_force_tolerance = 1e-6\n", + "mint.input.lbfgs()" + ] + }, + { + "cell_type": "code", + "execution_count": 58, + "id": "2f3d4e7c-fda3-4acc-89b6-74fa561681da", + "metadata": {}, + "outputs": [], + "source": [ + "ser = mint.then(lambda output: output.static_output())" + ] + }, { "cell_type": "code", "execution_count": 59, - "id": "004502ce-2022-476a-b634-4237a6009f43", + "id": "918c79ee-401c-43a3-9dfc-8c7d51ffac85", + "metadata": {}, + "outputs": [], + "source": [ + "# ser.execute()" + ] + }, + { + "cell_type": "code", + "execution_count": 60, + "id": "aca24005-ea49-4389-bc26-f292fd0a75a2", "metadata": { "tags": [] }, "outputs": [], "source": [ - "from pyiron_contrib.tinybase.executor import DaskExecutor" + "m.input.task = ser\n", + "m.input.structure = bulk(\"Fe\", a=1.2)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "4c55e74b-5e7a-4c46-9eb1-1acf5dff2322", + "execution_count": 61, + "id": "2c835700-7ece-4818-9b03-c60bf8fb0b04", "metadata": { "tags": [] }, + "outputs": [], + "source": [ + "m.input.set_strain_range(.5, 50)" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "0925864e-4dd1-4f4e-ace4-aac09c55e787", + "metadata": { + "scrolled": true, + "tags": [] + }, "outputs": [ { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", - " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n", - "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", - " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" + "CPU times: user 1.64 s, sys: 618 ms, total: 2.25 s\n", + "Wall time: 1min 43s\n" ] } ], "source": [ "%%time\n", - "exe = DaskExecutor.from_localcluster(2).submit([m])\n", + "exe = process.submit([m])\n", "exe.run()\n", - "exe.wait()" + "exe.wait()\n", + "output = exe.output[0]\n", + "ret = exe.status[0]" ] }, { "cell_type": "code", - "execution_count": null, - "id": "7fe57ead-1175-4a29-a398-9e0adf52973a", + "execution_count": 63, + "id": "4bf2df15-31dc-474c-b3df-f7c32b0fdaf2", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "data": { + "text/plain": [ + "array([4.78924238, 4.51769267, 4.25194477, 3.99187529, 3.7373637 ,\n", + " 3.48829227, 3.244546 , 3.00601254, 2.77258214, 2.54414756])" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], "source": [ - "exe.status" + "output.energies[:10]" ] }, { "cell_type": "code", - "execution_count": null, - "id": "0d999302-6f1d-48b6-865e-4af578d35cf7", - "metadata": { - "tags": [] - }, - "outputs": [], + "execution_count": 64, + "id": "eb0a2daf-9dab-4174-bfee-0cd1ef8c474e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGdCAYAAAAvwBgXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6CklEQVR4nO3dd3Rc9bnu8WdGZVSs3rtkucgFNxkbN0y16YGE3sGQ+AIhhJNGODnAObnxOqHcc0gCCQk4JBhwgEAgNDuAe7dl4yoXSVazutW7tO8fksYWbpKtmT3l+1lr1sJ7Zjyv18aeR7/y/iyGYRgCAAAwgdXsAgAAgPciiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqCCAAAMA1BBAAAmIYgAgAATONrdgGn093drdLSUoWEhMhisZhdDgAAGADDMNTQ0KDExERZracf83DpIFJaWqqUlBSzywAAAGehqKhIycnJp32NSweRkJAQST1/kNDQUJOrAQAAA1FfX6+UlBT79/jpuHQQ6ZuOCQ0NJYgAAOBmBrKsgsWqAADANAQRAABgGoIIAAAwDUEEAACYhiACAABMQxABAACmIYgAAADTEEQAAIBpCCIAAMA0BBEAAGAagggAADANQQQAAJjGpQ+9c5Tcsga9t61YkcH+Wjg30+xyAADwWl45InKkrkWvrMrTBzklZpcCAIBX88ogkhgeKEkqrW0xuRIAALybVwaRhLAASVJ9a6ca2zpNrgYAAO/llUEkJMBPoQE9y2OOMCoCAIBpvDKISMdNz9S1mlwJAADeiyDCiAgAAKbx2iDSt06EqRkAAMzjtUGkb0SkpJapGQAAzOLFQaR3RKSOEREAAMzivUEkjDUiAACYzXuDyHG7ZgzDMLkaAAC8k9cGkbjQAFksUntnt6qb2s0uBwAAr+S1QcTf16qYYTZJ0hEWrAIAYAqvDSLS8TtnWCcCAIAZvDyIsHMGAAAzeXcQYecMAACm8uogksB5MwAAmMqrg0hS79QMIyIAAJjDq4NIQu/UDLtmAAAwh1cHkb5dM+UNrero6ja5GgAAvI/TgsiiRYtksVj02GOPOesjzygq2F/+PlYZhlRez6gIAADO5pQgsnnzZr3yyiuaMGGCMz5uwKxWixLs60QIIgAAOJvDg0hjY6PuuOMO/fGPf1RERISjP27Q+rbw0ksEAADnc3gQefjhh3X11VfrsssuO+Nr29raVF9f3+/haH0jInRXBQDA+Xwd+Zu//fbb2rZtmzZv3jyg1y9atEjPPPOMI0s6QVJfm/ejBBEAAJzNYSMiRUVF+sEPfqA33nhDAQEBA3rPE088obq6OvujqKjIUeXZJUdw3gwAAGZx2IjI1q1bVVFRoezsbPu1rq4urVq1Sr/97W/V1tYmHx+ffu+x2Wyy2WyOKumkksKDJEnFjIgAAOB0Dgsil156qXbu3Nnv2n333aesrCz99Kc/PSGEmMU+InK0RYZhyGKxmFwRAADew2FBJCQkROPHj+93LTg4WFFRUSdcN1PfYtWWji7VNLUraphzR2QAAPBmXt1ZVZJsvj6KC+0JH6wTAQDAuRy6a+abVqxY4cyPG7Ck8ECV17ep+GiLJiSHm10OAABew+tHRCQpOaJnwSpbeAEAcC6CiKSk3gWrxUebTa4EAADvQhARvUQAADALQUTHuqvSSwQAAOciiOjEXiIAAMA5CCI61l21oa1T9S2dJlcDAID3IIhICvT3UVSwvySpuJYFqwAAOAtBpNfx0zMAAMA5CCK9jm3hJYgAAOAsBJFe9qZmbOEFAMBpCCK9jm3hZY0IAADOQhDpRVMzAACcjyDSizUiAAA4H0GkV9/UTG1zhxrb6CUCAIAzEER6hQT4KSzQTxJbeAEAcBaCyHH61okU1bBgFQAAZyCIHCc1smcLbxE7ZwAAcAqCyHH6gkghIyIAADgFQeQ4yX0jIjWsEQEAwBkIIsexT80wIgIAgFMQRI6T0rtYtbCmWYZhmFwNAACejyBynKSIQFksUktHl6qb2s0uBwAAj0cQOY7N10cJoQGSWLAKAIAzEES+IZl1IgAAOA1B5BtYsAoAgPMQRL4hJYJeIgAAOAtB5BtSo/ravNNLBAAARyOIfAMjIgAAOA9B5Bv61ogcqWtRR1e3ydUAAODZCCLfEBNik83Xqm5DKq1legYAAEciiHyDxWJRCoffAQDgFASRk0jl8DsAAJyCIHISx585AwAAHIcgchIpNDUDAMApCCInYZ+aOUoQAQDAkQgiJ9E3InK4miACAIAjEUROom9EpK6lQ3XNHSZXAwCA5yKInESwzVcxITZJ0uGaJpOrAQDAcxFETiE9qmdUpIDpGQAAHIYgcgppUcGSpMNVjIgAAOAoBJFTYEQEAADHI4icgn1EpJoREQAAHIUgcgrpfUGEpmYAADgMQeQUUnunZiob2tTU1mlyNQAAeCaCyCmEBfopIshPEo3NAABwFILIabBOBAAAxyKInAY7ZwAAcCyCyGn0jYgU0l0VAACHcGgQWbRokc4//3yFhIQoNjZW119/vXJzcx35kUMqPbp3RKSKEREAABzBoUFk5cqVevjhh7VhwwYtX75cnZ2dmjdvnpqa3GOEgTUiAAA4lq8jf/PPPvus368XL16s2NhYbd26VRdeeKEjP3pI9PUSKa1rVWtHlwL8fEyuCAAAz+LQIPJNdXV1kqTIyMiTPt/W1qa2tjb7r+vr651S16lEBPkpJMBXDa2dKqpp1si4EFPrAQDA0zhtsaphGHr88cc1e/ZsjR8//qSvWbRokcLCwuyPlJQUZ5V3UhaLxT4qws4ZAACGntOCyCOPPKKvv/5ab7311ilf88QTT6iurs7+KCoqclZ5p9TXYZV1IgAADD2nTM18//vf14cffqhVq1YpOTn5lK+z2Wyy2WzOKGnAjvUSIYgAADDUHBpEDMPQ97//fb3//vtasWKFMjIyHPlxDmGfmmELLwAAQ86hQeThhx/Wm2++qX/84x8KCQlRWVmZJCksLEyBgYGO/OghMzymJ4jkVzEiAgDAUHPoGpGXX35ZdXV1uuiii5SQkGB/LF261JEfO6QyoodJkkpqW9Ta0WVyNQAAeBaHT824u8hgf4UH+am2uUMF1U3Kig81uyQAADwGZ80MQEZ0z/RMXiXTMwAADCWCyAD0BRHWiQAAMLQIIgMwnBERAAAcgiAyAMNjehas5lc1mlwJAACehSAyAPY1IkzNAAAwpAgiA9DX1Ky2uUNHm9pNrgYAAM9BEBmAQH8fJYYFSGJUBACAoUQQGaCMmL4Fq6wTAQBgqBBEBmh4dN+CVUZEAAAYKgSRAaKXCAAAQ48gMkAZHH4HAMCQI4gM0PDjRkS6u93/DB0AAFwBQWSAkiOC5OdjUVtnt0rrWswuBwAAj0AQGSAfq0VpUUzPAAAwlAgig9C3YPVQBVt4AQAYCgSRQRgR27OF9yC9RAAAGBIEkUEY0Xv43UFGRAAAGBIEkUGwj4hUsEYEAIChQBAZhOG9vUSqGttU19xhcjUAALg/gsgghAT4KT605/A71okAAHDuCCKD1Dc9w84ZAADOHUFkkNg5AwDA0CGIDFJmLDtnAAAYKgSRQcrsXbBKEAEA4NwRRAapb2qm6GizWju6TK4GAAD3RhAZpJhhNoUG+MowpLxK+okAAHAuCCKDZLFYju2cYcEqAADnhCByFkawYBUAgCFBEDkLbOEFAGBoEETOQmYMTc0AABgKBJGz0DciklfVpK5uw+RqAABwXwSRs5AcESSbr1Xtnd0qrGk2uxwAANwWQeQs+FiP7ZzZX95gcjUAALgvgshZGh0XIknaX0YQAQDgbBFEztKo+N4gwoJVAADOGkHkLI2K652aYUQEAICzRhA5S6N6p2byqhrV0dVtcjUAALgngshZSgoPVLC/jzq6DBVUceYMAABngyByliwWi0b2jorksnMGAICzQhA5B/adM+UsWAUA4GwQRM7BSBasAgBwTggi52C0fQsvQQQAgLNBEDkHfVMzBVVNau3oMrkaAADcD0HkHMSE2BQW6KduQzpUyToRAAAGiyByDiwWi31U5AALVgEAGDSCyDnqW7DKFl4AAAaPIHKO7AtW2TkDAMCgEUTO0SiamgEAcNacEkReeuklZWRkKCAgQNnZ2Vq9erUzPtYpxsSHSpKKj7aovrXD5GoAAHAvDg8iS5cu1WOPPaYnn3xSOTk5mjNnjq688koVFhY6+qOdIizIT4lhAZKkXKZnAAAYFIcHkRdeeEELFizQAw88oDFjxuh//ud/lJKSopdfftnRH+00YxJ6RkX2Hqk3uRIAANyLQ4NIe3u7tm7dqnnz5vW7Pm/ePK1bt+6E17e1tam+vr7fwx1kJfSsEyGIAAAwOA4NIlVVVerq6lJcXFy/63FxcSorKzvh9YsWLVJYWJj9kZKS4sjyhsyxERGmZgAAGAynLFa1WCz9fm0YxgnXJOmJJ55QXV2d/VFUVOSM8s5ZVu+C1dyyBnV1GyZXAwCA+/B15G8eHR0tHx+fE0Y/KioqThglkSSbzSabzebIkhwiIzpYNl+rWjq6VFjTrIzoYLNLAgDALTh0RMTf31/Z2dlavnx5v+vLly/XzJkzHfnRTuVjtdgbm7FOBACAgXP41Mzjjz+uP/3pT3rttde0d+9e/fCHP1RhYaEWLlzo6I92qr5+IvsIIgAADJhDp2Yk6ZZbblF1dbX+8z//U0eOHNH48eP1ySefKC0tzdEf7VR9O2f2sGAVAIABc3gQkaSHHnpIDz30kDM+yjR9O2f2lTEiAgDAQHHWzBCh1TsAAINHEBkitHoHAGDwCCJDKItW7wAADApBZAiN7Q0ie0oJIgAADARBZAiNT+oJIrtK60yuBAAA90AQGULjEsMk9awRae/sNrkaAABcH0FkCCVHBCo0wFcdXYb2l7NgFQCAMyGIDCGLxaLxST2jIqwTAQDgzAgiQ6wviLBOBACAMyOIDLFxib0LVksIIgAAnAlBZIj1LVjde6RBXd2GydUAAODaCCJDLCM6WEH+Pmrp6FJ+VaPZ5QAA4NIIIkPMx2qxNzbbVcKCVQAATocg4gCsEwEAYGAIIg4wjp0zAAAMCEHEAcb3LljdXVovw2DBKgAAp0IQcYCRccPk72NVQ2unCmuazS4HAACXRRBxAD8fq7ISQiRJXxczPQMAwKkQRBxkQnLP9MzXxbXmFgIAgAsjiDjIhORwSdIORkQAADglgoiDTOwNIrtK6uiwCgDAKRBEHGRE7DAF+fuoub1LhyrpsAoAwMkQRBzEx2qxn8S7o6jW3GIAAHBRBBEHmmhfsMo6EQAAToYg4kB9C1bZOQMAwMkRRByob8Hq3iMNau/sNrcYAABcEEHEgVIiAxUR5Kf2rm7tK+MkXgAAvokg4kAWi0Xn9fUTYcEqAAAnIIg4WN+CVRqbAQBwIoKIg01kwSoAAKdEEHGwiSnhkqQDFY1qaO0wtxgAAFwMQcTBYkJsSo4IlGFIO4qYngEA4HgEESeYkhohSdpWeNTkSgAAcC0EESeYkhouScohiAAA0A9BxAkm946I5BTVyjA4iRcAgD4EEScYkxAqm69Vtc0dyqtqMrscAABcBkHECfx9rZrQ209k22GmZwAA6EMQcZLjp2cAAEAPgoiT9C1YZUQEAIBjCCJO0reFd395gxrbOk2uBgAA10AQcZLY0AAlhQeq2+AAPAAA+hBEnGgy/UQAAOiHIOJE2Wk90zNbWCcCAIAkgohTnZ8eKUnaeviourppbAYAAEHEibLiQxTs76OG1k7lljWYXQ4AAKYjiDiRr49VU3qnZzYX1JhcDQAA5iOIONm03ukZgggAAAQRp5t6XBDhADwAgLdzWBApKCjQggULlJGRocDAQGVmZuqpp55Se3u7oz7SLUxODZefj0Xl9W0qqmkxuxwAAEzl66jfeN++feru7tYf/vAHjRgxQrt27dKDDz6opqYmPffcc476WJcX4Oej85LCtK2wVpsKapQaFWR2SQAAmMZhQeSKK67QFVdcYf/18OHDlZubq5dfftmrg4jUs413W2GtthTU6MbsZLPLAQDANE5dI1JXV6fIyMhTPt/W1qb6+vp+D0/U109kEwtWAQBezmlB5NChQ/rNb36jhQsXnvI1ixYtUlhYmP2RkpLirPKcamp6zxbevMomVTW2mVwNAADmGXQQefrpp2WxWE772LJlS7/3lJaW6oorrtBNN92kBx544JS/9xNPPKG6ujr7o6ioaPB/IjcQHuSvUXHDJElbGBUBAHixQa8ReeSRR3Trrbee9jXp6en2/y4tLdXFF1+sGTNm6JVXXjnt+2w2m2w222BLckvTM6K0v7xRG/JqdMX4BLPLAQDAFIMOItHR0YqOjh7Qa0tKSnTxxRcrOztbixcvltVK25I+MzKj9NcNh7X+ULXZpQAAYBqH7ZopLS3VRRddpNTUVD333HOqrKy0PxcfH++oj3UbFwyPkiTlljeourFNUcO8YyQIAIDjOSyILFu2TAcPHtTBgweVnNx/iyodRaXIYH9lxYdoX1mDNuTV6OoJTM8AALyPw+ZK7r33XhmGcdIHevSNiqzPqzK5EgAAzMGiDRPNyOwNIqwTAQB4KYKIiaZnRMpikQ5VNqmivtXscgAAcDqCiInCg/w1Jj5UkrQ+j1ERAID3IYiYrG96ZkMejc0AAN6HIGKyGcP7gggjIgAA70MQMdm04ZGyWqT8qiaV1raYXQ4AAE5FEDFZaICfJqaES5LWHGAbLwDAuxBEXMCcET0t81cdqDzDKwEA8CwEERcwZ1SMJGndoWp1d9PwDQDgPQgiLmBSSriG2XxV09SuPUfqzS4HAACnIYi4AD8fq73dO9MzAABvQhBxEXNG9qwTYcEqAMCbEERcRF8Q2VJwVC3tXSZXAwCAcxBEXERGdLCSwgPV3tWtjfk0NwMAeAeCiIuwWCz2UZHVTM8AALwEQcSFzBnZs4135X4WrAIAHKehtUNf7C3Xf/1zj97aVGhqLb6mfjr6mT0iWj5Wiw5WNKqoplkpkUFmlwQA8AAdXd3KKazVmgOVWnOwSjuK69TV27dqWnqkbpuWalptBBEXEhbkp+zUCG0qqNGK3ArdNSPd7JIAAG7IMAwdrGjU6gNVWnOwShvzqtX0jY0Q6VFBmpEZrbmjok2qsgdBxMVcnBWrTQU1+iq3kiACABiwivpWrT1UpdUHqrT2YJXK69v6PR8V7K+ZI6I1Z0S0Zo6IUnKEa4y6E0RczMVZMfrvz/Zp3aEqtXZ0KcDPx+ySAAAuqKmtU5vya+zBI7e8od/zNl+rpmVEas7IaM0aEa0x8aGyWi0mVXtqBBEXMzouRAlhATpS16r1edW6eHSs2SUBAFyAYRjaXVqvlfsrtXJ/pXIKj6qj69j5ZBaLND4xTLNH9ox6TEmLcIsfZgkiLsZiseii0bF6a1OhVuyrIIgAgBerbW7XqgNVWplbqVUHKlXZ0H+6JTkiUHNGRmv2iBjNzIxSRLC/SZWePYKIC7okqyeIfJVbqacNQxaL6w2lAQCGXle3oZ0ldVqRW6GV+yu1o6hWxx/KHuTvo5m9C0wvHBWjtKhg84odIgQRFzQzM0r+PlYV1jTrUGWTRsQOM7skAICDVDa0afWBSq3IrdTqA5U62tzR7/ms+BDNHRWjuaNilJ0eIZuv60+3DAZBxAUF23w1fXikVh+o0pf7ygkiAOBBuroNbS86qq/2VWrF/grtKqnv93xIgK/mjIzW3FExunBUjBLCAk2q1DkIIi7q0qxYrT5QpX/tqdB3L8w0uxwAwDmob+3Q6v1V+mJvub7KrThh1GN8UqguGhWruaNjNCklXH4+3tP4nCDioi4bG6enP9qjLYdrVN3YpqhhNrNLAgAMQn5Vk77YW64v91VoU36NOo9b7BEa4Ku5o2N1Ue+oR0yI9/4bTxBxUckRQRqXGKrdpfX6Yl+Fbp6aYnZJAIDT6Ojq1paCo/pyX7m+2FehvMqmfs9nxgTr0jFxujQrVtlpEfL1olGP0yGIuLB5Y+O1u7Rey3aXE0QAwAUdbWrXyv2V+tfecq3cX6mG1k77c34+Fk3PiNIlWbG6JCtW6dHuv8PFEQgiLuzysXH6f//arzUHK9XS3qVAf89aKQ0A7qiwulnL9pRp2e5ybTlc0297bWSwvy4eHatLx8RqzshohQT4mVeomyCIuLAxCSFKjghU8dEWrTpQqfnj4s0uCQC8Tl9H02W7y7RsT7n2lfVvpZ4VH6JLx8Tqkqw4TUoJl48LtlF3ZQQRF2axWHT52DgtXlug5XvKCSIA4CSdXd3aVFCjZbvLtXxPuUpqW+zP+Vgtmp4Rqfnj4nXpmFiXOTzOXRFEXNy8sfFavLZAX+wtV2dXN4ubAMBBWtq7tHJ/pZbtKdOX+ypUe9wW20A/H80dFaN54+J0SVaswoPcr5W6qyKIuLjz0yMUHuSno80d2lRQo5mZ0WaXBAAeo6apXV/sLdeyPeVafaBSrR3d9ucigvx02Zg4zRsXrzkjo93iADl3RBBxcb4+Vs0bG6e/bSnWJzuPEEQA4BxVNrTps91l+nTnEW3Iq+632DQ5IlDzx8Vr3tg4ttg6CUHEDVx1XoL+tqVYn+0q0zPXjWchFAAMUnl9qz7bVaZPdh7RpoIaGceFj7EJoZo3Lk7zxsZrTEIIB406GUHEDcwaEa2wQD9VNbZrY341oyIAMACltS36bFeZPt11RFsOH+0XPiamhOuq8fG6cnyCUqNYbGomgogb8POxav44pmcA4EyKjzbrs11l+njnEeUU1vZ7bkpquK46L0FXjI9np4sLIYi4CaZnAODkimqa9fHOI/p05xHtKK6zX7dYpPPTInXlefG6Yny8x59i664IIm6C6RkAOKasrlUf7zyij3aUantRrf261SJNy4jUVeclaP64eMWFBphXJAaEIOImmJ4B4O1qmtr1SW/4OH7BqdUizciM0lXnJWje2HivPsnWHRFE3Ejf9MynO8v09LXj2FYGwOPVt3Zo2e5yfbSjVGsOVqnruL22U9MidN2kRF05PoHw4cYIIm5k1ohoRQb7q7qpXWsOVumi0bFmlwQAQ665vVNf7K3QRztKtSK3Uu1dx5qMnZcUpmsnJujqCYlKCmfNhycgiLgRPx+rrp2QoNfXH9YHOSUEEQAeo72zWyv3V+qjHaX6195yNbd32Z8bETtM101M1LUTE5URHWxilXAEgoib+dbkJL2+/rA+312uprZOBdu4hQDck2EY2nr4qN7PKdHHO4/0O9slNTJI105M0LUTEzU6jiZjnoxvMTczOSVcaVFBOlzdrOV7ynX95CSzSwKAQTlU2ah/5JTo/e0lKqo5dqptbIhN1/aOfExMDiN8eAmCiJuxWCz61qQkvfjFAX2wvYQgAsAtVDW26aMdpfogp6Rfr49gfx9dMT5BN0xO0ozMKHokeSGCiBu6flKiXvzigFYfqFJVY5uih7FaHIDraWnv0rI9Zfogp0SrDhzb8eJjtejCkdG6fnKS5o2NV6A/p9p6M6cEkba2Nk2fPl07duxQTk6OJk2a5IyP9VjDY4ZpYnKYdhTX6aMdpbpvVobZJQGAJKmr29C6Q1V6P6dEn+8qU9Nxi04nJofphslJumZiIj9Awc4pQeQnP/mJEhMTtWPHDmd8nFe4fnKSdhTX6b1txQQRAKY7WNGo97YV6+/bilVe32a/nhIZqBsmJelbk5OUGTPMxArhqhweRD799FMtW7ZM7733nj799FNHf5zXuH5SkhZ9sk+7Suq1u7RO4xLDzC4JgJepb+3QP3cc0Ttbi/odMBcW6KdrJiTo21OSNCU1gkWnOC2HBpHy8nI9+OCD+uCDDxQUdOaTDtva2tTWdixJ19fXO7I8txYR7K/Lx8bp451H9M6WYo27jiACwPH6pl7e2VKsz3eXqa2zp9mYj9Wii0bF6MbsZF0yJlY2X9Z9YGAcFkQMw9C9996rhQsXaurUqSooKDjjexYtWqRnnnnGUSV5nJumJuvjnUf0fk6JfnZllgL8+IsPwDHyKvumXkp0pK7Vfn1k7DDdNDVZ109KUiwHzOEsDDqIPP3002cMC5s3b9a6detUX1+vJ554YsC/9xNPPKHHH3/c/uv6+nqlpKQMtkSvMWdkjBLCAnSkrlX/2luuayYkml0SAA/S0Nqhj78+one3FmvL4aP262GBfvrWpETdmJ2s85Lo94FzYzEMwzjzy46pqqpSVVXVaV+Tnp6uW2+9VR999FG//0G7urrk4+OjO+64Q6+//voZP6u+vl5hYWGqq6tTaGjoYMr0Gs8vy9VvvjyoC0fF6C/3TzO7HABurrvb0Pq8ar2zpUif7S5Ta0fP1IvVIs0dFaMbs1N06ZhYRmBxWoP5/h50EBmowsLCfms8SktLNX/+fL377ruaPn26kpOTz/h7EETO7HB1k+Y+u0IWi7Tmp5dwCBSAs1JW16p3txZp6Zaift1OR8QO043ZybphcpLimHrBAA3m+9tha0RSU1P7/XrYsJ5tW5mZmQMKIRiYtKhgXTA8UhvyarR0U6Eenzfa7JIAuInOrm59lVuppZsL9eW+CvX2G1NIgK+um5iom6am0GodDkdnVQ9w5wVp2pBXo7c2F+n7l46Un4/V7JIAuLDC6mYt3VKod7YUq6Lh2E7FaemRuuX8FF11XgLdTuE0Tgsi6enpctAskNebNzZe0cNsqmxo07Ld5bp6QoLZJQFwMW2dXfp8d7mWbi7U2oPV9utRwf76Tnaybp6aohGxNByD8zEi4gH8fa26bVqKfvPlQb2x4TBBBIDd/vIGvb2pSH/PKVZtc4ckyWLp2XV36/kpumxMnPx9GUWFeQgiHuK2aan63VcHtT6vWgcrGjQiNsTskgCYpLm9U//8+oje3lSobcd1PE0IC9BNU1N0U3ayUiLP3GQScAaCiIdIDA/UpWPitHxPud7YUKinrxtndkkAnGx/eYOWbDisv28rUUNbpyTJ12rRpWNidev5qbpwVIx8rCw8hWshiHiQuy5I0/I95XpvW7F+PH+0gm3cXsDTtXV26bNdZVqyoVCbCmrs19OignTr+an6TnaSYkPYdgvXxTeVB5k9IlrDo4OVV9Wkd7cW656Z6WaXBMBBCqubtWTTYb2zpVg1Te2Ses57uWxMrO68IE2zMqNlZfQDboAg4kGsVovum52hX3ywS6+tzdedF6QxDAt4kM6ubn2xr0JLNhZq1f5K+/X40ADdNi1Vt5yfovgwRj/gXggiHuY7U5L03Oe5OlzdrC/2lmveuHizSwJwjsrqWvX25kK9valIZfXHDpy7cFSM7pyeqkuyYuVL/yC4KYKIhwny99Ud01P10opD+tOafIII4Ka6uw2tOVilJRsP6197K9TV2/Y0MthfN09N0e3TUpUaxc4XuD+CiAe6e0a6XlmVp035NdpZXKfzksPMLgnAANU2t+tvW4q0ZGOhDlc3269PS4/UHRek6orx8bL50vUUnoMg4oHiwwJ0zYQEfbC9VH9ak6f/vXWy2SUBOIPdpXX6y7rD+mB7ido6e068DbH56jvZybp9eqpGxdEbCJ6JIOKhHpgzXB9sL9VHO0r1b5ePZggXcEEdXd36bFeZ/rK+QJsLjtqvj0kI1T0z0nTdpEQF+fPPNDwb/4d7qPFJYZo7KkYr91fq96sO6Vc3nGd2SQB6VTS06q2NRVqy8bD90Dlfq0VXjI/XPTPTNTUtghNv4TUIIh7s4YtHaOX+Sr27pVg/uHSk4kLZ1geYxTAMbSs8qtfXHdanu46oo6tn8WlMiE23T0vV7dNT+TsKr0QQ8WDTMiJ1fnqENhcc1Z9W5+nJq8eaXRLgdVo7uvTh9lK9vr5Au0vr7dez0yJ094w0XTk+gUPn4NUIIh7uoYtH6L7Fm7VkY6EeumiEIoL9zS4J8ApFNc16Y+NhLd1cZD/11uZr1bcmJeruGekan8RuNkAiiHi8i0bFaGxCqPYcqdef1uTpx/OzzC4J8FiGYWjtwWr9eV2BvthXLqNn9kVJ4YG6a0aabpmawg8DwDcQRDycxWLRo5eO1MI3tmrx2gLdPytDUcNsZpcFeJTWji79Y3uJXltToNzyBvv1OSOjdfeMdF2SFctxC8ApEES8wPxxcRqfFKpdJfX6w6o8/fyqMWaXBHiEioZWvbH+sN7YWGg/eC7I30c3Zifr7hnpGhE7zOQKAddHEPECFotF/zZvtO5bvFmvryvQA7MzFMvqfOCs7S6t02trCvTRjlK1d/U0H0sKD9Q9M9N0y/mpCgv0M7lCwH0QRLzERaNiNCU1XNsKa/XSikN6+rpxZpcEuJWubkNf7qvQq2vytCGvxn59Smq4Fswervnj4jh4DjgLBBEvYbFY9KN5o3X7nzbqzY2FWjA7QymRdFsFzqSprVPvbCnS4nUF9rNffKwWXXVegu6fla7JqREmVwi4N4KIF5k5IlqzRkRp7cFqPbcslzNogNMoPtqs19cV6O3NRWpo7ZQkhQb46rbpqbpnRroSwwNNrhDwDAQRL/PElWN07W/X6B/bS3X/rAxNTAk3uyTAZfR1P31tTYE+212mru6e/bcZ0cG6f1a6vpOdzNkvwBDjb5SXGZ8UphsmJ+nv20r0fz/Zq6XfvYAzLeD1Orq69emuMr26Jl87imrt12eNiNKC2Rm6aFSsrGy/BRyCIOKFfjRvtD7++og25ddo+Z5yzRsXb3ZJgCnqmjv05qZC/WV9gY7UtUqS/H16up/ePztDYxJCTa4Q8HwEES+UGB6oB+Zk6HdfHdKiT/dp7ugY2Xx9zC4LcJq8ykYtXlugd7cWq6WjS5IUPcxfd16QpjumpykmhKZ/gLMQRLzUwrmZ+tuWYuVXNelPq/P18MUjzC4JcCjDMLTuULVeXZOvL/dV2K9nxYdowewMXTsxUQF+BHLA2QgiXiokwE9PXjVGjy3drt98eUDXT05SErsA4IH6Tr99bW2+9pX1tF+3WKRLs2J1/6wMzciMYp0UYCKCiBf71qREvbmpUJvya/TLf+7Ry3dmm10SMGQqG9r0xobDWrLxsKoae9qvB/r56KapybpvVoYyooNNrhCARBDxahaLRf/5rXG6+sU1+nRXmVbtr9SFo2LMLgs4J3tK6/Xa2nx9uP1Y+/XEsADdMzNdt56fqrAg2q8DroQg4uWy4kN178x0vbomX09+sFOfP3YhfRLgdrrt7dfztT6v2n59cmq4FszO0Pxx8fKj/TrgkvjGgX54+Sh9tqtMRTUten7Zfv3imrFmlwQMSFNbp97dWqzFa/NVcFz79SvHx+v+2RmaQvt1wOURRKBhNl/93xvG697Fm/Xa2nxdPSGBf8Dh0kpqW/SXdQV6a1Oh6nvbr4cE+Or2aam6e2Y6C68BN0IQgSTpotGx+vaUno6rP333a/3z0dn0FoHL2VZ4VK+uyddnu/q3X79vVrq+MyVZwTb+SQPcDX9rYfeLq8dqZW6lDlQ06oXl+/XElWPMLglQ53Ht17cf1359ZmaU7p+VoUuyaL8OuDOCCOwigv31q2+fp+/9dateWZWni0bFakZmlNllwUvVNXfo7c2Fen1dgUqPa79+3aRE3T8rQ2MTab8OeAKCCPqZPy5et56forc3F+nf/rZdnz52ocIC2e4I58mvatLitfl6d2uxmtt72q9HBfe0X7/zAtqvA56GIIIT/OKasVqfV63D1c36xQe79L+3TqLzJByqr/36a2vy9WVuhYye5R/Kig/R/bMzdB3t1wGPRRDBCYJtvvp/t0zSTb9frw93lGpGZpRum5ZqdlnwQK0dXfrH9hK9tqZAueUN9uuXZMVqwewMzaT9OuDxCCI4qSmpEfrRvNH678/26akPd+u8pDCNTwozuyx4iIr6Vv11w2Et2Viomqae9utB/j66KTtZ98xM1/CYYSZXCMBZCCI4pe9dOFxbCmr0xb4KPbRkmz76/mzWi+Cc7Cyu02tr8/XPr0vV0dUz/5IUHqh7Z6br5vNT+P8L8EIEEZyS1WrR8zdP1NUvrlFhTbMeX7pdr9w9VT5slcQgdHZ1a/mecr22Nl+bC47ar5+fHqH7Z2Xo8rFx8qX9OuC1CCI4rfAgf7185xTd+Pv1+mJfhX79+T76i2BA6lo69LfNRfrzugKV1LZIknytFl07MVH3zUrXhORwcwsE4BIIIjijCcnhevbGCfrB29v1h5V5Ghkbohuzk80uCy4qv6pJf16br3eO234bGeyvO6an6s4L0hQXGmByhQBcCUEEA/KtSUk6UN6o3351UD//+06lRgZpWkak2WXBRXR3G1p9sEqvryvQV8dtvx0dF6L7Z6frW5OS2H4L4KQIIhiwxy8fpYMVjfpsd5keeH2z/rZwhrLi6W7pzepbO/TulmL9dcNh5Vc12a9fmhWr+9l+C2AALIbR97OL66mvr1dYWJjq6uoUGsoXnitoae/Sna9u1NbDRxUXatN7/2emkiOCzC4LTpZb1qC/rC/Q+zkl9umXEJuvbpyarLsuSGP7LeDlBvP9TRDBoNU2t+um36/XgYpGDY8J1tLvzqDtthfo2/3y+voCbcirsV8fFTdMd89I1w2Tkzj9FoCkwX1/O3zP3Mcff6zp06crMDBQ0dHR+va3v+3oj4SDhQf56y8LpikxLEB5lU26/Y8bVNXYZnZZcJCqxjb99ssDmvPrr/R/lmzThrwa+VgtunJ8vN568AJ9/tiFuvOCNEIIgLPi0H853nvvPT344IP61a9+pUsuuUSGYWjnzp2O/Eg4SUJYoN588ALd8krPyMgdf9yoNx+crqhhjIx4AsMwtK2wVm9sOKyPvz6i9q5uST2Hz902LVW3T09VYnigyVUC8AQOm5rp7OxUenq6nnnmGS1YsOCsfg+mZlxfflWTbvnDelU0tGlk7DD9dcF0xYexPdNd1bd26IOcEr25sVD7yo6d/TIpJVz3zEzTVeclyObL7hcApzeY72+HjYhs27ZNJSUlslqtmjx5ssrKyjRp0iQ999xzGjdu3Enf09bWpra2Y0P89fX1jioPQyQjOlhvf/cC3fbHDTpQ0ajvvLxOf10wjcWKbsQwDG0vqtWbGwv10delau3oGf2w+Vp1zYRE3T0jTRNTws0tEoDHctiIyNtvv63bbrtNqampeuGFF5Senq7nn39ey5Yt0/79+xUZeWIPiqefflrPPPPMCdcZEXF9RTXNuvu1TcqvalJUsL9eu/d8vrxcXENrhz7YXqo3NxZq75FjoX9U3DDdPi1VN0xOVlgQZ78AGDyH7po5VVg43ubNm7V//37dcccd+sMf/qDvfve7knpGPJKTk/XLX/5S3/ve905438lGRFJSUggibqKqsU33vLZJu0vrZfO16vmbJ+qaCYlml4Xj9I1+LN1cpA93lNq33vr7WnXNeQm6fXqqstMi6P0B4Jw4dGrmkUce0a233nra16Snp6uhoWd+eezYsfbrNptNw4cPV2Fh4UnfZ7PZZLOx2NFdRQ+z6e3vXqBH38rRV7mVeuTNHB2saNSjl4yUlYPyTFVR36r3c0r0ztZiHaxotF/PjAnW7dPT9J0pSQoP8jexQgDeatBBJDo6WtHR0Wd8XXZ2tmw2m3JzczV79mxJUkdHhwoKCpSWljb4SuEWQgL89Kd7ztevPtmrV9fk63/+dUDbi2r1/E0T2VHjZO2d3fpib7ne2Vqslfsr1dXdM/gZ4GfVFePiddu0VE3LiGT0A4CpHLZYNTQ0VAsXLtRTTz2llJQUpaWl6dlnn5Uk3XTTTY76WLgAH6tFv7hmrEbHh+gXH+zSitxKXfXiar1462RNHx5ldnkeb1dJnd7dWqx/bC/R0eYO+/UpqeG6aWqKrp6QoNAA1n4AcA0O7SPy7LPPytfXV3fddZdaWlo0ffp0ffnll4qIiHDkx8JF3Dw1RROSw/Twkm06VNmk2/64QY9cMlKPXDxC/r4O76XnVYpqmvXhjlJ9uL1UueXHtt3Ghdr07SnJujE7WZnsZALggmjxDodrbu/Uf/xjt97dWiypZ1fGf39ngianEkjPRWVDmz7+ulT/2FGqnMJa+3V/H6suHxenm7KTNWdkjHxYnwPAyThrBi7pox2levrD3apuapfFIt07M13/Nm+0htEafMDqWjr0+e4yfbSjVGsPVql32YesFmlGZpS+NTFJ88fHKyyQqRcA5iGIwGUdbWrXf328R3/fViJJih7mr8cuG6Vbz0+Rrw/TNSdTUd+qZXvK9fnuMq0/VK3O7mN/ZSelhOu6iYm6ZkKCYkPpaAvANRBE4PJW7q/U0x/uVn5Vk6SebaQ/vSJLl4+NYxeHpMPVTfp8d5k+312ubYVHdfzf0lFxw3TdxERdOzFRaVHB5hUJAKdAEIFb6Ojq1psbC/W/XxxQTVO7JCkrPkQL52bqmgkJXjVC0t7ZrS0FNVq5v1Irciv7LTiVekY+5o+L1/xxcbTPB+DyCCJwK/WtHfr9ikN6fV2Bmno7fSZHBOremem6YXKSx/YfKapptgePdYeq7F1OpZ4t0DOGR2n+uDhdPjaegwQBuBWCCNxSXXOH/rqhQIvXFqi6d4TEz8eieePidcvUFM3MjHLbURLDMFRY06yNeTXakF+tjXk1Kqlt6fea6GE2zR0Vo4tGx2jOyGg6nQJwWwQRuLWW9i79PadYb28q0s6SOvv1iCA/XT42TleMj9fMzGgF+LnucfStHV3ae6ReO0vqtPXwUW3Mq1FZfWu/1/hYLZqSGq6LRsdq7qgYjU0IpRU+AI9AEIHH2FVSp6Wbi/TPr0v7dQm1+VqVnRahGcOjNCMzSuMSwxTob04wqW1u18GKRu0vb9Su0jp9XVyr3LIGdXT1/6vl52PRhORwTc+I1PThUcpOi2DrMgCPRBCBx+ns6tamghp9vqtMy/aU60hd/9EFq0XKjBmmcYmhykoIVXpUkFIjg5UWFaTgc/yy7+42VNXUppKjLSqtbVVpbYsKa5p1sKJRByoaVdXYdtL3RQb7a0JymD18TEmNMC0sAYAzEUTg0QzD0KHKJq3Pq9b6Q1XalF+jqsb2U74+xOaryGH+igz2V0SQvwL8rLL5+sjma5W/r1WG0bODp72zW+1d3Wrt6FZtc7uONrertrlDtS0d9gPjTiUpPFCZscM0Jj5EE5LDNSE5TMkRgWxFBuCVCCLwKoZhqKKhTbtL67SrpF4HKxp1uKZZhdVN/aZzzoXVIsWFBigpPFCJ4YFKighUZswwjYwdpszYYUyxAMBxBvP9zb+ecHsWi0VxoQGKCw3QJVlx/Z6rb+1QVUObapraVdXYrrqWdrV19ox+tHV2q62jS7JYZPO1ys/HIj+fntGS8CA/hQf52UdRIoP95eemO3YAwJURRODRQgP8FBrgp+ExZlcCADgZfsQDAACmIYgAAADTEEQAAIBpCCIAAMA0BBEAAGAagggAADANQQQAAJiGIAIAAExDEAEAAKYhiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqXPn3XMAxJUn19vcmVAACAger73u77Hj8dlw4iDQ0NkqSUlBSTKwEAAIPV0NCgsLCw077GYgwkrpiku7tbpaWlCgkJkcVisV+vr69XSkqKioqKFBoaamKFOBnuj+vjHrk27o/r4x6dnmEYamhoUGJioqzW068CcekREavVquTk5FM+Hxoayv8ALoz74/q4R66N++P6uEendqaRkD4sVgUAAKYhiAAAANO4ZRCx2Wx66qmnZLPZzC4FJ8H9cX3cI9fG/XF93KOh49KLVQEAgGdzyxERAADgGQgiAADANAQRAABgGoIIAAAwjcsGkZdeekkZGRkKCAhQdna2Vq9ePaD3rV27Vr6+vpo0aZJjC/Ryg70/bW1tevLJJ5WWliabzabMzEy99tprTqrWOw32Hi1ZskQTJ05UUFCQEhISdN9996m6utpJ1XqXVatW6dprr1ViYqIsFos++OCDM75n5cqVys7OVkBAgIYPH67f//73ji/USw32/vz973/X5ZdfrpiYGIWGhmrGjBn6/PPPnVOsB3DJILJ06VI99thjevLJJ5WTk6M5c+boyiuvVGFh4WnfV1dXp7vvvluXXnqpkyr1Tmdzf26++WZ98cUXevXVV5Wbm6u33npLWVlZTqzauwz2Hq1Zs0Z33323FixYoN27d+udd97R5s2b9cADDzi5cu/Q1NSkiRMn6re//e2AXp+fn6+rrrpKc+bMUU5Ojn7+85/r0Ucf1XvvvefgSr3TYO/PqlWrdPnll+uTTz7R1q1bdfHFF+vaa69VTk6Ogyv1EIYLmjZtmrFw4cJ+17Kysoyf/exnp33fLbfcYvz7v/+78dRTTxkTJ050YIXebbD359NPPzXCwsKM6upqZ5QHY/D36NlnnzWGDx/e79qLL75oJCcnO6xG9JBkvP/++6d9zU9+8hMjKyur37Xvfe97xgUXXODAymAYA7s/JzN27FjjmWeeGfqCPJDLjYi0t7dr69atmjdvXr/r8+bN07p16075vsWLF+vQoUN66qmnHF2iVzub+/Phhx9q6tSp+vWvf62kpCSNGjVKP/rRj9TS0uKMkr3O2dyjmTNnqri4WJ988okMw1B5ebneffddXX311c4oGWewfv36E+7n/PnztWXLFnV0dJhUFU6lu7tbDQ0NioyMNLsUt+Byh95VVVWpq6tLcXFx/a7HxcWprKzspO85cOCAfvazn2n16tXy9XW5P5JHOZv7k5eXpzVr1iggIEDvv/++qqqq9NBDD6mmpoZ1Ig5wNvdo5syZWrJkiW655Ra1traqs7NT1113nX7zm984o2ScQVlZ2UnvZ2dnp6qqqpSQkGBSZTiZ559/Xk1NTbr55pvNLsUtuNyISB+LxdLv14ZhnHBNkrq6unT77bfrmWee0ahRo5xVntcb6P2Ren46sFgsWrJkiaZNm6arrrpKL7zwgv785z8zKuJAg7lHe/bs0aOPPqr/+I//0NatW/XZZ58pPz9fCxcudEapGICT3c+TXYe53nrrLT399NNaunSpYmNjzS7HLbjc8EF0dLR8fHxO+MmtoqLihJ8IJKmhoUFbtmxRTk6OHnnkEUk9X3yGYcjX11fLli3TJZdc4pTavcFg748kJSQkKCkpqd+R0GPGjJFhGCouLtbIkSMdWrO3OZt7tGjRIs2aNUs//vGPJUkTJkxQcHCw5syZo1/+8pf8xG2y+Pj4k95PX19fRUVFmVQVvmnp0qVasGCB3nnnHV122WVml+M2XG5ExN/fX9nZ2Vq+fHm/68uXL9fMmTNPeH1oaKh27typ7du32x8LFy7U6NGjtX37dk2fPt1ZpXuFwd4fSZo1a5ZKS0vV2Nhov7Z//35ZrVYlJyc7tF5vdDb3qLm5WVZr/38OfHx8JB37yRvmmTFjxgn3c9myZZo6dar8/PxMqgrHe+utt3TvvffqzTffZG3VYJm3TvbU3n77bcPPz8949dVXjT179hiPPfaYERwcbBQUFBiGYRg/+9nPjLvuuuuU72fXjGMN9v40NDQYycnJxo033mjs3r3bWLlypTFy5EjjgQceMOuP4PEGe48WL15s+Pr6Gi+99JJx6NAhY82aNcbUqVONadOmmfVH8GgNDQ1GTk6OkZOTY0gyXnjhBSMnJ8c4fPiwYRgn3p+8vDwjKCjI+OEPf2js2bPHePXVVw0/Pz/j3XffNeuP4NEGe3/efPNNw9fX1/jd735nHDlyxP6ora0164/gVlwyiBiGYfzud78z0tLSDH9/f2PKlCnGypUr7c/dc889xty5c0/5XoKI4w32/uzdu9e47LLLjMDAQCM5Odl4/PHHjebmZidX7V0Ge49efPFFY+zYsUZgYKCRkJBg3HHHHUZxcbGTq/YOX331lSHphMc999xjGMbJ78+KFSuMyZMnG/7+/kZ6errx8ssvO79wLzHY+zN37tzTvh6nZzEMxl0BAIA5XG6NCAAA8B4EEQAAYBqCCAAAMA1BBAAAmIYgAgAATEMQAQAApiGIAAAA0xBEAACAaQgiAADANAQRAABgGoIIAAAwDUEEAACY5v8DVFNSeP/dujsAAAAASUVORK5CYII=", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], "source": [ - "exe.output[0].plot()" + "output.plot()" ] }, { "cell_type": "markdown", - "id": "e21f6582-e7ec-43be-80ec-e9ad53aabc43", + "id": "04d5b556-70e8-4023-8033-963ca066cb18", "metadata": {}, "source": [ - "# Combine Minimize and Murnaghan" + "# Combine MD and Murnaghan" ] }, { "cell_type": "code", - "execution_count": null, - "id": "149c52b5-a0ce-4e6b-ba55-d94d33aa2f8a", + "execution_count": 65, + "id": "7196bbf5-dcab-41d2-87e4-b3bc292a24e7", "metadata": { "tags": [] }, "outputs": [], "source": [ - "m = MurnaghanTask()" + "m = MurnaghanTask(capture_exceptions=False)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "aca24005-ea49-4389-bc26-f292fd0a75a2", - "metadata": { - "tags": [] - }, + "execution_count": 99, + "id": "e5141a6b-a0e7-4534-a59f-46cac32e7e60", + "metadata": {}, "outputs": [], "source": [ - "m.input.task = AseMinimizeTask()\n", - "m.input.task.input.calculator = MorsePotential()\n", - "m.input.task.input.max_steps = 100\n", - "m.input.task.input.output_steps = 10\n", - "m.input.task.input.ionic_force_tolerance = 1e-6\n", - "m.input.task.input.lbfgs()\n", - "\n", - "m.input.structure = bulk(\"Fe\", a=1.2)" + "md = AseMDTask(capture_exceptions=False)\n", + "md.input.calculator = MorsePotential()\n", + "md.input.steps = 500\n", + "md.input.output_steps = 100\n", + "md.input.temperature = 300\n", + "md.input.timestep = 3" ] }, { "cell_type": "code", - "execution_count": null, - "id": "4ae990bd-af18-4dae-8500-779c9509f3f6", + "execution_count": 102, + "id": "d21ee69e-056b-400d-932f-8f89917405dd", + "metadata": {}, + "outputs": [], + "source": [ + "m.input.task = md.then(lambda output: output.static_output(how=output.Mean(0.5, 1.0)))" + ] + }, + { + "cell_type": "code", + "execution_count": 103, + "id": "132a228b-2703-4e23-a2a4-987ba5411872", "metadata": { "tags": [] }, "outputs": [], "source": [ - "\n", - "m.input.set_strain_range(.5, 500)" + "m.input.structure = bulk(\"Fe\", cubic=True, a=1.2)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "0925864e-4dd1-4f4e-ace4-aac09c55e787", + "execution_count": 108, + "id": "af1e3dba-a377-4403-8b61-4a5404ea1715", "metadata": { - "scrolled": true, "tags": [] }, "outputs": [], "source": [ - "%%time\n", - "exe = ProcessExecutor(max_processes=4).submit([m])\n", - "exe.run()\n", - "exe.wait()\n", - "output = exe.output[0]\n", - "ret = exe.status[0]" + "m.input.set_strain_range(.5, 50)" ] }, { "cell_type": "code", - "execution_count": null, - "id": "71bbb913-7d7a-4bb6-b775-3fbc8e7e1f35", + "execution_count": 109, + "id": "05710eb5-3140-4cc7-a2d6-0e99f57b9cc3", "metadata": { + "scrolled": true, "tags": [] }, - "outputs": [], + "outputs": [ + { + "ename": "KeyboardInterrupt", + "evalue": "", + "output_type": "error", + "traceback": [ + "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", + "File \u001b[0;32m:3\u001b[0m\n", + "File \u001b[0;32m~/science/phd/dev/contrib/pyiron_contrib/tinybase/executor.py:141\u001b[0m, in \u001b[0;36mExecutionContext.wait\u001b[0;34m(self, until, timeout, sleep)\u001b[0m\n\u001b[1;32m 139\u001b[0m start \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mmonotonic()\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m until \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_run_machine\u001b[38;5;241m.\u001b[39mstate \u001b[38;5;129;01mand\u001b[39;00m time\u001b[38;5;241m.\u001b[39mmonotonic() \u001b[38;5;241m-\u001b[39m start \u001b[38;5;241m<\u001b[39m timeout:\n\u001b[0;32m--> 141\u001b[0m \u001b[43mtime\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msleep\u001b[49m\u001b[43m(\u001b[49m\u001b[43msleep\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], "source": [ - "ret" + "%%time\n", + "exe = process.submit([m])\n", + "exe.run()\n", + "exe.wait()\n", + "output = exe.output[0]\n", + "ret = exe.status[0]" ] }, { "cell_type": "code", "execution_count": null, - "id": "4bf2df15-31dc-474c-b3df-f7c32b0fdaf2", + "id": "a7602323-bb99-4245-8ce7-a52e670daafd", "metadata": { "tags": [] }, @@ -1309,7 +1251,7 @@ { "cell_type": "code", "execution_count": null, - "id": "eb0a2daf-9dab-4174-bfee-0cd1ef8c474e", + "id": "a3940d36-f4c1-460e-9544-079e6a4f71c9", "metadata": {}, "outputs": [], "source": [ @@ -1333,1951 +1275,11 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.8" + "version": "3.11.0" }, "widgets": { "application/vnd.jupyter.widget-state+json": { - "state": { - "00a17ba0b124451cbde0fad3b84353ee": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_06890714f26b4a38bc114f4555c24bfa", - "style": "IPY_MODEL_910eb9e2748644ae844251d1462540df" - } - }, - "024eb52716ed4318b0626147bf790cf1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "0596ea65e79842aa8da3e12a4dd4c324": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "06890714f26b4a38bc114f4555c24bfa": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "0a5483f8e9f14cb0a2c84098493c66e7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_c70e261d6cf44f32bf2b6dae9c2030bc", - "value" - ], - "target": [ - "IPY_MODEL_81ab0afcff0549fe9cdc34038bcb8065", - "value" - ] - } - }, - "0aa308d445ae4fa3a87e2d31352aaf75": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_a13a50d58406485cbfa71d192fdc504d", - "max" - ], - "target": [ - "IPY_MODEL_72151a9d47704d1fb535afa54a44cdda", - "max_frame" - ] - } - }, - "0cb88e7cb2924370b51b3475a2ecedd3": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "28677f6679f04d989db938d88030310a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "2964c4b4b96e47ed977a65d55c4c30f8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_59c8fe8d50dc434d97ad407aa794ae9d", - "max": 4, - "style": "IPY_MODEL_c8b8572514b34b33aff97adc70ec50d6" - } - }, - "2bf88d342df54490a8d562803f726d8b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2d621d97ad4840f08a792eef56349b30": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", - "state": { - "description_width": "" - } - }, - "3006a5ee838c43d2aafb422a89033515": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_2964c4b4b96e47ed977a65d55c4c30f8", - "IPY_MODEL_f42dbefe1afa44ceac086275a099407a" - ], - "layout": "IPY_MODEL_0596ea65e79842aa8da3e12a4dd4c324" - } - }, - "31e5c0c3795a498d87c8a8b1d8327917": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "331e65cb645e4261b0d521035d6f9fa8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "37d7c2ab2a74486fb7304bffbca48859": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3b60682933684f1ea5058a3211578972": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "460d462ed7a64f8085e25f5d5c223ea9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_9df118d922724f7f984c7a2a354672c4", - "width": "900.0" - } - }, - "46480e766c6b4c43bcad9aef7493a9fc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_78a1f9a2fe23401bb112cf028369300d", - "max" - ], - "target": [ - "IPY_MODEL_72151a9d47704d1fb535afa54a44cdda", - "max_frame" - ] - } - }, - "47298cbae5234c2ba97fc00f30f32fbd": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "4d0edbaec6bb442e9d6618b698ced009": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "537d9b3a42ff4c4b9069f347889c6a6c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_c70e261d6cf44f32bf2b6dae9c2030bc", - "max" - ], - "target": [ - "IPY_MODEL_cdde213a7a3445d08efacffc1c7b0581", - "max_frame" - ] - } - }, - "539b9bb00350429dac26a298efa0c127": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_4d0edbaec6bb442e9d6618b698ced009", - "width": "900.0" - } - }, - "580fe06b91ad41eca7674506eb879c54": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "59c8fe8d50dc434d97ad407aa794ae9d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "608e267572af412bab629eb7c94fa567": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", - "state": { - "description_width": "" - } - }, - "62964029f705409193860678497ca49f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_580fe06b91ad41eca7674506eb879c54", - "width": "900.0" - } - }, - "63d6a4ee513142359ee6edc4754f18ab": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "NGLModel", - "state": { - "_camera_orientation": [ - 11.096625056567845, - 0, - 0, - 0, - 0, - 11.096625056567845, - 0, - 0, - 0, - 0, - 11.096625056567845, - 0, - 0, - 0, - -0.375, - 1 - ], - "_camera_str": "orthographic", - "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_8cb24cb6978f4c998d27b645ea5757fd", - "_igui": null, - "_iplayer": "IPY_MODEL_3006a5ee838c43d2aafb422a89033515", - "_ngl_color_dict": {}, - "_ngl_coordinate_resource": {}, - "_ngl_full_stage_parameters": { - "ambientColor": 14540253, - "ambientIntensity": 0.2, - "backgroundColor": "white", - "cameraEyeSep": 0.3, - "cameraFov": 40, - "cameraType": "orthographic", - "clipDist": 10, - "clipFar": 100, - "clipNear": 0, - "fogFar": 100, - "fogNear": 50, - "hoverTimeout": 0, - "impostor": true, - "lightColor": 14540253, - "lightIntensity": 1, - "mousePreset": "default", - "panSpeed": 1, - "quality": "medium", - "rotateSpeed": 2, - "sampleLevel": 0, - "tooltip": true, - "workerDefault": true, - "zoomSpeed": 1.2 - }, - "_ngl_msg_archive": [ - { - "args": [ - { - "binary": false, - "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.000 0.000 0.750 1.00 0.00 FE \nENDMDL\n", - "type": "blob" - } - ], - "kwargs": { - "defaultRepresentation": true, - "ext": "pdb", - "name": "nglview.adaptor.ASETrajectory" - }, - "methodName": "loadFile", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - }, - { - "args": [ - "spacefill" - ], - "component_index": 0, - "kwargs": { - "radius": 0.5, - "radiusType": "vdw", - "scale": 0.5, - "sele": "all" - }, - "methodName": "addRepresentation", - "reconstruc_color_scheme": false, - "target": "compList", - "type": "call_method" - }, - { - "args": [ - "ball+stick", - 0 - ], - "kwargs": {}, - "methodName": "removeRepresentationsByName", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "unitcell" - ], - "component_index": 0, - "kwargs": { - "sele": "all" - }, - "methodName": "addRepresentation", - "reconstruc_color_scheme": false, - "target": "compList", - "type": "call_method" - }, - { - "args": [], - "kwargs": { - "cameraType": "orthographic" - }, - "methodName": "setParameters", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - } - ], - "_ngl_original_stage_parameters": { - "ambientColor": 14540253, - "ambientIntensity": 0.2, - "backgroundColor": "white", - "cameraEyeSep": 0.3, - "cameraFov": 40, - "cameraType": "perspective", - "clipDist": 10, - "clipFar": 100, - "clipNear": 0, - "fogFar": 100, - "fogNear": 50, - "hoverTimeout": 0, - "impostor": true, - "lightColor": 14540253, - "lightIntensity": 1, - "mousePreset": "default", - "panSpeed": 1, - "quality": "medium", - "rotateSpeed": 2, - "sampleLevel": 0, - "tooltip": true, - "workerDefault": true, - "zoomSpeed": 1.2 - }, - "_ngl_repr_dict": { - "0": { - "0": { - "params": { - "assembly": "default", - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorMode": "hcl", - "colorReverse": false, - "colorScale": "", - "colorScheme": "element", - "colorValue": 9474192, - "defaultAssembly": "", - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disableImpostor": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "radiusData": {}, - "radiusScale": 1, - "radiusSize": 0.5, - "radiusType": "size", - "roughness": 0.4, - "sele": "all", - "side": "double", - "sphereDetail": 1, - "useInteriorColor": true, - "visible": true, - "wireframe": false - }, - "type": "spacefill" - }, - "1": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorMode": "hcl", - "colorReverse": false, - "colorScale": "", - "colorScheme": "element", - "colorValue": "orange", - "defaultAssembly": "", - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disableImpostor": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "radialSegments": 10, - "radiusData": {}, - "radiusScale": 1, - "radiusSize": 0.5, - "radiusType": "vdw", - "roughness": 0.4, - "sele": "all", - "side": "double", - "sphereDetail": 1, - "useInteriorColor": true, - "visible": true, - "wireframe": false - }, - "type": "unitcell" - } - } - }, - "_ngl_serialize": false, - "_ngl_version": "2.0.0-dev.36", - "_ngl_view_id": [ - "28B9672B-4897-4070-9AC6-9C4B4F2AAC73" - ], - "_player_dict": {}, - "_scene_position": {}, - "_scene_rotation": {}, - "_synced_model_ids": [], - "_synced_repr_model_ids": [], - "_view_height": "", - "_view_width": "", - "background": "white", - "frame": 0, - "gui_style": null, - "layout": "IPY_MODEL_0cb88e7cb2924370b51b3475a2ecedd3", - "max_frame": 4, - "n_components": 1, - "picked": {} - } - }, - "68940526b8cf4c2997207324c7e7888b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", - "state": { - "description_width": "" - } - }, - "72151a9d47704d1fb535afa54a44cdda": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "NGLModel", - "state": { - "_camera_orientation": [ - 16.91904731270948, - 0, - 0, - 0, - 0, - 16.91904731270948, - 0, - 0, - 0, - 0, - 16.91904731270948, - 0, - -1.5, - -1.5, - -1.5, - 1 - ], - "_camera_str": "orthographic", - "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_7970f82f392f44379408589deaaf3ff5", - "_igui": null, - "_iplayer": "IPY_MODEL_ba5a5d97828140d5bc2678f11310a4b5", - "_ngl_color_dict": {}, - "_ngl_coordinate_resource": {}, - "_ngl_full_stage_parameters": { - "ambientColor": 14540253, - "ambientIntensity": 0.2, - "backgroundColor": "white", - "cameraEyeSep": 0.3, - "cameraFov": 40, - "cameraType": "orthographic", - "clipDist": 10, - "clipFar": 100, - "clipNear": 0, - "fogFar": 100, - "fogNear": 50, - "hoverTimeout": 0, - "impostor": true, - "lightColor": 14540253, - "lightIntensity": 1, - "mousePreset": "default", - "panSpeed": 1, - "quality": "medium", - "rotateSpeed": 2, - "sampleLevel": 0, - "tooltip": true, - "workerDefault": true, - "zoomSpeed": 1.2 - }, - "_ngl_msg_archive": [ - { - "args": [ - { - "binary": false, - "data": "CRYST1 3.600 3.600 3.600 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 5 Fe MOL 1 0.000 0.000 2.400 1.00 0.00 FE \nATOM 6 Fe MOL 1 0.600 0.600 3.000 1.00 0.00 FE \nATOM 7 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 8 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 9 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 10 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 11 Fe MOL 1 0.000 1.200 2.400 1.00 0.00 FE \nATOM 12 Fe MOL 1 0.600 1.800 3.000 1.00 0.00 FE \nATOM 13 Fe MOL 1 0.000 2.400 0.000 1.00 0.00 FE \nATOM 14 Fe MOL 1 0.600 3.000 0.600 1.00 0.00 FE \nATOM 15 Fe MOL 1 0.000 2.400 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 0.600 3.000 1.800 1.00 0.00 FE \nATOM 17 Fe MOL 1 0.000 2.400 2.400 1.00 0.00 FE \nATOM 18 Fe MOL 1 0.600 3.000 3.000 1.00 0.00 FE \nATOM 19 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 20 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 21 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 22 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 23 Fe MOL 1 1.200 0.000 2.400 1.00 0.00 FE \nATOM 24 Fe MOL 1 1.800 0.600 3.000 1.00 0.00 FE \nATOM 25 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 26 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 27 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 28 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nATOM 29 Fe MOL 1 1.200 1.200 2.400 1.00 0.00 FE \nATOM 30 Fe MOL 1 1.800 1.800 3.000 1.00 0.00 FE \nATOM 31 Fe MOL 1 1.200 2.400 0.000 1.00 0.00 FE \nATOM 32 Fe MOL 1 1.800 3.000 0.600 1.00 0.00 FE \nATOM 33 Fe MOL 1 1.200 2.400 1.200 1.00 0.00 FE \nATOM 34 Fe MOL 1 1.800 3.000 1.800 1.00 0.00 FE \nATOM 35 Fe MOL 1 1.200 2.400 2.400 1.00 0.00 FE \nATOM 36 Fe MOL 1 1.800 3.000 3.000 1.00 0.00 FE \nATOM 37 Fe MOL 1 2.400 0.000 0.000 1.00 0.00 FE \nATOM 38 Fe MOL 1 3.000 0.600 0.600 1.00 0.00 FE \nATOM 39 Fe MOL 1 2.400 0.000 1.200 1.00 0.00 FE \nATOM 40 Fe MOL 1 3.000 0.600 1.800 1.00 0.00 FE \nATOM 41 Fe MOL 1 2.400 0.000 2.400 1.00 0.00 FE \nATOM 42 Fe MOL 1 3.000 0.600 3.000 1.00 0.00 FE \nATOM 43 Fe MOL 1 2.400 1.200 0.000 1.00 0.00 FE \nATOM 44 Fe MOL 1 3.000 1.800 0.600 1.00 0.00 FE \nATOM 45 Fe MOL 1 2.400 1.200 1.200 1.00 0.00 FE \nATOM 46 Fe MOL 1 3.000 1.800 1.800 1.00 0.00 FE \nATOM 47 Fe MOL 1 2.400 1.200 2.400 1.00 0.00 FE \nATOM 48 Fe MOL 1 3.000 1.800 3.000 1.00 0.00 FE \nATOM 49 Fe MOL 1 2.400 2.400 0.000 1.00 0.00 FE \nATOM 50 Fe MOL 1 3.000 3.000 0.600 1.00 0.00 FE \nATOM 51 Fe MOL 1 2.400 2.400 1.200 1.00 0.00 FE \nATOM 52 Fe MOL 1 3.000 3.000 1.800 1.00 0.00 FE \nATOM 53 Fe MOL 1 2.400 2.400 2.400 1.00 0.00 FE \nATOM 54 Fe MOL 1 3.000 3.000 3.000 1.00 0.00 FE \nENDMDL\n", - "type": "blob" - } - ], - "kwargs": { - "defaultRepresentation": true, - "ext": "pdb", - "name": "nglview.adaptor.ASETrajectory" - }, - "methodName": "loadFile", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - }, - { - "args": [ - "spacefill" - ], - "component_index": 0, - "kwargs": { - "radius": 0.5, - "radiusType": "vdw", - "scale": 0.5, - "sele": "all" - }, - "methodName": "addRepresentation", - "reconstruc_color_scheme": false, - "target": "compList", - "type": "call_method" - }, - { - "args": [ - "ball+stick", - 0 - ], - "kwargs": {}, - "methodName": "removeRepresentationsByName", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "unitcell" - ], - "component_index": 0, - "kwargs": { - "sele": "all" - }, - "methodName": "addRepresentation", - "reconstruc_color_scheme": false, - "target": "compList", - "type": "call_method" - }, - { - "args": [], - "kwargs": { - "cameraType": "orthographic" - }, - "methodName": "setParameters", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - } - ], - "_ngl_original_stage_parameters": { - "ambientColor": 14540253, - "ambientIntensity": 0.2, - "backgroundColor": "white", - "cameraEyeSep": 0.3, - "cameraFov": 40, - "cameraType": "perspective", - "clipDist": 10, - "clipFar": 100, - "clipNear": 0, - "fogFar": 100, - "fogNear": 50, - "hoverTimeout": 0, - "impostor": true, - "lightColor": 14540253, - "lightIntensity": 1, - "mousePreset": "default", - "panSpeed": 1, - "quality": "medium", - "rotateSpeed": 2, - "sampleLevel": 0, - "tooltip": true, - "workerDefault": true, - "zoomSpeed": 1.2 - }, - "_ngl_repr_dict": { - "0": { - "0": { - "params": { - "assembly": "default", - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorMode": "hcl", - "colorReverse": false, - "colorScale": "", - "colorScheme": "element", - "colorValue": 9474192, - "defaultAssembly": "", - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disableImpostor": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "radiusData": {}, - "radiusScale": 1, - "radiusSize": 0.5, - "radiusType": "size", - "roughness": 0.4, - "sele": "all", - "side": "double", - "sphereDetail": 1, - "useInteriorColor": true, - "visible": true, - "wireframe": false - }, - "type": "spacefill" - }, - "1": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorMode": "hcl", - "colorReverse": false, - "colorScale": "", - "colorScheme": "element", - "colorValue": "orange", - "defaultAssembly": "", - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disableImpostor": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "radialSegments": 10, - "radiusData": {}, - "radiusScale": 1, - "radiusSize": 0.017999999209869933, - "radiusType": "vdw", - "roughness": 0.4, - "sele": "all", - "side": "double", - "sphereDetail": 1, - "useInteriorColor": true, - "visible": true, - "wireframe": false - }, - "type": "unitcell" - } - } - }, - "_ngl_serialize": false, - "_ngl_version": "2.0.0-dev.36", - "_ngl_view_id": [ - "AEE7E543-F286-4AAC-843E-55903D8E906C" - ], - "_player_dict": {}, - "_scene_position": {}, - "_scene_rotation": {}, - "_synced_model_ids": [], - "_synced_repr_model_ids": [], - "_view_height": "", - "_view_width": "", - "background": "white", - "frame": 0, - "gui_style": null, - "layout": "IPY_MODEL_b9ab72d5e1de4c7d99fc1f3fc22216da", - "max_frame": 21, - "n_components": 1, - "picked": {} - } - }, - "7518d4e0d82142ee9dd604b8cff07a07": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_2964c4b4b96e47ed977a65d55c4c30f8", - "max" - ], - "target": [ - "IPY_MODEL_63d6a4ee513142359ee6edc4754f18ab", - "max_frame" - ] - } - }, - "78a1f9a2fe23401bb112cf028369300d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_37d7c2ab2a74486fb7304bffbca48859", - "max": 21, - "style": "IPY_MODEL_68940526b8cf4c2997207324c7e7888b" - } - }, - "7970f82f392f44379408589deaaf3ff5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_47298cbae5234c2ba97fc00f30f32fbd", - "style": "IPY_MODEL_28677f6679f04d989db938d88030310a" - } - }, - "81ab0afcff0549fe9cdc34038bcb8065": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_3b60682933684f1ea5058a3211578972", - "max": 0, - "style": "IPY_MODEL_608e267572af412bab629eb7c94fa567" - } - }, - "8cb24cb6978f4c998d27b645ea5757fd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_95a007abd96a4cf88dc9d1972bfcb885", - "style": "IPY_MODEL_024eb52716ed4318b0626147bf790cf1" - } - }, - "8fcd49b7e0254e05b76f005d4d3ab56f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "910eb9e2748644ae844251d1462540df": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "9161bdfbd4154693b32bb3ead65d3db6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_f42dbefe1afa44ceac086275a099407a", - "max" - ], - "target": [ - "IPY_MODEL_63d6a4ee513142359ee6edc4754f18ab", - "max_frame" - ] - } - }, - "95a007abd96a4cf88dc9d1972bfcb885": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "9df118d922724f7f984c7a2a354672c4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a13a50d58406485cbfa71d192fdc504d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_afd6af21b4a148edb9dd992bd5fa132e", - "max": 21, - "style": "IPY_MODEL_d7bba2a76a9647f7a7788f0c6b8fbab7" - } - }, - "a14ed0d326274c498b91e78604b4fccd": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_81ab0afcff0549fe9cdc34038bcb8065", - "max" - ], - "target": [ - "IPY_MODEL_cdde213a7a3445d08efacffc1c7b0581", - "max_frame" - ] - } - }, - "a776064405af4084b8591f82b2e1fcdf": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_c70e261d6cf44f32bf2b6dae9c2030bc", - "value" - ], - "target": [ - "IPY_MODEL_cdde213a7a3445d08efacffc1c7b0581", - "frame" - ] - } - }, - "afd6af21b4a148edb9dd992bd5fa132e": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b36c0c9105454af78422278b6847d006": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "b9ab72d5e1de4c7d99fc1f3fc22216da": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ba5a5d97828140d5bc2678f11310a4b5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_a13a50d58406485cbfa71d192fdc504d", - "IPY_MODEL_78a1f9a2fe23401bb112cf028369300d" - ], - "layout": "IPY_MODEL_b36c0c9105454af78422278b6847d006" - } - }, - "c70e261d6cf44f32bf2b6dae9c2030bc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_d0d4bd7a685c42ada61108ebc1b2d2cf", - "max": 0, - "style": "IPY_MODEL_e75a2359044347888b56002f945db287" - } - }, - "c8b8572514b34b33aff97adc70ec50d6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "c8cc0fe989a74fe290ab251b3afda8ba": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_a13a50d58406485cbfa71d192fdc504d", - "value" - ], - "target": [ - "IPY_MODEL_78a1f9a2fe23401bb112cf028369300d", - "value" - ] - } - }, - "cdde213a7a3445d08efacffc1c7b0581": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "NGLModel", - "state": { - "_camera_orientation": [ - 14, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 1 - ], - "_camera_str": "orthographic", - "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_00a17ba0b124451cbde0fad3b84353ee", - "_igui": null, - "_iplayer": "IPY_MODEL_e517781696d84f9aad35efa9ad443846", - "_ngl_color_dict": {}, - "_ngl_coordinate_resource": {}, - "_ngl_full_stage_parameters": { - "ambientColor": 14540253, - "ambientIntensity": 0.2, - "backgroundColor": "white", - "cameraEyeSep": 0.3, - "cameraFov": 40, - "cameraType": "orthographic", - "clipDist": 10, - "clipFar": 100, - "clipNear": 0, - "fogFar": 100, - "fogNear": 50, - "hoverTimeout": 0, - "impostor": true, - "lightColor": 14540253, - "lightIntensity": 1, - "mousePreset": "default", - "panSpeed": 1, - "quality": "medium", - "rotateSpeed": 2, - "sampleLevel": 0, - "tooltip": true, - "workerDefault": true, - "zoomSpeed": 1.2 - }, - "_ngl_msg_archive": [ - { - "args": [ - { - "binary": false, - "data": "CRYST1 10.000 10.000 10.000 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 0 Fe Fe 0 0.000 0.000 0.000 1.00 0.00 Fe \nATOM 1 Fe Fe 1 0.000 0.000 0.750 1.00 0.00 Fe \nENDMDL \n", - "type": "blob" - } - ], - "kwargs": { - "defaultRepresentation": true, - "ext": "pdb" - }, - "methodName": "loadFile", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - }, - { - "args": [ - "spacefill" - ], - "component_index": 0, - "kwargs": { - "colorScheme": "element", - "radius": 0.7099019513592786, - "radiusType": "vdw", - "sele": "#Fe" - }, - "methodName": "addRepresentation", - "reconstruc_color_scheme": false, - "target": "compList", - "type": "call_method" - }, - { - "args": [ - "ball+stick", - 0 - ], - "kwargs": {}, - "methodName": "removeRepresentationsByName", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "unitcell" - ], - "component_index": 0, - "kwargs": { - "sele": "all" - }, - "methodName": "addRepresentation", - "reconstruc_color_scheme": false, - "target": "compList", - "type": "call_method" - }, - { - "args": [ - "shape", - [ - [ - "arrow", - [ - -1, - -1, - -1 - ], - [ - 0, - -1, - -1 - ], - [ - 1, - 0, - 0 - ], - 0.1 - ] - ] - ], - "fire_embed": true, - "kwargs": {}, - "methodName": "addShape", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "shape", - [ - [ - "text", - [ - 0, - -1, - -1 - ], - [ - 0, - 0, - 0 - ], - 1, - "x" - ] - ] - ], - "fire_embed": true, - "kwargs": {}, - "methodName": "addShape", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "shape", - [ - [ - "arrow", - [ - -1, - -1, - -1 - ], - [ - -1, - 0, - -1 - ], - [ - 0, - 1, - 0 - ], - 0.1 - ] - ] - ], - "fire_embed": true, - "kwargs": {}, - "methodName": "addShape", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "shape", - [ - [ - "text", - [ - -1, - 0, - -1 - ], - [ - 0, - 0, - 0 - ], - 1, - "y" - ] - ] - ], - "fire_embed": true, - "kwargs": {}, - "methodName": "addShape", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "shape", - [ - [ - "arrow", - [ - -1, - -1, - -1 - ], - [ - -1, - -1, - 0 - ], - [ - 0, - 0, - 1 - ], - 0.1 - ] - ] - ], - "fire_embed": true, - "kwargs": {}, - "methodName": "addShape", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "shape", - [ - [ - "text", - [ - -1, - -1, - 0 - ], - [ - 0, - 0, - 0 - ], - 1, - "z" - ] - ] - ], - "fire_embed": true, - "kwargs": {}, - "methodName": "addShape", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [], - "kwargs": { - "cameraType": "orthographic" - }, - "methodName": "setParameters", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - }, - { - "args": [ - [ - 14, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 14, - 0, - 0, - 0, - 0, - 14 - ] - ], - "kwargs": {}, - "methodName": "orient", - "reconstruc_color_scheme": false, - "target": "viewerControls", - "type": "call_method" - } - ], - "_ngl_original_stage_parameters": { - "ambientColor": 14540253, - "ambientIntensity": 0.2, - "backgroundColor": "white", - "cameraEyeSep": 0.3, - "cameraFov": 40, - "cameraType": "perspective", - "clipDist": 10, - "clipFar": 100, - "clipNear": 0, - "fogFar": 100, - "fogNear": 50, - "hoverTimeout": 0, - "impostor": true, - "lightColor": 14540253, - "lightIntensity": 1, - "mousePreset": "default", - "panSpeed": 1, - "quality": "medium", - "rotateSpeed": 2, - "sampleLevel": 0, - "tooltip": true, - "workerDefault": true, - "zoomSpeed": 1.2 - }, - "_ngl_repr_dict": { - "0": { - "0": { - "params": { - "assembly": "default", - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorMode": "hcl", - "colorReverse": false, - "colorScale": "", - "colorScheme": "element", - "colorValue": 9474192, - "defaultAssembly": "", - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disableImpostor": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "radiusData": {}, - "radiusScale": 1, - "radiusSize": 0.7099019513592786, - "radiusType": "size", - "roughness": 0.4, - "sele": "#Fe", - "side": "double", - "sphereDetail": 1, - "useInteriorColor": true, - "visible": true, - "wireframe": false - }, - "type": "spacefill" - }, - "1": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorMode": "hcl", - "colorReverse": false, - "colorScale": "", - "colorScheme": "element", - "colorValue": "orange", - "defaultAssembly": "", - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disableImpostor": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "radialSegments": 10, - "radiusData": {}, - "radiusScale": 1, - "radiusSize": 0.049999997805194256, - "radiusType": "vdw", - "roughness": 0.4, - "sele": "all", - "side": "double", - "sphereDetail": 1, - "useInteriorColor": true, - "visible": true, - "wireframe": false - }, - "type": "unitcell" - } - }, - "1": { - "0": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorReverse": false, - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "roughness": 0.4, - "side": "double", - "useInteriorColor": false, - "visible": true, - "wireframe": false - }, - "type": "buffer" - } - }, - "2": { - "0": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorReverse": false, - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "roughness": 0.4, - "side": "double", - "useInteriorColor": false, - "visible": true, - "wireframe": false - }, - "type": "buffer" - } - }, - "3": { - "0": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorReverse": false, - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "roughness": 0.4, - "side": "double", - "useInteriorColor": false, - "visible": true, - "wireframe": false - }, - "type": "buffer" - } - }, - "4": { - "0": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorReverse": false, - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "roughness": 0.4, - "side": "double", - "useInteriorColor": false, - "visible": true, - "wireframe": false - }, - "type": "buffer" - } - }, - "5": { - "0": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorReverse": false, - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "roughness": 0.4, - "side": "double", - "useInteriorColor": false, - "visible": true, - "wireframe": false - }, - "type": "buffer" - } - }, - "6": { - "0": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorReverse": false, - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "roughness": 0.4, - "side": "double", - "useInteriorColor": false, - "visible": true, - "wireframe": false - }, - "type": "buffer" - } - } - }, - "_ngl_serialize": false, - "_ngl_version": "2.0.0-dev.36", - "_ngl_view_id": [ - "EEA5383B-89E4-42F3-A148-FC24CADE8089" - ], - "_player_dict": {}, - "_scene_position": {}, - "_scene_rotation": {}, - "_synced_model_ids": [], - "_synced_repr_model_ids": [], - "_view_height": "", - "_view_width": "", - "background": "white", - "frame": 0, - "gui_style": null, - "layout": "IPY_MODEL_2bf88d342df54490a8d562803f726d8b", - "max_frame": 0, - "n_components": 7, - "picked": {} - } - }, - "d0d4bd7a685c42ada61108ebc1b2d2cf": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d3dba68b040c436a87aa1acf4b90a1c9": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "ColormakerRegistryModel", - "state": { - "_msg_ar": [], - "_msg_q": [], - "_ready": true, - "layout": "IPY_MODEL_8fcd49b7e0254e05b76f005d4d3ab56f" - } - }, - "d7bba2a76a9647f7a7788f0c6b8fbab7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "e479162c7f164eb28512cf35cef91c2f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_2964c4b4b96e47ed977a65d55c4c30f8", - "value" - ], - "target": [ - "IPY_MODEL_f42dbefe1afa44ceac086275a099407a", - "value" - ] - } - }, - "e517781696d84f9aad35efa9ad443846": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_c70e261d6cf44f32bf2b6dae9c2030bc", - "IPY_MODEL_81ab0afcff0549fe9cdc34038bcb8065" - ], - "layout": "IPY_MODEL_331e65cb645e4261b0d521035d6f9fa8" - } - }, - "e75a2359044347888b56002f945db287": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f42dbefe1afa44ceac086275a099407a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_31e5c0c3795a498d87c8a8b1d8327917", - "max": 4, - "style": "IPY_MODEL_2d621d97ad4840f08a792eef56349b30" - } - }, - "f9278ff760c54f8fa5ad460b82946227": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_a13a50d58406485cbfa71d192fdc504d", - "value" - ], - "target": [ - "IPY_MODEL_72151a9d47704d1fb535afa54a44cdda", - "frame" - ] - } - }, - "fda30267a096477a882c30d1c3fe783e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_2964c4b4b96e47ed977a65d55c4c30f8", - "value" - ], - "target": [ - "IPY_MODEL_63d6a4ee513142359ee6edc4754f18ab", - "frame" - ] - } - } - }, + "state": {}, "version_major": 2, "version_minor": 0 } diff --git a/notebooks/tinybase/Basic.ipynb b/notebooks/tinybase/Basic.ipynb index bdfddc021..08d2862a9 100644 --- a/notebooks/tinybase/Basic.ipynb +++ b/notebooks/tinybase/Basic.ipynb @@ -18,34 +18,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", + "/home/ponder/science/phd/dev/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" ] }, - { - "data": { - "text/html": [ - "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/html": [
-       "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "6c39844a5e564da6820d36bbba8a2060",
+       "model_id": "10441339d81d4221949e9f6bdc996597",
        "version_major": 2,
        "version_minor": 0
       },
@@ -62,16 +42,47 @@
   {
    "cell_type": "code",
    "execution_count": 2,
-   "id": "95594ff4-2f77-49c2-b4a2-467268ecac00",
+   "id": "ccaaf021-acf3-4a8c-9725-3bff828b22b2",
    "metadata": {},
    "outputs": [],
    "source": [
-    "from pyiron_contrib.tinybase.executor import ProcessExecutor, BackgroundExecutor, Executor"
+    "from pyiron_contrib.tinybase.executor import FuturesSubmitter, Submitter"
    ]
   },
   {
    "cell_type": "code",
    "execution_count": 3,
+   "id": "f1ce6c19-18a7-499c-a8e4-6be80750268d",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from concurrent.futures import ThreadPoolExecutor"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "id": "1c6be354-b84a-4803-97ee-c3a5e65cc9e2",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "from concurrent.futures import ProcessPoolExecutor"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 70,
+   "id": "7ff37ff5-8247-4f2c-a175-6063b37ac0be",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "process = FuturesSubmitter(ProcessPoolExecutor(max_workers=4))\n",
+    "thread = FuturesSubmitter(ThreadPoolExecutor(max_workers=4))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
    "id": "88b1b600-28e0-4ad9-82d6-b2bd993efbda",
    "metadata": {},
    "outputs": [],
@@ -82,7 +93,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 6,
    "id": "e3d8cf33-1f39-4ef9-b92c-2dfd43cf4dd3",
    "metadata": {},
    "outputs": [],
@@ -108,7 +119,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 7,
    "id": "9f2f3102-d15c-470a-b38c-f8084c9535ec",
    "metadata": {},
    "outputs": [],
@@ -126,7 +137,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 8,
    "id": "e125f49c-257b-4a24-bc81-83fe345d1dcf",
    "metadata": {},
    "outputs": [],
@@ -136,32 +147,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
-   "id": "324f3c10-385e-4577-b089-c305f8203ca5",
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "application/json": [],
-      "text/html": [
-       "
DataContainer([])
" - ], - "text/plain": [ - "DataContainer([])" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "f.input.storage" - ] - }, - { - "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "6c1f5af7-f5e9-41d9-a849-bab0ebc7dd9f", "metadata": {}, "outputs": [ @@ -171,7 +157,7 @@ "[]" ] }, - "execution_count": 8, + "execution_count": 9, "metadata": {}, "output_type": "execute_result" } @@ -182,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "e0afb76d-d1b7-4b42-925f-fb117d58025e", "metadata": {}, "outputs": [ @@ -192,7 +178,7 @@ "{}" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -203,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "6a5c3235-9c6b-481f-b316-db7420d1ad43", "metadata": {}, "outputs": [], @@ -213,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "4ade8d6a-6ce2-4f3a-b43d-71e1f87125bf", "metadata": {}, "outputs": [ @@ -223,7 +209,7 @@ "{'n': 10}" ] }, - "execution_count": 11, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -234,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "da69a4cc-409a-4f51-b329-06a69ce8e7f5", "metadata": { "tags": [] @@ -243,11 +229,10 @@ { "data": { "text/plain": [ - "(ReturnStatus(Code.DONE, None),\n", - " )" + "(ReturnStatus(Code.DONE, None), FunctionOutput(result=144))" ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -274,19 +259,19 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "9bf053ed-14a1-4d05-80df-d5e135f2722f", "metadata": { "tags": [] }, "outputs": [], "source": [ - "exe = Executor().submit([f])" + "exe = Submitter().submit([f])" ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "ab2584f3-4c66-4573-b3ab-265af626f5a5", "metadata": { "tags": [] @@ -298,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "9b995df8-09a5-45a0-b03e-ffa2706db25c", "metadata": { "tags": [] @@ -310,7 +295,7 @@ "ReturnStatus(Code.DONE, None)" ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -321,7 +306,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "b7ee90e1-7d99-46eb-bc69-138b986e6ebd", "metadata": { "tags": [] @@ -333,7 +318,7 @@ "144" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -352,7 +337,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "1e1b986e-9e00-41f2-86c2-945ff7818580", "metadata": {}, "outputs": [], @@ -362,7 +347,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "0b612150-f654-4995-8910-e46e766fdce2", "metadata": {}, "outputs": [], @@ -372,19 +357,17 @@ }, { "cell_type": "code", - "execution_count": 19, - "id": "097b7515-4875-4e22-8b7a-07594ce16204", - "metadata": { - "tags": [] - }, + "execution_count": 72, + "id": "307d5526-2fbf-4816-99c5-e88838651c6b", + "metadata": {}, "outputs": [], "source": [ - "exe = BackgroundExecutor(max_threads=1).submit([f])" + "exe = thread.submit([f])" ] }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 73, "id": "b334ac7e-35ae-4160-b6cf-96fa8672975a", "metadata": { "tags": [] @@ -396,7 +379,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 74, "id": "0d2f427a-21e1-449e-a8cc-c2296bff6c10", "metadata": {}, "outputs": [ @@ -406,7 +389,7 @@ "" ] }, - "execution_count": 21, + "execution_count": 74, "metadata": {}, "output_type": "execute_result" } @@ -417,7 +400,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "id": "a9631d5e-d46a-419c-a929-68ddd77487bb", "metadata": {}, "outputs": [], @@ -427,7 +410,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "408ffab0-70a1-4d08-9007-4d9f0513935d", "metadata": {}, "outputs": [ @@ -437,7 +420,7 @@ "927372692193078999176" ] }, - "execution_count": 23, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -456,7 +439,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "ef72a65d-9020-46f6-b9f2-6cc57d7d016b", "metadata": {}, "outputs": [], @@ -466,7 +449,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "18607afd-8c43-4c88-8b40-5f758b1afab8", "metadata": {}, "outputs": [], @@ -476,19 +459,17 @@ }, { "cell_type": "code", - "execution_count": 26, - "id": "418a3d1b-abba-4609-881c-109e1e73fcff", - "metadata": { - "tags": [] - }, + "execution_count": 27, + "id": "fbfddc7e-7cc3-4d67-ae9e-49428d31a0e5", + "metadata": {}, "outputs": [], "source": [ - "exe = ProcessExecutor(max_processes=1).submit([f])" + "exe = process.submit([f])" ] }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "id": "71a470dd-f25a-484b-9fbf-c758968ffb83", "metadata": { "tags": [] @@ -500,7 +481,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "id": "0c5bf27b-31da-48ce-9344-4b24638f237a", "metadata": {}, "outputs": [ @@ -510,7 +491,7 @@ "" ] }, - "execution_count": 28, + "execution_count": 29, "metadata": {}, "output_type": "execute_result" } @@ -521,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "id": "9765f4fe-262d-43fd-a122-a0ed1f97bc29", "metadata": {}, "outputs": [], @@ -531,7 +512,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "id": "21f5ae38-f3e7-4f79-a38e-ef2531d537a1", "metadata": {}, "outputs": [ @@ -541,34 +522,13 @@ "927372692193078999176" ] }, - "execution_count": 30, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "exe.output[0].result" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "id": "760de692-42d0-4827-abf5-8f3afaf1a2b2", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "exe._run_machine.state" + "exe.output[0].result" ] }, { @@ -618,7 +578,7 @@ }, "outputs": [], "source": [ - "exe = Executor().submit(tasks)\n", + "exe = Submitter().submit(tasks)\n", "exe.run()" ] }, @@ -631,16 +591,16 @@ { "data": { "text/plain": [ - "(,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " )" + "(FunctionOutput(result=5),\n", + " FunctionOutput(result=8),\n", + " FunctionOutput(result=13),\n", + " FunctionOutput(result=21),\n", + " FunctionOutput(result=34),\n", + " FunctionOutput(result=55),\n", + " FunctionOutput(result=89),\n", + " FunctionOutput(result=144),\n", + " FunctionOutput(result=233),\n", + " FunctionOutput(result=377))" ] }, "execution_count": 35, @@ -683,21 +643,27 @@ }, { "cell_type": "code", - "execution_count": 37, - "id": "25fe617c-ae8e-4b83-bf58-b790441a1126", - "metadata": { - "scrolled": true, - "tags": [] - }, + "execution_count": 75, + "id": "257425c5-ae8d-4041-b26d-2a22b1c710ac", + "metadata": {}, + "outputs": [], + "source": [ + "exe = process.submit(tasks)" + ] + }, + { + "cell_type": "code", + "execution_count": 76, + "id": "5e74535f-1079-49eb-a8e6-d80f3f832fe4", + "metadata": {}, "outputs": [], "source": [ - "exe = ProcessExecutor(max_processes=4).submit(tasks)\n", "exe.run()" ] }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 77, "id": "19e5d3e8-6779-4c36-a636-2d8cd549e99c", "metadata": {}, "outputs": [], @@ -707,7 +673,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 78, "id": "66feb98b-3f99-4bfb-9bb5-cccaf26d009b", "metadata": {}, "outputs": [ @@ -726,7 +692,7 @@ " ReturnStatus(Code.DONE, None)]" ] }, - "execution_count": 39, + "execution_count": 78, "metadata": {}, "output_type": "execute_result" } @@ -737,26 +703,26 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, "id": "fbb40611-9f53-479e-854c-82c8c99a8070", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ,\n", - " ]" + "[FunctionOutput(result=5),\n", + " FunctionOutput(result=8),\n", + " FunctionOutput(result=13),\n", + " FunctionOutput(result=21),\n", + " FunctionOutput(result=34),\n", + " FunctionOutput(result=55),\n", + " FunctionOutput(result=89),\n", + " FunctionOutput(result=144),\n", + " FunctionOutput(result=233),\n", + " FunctionOutput(result=377)]" ] }, - "execution_count": 40, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -767,7 +733,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 42, "id": "250f9c2d-5c71-4ddb-a94e-fd42f42cbeff", "metadata": {}, "outputs": [ @@ -777,7 +743,7 @@ "55" ] }, - "execution_count": 41, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -796,7 +762,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 43, "id": "3dba0814-6a50-41f9-a78f-040014fdc140", "metadata": {}, "outputs": [], @@ -806,7 +772,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 44, "id": "52aae339-ebad-4621-b2e0-c55d4fea3d1b", "metadata": {}, "outputs": [], @@ -816,7 +782,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 45, "id": "e10f7ee9-98db-48c7-affd-465c2011f7b1", "metadata": {}, "outputs": [], @@ -826,7 +792,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 46, "id": "b7e58b55-b4f5-4e2a-aef5-f4e080e4d50c", "metadata": {}, "outputs": [], @@ -837,17 +803,17 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 47, "id": "b4b2212a-64df-4284-834d-8836c9a59b70", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "SeriesInput(tasks=[, ], connections=[])" ] }, - "execution_count": 46, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -858,7 +824,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 48, "id": "af337125-c4fe-497d-9374-b2d9301abe08", "metadata": {}, "outputs": [], @@ -868,7 +834,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 49, "id": "810a17bb-9f5d-4c50-9665-fa2f93070d60", "metadata": {}, "outputs": [], @@ -878,7 +844,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 50, "id": "4af47287-ab42-4cb4-8e65-c6efb7982ab4", "metadata": {}, "outputs": [ @@ -888,7 +854,7 @@ "ReturnStatus(Code.DONE, None)" ] }, - "execution_count": 49, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -899,7 +865,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 51, "id": "705637d8-8da7-4429-ae6f-5401fc15cc9e", "metadata": {}, "outputs": [ @@ -909,7 +875,7 @@ "12.0" ] }, - "execution_count": 50, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -936,7 +902,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 52, "id": "b9807c98-6df8-450f-a8dd-1a53cb4ded35", "metadata": {}, "outputs": [], @@ -946,7 +912,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 53, "id": "ac2b9aa8-c118-4a1a-bf8b-96d6853b9be6", "metadata": {}, "outputs": [], @@ -956,7 +922,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 54, "id": "ef092015-5756-409a-bd1a-a31793c0b2b8", "metadata": {}, "outputs": [], @@ -966,7 +932,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 55, "id": "10b67618-f56e-4348-9fdc-35514d0e83a4", "metadata": { "tags": [] @@ -976,26 +942,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.951652486500789\n", - "0.8479495911177689\n", - "0.39209981170147534\n", - "0.12626824643855517\n", - "0.1151548846424062\n", - "0.41394951366874244\n", - "0.32349310340372117\n", - "0.9985082815924705\n", - "0.036743594560547654\n", - "0.024840470009968807\n" + "0.25206094698683046\n", + "0.7580366794891185\n", + "0.3684721838966667\n", + "0.6114443141823555\n", + "0.701768145318245\n", + "0.1082013931806125\n", + "0.1991682408970753\n", + "0.2954001242249057\n", + "0.602000592148809\n", + "0.13324613153490172\n" ] }, { "data": { "text/plain": [ - "(ReturnStatus(Code.DONE, None),\n", - " )" + "(ReturnStatus(Code.DONE, None), FunctionOutput(result=0.7176369370748094))" ] }, - "execution_count": 54, + "execution_count": 55, "metadata": {}, "output_type": "execute_result" } @@ -1006,38 +971,36 @@ }, { "cell_type": "code", - "execution_count": 55, - "id": "1162c965-93c8-40d4-b8da-2fa4eedb8b3e", - "metadata": { - "tags": [] - }, + "execution_count": 59, + "id": "855bb36d-6e9b-4a87-b4d0-95c358c0ce99", + "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ - "0.4786223239196473\n", - "0.8186548613180863\n", - "0.028784009263032373\n", - "0.5010370915300685\n", - "0.9020777461434385\n", - "0.8501369870658283\n", - "0.20036590660650433\n", - "0.048401602265645605\n", - "0.7459809033150049\n", - "0.8064230025647129\n" + "0.8015059839851431\n", + "0.5016843345204535\n", + "0.1366176125775127\n", + "0.8682887572803999\n", + "0.35995686077477174\n", + "0.20630244622625882\n", + "0.024072735251068123\n", + "0.1047725596732394\n", + "0.8964585655685834\n", + "0.6529667772087503\n" ] } ], "source": [ - "exe = BackgroundExecutor(max_threads=1).submit([l])\n", + "exe = thread.submit([l])\n", "exe.run()\n", "exe.wait()" ] }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 60, "id": "a0db86f9-d974-44d5-893b-9c3a0a1c3ecb", "metadata": { "tags": [] @@ -1046,10 +1009,10 @@ { "data": { "text/plain": [ - "0.824491968944771" + "0.20599900230508372" ] }, - "execution_count": 56, + "execution_count": 60, "metadata": {}, "output_type": "execute_result" } @@ -1068,7 +1031,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 61, "id": "6c251bfa-e8cf-4e1a-990d-451ebb53f713", "metadata": {}, "outputs": [], @@ -1078,7 +1041,7 @@ }, { "cell_type": "code", - "execution_count": 58, + "execution_count": 62, "id": "563c7fe1-b96f-463c-8903-50f054c831f6", "metadata": {}, "outputs": [], @@ -1088,7 +1051,7 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 63, "id": "10130bfd-636f-4771-b30b-4648a8822f04", "metadata": {}, "outputs": [], @@ -1101,7 +1064,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 67, "id": "e65a16c1-40b4-4aa6-b382-c38405edd41e", "metadata": { "tags": [] @@ -1111,19 +1074,23 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.2292513171117575\n", - "0.22555629178899173\n", - "0.9524191400881127\n" + "0.2309565676155162\n", + "0.7973850614628536\n", + "0.1566921745270966\n", + "0.4129120332177768\n", + "0.8722993665925096\n", + "0.7014044109954554\n", + "0.5356448112961381\n", + "0.3716950282432553\n" ] }, { "data": { "text/plain": [ - "(ReturnStatus(Code.DONE, None),\n", - " )" + "(ReturnStatus(Code.DONE, None), FunctionOutput(result=0.10941147936096285))" ] }, - "execution_count": 60, + "execution_count": 67, "metadata": {}, "output_type": "execute_result" } @@ -1152,7 +1119,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 68, "id": "8ead2987-116c-4bba-a09a-4b28a71660f1", "metadata": { "tags": [] @@ -1165,8 +1132,8 @@ "\n", "class WaitInput(AbstractInput):\n", " # this defines the input parameters\n", - " time = StorageAttribute().type(float).default(10.0)\n", - " n = StorageAttribute().type(int).default(10)\n", + " time: float = 10.0\n", + " n: int = 10\n", "\n", "class WaitOutput(AbstractOutput):\n", " # we have no meaningful output, so we'll leave it empty.\n", @@ -1176,8 +1143,6 @@ " # here our task generator class, needs to advertise which input and output classes it is going to use\n", " def _get_input(self):\n", " return WaitInput()\n", - " def _get_output(self):\n", - " return WaitOutput()\n", " def __iter__(self):\n", " # the main computation in a generator is defined in its __iter__ method.\n", " # executors will iterate over the the results yielded here and inject back the results\n", @@ -1193,7 +1158,7 @@ " tasks.append(t)\n", " t.input.args = [self.input.time]\n", " ret, out = zip(*(yield tasks))\n", - " return ReturnStatus.done(), self._get_output()" + " return ReturnStatus.done(), WaitOutput()" ] }, { @@ -1209,7 +1174,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 69, "id": "c4170017-0825-4e2c-87b2-ea4ddc14499e", "metadata": { "tags": [] @@ -1219,17 +1184,17 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 0 ns, sys: 7.75 ms, total: 7.75 ms\n", + "CPU times: user 2.22 ms, sys: 1.08 ms, total: 3.3 ms\n", "Wall time: 20 s\n" ] }, { "data": { "text/plain": [ - "(ReturnStatus(Code.DONE, None), <__main__.WaitOutput at 0x7fe13ab3b430>)" + "(ReturnStatus(Code.DONE, None), WaitOutput())" ] }, - "execution_count": 62, + "execution_count": 69, "metadata": {}, "output_type": "execute_result" } @@ -1251,18 +1216,6 @@ "We therefore expect the run time to be 2 * 10 s." ] }, - { - "cell_type": "code", - "execution_count": 63, - "id": "0ad95218-1e00-408e-8db3-858852d88e8f", - "metadata": { - "tags": [] - }, - "outputs": [], - "source": [ - "from pyiron_contrib.tinybase.executor import BackgroundExecutor" - ] - }, { "cell_type": "markdown", "id": "b8a8ffc0-98da-46d4-99f5-42eae115b0db", @@ -1274,7 +1227,7 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 82, "id": "dc30851f-ed76-4bde-979f-9b42286b1645", "metadata": { "tags": [] @@ -1284,21 +1237,21 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 27.8 ms, sys: 32.7 ms, total: 60.5 ms\n", + "CPU times: user 11.2 ms, sys: 19.4 ms, total: 30.6 ms\n", "Wall time: 20.1 s\n" ] } ], "source": [ "%%time\n", - "exe = ProcessExecutor(max_processes=1).submit([wait])\n", + "exe = FuturesSubmitter(ProcessPoolExecutor(max_workers=1)).submit([wait])\n", "exe.run()\n", "exe.wait()" ] }, { "cell_type": "markdown", - "id": "41343290-a527-41e1-a1da-b2c3b77175df", + "id": "4b0098d2-f015-4d53-906e-c6fd394ca769", "metadata": {}, "source": [ "If we allow multiple cores to wait in parallel the run time naturally goes down accordingly\n", @@ -1307,8 +1260,8 @@ }, { "cell_type": "code", - "execution_count": 65, - "id": "d2c0e09b-bd43-4bd5-8c94-6ced8a12fa1a", + "execution_count": 83, + "id": "16c26a68-7fe1-4639-b5ac-593518b37d38", "metadata": { "tags": [] }, @@ -1317,14 +1270,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 20.1 ms, sys: 40.7 ms, total: 60.8 ms\n", - "Wall time: 6.08 s\n" + "CPU times: user 4.68 ms, sys: 6.71 ms, total: 11.4 ms\n", + "Wall time: 6.01 s\n" ] } ], "source": [ "%%time\n", - "exe = ProcessExecutor(max_processes=4).submit([wait])\n", + "exe = process.submit([wait])\n", "exe.run()\n", "exe.wait()" ] @@ -1340,7 +1293,7 @@ }, { "cell_type": "code", - "execution_count": 66, + "execution_count": 81, "id": "2bf18743-4760-4491-968c-49a7968ef6cf", "metadata": { "tags": [] @@ -1350,14 +1303,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 21 ms, sys: 7.34 ms, total: 28.3 ms\n", - "Wall time: 6.04 s\n" + "CPU times: user 7.92 ms, sys: 1.47 ms, total: 9.39 ms\n", + "Wall time: 6.01 s\n" ] } ], "source": [ "%%time\n", - "exe = BackgroundExecutor(max_threads=4).submit([wait])\n", + "exe = thread.submit([wait])\n", "exe.run()\n", "exe.wait()" ] @@ -1379,7 +1332,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.8" + "version": "3.11.0" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/notebooks/tinybase/TinyJob.ipynb b/notebooks/tinybase/TinyJob.ipynb index e558603e0..e8ab50d55 100644 --- a/notebooks/tinybase/TinyJob.ipynb +++ b/notebooks/tinybase/TinyJob.ipynb @@ -1054,6 +1054,213 @@ "source": [ "pr.job_table()" ] + }, + { + "cell_type": "code", + "execution_count": 49, + "id": "1fd1d8fa-14e1-4ece-9046-a4b4b3dc67b2", + "metadata": {}, + "outputs": [ + { + "data": { + "application/json": { + "MODULE": "'pyiron_contrib.tinybase.job'", + "NAME": "'TinyJob'", + "VERSION": "'0.1.0'", + "output": { + "MODULE": "'pyiron_contrib.tinybase.container'", + "NAME": "'MDOutput'", + "VERSION": "'0.1.0'", + "forces": "array([[[-2.30535051e-16, 3.43108906e-16, 8.18606310e-16],\n [ 3.92914867e-15, 4.07037956e-15, 3.97855441e-15],\n [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\n ...,\n [ 5.01855502e-15, 2.71484224e-15, 3.48679419e-15],\n [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\n [ 8.88872309e-15, 9.54271384e-15, 8.00054467e-15]],\n\n [[-2.30535051e-16, 3.43108906e-16, 8.18606310e-16],\n [ 3.92914867e-15, 4.07037956e-15, 3.97855441e-15],\n [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\n ...,\n [ 5.01855502e-15, 2.71484224e-15, 3.48679419e-15],\n [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\n [ 8.88872309e-15, 9.54271384e-15, 8.00054467e-15]],\n\n [[-2.62343424e+00, 2.33470784e+00, -2.75674956e-01],\n [ 1.34300409e-01, -3.71159924e+00, 3.24313170e+00],\n [ 2.28837018e+00, 1.95906120e+00, -6.41849344e-01],\n ...,\n [-3.02141357e+00, -1.11760933e+00, -7.86318321e-02],\n [ 4.37108693e-01, -2.10195959e+00, 2.52954445e+00],\n [ 1.73525765e+00, -2.15149182e-01, -4.66258900e+00]],\n\n ...,\n\n [[-1.61309469e+00, 2.40173133e+00, 8.60005712e-01],\n [ 1.01627163e+00, -2.04876021e+00, -2.69841159e+00],\n [-9.63580772e-01, -1.30314575e+00, 1.54826711e+00],\n ...,\n [ 2.33622011e+00, 1.42458080e+00, -8.55704425e-01],\n [-6.21417936e-01, -2.75845670e+00, 7.99085620e-01],\n [ 6.07076042e-03, 1.96134732e+00, -1.09215293e+00]],\n\n [[ 3.78152342e+00, -2.83734650e-01, 5.78468269e-01],\n [-2.62359615e+00, -5.18478229e-03, 9.99962596e-01],\n [-2.44758733e+00, 1.06464273e+00, -1.20864327e+00],\n ...,\n [-1.43161830e+00, 8.65487360e-02, 1.17823380e+00],\n [ 2.34453798e+00, 2.31271042e+00, -5.46357930e-01],\n [-2.42503197e+00, -4.71949261e-01, 3.04565045e+00]],\n\n [[-1.35294632e+00, -2.59425328e+00, -3.21526120e-01],\n [ 1.21015573e-01, 3.62524895e+00, 2.13228164e+00],\n [ 1.33292882e+00, -1.96341262e+00, 9.62968351e-01],\n ...,\n [ 1.99029559e+00, -2.09015234e+00, -1.81056408e+00],\n [-4.45269875e-01, 9.81351247e-02, -6.07960535e-01],\n [ 5.86512442e-01, -2.71503576e-01, -7.72907895e-01]]])", + "kin_energies": "array([2.18790726, 2.18790726, 1.0970859 , 1.62979581, 1.4684253 ,\n 1.37830557, 1.93724633, 1.26634897, 1.55280343, 1.62287952,\n 1.13141317, 1.61268185, 1.40292567, 1.69516696, 1.41598182,\n 1.40895748, 1.62565179, 1.03176305, 1.43441957, 1.1846772 ,\n 1.26321823, 1.53552591])", + "pot_energies": "array([-89.83944672, -89.83944672, -88.79068917, -89.32677211,\n -89.19409937, -89.068648 , -89.63530583, -88.92931106,\n -89.23369466, -89.31282598, -88.76200655, -89.26374679,\n -89.02356514, -89.34006743, -89.07854473, -89.0420929 ,\n -89.27307395, -88.64864703, -89.1008584 , -88.84143321,\n -88.90896464, -89.16142015])", + "structures": "[Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...)]" + }, + "task": { + "MODULE": "'pyiron_contrib.tinybase.ase'", + "NAME": "'AseMDTask'", + "VERSION": "'0.1.0'", + "input": { + "MODULE": "'pyiron_contrib.tinybase.ase'", + "NAME": "'AseMDInput'", + "VERSION": "'0.1.0'", + "calculator": "", + "output_steps": "20", + "steps": "100", + "structure": "Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4])", + "temperature": "600.0", + "timestep": "3.0" + } + } + }, + "text/html": [ + "
DataContainer({\n",
+       "  \"NAME\": \"'TinyJob'\",\n",
+       "  \"MODULE\": \"'pyiron_contrib.tinybase.job'\",\n",
+       "  \"VERSION\": \"'0.1.0'\",\n",
+       "  \"task\": {\n",
+       "    \"NAME\": \"'AseMDTask'\",\n",
+       "    \"MODULE\": \"'pyiron_contrib.tinybase.ase'\",\n",
+       "    \"VERSION\": \"'0.1.0'\",\n",
+       "    \"input\": {\n",
+       "      \"NAME\": \"'AseMDInput'\",\n",
+       "      \"MODULE\": \"'pyiron_contrib.tinybase.ase'\",\n",
+       "      \"VERSION\": \"'0.1.0'\",\n",
+       "      \"steps\": \"100\",\n",
+       "      \"timestep\": \"3.0\",\n",
+       "      \"temperature\": \"600.0\",\n",
+       "      \"output_steps\": \"20\",\n",
+       "      \"structure\": \"Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4])\",\n",
+       "      \"calculator\": \"\"\n",
+       "    }\n",
+       "  },\n",
+       "  \"output\": {\n",
+       "    \"NAME\": \"'MDOutput'\",\n",
+       "    \"MODULE\": \"'pyiron_contrib.tinybase.container'\",\n",
+       "    \"VERSION\": \"'0.1.0'\",\n",
+       "    \"pot_energies\": \"array([-89.83944672, -89.83944672, -88.79068917, -89.32677211,\\n       -89.19409937, -89.068648  , -89.63530583, -88.92931106,\\n       -89.23369466, -89.31282598, -88.76200655, -89.26374679,\\n       -89.02356514, -89.34006743, -89.07854473, -89.0420929 ,\\n       -89.27307395, -88.64864703, -89.1008584 , -88.84143321,\\n       -88.90896464, -89.16142015])\",\n",
+       "    \"kin_energies\": \"array([2.18790726, 2.18790726, 1.0970859 , 1.62979581, 1.4684253 ,\\n       1.37830557, 1.93724633, 1.26634897, 1.55280343, 1.62287952,\\n       1.13141317, 1.61268185, 1.40292567, 1.69516696, 1.41598182,\\n       1.40895748, 1.62565179, 1.03176305, 1.43441957, 1.1846772 ,\\n       1.26321823, 1.53552591])\",\n",
+       "    \"forces\": \"array([[[-2.30535051e-16,  3.43108906e-16,  8.18606310e-16],\\n        [ 3.92914867e-15,  4.07037956e-15,  3.97855441e-15],\\n        [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\\n        ...,\\n        [ 5.01855502e-15,  2.71484224e-15,  3.48679419e-15],\\n        [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\\n        [ 8.88872309e-15,  9.54271384e-15,  8.00054467e-15]],\\n\\n       [[-2.30535051e-16,  3.43108906e-16,  8.18606310e-16],\\n        [ 3.92914867e-15,  4.07037956e-15,  3.97855441e-15],\\n        [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\\n        ...,\\n        [ 5.01855502e-15,  2.71484224e-15,  3.48679419e-15],\\n        [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\\n        [ 8.88872309e-15,  9.54271384e-15,  8.00054467e-15]],\\n\\n       [[-2.62343424e+00,  2.33470784e+00, -2.75674956e-01],\\n        [ 1.34300409e-01, -3.71159924e+00,  3.24313170e+00],\\n        [ 2.28837018e+00,  1.95906120e+00, -6.41849344e-01],\\n        ...,\\n        [-3.02141357e+00, -1.11760933e+00, -7.86318321e-02],\\n        [ 4.37108693e-01, -2.10195959e+00,  2.52954445e+00],\\n        [ 1.73525765e+00, -2.15149182e-01, -4.66258900e+00]],\\n\\n       ...,\\n\\n       [[-1.61309469e+00,  2.40173133e+00,  8.60005712e-01],\\n        [ 1.01627163e+00, -2.04876021e+00, -2.69841159e+00],\\n        [-9.63580772e-01, -1.30314575e+00,  1.54826711e+00],\\n        ...,\\n        [ 2.33622011e+00,  1.42458080e+00, -8.55704425e-01],\\n        [-6.21417936e-01, -2.75845670e+00,  7.99085620e-01],\\n        [ 6.07076042e-03,  1.96134732e+00, -1.09215293e+00]],\\n\\n       [[ 3.78152342e+00, -2.83734650e-01,  5.78468269e-01],\\n        [-2.62359615e+00, -5.18478229e-03,  9.99962596e-01],\\n        [-2.44758733e+00,  1.06464273e+00, -1.20864327e+00],\\n        ...,\\n        [-1.43161830e+00,  8.65487360e-02,  1.17823380e+00],\\n        [ 2.34453798e+00,  2.31271042e+00, -5.46357930e-01],\\n        [-2.42503197e+00, -4.71949261e-01,  3.04565045e+00]],\\n\\n       [[-1.35294632e+00, -2.59425328e+00, -3.21526120e-01],\\n        [ 1.21015573e-01,  3.62524895e+00,  2.13228164e+00],\\n        [ 1.33292882e+00, -1.96341262e+00,  9.62968351e-01],\\n        ...,\\n        [ 1.99029559e+00, -2.09015234e+00, -1.81056408e+00],\\n        [-4.45269875e-01,  9.81351247e-02, -6.07960535e-01],\\n        [ 5.86512442e-01, -2.71503576e-01, -7.72907895e-01]]])\",\n",
+       "    \"structures\": \"[Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...)]\"\n",
+       "  }\n",
+       "})
" + ], + "text/plain": [ + "DataContainer({'NAME': 'TinyJob', 'MODULE': 'pyiron_contrib.tinybase.job', 'VERSION': '0.1.0', 'task': DataContainer({'NAME': 'AseMDTask', 'MODULE': 'pyiron_contrib.tinybase.ase', 'VERSION': '0.1.0', 'input': DataContainer({'NAME': 'AseMDInput', 'MODULE': 'pyiron_contrib.tinybase.ase', 'VERSION': '0.1.0', 'steps': 100, 'timestep': 3.0, 'temperature': 600.0, 'output_steps': 20, 'structure': Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4]), 'calculator': })}), 'output': DataContainer({'NAME': 'MDOutput', 'MODULE': 'pyiron_contrib.tinybase.container', 'VERSION': '0.1.0', 'pot_energies': array([-89.83944672, -89.83944672, -88.79068917, -89.32677211,\n", + " -89.19409937, -89.068648 , -89.63530583, -88.92931106,\n", + " -89.23369466, -89.31282598, -88.76200655, -89.26374679,\n", + " -89.02356514, -89.34006743, -89.07854473, -89.0420929 ,\n", + " -89.27307395, -88.64864703, -89.1008584 , -88.84143321,\n", + " -88.90896464, -89.16142015]), 'kin_energies': array([2.18790726, 2.18790726, 1.0970859 , 1.62979581, 1.4684253 ,\n", + " 1.37830557, 1.93724633, 1.26634897, 1.55280343, 1.62287952,\n", + " 1.13141317, 1.61268185, 1.40292567, 1.69516696, 1.41598182,\n", + " 1.40895748, 1.62565179, 1.03176305, 1.43441957, 1.1846772 ,\n", + " 1.26321823, 1.53552591]), 'forces': array([[[-2.30535051e-16, 3.43108906e-16, 8.18606310e-16],\n", + " [ 3.92914867e-15, 4.07037956e-15, 3.97855441e-15],\n", + " [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\n", + " ...,\n", + " [ 5.01855502e-15, 2.71484224e-15, 3.48679419e-15],\n", + " [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\n", + " [ 8.88872309e-15, 9.54271384e-15, 8.00054467e-15]],\n", + "\n", + " [[-2.30535051e-16, 3.43108906e-16, 8.18606310e-16],\n", + " [ 3.92914867e-15, 4.07037956e-15, 3.97855441e-15],\n", + " [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\n", + " ...,\n", + " [ 5.01855502e-15, 2.71484224e-15, 3.48679419e-15],\n", + " [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\n", + " [ 8.88872309e-15, 9.54271384e-15, 8.00054467e-15]],\n", + "\n", + " [[-2.62343424e+00, 2.33470784e+00, -2.75674956e-01],\n", + " [ 1.34300409e-01, -3.71159924e+00, 3.24313170e+00],\n", + " [ 2.28837018e+00, 1.95906120e+00, -6.41849344e-01],\n", + " ...,\n", + " [-3.02141357e+00, -1.11760933e+00, -7.86318321e-02],\n", + " [ 4.37108693e-01, -2.10195959e+00, 2.52954445e+00],\n", + " [ 1.73525765e+00, -2.15149182e-01, -4.66258900e+00]],\n", + "\n", + " ...,\n", + "\n", + " [[-1.61309469e+00, 2.40173133e+00, 8.60005712e-01],\n", + " [ 1.01627163e+00, -2.04876021e+00, -2.69841159e+00],\n", + " [-9.63580772e-01, -1.30314575e+00, 1.54826711e+00],\n", + " ...,\n", + " [ 2.33622011e+00, 1.42458080e+00, -8.55704425e-01],\n", + " [-6.21417936e-01, -2.75845670e+00, 7.99085620e-01],\n", + " [ 6.07076042e-03, 1.96134732e+00, -1.09215293e+00]],\n", + "\n", + " [[ 3.78152342e+00, -2.83734650e-01, 5.78468269e-01],\n", + " [-2.62359615e+00, -5.18478229e-03, 9.99962596e-01],\n", + " [-2.44758733e+00, 1.06464273e+00, -1.20864327e+00],\n", + " ...,\n", + " [-1.43161830e+00, 8.65487360e-02, 1.17823380e+00],\n", + " [ 2.34453798e+00, 2.31271042e+00, -5.46357930e-01],\n", + " [-2.42503197e+00, -4.71949261e-01, 3.04565045e+00]],\n", + "\n", + " [[-1.35294632e+00, -2.59425328e+00, -3.21526120e-01],\n", + " [ 1.21015573e-01, 3.62524895e+00, 2.13228164e+00],\n", + " [ 1.33292882e+00, -1.96341262e+00, 9.62968351e-01],\n", + " ...,\n", + " [ 1.99029559e+00, -2.09015234e+00, -1.81056408e+00],\n", + " [-4.45269875e-01, 9.81351247e-02, -6.07960535e-01],\n", + " [ 5.86512442e-01, -2.71503576e-01, -7.72907895e-01]]]), 'structures': [Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...)]})})" + ] + }, + "execution_count": 49, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "j.storage._cont" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "6c7a623f-e281-4e70-901b-2cd7872872b1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['_project',\n", + " '_cont',\n", + " '_name',\n", + " '__module__',\n", + " '__doc__',\n", + " '__init__',\n", + " '__getitem__',\n", + " '_set',\n", + " 'create_group',\n", + " 'list_nodes',\n", + " 'list_groups',\n", + " 'project',\n", + " 'name',\n", + " '__abstractmethods__',\n", + " '_abc_impl',\n", + " 'get',\n", + " '__setitem__',\n", + " 'open',\n", + " 'close',\n", + " '__enter__',\n", + " '__exit__',\n", + " 'to_object',\n", + " '__dict__',\n", + " '__weakref__',\n", + " '__slots__',\n", + " '__new__',\n", + " '__repr__',\n", + " '__hash__',\n", + " '__str__',\n", + " '__getattribute__',\n", + " '__setattr__',\n", + " '__delattr__',\n", + " '__lt__',\n", + " '__le__',\n", + " '__eq__',\n", + " '__ne__',\n", + " '__gt__',\n", + " '__ge__',\n", + " '__reduce_ex__',\n", + " '__reduce__',\n", + " '__getstate__',\n", + " '__subclasshook__',\n", + " '__init_subclass__',\n", + " '__format__',\n", + " '__sizeof__',\n", + " '__dir__',\n", + " '__class__']" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "j.storage.__dir__()" + ] } ], "metadata": { diff --git a/pyiron_contrib/tinybase/ase.py b/pyiron_contrib/tinybase/ase.py index 48114383d..960f5bd50 100644 --- a/pyiron_contrib/tinybase/ase.py +++ b/pyiron_contrib/tinybase/ase.py @@ -1,14 +1,19 @@ +from typing import Literal + from pyiron_contrib.tinybase.container import ( AbstractInput, - StorageAttribute, StructureInput, MDInput, MinimizeInput, EnergyPotOutput, MDOutput, + field, + USER_REQUIRED ) from pyiron_contrib.tinybase.task import AbstractTask, ReturnStatus +import numpy as np +from ase.calculators.calculator import Calculator from ase.md.langevin import Langevin from ase.md.velocitydistribution import MaxwellBoltzmannDistribution from ase import units @@ -18,7 +23,7 @@ class AseInput(AbstractInput): - calculator = StorageAttribute() + calculator: Calculator = USER_REQUIRED def _store(self, storage): # if the calculator was attached to pyiron Atoms object, saving the calculator would fail, since it would be @@ -36,16 +41,13 @@ class AseStaticTask(AbstractTask): def _get_input(self): return AseStaticInput() - def _get_output(self): - return EnergyPotOutput() - - def _execute(self, output): + def _execute(self): structure = self.input.structure structure.calc = self.input.calculator - output.energy_pot = structure.get_potential_energy() + return EnergyPotOutput(energy_pot=structure.get_potential_energy()) -class AseMDInput(AseInput, MDInput): +class AseMDInput(AseInput, StructureInput, MDInput): pass @@ -53,10 +55,7 @@ class AseMDTask(AbstractTask): def _get_input(self): return AseMDInput() - def _get_output(self): - return MDOutput() - - def _execute(self, output): + def _execute(self): structure = self.input.structure.copy() structure.calc = self.input.calculator @@ -72,20 +71,33 @@ def _execute(self, output): append_trajectory=True, ) + structures = [] + pot_energies = [] + kin_energies = [] + forces = [] + def parse(): - output.structures.append(structure.copy()) - output.pot_energies.append(structure.get_potential_energy()) - output.kin_energies.append(structure.get_kinetic_energy()) - output.forces.append(structure.get_forces()) + structures.append(structure.copy()) + pot_energies.append(structure.get_potential_energy()) + kin_energies.append(structure.get_kinetic_energy()) + forces.append(structure.get_forces()) parse() dyn.attach(parse, interval=self.input.steps // self.input.output_steps) dyn.run(self.input.steps) + return MDOutput( + structures=structures, + pot_energies=np.array(pot_energies), + kin_energies=np.array(kin_energies), + forces=np.array(forces), + ) + +_ASE_OPTIMIZER_MAP = {"LBFGS": LBFGS, "FIRE": FIRE, "GPMIN": GPMin} class AseMinimizeInput(AseInput, StructureInput, MinimizeInput): - algo = StorageAttribute().type(str).default("LBFGS") - minimizer_kwargs = StorageAttribute().type(dict).constructor(dict) + algo: Literal[list(_ASE_OPTIMIZER_MAP.keys())] = "LBFGS" + minimizer_kwargs: dict = field(default_factory=dict) def lbfgs(self, damping=None, alpha=None): self.algo = "LBFGS" @@ -103,7 +115,7 @@ def gpmin(self): self.minimizer_kwargs = {} def get_ase_optimizer(self, structure): - return {"LBFGS": LBFGS, "FIRE": FIRE, "GPMIN": GPMin}.get(self.algo)( + return _ASE_OPTIMIZER_MAP.get(self.algo)( structure, **self.minimizer_kwargs ) @@ -112,29 +124,40 @@ class AseMinimizeTask(AbstractTask): def _get_input(self): return AseMinimizeInput() - def _get_output(self): - return MDOutput() - - def _execute(self, output): + def _execute(self): structure = self.input.structure.copy() structure.calc = self.input.calculator opt = self.input.get_ase_optimizer(structure) + structures = [] + pot_energies = [] + kin_energies = [] + forces = [] + def parse(): - output.structures.append(structure.copy()) - output.pot_energies.append(structure.get_potential_energy()) - output.kin_energies.append(structure.get_kinetic_energy()) - output.forces.append(structure.get_forces()) + structures.append(structure.copy()) + pot_energies.append(structure.get_potential_energy()) + kin_energies.append(structure.get_kinetic_energy()) + forces.append(structure.get_forces()) opt.attach(parse, interval=self.input.output_steps) opt.run(fmax=self.input.ionic_force_tolerance, steps=self.input.max_steps) parse() + output = MDOutput( + structures=structures, + pot_energies=np.array(pot_energies), + kin_energies=np.array(kin_energies), + forces=np.array(forces), + ) + max_force = abs(output.forces[-1]).max() force_tolerance = self.input.ionic_force_tolerance if max_force > force_tolerance: return ReturnStatus( "not_converged", f"force in last step ({max_force}) is larger than tolerance ({force_tolerance})!", - ) + ), output + else: + return output diff --git a/pyiron_contrib/tinybase/container.py b/pyiron_contrib/tinybase/container.py index e44f99a67..58054bc78 100644 --- a/pyiron_contrib/tinybase/container.py +++ b/pyiron_contrib/tinybase/container.py @@ -1,15 +1,19 @@ """Generic Input Base Clases""" import abc +import dataclasses +from dataclasses import dataclass, field, fields from copy import deepcopy +from typing import TypeVar, List -from pyiron_contrib.tinybase.storage import HasHDFAdapaterMixin +from pyiron_contrib.tinybase.storage import HasHDFAdapaterMixin, Storable from pyiron_base.interfaces.object import HasStorage from pyiron_atomistics.atomistics.structure.has_structure import HasStructure from ase import Atoms import numpy as np +import numpy.typing as npt import matplotlib.pyplot as plt @@ -113,67 +117,117 @@ def doc(self, text): self.__doc__ = text return self +# derives from ABCMeta instead of type, so that other classes can use it as a metaclass and still derive from Storable +# (which derives from ABC and therefor already has a metaclass) +class _MakeDataclass(abc.ABCMeta): + def __new__(meta, name, bases, ns, **kwargs): + cls = super().__new__(meta, name, bases, ns) + return dataclass(cls) -class AbstractContainer(HasStorage, HasHDFAdapaterMixin, abc.ABC): - def take(self, other: "AbstractContainer"): - # TODO: think hard about variance of types - if not isinstance(self, type(other)): - raise TypeError("Must pass a superclass to transfer from!") +class StorableDataclass(Storable, metaclass=_MakeDataclass): + """ + Base class for data classes that automatically implement Storable. - mro_iter = {k: v for c in type(other).__mro__ for k, v in c.__dict__.items()} - for name, attr in mro_iter.items(): - if isinstance(attr, StorageAttribute): - a = getattr(other, name) - if a is not None: - setattr(self, name, a) + Sub classes are automatically turned into dataclasses without the need for a separate decorator. + """ - def put(self, other: "AbstractContainer"): - other.take(self) + def _store(self, storage): + for field in dataclasses.fields(self): + storage[field.name] = getattr(self, field.name) + @classmethod + def _restore(cls, storage, version: str): + state = {} + for name in storage.list_nodes(): + # FIXME/TODO: avoid this somehow, likely will be related to + # splitting the storage layer into a raw and an object level + # version + if name in ["MODULE", "NAME", "VERSION"]: + continue + state[name] = storage[name] -class AbstractInput(AbstractContainer, abc.ABC): - def check_ready(self): - return True + for name in storage.list_groups(): + state[name] = storage[name].to_object() + return cls(**state) -class StructureInput(AbstractInput): - structure = StorageAttribute().type(Atoms) + # exists so that SeriesInput can overload it + def fields(self): + return fields(self) -class MDInput(AbstractInput): - steps = StorageAttribute().type(int) - timestep = StorageAttribute().type(float) - temperature = StorageAttribute().type(float) - output_steps = StorageAttribute().type(int) +class Sentinel: + _instances = {} + + def __new__(cls, name): + if name not in cls._instances: + cls._instances[name] = super().__new__(cls) + return cls._instances[name] + + def __init__(self, name): + self._name = name + + def __copy__(self): + return self + def __deepcopy__(self, memo=None): + return self + + def __repr__(self): + return f"{type(self).__name__}({self._name})" + + def __str__(self): + return self._name + +USER_REQUIRED = Sentinel("USERINPUT") + +class AbstractInput(StorableDataclass): + def check_ready(self): + return all(getattr(self, field.name) is not USER_REQUIRED for field in fields(self)) + +class StructureInput(AbstractInput): + structure: Atoms = USER_REQUIRED + +class MDInput(AbstractInput): + steps: int = USER_REQUIRED + timestep: float = USER_REQUIRED + temperature: float = USER_REQUIRED + output_steps: int = USER_REQUIRED class MinimizeInput(AbstractInput): - ionic_force_tolerance = StorageAttribute().type(float) - max_steps = StorageAttribute().type(int) - output_steps = StorageAttribute().type(int) + ionic_force_tolerance: float = 1e-5 + max_steps: int = 500 + output_steps: int = 500 -class AbstractOutput(AbstractContainer, abc.ABC): +class AbstractOutput(StorableDataclass): pass - class EnergyPotOutput(AbstractOutput): - energy_pot = StorageAttribute().type(float) - + energy_pot: float class EnergyKinOutput(AbstractOutput): - energy_kin = StorageAttribute().type(float) - + energy_kin: float class ForceOutput(AbstractOutput): - forces = StorageAttribute().type(np.ndarray) + forces: npt.NDArray[float] +class StaticOutput(EnergyPotOutput, EnergyKinOutput): + pass -class MDOutput(HasStructure, EnergyPotOutput): - pot_energies = StorageAttribute().type(list).constructor(list) - kin_energies = StorageAttribute().type(list).constructor(list) - forces = StorageAttribute().type(list).constructor(list) - structures = StorageAttribute().type(list).constructor(list) + +T = TypeVar("T") + +class StaticMode(abc.ABC): + @abc.abstractmethod + def select(self, array: npt.NDArray[T]) -> T: + pass + +class MDOutput(HasStructure, AbstractOutput): + pot_energies: npt.NDArray[float] + kin_energies: npt.NDArray[float] + forces: npt.NDArray[float] + structures: List[Atoms] def plot_energies(self): plt.plot(self.pot_energies - np.min(self.pot_energies), label="pot") @@ -186,7 +240,36 @@ def _number_of_structures(self): def _get_structure(self, frame, wrap_atoms=True): return self.structures[frame] - # TODO: how to make sure this is generally conforming? - @property - def energy_pot(self): - return self.pot_energies[-1] + # both StaticMode sub classes live here only so that users can easily + # access them later + class Mean(StaticMode): + """ + Average over the given range of steps. + """ + __slots__ = ("_start", "_stop") + def __init__(self, start: float, stop: float = 1.0): + assert 0 <= start <= 1 and 0 <= stop <= 1, "Range check!" + self._start, self._stop = start, stop + + def select(self, array): + na = int( (len(array) - 1) * self._start) + no = int( (len(array) - 1) * self._stop) + return array[na:no].mean(axis=0) + + class Last(StaticMode): + """ + Return the last step. + """ + __slots__ = () + def select(self, array): + return array[-1] + + def static_output(self, how: StaticMode = Last()) -> StaticOutput: + """ + Act as a static output. + """ + state = { + "energy_pot": how.select(self.pot_energies), + "energy_kin": how.select(self.kin_energies), + } + return StaticOutput(**state) diff --git a/pyiron_contrib/tinybase/murn.py b/pyiron_contrib/tinybase/murn.py index 751154f5b..b834a3e1b 100644 --- a/pyiron_contrib/tinybase/murn.py +++ b/pyiron_contrib/tinybase/murn.py @@ -1,9 +1,13 @@ from pyiron_contrib.tinybase.container import ( + AbstractInput, AbstractOutput, StructureInput, - StorageAttribute, + field, + USER_REQUIRED, ) + from pyiron_contrib.tinybase.task import ( + AbstractTask, ListTaskGenerator, ListInput, ReturnStatus, @@ -12,23 +16,25 @@ from copy import deepcopy import numpy as np +import numpy.typing as npt import matplotlib.pyplot as plt import scipy.interpolate as si import scipy.optimize as so +from ase import Atoms from pyiron_atomistics.atomistics.structure.has_structure import HasStructure class MurnaghanInput(StructureInput, ListInput): - strains = StorageAttribute() - task = StorageAttribute() + task: AbstractTask = USER_REQUIRED + strains: npt.NDArray[float] = field(default_factory=lambda: np.linspace(-0.2, 0.2, 7)) def check_ready(self): - structure_ready = self.structure is not None + if not super().check_ready(): return False strain_ready = len(self.strains) > 0 task = self.task task.input.structure = self.structure - return structure_ready and strain_ready and task.input.check_ready() + return strain_ready and task.input.check_ready() def set_strain_range(self, volume_range, steps): self.strains = (1 + np.linspace(-volume_range, volume_range, steps)) ** (1 / 3) @@ -45,9 +51,9 @@ def _create_tasks(self): class MurnaghanOutput(AbstractOutput, HasStructure): - base_structure = StorageAttribute() - volumes = StorageAttribute().type(np.ndarray) - energies = StorageAttribute().type(np.ndarray) + base_structure: Atoms + volumes: npt.NDArray[float] + energies: npt.NDArray[float] def plot(self, per_atom=True): N = len(self.base_structure) if per_atom else 1 @@ -73,14 +79,18 @@ class MurnaghanTask(ListTaskGenerator): def _get_input(self): return MurnaghanInput() - def _get_output(self): - out = MurnaghanOutput() - out.energies = np.zeros(len(self.input.strains)) - out.volumes = np.zeros(len(self.input.strains)) - out.base_structure = self.input.structure - return out - - def _extract_output(self, output, step, task, ret, task_output): + def _extract_output(self, step, task, ret, output): if ret.is_done(): - output.energies[step] = task_output.energy_pot - output.volumes[step] = task.input.structure.get_volume() + return {'step': step, 'energy_pot': output.energy_pot, 'volume': task.input.structure.get_volume()} + + def _join_output(self, outputs): + energies = np.full(self.input.strains.shape, np.nan) + volumes = np.full(self.input.strains.shape, np.nan) + for output in outputs: + energies[output["step"]] = output["energy_pot"] + volumes[output["step"]] = output["volume"] + return MurnaghanOutput( + base_structure=self.input.structure.copy(), + energies=energies, + volumes=volumes, + ) diff --git a/pyiron_contrib/tinybase/shell.py b/pyiron_contrib/tinybase/shell.py index e35172234..231f1c40e 100644 --- a/pyiron_contrib/tinybase/shell.py +++ b/pyiron_contrib/tinybase/shell.py @@ -7,7 +7,8 @@ from pyiron_contrib.tinybase.container import ( AbstractInput, AbstractOutput, - StorageAttribute, + USER_REQUIRED, + field ) from pyiron_contrib.tinybase.task import AbstractTask, ReturnStatus @@ -104,17 +105,17 @@ def __str__(self): class ShellInput(AbstractInput): - command = StorageAttribute() - arguments = StorageAttribute().type(list).constructor(list) - environ = StorageAttribute().type(dict).constructor(dict) - working_directory = StorageAttribute().type(str) - allowed_returncode = StorageAttribute().type(list) + command: str = USER_REQUIRED + working_directory: str = USER_REQUIRED + arguments: list = field(default_factory=list) + environ: dict = field(default_factory=dict) + allowed_returncode: list = [0] class ShellOutput(AbstractOutput): - stdout = StorageAttribute() - stderr = StorageAttribute() - returncode = StorageAttribute().type(int) + stdout: str + stderr: str + returncode: int class ShellTask(AbstractTask): diff --git a/pyiron_contrib/tinybase/task.py b/pyiron_contrib/tinybase/task.py index fdf249c71..5c6994a1e 100644 --- a/pyiron_contrib/tinybase/task.py +++ b/pyiron_contrib/tinybase/task.py @@ -1,7 +1,8 @@ import abc from copy import deepcopy +from dataclasses import asdict import enum -from typing import Optional, Callable, List, Generator, Tuple +from typing import Optional, Callable, List, Generator, Tuple, Any, Union from pyiron_base.interfaces.object import HasStorage @@ -10,6 +11,8 @@ AbstractInput, AbstractOutput, StorageAttribute, + USER_REQUIRED, + field, ) @@ -61,7 +64,7 @@ class AbstractTask(Storable, abc.ABC): """ Basic unit of calculations. - Subclasses must implement :meth:`._get_input()`, :meth:`._get_output()` and :meth:`._execute()` and generally supply + Subclasses must implement :meth:`._get_input()`, :meth:`._make_output()` and :meth:`._execute()` and generally supply their own :class:`.AbstractInput` and :class:`.AbstractOutput`. """ @@ -85,45 +88,34 @@ def input(self) -> AbstractInput: return self._input @abc.abstractmethod - def _get_output(self) -> AbstractOutput: - """ - Return an instance of the output class. - - This is called every time :meth:`.execute()` is called. - """ - pass - - @abc.abstractmethod - def _execute(self, output) -> Optional[ReturnStatus]: + def _execute(self) -> Union[Tuple[ReturnStatus, AbstractOutput], AbstractOutput]: """ Run the calculation. - Every time this method is called a new instance of the output is created and passed as the argument. This - method should populate it. - - If no value is returned from the method, a return status of DONE is assumed implicitly. - - Args: - output (:class:`.AbstractOutput`): instance returned by :meth:`._get_output()`. + Should return either the output object or a :class:`.ReturnStatus` Returns: :class:`.ReturnStatus`: optional """ pass - def execute(self) -> Tuple[ReturnStatus, AbstractOutput]: + def execute(self) -> Tuple[ReturnStatus, Optional[AbstractOutput]]: if not self.input.check_ready(): - return ReturnStatus.aborted("Input not ready!") - output = self._get_output() + return ReturnStatus.aborted("Input not ready!"), None try: - ret = self._execute(output) - if ret is None: + ret = self._execute() + if isinstance(ret, tuple): + ret, output = ret + elif isinstance(ret, AbstractOutput): + output = ret ret = ReturnStatus("done") + else: + raise ValueError("Must return tuple or output!") + return ret, output except Exception as e: - ret = ReturnStatus("aborted", msg=e) if not self._capture_exceptions: raise - return ret, output + return ReturnStatus("aborted", msg=e), None # TaskIterator Impl' def __iter__( @@ -147,6 +139,12 @@ def _restore(cls, storage, version): task._input = storage["input"].to_object() return task + def then(self, body, task = None): + series = SeriesTask() + series.input.first(self) + series.input.then(FunctionTask(body), lambda inp, out: inp.args.append(out)) + return series + class TaskGenerator(AbstractTask, abc.ABC): """ @@ -168,7 +166,7 @@ def __iter__( ]: pass - def _execute(self, output): + def _execute(self): gen = iter(self) tasks = next(gen) while True: @@ -176,9 +174,8 @@ def _execute(self, output): try: tasks = gen.send(ret) except StopIteration as stop: - ret, out = stop.args[0] - output.take(out) - return ret + # forward return value of the generator + return stop.args[0] # TaskGenerator.register(AbstractTask) @@ -186,12 +183,12 @@ def _execute(self, output): class FunctionInput(AbstractInput): - args = StorageAttribute().type(list).constructor(list) - kwargs = StorageAttribute().type(dict).constructor(dict) + args: list = field(default_factory=list) + kwargs: dict = field(default_factory=dict) class FunctionOutput(AbstractOutput): - result = StorageAttribute() + result: Any class FunctionTask(AbstractTask): @@ -209,11 +206,12 @@ def __init__(self, function): def _get_input(self): return FunctionInput() - def _get_output(self): - return FunctionOutput() - - def _execute(self, output): - output.result = self._function(*self.input.args, **self.input.kwargs) + def _execute(self): + res = self._function(*self.input.args, **self.input.kwargs) + if isinstance(res, AbstractOutput): + return res + else: + return FunctionOutput(result=res) class ListInput(abc.ABC): @@ -244,29 +242,37 @@ def _get_input(self): return ListInput() @abc.abstractmethod - def _extract_output(self, output, step, task, ret, task_output): + def _extract_output(self, step, task, ret, output) -> dict: """ Extract the output of each task. Args: - output (:class:`.AbstractOutput`): output of this task to populate step (int): index of the task to extract the output from, corresponds to the index of the task in the list returned by :meth:`.ListInput._create_tasks()`. task (:class:`.AbstractTask`): task to extract the output from, you can use this to extract parts of the input as well ret (:class:`.ReturnStatus`): the return status of the execution of the task - task_output (:class:`.AbstractOutput`): the output of the task to extract + output (:class:`.AbstractOutput`): the output of the task to extract """ pass + @abc.abstractmethod + def _join_output(self, outputs) -> AbstractOutput: + pass + def __iter__(self): tasks = self.input._create_tasks() returns, outputs = zip(*(yield tasks)) - output = self._get_output() - for i, (task, ret, task_output) in enumerate(zip(tasks, returns, outputs)): - self._extract_output(output, i, task, ret, task_output) + if any(not r.is_done() for r in returns): + return ReturnStatus("aborted"), None + + extracted_outputs = [] + for i, (task, ret, output) in enumerate(zip(tasks, returns, outputs)): + extracted_outputs.append( + self._extract_output(i, task, ret, output) + ) - return ReturnStatus("done"), output + return ReturnStatus("done"), self._join_output(extracted_outputs ) class SeriesInput(AbstractInput): @@ -284,17 +290,20 @@ class SeriesInput(AbstractInput): >>> task.input.first(MyNode()).then(MyNode(), transfer) """ - tasks = StorageAttribute().type(list) - connections = StorageAttribute().type(list) + tasks: list = USER_REQUIRED + connections: list = USER_REQUIRED def check_ready(self): - return len(self.tasks) == len(self.connections) + 1 + if not super().check_ready(): return False + if not (0 < len(self.tasks) == len(self.connections) + 1): return False + if not self.tasks[0].input.check_ready(): return False + return True def first(self, task): """ Set initial task. - Resets whole input + Resets whole input. Args: task (AbstractTask): the first task to execute @@ -314,6 +323,7 @@ def then(self, next_task, connection): next_task (:class:`~.AbstractTask`): next task to execute connection (function): takes the input of next_task and the output of the previous task + Returns: self: the input object """ @@ -321,6 +331,26 @@ def then(self, next_task, connection): self.connections.append(connection) return self + # FIXME: error handling + def __setattr__(self, name, value): + if self.tasks is not USER_REQUIRED and len(self.tasks) > 0: + field_names = [f.name for f in self.tasks[0].input.fields()] + if name in field_names: + setattr(self.tasks[0].input, name, value) + return + super().__setattr__(name, value) + + def __getattr__(self, name): + if self.tasks is USER_REQUIRED or len(self.tasks) == 0: + raise AttributeError(name) + return getattr(self.tasks[0].input, name) + + def fields(self): + base = super().fields() + if self.tasks is not USER_REQUIRED and len(self.tasks) > 0: + base += self.tasks[0].input.fields() + return base + class SeriesTask(TaskGenerator): """ @@ -403,8 +433,8 @@ class LoopInput(AbstractInput): control (:class:`.LoopControl`): encapsulates control flow of the loop """ - trace = StorageAttribute().type(bool).default(False) - control = StorageAttribute().type(LoopControl) + trace: bool = False + control: LoopControl = USER_REQUIRED def repeat( self, @@ -444,9 +474,6 @@ class LoopTask(TaskGenerator): def _get_input(self): return LoopInput() - def _get_output(self): - return self.input.task._get_output() - def __iter__(self): task = deepcopy(self.input.task) control = deepcopy(self.input.control) From 48f611cc81f210dbe87f3f8c647260887a5ddb1c Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Thu, 4 Jan 2024 14:20:40 +0100 Subject: [PATCH 04/49] Add HasGroups to GenericStorage --- pyiron_contrib/tinybase/storage.py | 27 +++++++-------------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/pyiron_contrib/tinybase/storage.py b/pyiron_contrib/tinybase/storage.py index bf87bdf27..b6a4275b2 100644 --- a/pyiron_contrib/tinybase/storage.py +++ b/pyiron_contrib/tinybase/storage.py @@ -3,6 +3,7 @@ from typing import Any, Union, Optional from pyiron_base import DataContainer +from pyiron_base.interfaces.has_groups import HasGroups from pyiron_base.storage.hdfio import ProjectHDFio from pyiron_contrib.tinybase import __version__ as base__version__ @@ -10,7 +11,7 @@ import codecs -class GenericStorage(abc.ABC): +class GenericStorage(HasGroups, abc.ABC): """ Generic interface to store things. @@ -168,20 +169,6 @@ def __enter__(self): def __exit__(self, exc_type, exc_val, exc_tb): self.close() - @abc.abstractmethod - def list_nodes(self) -> list[str]: - """ - List names of values inside group. - """ - pass - - @abc.abstractmethod - def list_groups(self) -> list[str]: - """ - List name of sub groups. - """ - pass - # DESIGN: this mostly exists to help to_object()ing GenericTinyJob, but it introduces a circular-ish connection. # Maybe there's another way to do it? @property @@ -257,14 +244,14 @@ def _set(self, item, value): def create_group(self, name): return ProjectHDFioStorageAdapter(self._project, self._hdf.create_group(name)) - def list_nodes(self): + def _list_nodes(self): return self._hdf.list_nodes() - def list_groups(self): + def _list_groups(self): return self._hdf.list_groups() # compat with small bug in base ProjectHDFio - list_dirs = list_groups + list_dirs = _list_groups @property def project(self): @@ -310,10 +297,10 @@ def create_group(self, name): d = self._cont[name] return self.__class__(self._project, d, name) - def list_nodes(self): + def _list_nodes(self): return self._cont.list_nodes() - def list_groups(self): + def _list_groups(self): return self._cont.list_groups() @property From 6945fd3234d1e2f1b9f74ad55480ac335e941b3a Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Thu, 4 Jan 2024 14:21:42 +0100 Subject: [PATCH 05/49] Do not special case Storable in ProjectHDFioStorageAdapter Already done in the interface. --- pyiron_contrib/tinybase/storage.py | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/pyiron_contrib/tinybase/storage.py b/pyiron_contrib/tinybase/storage.py index b6a4275b2..726d4d587 100644 --- a/pyiron_contrib/tinybase/storage.py +++ b/pyiron_contrib/tinybase/storage.py @@ -230,16 +230,13 @@ def __getitem__(self, item): return value def _set(self, item, value): - if isinstance(value, Storable): - value.store(self, item) - else: - try: - self._hdf[item] = value - except TypeError: # HDF layer doesn't know how to write value - # h5io bug, when triggering an error in the middle of a write - # some residual data maybe left in the file - del self._hdf[item] - raise + try: + self._hdf[item] = value + except TypeError: # HDF layer doesn't know how to write value + # h5io bug, when triggering an error in the middle of a write + # some residual data maybe left in the file + del self._hdf[item] + raise def create_group(self, name): return ProjectHDFioStorageAdapter(self._project, self._hdf.create_group(name)) From f5757334e3da5032e401a25e1bf3ed9071defea4 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Thu, 4 Jan 2024 14:33:56 +0100 Subject: [PATCH 06/49] Add a GenericStorage directly using HDF5 files --- .ci_support/environment.yml | 1 + pyiron_contrib/tinybase/storage.py | 65 ++++++++++++++++++++++++++++-- setup.py | 2 +- 3 files changed, 64 insertions(+), 4 deletions(-) diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 712eced29..c7f8030e7 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -20,3 +20,4 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 +- h5io_browser =0.0.5 diff --git a/pyiron_contrib/tinybase/storage.py b/pyiron_contrib/tinybase/storage.py index 726d4d587..705ef91e7 100644 --- a/pyiron_contrib/tinybase/storage.py +++ b/pyiron_contrib/tinybase/storage.py @@ -1,5 +1,7 @@ import abc +import codecs import importlib +import pickle from typing import Any, Union, Optional from pyiron_base import DataContainer @@ -7,9 +9,7 @@ from pyiron_base.storage.hdfio import ProjectHDFio from pyiron_contrib.tinybase import __version__ as base__version__ -import pickle -import codecs - +from h5io_browser import Pointer as Hdf5Pointer class GenericStorage(HasGroups, abc.ABC): """ @@ -308,6 +308,65 @@ def project(self): def name(self): return self._name +class H5ioStorage(GenericStorage): + """ + Store objects in HDF5 files. + + Maybe created with a non existing file path or HDF5 group. Those will be created on first write access. + """ + + def __init__(self, pointer: Hdf5Pointer, project): + """ + Args: + pointer (:class:`h5io_browser.Pointer`): open pointer object to HDF5 storage + project (:class:`.tinybase.ProjectInterface`): project this storage belongs to + """ + if not isinstance(pointer, Hdf5Pointer): + raise TypeError("pointer must be a h5io_browser.Pointer!") + self._project = project + self._pointer = pointer + + @classmethod + def from_file(cls, project, file: str, path: str = None): + """ + Open a storage from the given file and HDF group within. + + Args: + project (:class:`.tinybase.ProjectInterface`): project this storage belongs to + file (str): file path to the HDF5 file + path (str): group path within the HDF5 file + """ + pointer = Hdf5Pointer(file) + if path is not None: + pointer = pointer[path] + return cls(project, pointer) + + def __getitem__(self, item): + value = self._pointer[item] + if isinstance(value, Hdf5Pointer): + return type(self)(value, project=self._project) + else: + return value + + def _set(self, item, value): + self._pointer[item] = value + + def create_group(self, name): + return type(self)(self._pointer[name], project=self._project) + + def _list_nodes(self): + return self._pointer.list_h5_path()["nodes"] + + def _list_groups(self): + return self._pointer.list_h5_path()["groups"] + + @property + def project(self): + return self._project + + @property + def name(self): + return self._pointer.h5_path.rsplit("/", maxsplit=1)[1] # DESIGN: equivalent of HasHDF but with generalized language class Storable(abc.ABC): diff --git a/setup.py b/setup.py index dadb6df15..e27595cce 100644 --- a/setup.py +++ b/setup.py @@ -55,8 +55,8 @@ 'tinybase': [ 'distributed==2023.12.1', 'pympipool==0.7.9' + 'h5io_browser==0.0.5', ] }, cmdclass=versioneer.get_cmdclass(), - ) From b7fd2cdbef6825817f75115245a8044dafb53853 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Thu, 4 Jan 2024 15:50:03 +0100 Subject: [PATCH 07/49] Add two projects that use H5io directly; w/o pyiron_base adapters --- pyiron_contrib/tinybase/project.py | 73 ++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/pyiron_contrib/tinybase/project.py b/pyiron_contrib/tinybase/project.py index 4bade3d81..a736635ef 100644 --- a/pyiron_contrib/tinybase/project.py +++ b/pyiron_contrib/tinybase/project.py @@ -1,4 +1,5 @@ import abc +import os import os.path from typing import Union @@ -7,7 +8,9 @@ GenericStorage, ProjectHDFioStorageAdapter, DataContainerAdapter, + H5ioStorage, ) +from h5io_browser import Pointer as Hdf5Pointer from pyiron_contrib.tinybase.database import TinyDB, GenericDatabase @@ -107,6 +110,76 @@ def remove(self, job_id): # TODO: # def copy_to/move_to across types of ProjectInterface +class FilesystemProject(ProjectInterface): + """ + A plain project that stores data in HDF5 files on the filesystem and uses TinyDB. + + The database file will be created in the first location opened, but sub projects created from this object will share + a database. A global database is not yet supported. + """ + + def __init__(self, path): + """ + Args: + path (str): path to the project folder; will be created if non-existing. + """ + self._path = path + self._database = None + + @classmethod + def open_location(cls, path): + return cls(path) + + def _get_job_file(self, name): + return os.path.join(self._path, name) + ".h5" + + def create_storage(self, name): + if not os.path.exists(self.path): + os.makedirs(self.path, exist_ok=True) + return H5ioStorage.from_file( + self, self._get_job_file(name), name + ) + + def exists_storage(self, name): + return os.path.exists(self._get_job_file(name)) + + def remove_storage(self, name): + try: + os.remove(self._get_job_file(name)) + except FileNotFoundError: + pass + + def _get_database(self): + if self._database is None: + self._database = TinyDB(os.path.join(self.path, "pyiron.db")) + return self._database + + @property + def name(self): + return os.path.basename(self._path) + + @property + def path(self): + return self._path + +class SingleHdfProject(FilesystemProject): + """ + Behaves likes a :class:`~.FilesystemProject` but stores all jobs in a single HDF5 file. + """ + + def _get_hdf(self): + return H5ioStorage.from_file(self, os.path.join(self.path, "project.h5")) + + def create_storage(self, name): + if not os.path.exists(self.path): + os.makedirs(self.path, exist_ok=True) + return self._get_hdf()[name] + + def exists_storage(self, name): + return name in self._get_hdf()[".."].list_groups() + + def remove_storage(self, name): + del self._get_hdf()[name] class ProjectAdapter(ProjectInterface): def __init__(self, project): From 1e32819b262f481d4c65a8f2b3ff0f0a326aba5a Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Thu, 4 Jan 2024 15:50:39 +0100 Subject: [PATCH 08/49] Add __delitem__ to storage interface --- pyiron_contrib/tinybase/storage.py | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/pyiron_contrib/tinybase/storage.py b/pyiron_contrib/tinybase/storage.py index 705ef91e7..ac054e8d9 100644 --- a/pyiron_contrib/tinybase/storage.py +++ b/pyiron_contrib/tinybase/storage.py @@ -111,6 +111,8 @@ def __setitem__(self, item: str, value: Any): item (str): name of the value value (object): value to store """ + if item in self.list_groups(): + del self[item] if isinstance(value, Storable): value.store(self, group_name=item) else: @@ -122,6 +124,16 @@ def __setitem__(self, item: str, value: Any): else: self[item] = PickleStorable(value) + @abc.abstractmethod + def __delitem__(self, item: str): + """ + Remove a group or node. + + Args: + item (str): name of the item to delete + """ + pass + @abc.abstractmethod def create_group(self, name): """ @@ -238,6 +250,9 @@ def _set(self, item, value): del self._hdf[item] raise + def __delitem__(self, item): + del self._hdf[item] + def create_group(self, name): return ProjectHDFioStorageAdapter(self._project, self._hdf.create_group(name)) @@ -287,6 +302,9 @@ def __getitem__(self, item: str) -> Union["GenericStorage", Any]: def _set(self, item: str, value: Any): self._cont[item] = value + def __delitem__(self, item): + del self._cont[item] + def create_group(self, name): if name not in self._cont: d = self._cont.create_group(name) @@ -339,7 +357,7 @@ def from_file(cls, project, file: str, path: str = None): pointer = Hdf5Pointer(file) if path is not None: pointer = pointer[path] - return cls(project, pointer) + return cls(pointer, project=project) def __getitem__(self, item): value = self._pointer[item] @@ -351,6 +369,9 @@ def __getitem__(self, item): def _set(self, item, value): self._pointer[item] = value + def __delitem__(self, item): + del self._pointer[item] + def create_group(self, name): return type(self)(self._pointer[name], project=self._project) From becd34824d230f5ce26817261a2f632e4c59f7bb Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Thu, 4 Jan 2024 15:50:49 +0100 Subject: [PATCH 09/49] Update job examples --- notebooks/tinybase/TinyJob.ipynb | 1713 +++++++++--------------------- 1 file changed, 516 insertions(+), 1197 deletions(-) diff --git a/notebooks/tinybase/TinyJob.ipynb b/notebooks/tinybase/TinyJob.ipynb index e8ab50d55..0964e7fe7 100644 --- a/notebooks/tinybase/TinyJob.ipynb +++ b/notebooks/tinybase/TinyJob.ipynb @@ -26,7 +26,7 @@ } ], "source": [ - "from pyiron_contrib.tinybase.project import ProjectAdapter, InMemoryProject" + "from pyiron_contrib.tinybase.project import FilesystemProject, InMemoryProject" ] }, { @@ -71,7 +71,7 @@ }, "outputs": [], "source": [ - "pr = ProjectAdapter.open_location('tinyjob')" + "pr = FilesystemProject.open_location('tinyjob')" ] }, { @@ -95,7 +95,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ce40e4194af0455e84cabb747fa7786c", + "model_id": "d31ec15aeb7b4e06ad10b5f522ed6b88", "version_major": 2, "version_minor": 0 }, @@ -148,7 +148,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 8, @@ -194,7 +194,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "0d21ad69059544b9967cf5eeeec71900", + "model_id": "6ff36b28a9284eb78dd860df53174692", "version_major": 2, "version_minor": 0 }, @@ -277,49 +277,49 @@ "output_type": "stream", "text": [ " Step Time Energy fmax\n", - "LBFGS: 0 21:52:05 11.288146 189.5231\n", - "LBFGS: 1 21:52:05 1.168671 43.6957\n", - "LBFGS: 2 21:52:05 0.860403 38.6924\n", - "LBFGS: 3 21:52:05 0.362400 30.3554\n", - "LBFGS: 4 21:52:05 0.004806 24.0865\n", - "LBFGS: 5 21:52:05 -0.267437 19.0615\n", - "LBFGS: 6 21:52:05 -0.471646 15.0628\n", - "LBFGS: 7 21:52:05 -0.623506 11.8810\n", - "LBFGS: 8 21:52:05 -0.735237 9.3518\n", - "LBFGS: 9 21:52:05 -0.816458 7.3435\n", - "LBFGS: 10 21:52:05 -0.874705 5.7512\n", - "LBFGS: 11 21:52:05 -0.915849 4.4909\n", - "LBFGS: 12 21:52:05 -0.944435 3.4955\n", - "LBFGS: 13 21:52:05 -0.963943 2.7113\n", - "LBFGS: 14 21:52:05 -0.977006 2.0956\n", - "LBFGS: 15 21:52:05 -0.985585 1.6137\n", - "LBFGS: 16 21:52:05 -0.991109 1.2382\n", - "LBFGS: 17 21:52:05 -0.994598 0.9468\n", - "LBFGS: 18 21:52:05 -0.996763 0.7216\n", - "LBFGS: 19 21:52:05 -0.998083 0.5484\n", - "LBFGS: 20 21:52:05 -0.998876 0.4157\n", - "LBFGS: 21 21:52:05 -0.999347 0.3144\n", - "LBFGS: 22 21:52:05 -0.999623 0.2374\n", - "LBFGS: 23 21:52:05 -0.999784 0.1790\n", - "LBFGS: 24 21:52:05 -0.999877 0.1348\n", - "LBFGS: 25 21:52:05 -0.999930 0.1014\n", - "LBFGS: 26 21:52:05 -0.999960 0.0762\n", - "LBFGS: 27 21:52:05 -0.999977 0.0573\n", - "LBFGS: 28 21:52:05 -0.999987 0.0430\n", - "LBFGS: 29 21:52:05 -0.999993 0.0323\n", - "LBFGS: 30 21:52:05 -0.999996 0.0242\n", - "LBFGS: 31 21:52:05 -0.999998 0.0182\n", - "LBFGS: 32 21:52:05 -0.999999 0.0136\n", - "LBFGS: 33 21:52:05 -0.999999 0.0102\n", - "LBFGS: 34 21:52:05 -1.000000 0.0077\n", - "LBFGS: 35 21:52:05 -1.000000 0.0058\n", - "LBFGS: 36 21:52:05 -1.000000 0.0043\n", - "LBFGS: 37 21:52:05 -1.000000 0.0032\n", - "LBFGS: 38 21:52:05 -1.000000 0.0024\n", - "LBFGS: 39 21:52:05 -1.000000 0.0018\n", - "LBFGS: 40 21:52:05 -1.000000 0.0014\n", - "LBFGS: 41 21:52:05 -1.000000 0.0010\n", - "LBFGS: 42 21:52:05 -1.000000 0.0008\n" + "LBFGS: 0 15:48:28 11.288146 189.5231\n", + "LBFGS: 1 15:48:28 1.168671 43.6957\n", + "LBFGS: 2 15:48:28 0.860403 38.6924\n", + "LBFGS: 3 15:48:28 0.362400 30.3554\n", + "LBFGS: 4 15:48:28 0.004806 24.0865\n", + "LBFGS: 5 15:48:28 -0.267437 19.0615\n", + "LBFGS: 6 15:48:28 -0.471646 15.0628\n", + "LBFGS: 7 15:48:28 -0.623506 11.8810\n", + "LBFGS: 8 15:48:28 -0.735237 9.3518\n", + "LBFGS: 9 15:48:28 -0.816458 7.3435\n", + "LBFGS: 10 15:48:28 -0.874705 5.7512\n", + "LBFGS: 11 15:48:28 -0.915849 4.4909\n", + "LBFGS: 12 15:48:28 -0.944435 3.4955\n", + "LBFGS: 13 15:48:28 -0.963943 2.7113\n", + "LBFGS: 14 15:48:28 -0.977006 2.0956\n", + "LBFGS: 15 15:48:28 -0.985585 1.6137\n", + "LBFGS: 16 15:48:28 -0.991109 1.2382\n", + "LBFGS: 17 15:48:28 -0.994598 0.9468\n", + "LBFGS: 18 15:48:28 -0.996763 0.7216\n", + "LBFGS: 19 15:48:28 -0.998083 0.5484\n", + "LBFGS: 20 15:48:28 -0.998876 0.4157\n", + "LBFGS: 21 15:48:28 -0.999347 0.3144\n", + "LBFGS: 22 15:48:28 -0.999623 0.2374\n", + "LBFGS: 23 15:48:28 -0.999784 0.1790\n", + "LBFGS: 24 15:48:28 -0.999877 0.1348\n", + "LBFGS: 25 15:48:28 -0.999930 0.1014\n", + "LBFGS: 26 15:48:28 -0.999960 0.0762\n", + "LBFGS: 27 15:48:28 -0.999977 0.0573\n", + "LBFGS: 28 15:48:28 -0.999987 0.0430\n", + "LBFGS: 29 15:48:28 -0.999993 0.0323\n", + "LBFGS: 30 15:48:28 -0.999996 0.0242\n", + "LBFGS: 31 15:48:28 -0.999998 0.0182\n", + "LBFGS: 32 15:48:28 -0.999999 0.0136\n", + "LBFGS: 33 15:48:28 -0.999999 0.0102\n", + "LBFGS: 34 15:48:28 -1.000000 0.0077\n", + "LBFGS: 35 15:48:28 -1.000000 0.0058\n", + "LBFGS: 36 15:48:28 -1.000000 0.0043\n", + "LBFGS: 37 15:48:28 -1.000000 0.0032\n", + "LBFGS: 38 15:48:28 -1.000000 0.0024\n", + "LBFGS: 39 15:48:28 -1.000000 0.0018\n", + "LBFGS: 40 15:48:28 -1.000000 0.0014\n", + "LBFGS: 41 15:48:28 -1.000000 0.0010\n", + "LBFGS: 42 15:48:28 -1.000000 0.0008\n" ] } ], @@ -379,7 +379,7 @@ " 1\n", " 1\n", " 1\n", - " /home/ponder/science/phd/dev/contrib/notebooks...\n", + " tinyjob\n", " finished\n", " AseMDTask\n", " \n", @@ -391,7 +391,7 @@ " 2\n", " 1\n", " 2\n", - " /home/ponder/science/phd/dev/contrib/notebooks...\n", + " tinyjob\n", " finished\n", " AseMinimizeTask\n", " \n", @@ -400,13 +400,9 @@ "" ], "text/plain": [ - " id username name jobtype_id project_id status_id \\\n", - "0 1 pyiron md 1 1 1 \n", - "1 2 pyiron min 2 1 2 \n", - "\n", - " location status \\\n", - "0 /home/ponder/science/phd/dev/contrib/notebooks... finished \n", - "1 /home/ponder/science/phd/dev/contrib/notebooks... finished \n", + " id username name jobtype_id project_id status_id location status \\\n", + "0 1 pyiron md 1 1 1 tinyjob finished \n", + "1 2 pyiron min 2 1 2 tinyjob finished \n", "\n", " type \n", "0 AseMDTask \n", @@ -456,7 +452,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fa5ea10926a449d4b77abc162d70178d", + "model_id": "59fe5f6c572a423e8b660aef1a486c18", "version_major": 2, "version_minor": 0 }, @@ -506,7 +502,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 19, "id": "db691097-72c6-45a4-89b1-6ec16018c8b8", "metadata": { "tags": [] @@ -529,14 +525,14 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 20, "id": "23ce6822-b38b-41f3-9269-109dbb152ecf", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6ea3657f68ca462188997ae2514683ce", + "model_id": "ad5a693af9a043c4a4212ac050de7059", "version_major": 2, "version_minor": 0 }, @@ -562,7 +558,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 21, "id": "654ce992-b73f-42e3-a32e-2e0dafa7c952", "metadata": { "tags": [] @@ -574,7 +570,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 22, "id": "253237f0-b338-470c-bc54-3c7400a757b7", "metadata": {}, "outputs": [], @@ -585,7 +581,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 23, "id": "c801093b-499e-48a7-8444-77602ed88a96", "metadata": {}, "outputs": [], @@ -595,7 +591,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 24, "id": "1e30b36e-11e6-47d1-836e-cffea7b73cdd", "metadata": {}, "outputs": [], @@ -605,7 +601,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 25, "id": "18b5305a-8950-44af-bc2e-c9734b059713", "metadata": {}, "outputs": [ @@ -613,8 +609,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 489 ms, sys: 262 ms, total: 751 ms\n", - "Wall time: 5.04 s\n" + "CPU times: user 584 ms, sys: 228 ms, total: 812 ms\n", + "Wall time: 5.02 s\n" ] } ], @@ -626,7 +622,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 26, "id": "836bb2ec-4295-4a3c-b976-7a35d04aad36", "metadata": {}, "outputs": [ @@ -657,7 +653,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 27, "id": "79a2bb61-0a5e-4a3a-b195-46d027738a0e", "metadata": {}, "outputs": [], @@ -667,7 +663,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 28, "id": "b4e6e0c9-a2c6-40ab-884e-a46e16c37b04", "metadata": {}, "outputs": [ @@ -705,7 +701,7 @@ "Index: []" ] }, - "execution_count": 37, + "execution_count": 28, "metadata": {}, "output_type": "execute_result" } @@ -716,7 +712,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 29, "id": "cef7c46f-551f-401e-96c2-214628e23967", "metadata": {}, "outputs": [ @@ -744,7 +740,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 30, "id": "e8a7ee30-d7a6-46fc-bf98-1b52c981470f", "metadata": {}, "outputs": [ @@ -805,7 +801,7 @@ "0 MurnaghanTask " ] }, - "execution_count": 40, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -816,7 +812,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 31, "id": "30871447-3e20-46ee-a58e-853d4f4cb5d9", "metadata": {}, "outputs": [], @@ -834,7 +830,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 32, "id": "e63d43c1-341f-4ec0-b0cf-9cd5ead51926", "metadata": {}, "outputs": [ @@ -909,7 +905,7 @@ "1 AseMDTask " ] }, - "execution_count": 43, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -928,17 +924,17 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 33, "id": "80da39e2-76d1-42e6-977f-241d2683188d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 44, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -957,7 +953,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 34, "id": "a567f96a-cbb3-4d2d-95d1-6dcecee7ddb8", "metadata": {}, "outputs": [ @@ -1046,7 +1042,7 @@ "2 AseMDTask " ] }, - "execution_count": 45, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } @@ -1054,213 +1050,6 @@ "source": [ "pr.job_table()" ] - }, - { - "cell_type": "code", - "execution_count": 49, - "id": "1fd1d8fa-14e1-4ece-9046-a4b4b3dc67b2", - "metadata": {}, - "outputs": [ - { - "data": { - "application/json": { - "MODULE": "'pyiron_contrib.tinybase.job'", - "NAME": "'TinyJob'", - "VERSION": "'0.1.0'", - "output": { - "MODULE": "'pyiron_contrib.tinybase.container'", - "NAME": "'MDOutput'", - "VERSION": "'0.1.0'", - "forces": "array([[[-2.30535051e-16, 3.43108906e-16, 8.18606310e-16],\n [ 3.92914867e-15, 4.07037956e-15, 3.97855441e-15],\n [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\n ...,\n [ 5.01855502e-15, 2.71484224e-15, 3.48679419e-15],\n [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\n [ 8.88872309e-15, 9.54271384e-15, 8.00054467e-15]],\n\n [[-2.30535051e-16, 3.43108906e-16, 8.18606310e-16],\n [ 3.92914867e-15, 4.07037956e-15, 3.97855441e-15],\n [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\n ...,\n [ 5.01855502e-15, 2.71484224e-15, 3.48679419e-15],\n [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\n [ 8.88872309e-15, 9.54271384e-15, 8.00054467e-15]],\n\n [[-2.62343424e+00, 2.33470784e+00, -2.75674956e-01],\n [ 1.34300409e-01, -3.71159924e+00, 3.24313170e+00],\n [ 2.28837018e+00, 1.95906120e+00, -6.41849344e-01],\n ...,\n [-3.02141357e+00, -1.11760933e+00, -7.86318321e-02],\n [ 4.37108693e-01, -2.10195959e+00, 2.52954445e+00],\n [ 1.73525765e+00, -2.15149182e-01, -4.66258900e+00]],\n\n ...,\n\n [[-1.61309469e+00, 2.40173133e+00, 8.60005712e-01],\n [ 1.01627163e+00, -2.04876021e+00, -2.69841159e+00],\n [-9.63580772e-01, -1.30314575e+00, 1.54826711e+00],\n ...,\n [ 2.33622011e+00, 1.42458080e+00, -8.55704425e-01],\n [-6.21417936e-01, -2.75845670e+00, 7.99085620e-01],\n [ 6.07076042e-03, 1.96134732e+00, -1.09215293e+00]],\n\n [[ 3.78152342e+00, -2.83734650e-01, 5.78468269e-01],\n [-2.62359615e+00, -5.18478229e-03, 9.99962596e-01],\n [-2.44758733e+00, 1.06464273e+00, -1.20864327e+00],\n ...,\n [-1.43161830e+00, 8.65487360e-02, 1.17823380e+00],\n [ 2.34453798e+00, 2.31271042e+00, -5.46357930e-01],\n [-2.42503197e+00, -4.71949261e-01, 3.04565045e+00]],\n\n [[-1.35294632e+00, -2.59425328e+00, -3.21526120e-01],\n [ 1.21015573e-01, 3.62524895e+00, 2.13228164e+00],\n [ 1.33292882e+00, -1.96341262e+00, 9.62968351e-01],\n ...,\n [ 1.99029559e+00, -2.09015234e+00, -1.81056408e+00],\n [-4.45269875e-01, 9.81351247e-02, -6.07960535e-01],\n [ 5.86512442e-01, -2.71503576e-01, -7.72907895e-01]]])", - "kin_energies": "array([2.18790726, 2.18790726, 1.0970859 , 1.62979581, 1.4684253 ,\n 1.37830557, 1.93724633, 1.26634897, 1.55280343, 1.62287952,\n 1.13141317, 1.61268185, 1.40292567, 1.69516696, 1.41598182,\n 1.40895748, 1.62565179, 1.03176305, 1.43441957, 1.1846772 ,\n 1.26321823, 1.53552591])", - "pot_energies": "array([-89.83944672, -89.83944672, -88.79068917, -89.32677211,\n -89.19409937, -89.068648 , -89.63530583, -88.92931106,\n -89.23369466, -89.31282598, -88.76200655, -89.26374679,\n -89.02356514, -89.34006743, -89.07854473, -89.0420929 ,\n -89.27307395, -88.64864703, -89.1008584 , -88.84143321,\n -88.90896464, -89.16142015])", - "structures": "[Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...)]" - }, - "task": { - "MODULE": "'pyiron_contrib.tinybase.ase'", - "NAME": "'AseMDTask'", - "VERSION": "'0.1.0'", - "input": { - "MODULE": "'pyiron_contrib.tinybase.ase'", - "NAME": "'AseMDInput'", - "VERSION": "'0.1.0'", - "calculator": "", - "output_steps": "20", - "steps": "100", - "structure": "Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4])", - "temperature": "600.0", - "timestep": "3.0" - } - } - }, - "text/html": [ - "
DataContainer({\n",
-       "  \"NAME\": \"'TinyJob'\",\n",
-       "  \"MODULE\": \"'pyiron_contrib.tinybase.job'\",\n",
-       "  \"VERSION\": \"'0.1.0'\",\n",
-       "  \"task\": {\n",
-       "    \"NAME\": \"'AseMDTask'\",\n",
-       "    \"MODULE\": \"'pyiron_contrib.tinybase.ase'\",\n",
-       "    \"VERSION\": \"'0.1.0'\",\n",
-       "    \"input\": {\n",
-       "      \"NAME\": \"'AseMDInput'\",\n",
-       "      \"MODULE\": \"'pyiron_contrib.tinybase.ase'\",\n",
-       "      \"VERSION\": \"'0.1.0'\",\n",
-       "      \"steps\": \"100\",\n",
-       "      \"timestep\": \"3.0\",\n",
-       "      \"temperature\": \"600.0\",\n",
-       "      \"output_steps\": \"20\",\n",
-       "      \"structure\": \"Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4])\",\n",
-       "      \"calculator\": \"\"\n",
-       "    }\n",
-       "  },\n",
-       "  \"output\": {\n",
-       "    \"NAME\": \"'MDOutput'\",\n",
-       "    \"MODULE\": \"'pyiron_contrib.tinybase.container'\",\n",
-       "    \"VERSION\": \"'0.1.0'\",\n",
-       "    \"pot_energies\": \"array([-89.83944672, -89.83944672, -88.79068917, -89.32677211,\\n       -89.19409937, -89.068648  , -89.63530583, -88.92931106,\\n       -89.23369466, -89.31282598, -88.76200655, -89.26374679,\\n       -89.02356514, -89.34006743, -89.07854473, -89.0420929 ,\\n       -89.27307395, -88.64864703, -89.1008584 , -88.84143321,\\n       -88.90896464, -89.16142015])\",\n",
-       "    \"kin_energies\": \"array([2.18790726, 2.18790726, 1.0970859 , 1.62979581, 1.4684253 ,\\n       1.37830557, 1.93724633, 1.26634897, 1.55280343, 1.62287952,\\n       1.13141317, 1.61268185, 1.40292567, 1.69516696, 1.41598182,\\n       1.40895748, 1.62565179, 1.03176305, 1.43441957, 1.1846772 ,\\n       1.26321823, 1.53552591])\",\n",
-       "    \"forces\": \"array([[[-2.30535051e-16,  3.43108906e-16,  8.18606310e-16],\\n        [ 3.92914867e-15,  4.07037956e-15,  3.97855441e-15],\\n        [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\\n        ...,\\n        [ 5.01855502e-15,  2.71484224e-15,  3.48679419e-15],\\n        [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\\n        [ 8.88872309e-15,  9.54271384e-15,  8.00054467e-15]],\\n\\n       [[-2.30535051e-16,  3.43108906e-16,  8.18606310e-16],\\n        [ 3.92914867e-15,  4.07037956e-15,  3.97855441e-15],\\n        [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\\n        ...,\\n        [ 5.01855502e-15,  2.71484224e-15,  3.48679419e-15],\\n        [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\\n        [ 8.88872309e-15,  9.54271384e-15,  8.00054467e-15]],\\n\\n       [[-2.62343424e+00,  2.33470784e+00, -2.75674956e-01],\\n        [ 1.34300409e-01, -3.71159924e+00,  3.24313170e+00],\\n        [ 2.28837018e+00,  1.95906120e+00, -6.41849344e-01],\\n        ...,\\n        [-3.02141357e+00, -1.11760933e+00, -7.86318321e-02],\\n        [ 4.37108693e-01, -2.10195959e+00,  2.52954445e+00],\\n        [ 1.73525765e+00, -2.15149182e-01, -4.66258900e+00]],\\n\\n       ...,\\n\\n       [[-1.61309469e+00,  2.40173133e+00,  8.60005712e-01],\\n        [ 1.01627163e+00, -2.04876021e+00, -2.69841159e+00],\\n        [-9.63580772e-01, -1.30314575e+00,  1.54826711e+00],\\n        ...,\\n        [ 2.33622011e+00,  1.42458080e+00, -8.55704425e-01],\\n        [-6.21417936e-01, -2.75845670e+00,  7.99085620e-01],\\n        [ 6.07076042e-03,  1.96134732e+00, -1.09215293e+00]],\\n\\n       [[ 3.78152342e+00, -2.83734650e-01,  5.78468269e-01],\\n        [-2.62359615e+00, -5.18478229e-03,  9.99962596e-01],\\n        [-2.44758733e+00,  1.06464273e+00, -1.20864327e+00],\\n        ...,\\n        [-1.43161830e+00,  8.65487360e-02,  1.17823380e+00],\\n        [ 2.34453798e+00,  2.31271042e+00, -5.46357930e-01],\\n        [-2.42503197e+00, -4.71949261e-01,  3.04565045e+00]],\\n\\n       [[-1.35294632e+00, -2.59425328e+00, -3.21526120e-01],\\n        [ 1.21015573e-01,  3.62524895e+00,  2.13228164e+00],\\n        [ 1.33292882e+00, -1.96341262e+00,  9.62968351e-01],\\n        ...,\\n        [ 1.99029559e+00, -2.09015234e+00, -1.81056408e+00],\\n        [-4.45269875e-01,  9.81351247e-02, -6.07960535e-01],\\n        [ 5.86512442e-01, -2.71503576e-01, -7.72907895e-01]]])\",\n",
-       "    \"structures\": \"[Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...)]\"\n",
-       "  }\n",
-       "})
" - ], - "text/plain": [ - "DataContainer({'NAME': 'TinyJob', 'MODULE': 'pyiron_contrib.tinybase.job', 'VERSION': '0.1.0', 'task': DataContainer({'NAME': 'AseMDTask', 'MODULE': 'pyiron_contrib.tinybase.ase', 'VERSION': '0.1.0', 'input': DataContainer({'NAME': 'AseMDInput', 'MODULE': 'pyiron_contrib.tinybase.ase', 'VERSION': '0.1.0', 'steps': 100, 'timestep': 3.0, 'temperature': 600.0, 'output_steps': 20, 'structure': Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4]), 'calculator': })}), 'output': DataContainer({'NAME': 'MDOutput', 'MODULE': 'pyiron_contrib.tinybase.container', 'VERSION': '0.1.0', 'pot_energies': array([-89.83944672, -89.83944672, -88.79068917, -89.32677211,\n", - " -89.19409937, -89.068648 , -89.63530583, -88.92931106,\n", - " -89.23369466, -89.31282598, -88.76200655, -89.26374679,\n", - " -89.02356514, -89.34006743, -89.07854473, -89.0420929 ,\n", - " -89.27307395, -88.64864703, -89.1008584 , -88.84143321,\n", - " -88.90896464, -89.16142015]), 'kin_energies': array([2.18790726, 2.18790726, 1.0970859 , 1.62979581, 1.4684253 ,\n", - " 1.37830557, 1.93724633, 1.26634897, 1.55280343, 1.62287952,\n", - " 1.13141317, 1.61268185, 1.40292567, 1.69516696, 1.41598182,\n", - " 1.40895748, 1.62565179, 1.03176305, 1.43441957, 1.1846772 ,\n", - " 1.26321823, 1.53552591]), 'forces': array([[[-2.30535051e-16, 3.43108906e-16, 8.18606310e-16],\n", - " [ 3.92914867e-15, 4.07037956e-15, 3.97855441e-15],\n", - " [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\n", - " ...,\n", - " [ 5.01855502e-15, 2.71484224e-15, 3.48679419e-15],\n", - " [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\n", - " [ 8.88872309e-15, 9.54271384e-15, 8.00054467e-15]],\n", - "\n", - " [[-2.30535051e-16, 3.43108906e-16, 8.18606310e-16],\n", - " [ 3.92914867e-15, 4.07037956e-15, 3.97855441e-15],\n", - " [-7.48500654e-15, -9.96284218e-15, -1.79533377e-15],\n", - " ...,\n", - " [ 5.01855502e-15, 2.71484224e-15, 3.48679419e-15],\n", - " [-8.04217803e-15, -9.15240106e-15, -7.19563298e-15],\n", - " [ 8.88872309e-15, 9.54271384e-15, 8.00054467e-15]],\n", - "\n", - " [[-2.62343424e+00, 2.33470784e+00, -2.75674956e-01],\n", - " [ 1.34300409e-01, -3.71159924e+00, 3.24313170e+00],\n", - " [ 2.28837018e+00, 1.95906120e+00, -6.41849344e-01],\n", - " ...,\n", - " [-3.02141357e+00, -1.11760933e+00, -7.86318321e-02],\n", - " [ 4.37108693e-01, -2.10195959e+00, 2.52954445e+00],\n", - " [ 1.73525765e+00, -2.15149182e-01, -4.66258900e+00]],\n", - "\n", - " ...,\n", - "\n", - " [[-1.61309469e+00, 2.40173133e+00, 8.60005712e-01],\n", - " [ 1.01627163e+00, -2.04876021e+00, -2.69841159e+00],\n", - " [-9.63580772e-01, -1.30314575e+00, 1.54826711e+00],\n", - " ...,\n", - " [ 2.33622011e+00, 1.42458080e+00, -8.55704425e-01],\n", - " [-6.21417936e-01, -2.75845670e+00, 7.99085620e-01],\n", - " [ 6.07076042e-03, 1.96134732e+00, -1.09215293e+00]],\n", - "\n", - " [[ 3.78152342e+00, -2.83734650e-01, 5.78468269e-01],\n", - " [-2.62359615e+00, -5.18478229e-03, 9.99962596e-01],\n", - " [-2.44758733e+00, 1.06464273e+00, -1.20864327e+00],\n", - " ...,\n", - " [-1.43161830e+00, 8.65487360e-02, 1.17823380e+00],\n", - " [ 2.34453798e+00, 2.31271042e+00, -5.46357930e-01],\n", - " [-2.42503197e+00, -4.71949261e-01, 3.04565045e+00]],\n", - "\n", - " [[-1.35294632e+00, -2.59425328e+00, -3.21526120e-01],\n", - " [ 1.21015573e-01, 3.62524895e+00, 2.13228164e+00],\n", - " [ 1.33292882e+00, -1.96341262e+00, 9.62968351e-01],\n", - " ...,\n", - " [ 1.99029559e+00, -2.09015234e+00, -1.81056408e+00],\n", - " [-4.45269875e-01, 9.81351247e-02, -6.07960535e-01],\n", - " [ 5.86512442e-01, -2.71503576e-01, -7.72907895e-01]]]), 'structures': [Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...), Atoms(symbols='Fe16', pbc=True, cell=[2.4, 2.4, 2.4], momenta=...)]})})" - ] - }, - "execution_count": 49, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "j.storage._cont" - ] - }, - { - "cell_type": "code", - "execution_count": 48, - "id": "6c7a623f-e281-4e70-901b-2cd7872872b1", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "['_project',\n", - " '_cont',\n", - " '_name',\n", - " '__module__',\n", - " '__doc__',\n", - " '__init__',\n", - " '__getitem__',\n", - " '_set',\n", - " 'create_group',\n", - " 'list_nodes',\n", - " 'list_groups',\n", - " 'project',\n", - " 'name',\n", - " '__abstractmethods__',\n", - " '_abc_impl',\n", - " 'get',\n", - " '__setitem__',\n", - " 'open',\n", - " 'close',\n", - " '__enter__',\n", - " '__exit__',\n", - " 'to_object',\n", - " '__dict__',\n", - " '__weakref__',\n", - " '__slots__',\n", - " '__new__',\n", - " '__repr__',\n", - " '__hash__',\n", - " '__str__',\n", - " '__getattribute__',\n", - " '__setattr__',\n", - " '__delattr__',\n", - " '__lt__',\n", - " '__le__',\n", - " '__eq__',\n", - " '__ne__',\n", - " '__gt__',\n", - " '__ge__',\n", - " '__reduce_ex__',\n", - " '__reduce__',\n", - " '__getstate__',\n", - " '__subclasshook__',\n", - " '__init_subclass__',\n", - " '__format__',\n", - " '__sizeof__',\n", - " '__dir__',\n", - " '__class__']" - ] - }, - "execution_count": 48, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "j.storage.__dir__()" - ] } ], "metadata": { @@ -1284,48 +1073,209 @@ "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { - "02b5f410cf1f4c918efe5b60df593d97": { + "0a002f8e4a8740cb8ad2316a5a26b313": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_3a0064876a7f4e98bfb267f62ec63892", + "value" + ], + "target": [ + "IPY_MODEL_ad5a693af9a043c4a4212ac050de7059", + "frame" + ] + } + }, + "0d8be4afa564446c9cc7c34417c3d66b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_2bf44ea06e744b6aa8225e5ea5f5f121", + "value" + ], + "target": [ + "IPY_MODEL_37d125c6051843e3867636c19027f101", + "value" + ] + } + }, + "10d72eb911034f878003b9af0e5a050d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "16ebcbdddefe445e92feccb35962fb75": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", + "state": {} + }, + "25e351b99ca748e4bcdc313c232d20bc": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", "state": { - "width": "34px" + "description_width": "" + } + }, + "2bf44ea06e744b6aa8225e5ea5f5f121": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_a0b5ad869deb4a09a909de9836a9b86a", + "max": 21, + "style": "IPY_MODEL_3cb94c258e4349fe9d36dbe4b6597013" } }, - "0a4cb31165cd4eb89830dd0f36aa7c1e": { + "2d1615d16e4247e681b25595f7470206": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "2df5c436cc894bd09bd51332d193c728": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonStyleModel", "state": {} }, - "0d21ad69059544b9967cf5eeeec71900": { + "312ccb87446e4ef798638418e84b6645": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_f14bae1fbf4540f883736303a1a73e8d", + "max" + ], + "target": [ + "IPY_MODEL_59fe5f6c572a423e8b660aef1a486c18", + "max_frame" + ] + } + }, + "33216e0960ec4e6d8df7e122717bb329": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "37d125c6051843e3867636c19027f101": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "layout": "IPY_MODEL_bc1a83d64dbe43c8abf0f7cc28f034cf", + "max": 21, + "style": "IPY_MODEL_a5fa61609eb8494bac75276abcf5aa62" + } + }, + "3a0064876a7f4e98bfb267f62ec63892": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_10d72eb911034f878003b9af0e5a050d", + "max": 5, + "style": "IPY_MODEL_49aa532729e04a838d627ea9876aae5d" + } + }, + "3cb94c258e4349fe9d36dbe4b6597013": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "4247217b33bb477bb0b7b331476c2f7c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_f14bae1fbf4540f883736303a1a73e8d", + "value" + ], + "target": [ + "IPY_MODEL_59fe5f6c572a423e8b660aef1a486c18", + "frame" + ] + } + }, + "46af07fb695b41b0bc889ee3e20baf79": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_2bf44ea06e744b6aa8225e5ea5f5f121", + "max" + ], + "target": [ + "IPY_MODEL_6ff36b28a9284eb78dd860df53174692", + "max_frame" + ] + } + }, + "49aa532729e04a838d627ea9876aae5d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "5687c957ddac4a2fb225cc2b642644a7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "59f3db6d4f6d43378a54e9d73ab3e585": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "icon": "compress", + "layout": "IPY_MODEL_fa234acaa2da457d8778440384b23656", + "style": "IPY_MODEL_b19230cc0b4a4743bc5e3b9d34fac0c8" + } + }, + "59fe5f6c572a423e8b660aef1a486c18": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", "state": { "_camera_orientation": [ - 14.593602577909778, + 11.095162889756295, 0, 0, 0, 0, - 14.593602577909778, + 11.095162889756295, 0, 0, 0, 0, - 14.593602577909778, + 11.095162889756295, 0, - -0.8999999761581421, - -0.8999999761581421, - -0.8999999761581421, + -0.0010000000474974513, + 0, + -0.3755000000237487, 1 ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_ae3762f2f98947db868664c6a1326dda", + "_ibtn_fullscreen": "IPY_MODEL_59f3db6d4f6d43378a54e9d73ab3e585", "_igui": null, - "_iplayer": "IPY_MODEL_c0be76a3a96f46bc902e8db25764c74f", + "_iplayer": "IPY_MODEL_a383fde41d2045beba4260f92e890162", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -1358,7 +1308,7 @@ "args": [ { "binary": false, - "data": "CRYST1 2.400 2.400 2.400 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 5 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 6 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 7 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 8 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 9 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 10 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 11 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 12 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 13 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 14 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 15 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nENDMDL\n", + "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 -0.000 0.001 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.002 -0.000 0.750 1.00 0.00 FE \nENDMDL\n", "type": "blob" } ], @@ -1562,7 +1512,7 @@ "radialSegments": 10, "radiusData": {}, "radiusScale": 1, - "radiusSize": 0.011999999473246623, + "radiusSize": 0.5, "radiusType": "vdw", "roughness": 0.4, "sele": "all", @@ -1579,7 +1529,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "17FDED62-14FB-438F-87A5-82E2F2E20B22" + "F1537BF1-1ED4-409D-A74E-3348B8695FD5" ], "_player_dict": {}, "_scene_position": {}, @@ -1591,688 +1541,102 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_bc38255e7dd44daba29fe69ad6911a47", - "max_frame": 21, + "layout": "IPY_MODEL_64f13ab1085d48b787a425249788d0cb", + "max_frame": 5, "n_components": 1, "picked": {} } }, - "0ee967c30c1c44ed8568e24a17c0cfa0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_a62a0f1514744ec08d5f939ed5df94be", - "style": "IPY_MODEL_14affce9cab74f108c3ee8ad4d1e8f47" - } - }, - "108bed51860b4b21b253466ea3f75f0f": { + "6180e365c5af432b8c6b68264801dd7a": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", + "model_name": "LinkModel", "state": { - "description_width": "" + "source": [ + "IPY_MODEL_3a0064876a7f4e98bfb267f62ec63892", + "max" + ], + "target": [ + "IPY_MODEL_ad5a693af9a043c4a4212ac050de7059", + "max_frame" + ] } }, - "144d080b0b5e4fb28be472546e16c9c9": { + "61ca4c4fd4384d01bad6db8c0a5be94c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_name": "IntSliderModel", "state": { - "children": [ - "IPY_MODEL_19cdf24fc8ab4e62a05219ff1ef81263", - "IPY_MODEL_249936014f0646f3a14d1080cec78d0b" - ], - "layout": "IPY_MODEL_f471943fcb1947f18d166b6b02d9f3ef" + "layout": "IPY_MODEL_e7093d3a1f9747e6a9406ad1cc0ac00a", + "max": 5, + "style": "IPY_MODEL_f13c120e4dfc4f1f899a597d36d8bc3f" } }, - "14affce9cab74f108c3ee8ad4d1e8f47": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", + "645e8985689a489194eeaa84581953d9": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", "state": {} }, - "19cdf24fc8ab4e62a05219ff1ef81263": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_9cab2efc281e4fc6835c0716effdd15f", - "max": 5, - "style": "IPY_MODEL_6497230e502c48ee92a49cb06c32ab6d" - } + "64f13ab1085d48b787a425249788d0cb": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} }, - "19fdca61c5f5464b9ee1799459ff329b": { + "6696c2baba1a4dc0a2b9b20b1f84e5e3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_name": "LinkModel", "state": { - "children": [ - "IPY_MODEL_42116a5e97384eee940be8ebe701cfd1", - "IPY_MODEL_30139e4607d244578e5b2b2771ddf407" + "source": [ + "IPY_MODEL_61ca4c4fd4384d01bad6db8c0a5be94c", + "max" ], - "layout": "IPY_MODEL_9183457e6d744b1abbf704716cf04236" + "target": [ + "IPY_MODEL_ad5a693af9a043c4a4212ac050de7059", + "max_frame" + ] } }, - "1bbb9155a2fd43769c452976e012fe73": { + "69b5d8a47e20486f941c996f522b7332": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", + "model_name": "ButtonModel", "state": { - "description_width": "" + "icon": "compress", + "layout": "IPY_MODEL_aa1a6fceec024b4daac0262c7ac0246e", + "style": "IPY_MODEL_2df5c436cc894bd09bd51332d193c728" } }, - "1e7d0bf41e01493892a04d95894ac486": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "20bc654a50454aeba96a0f1d2273e252": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_51a7fd1dea30444999e7050824658395", - "width": "900.0" - } - }, - "249936014f0646f3a14d1080cec78d0b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_1e7d0bf41e01493892a04d95894ac486", - "max": 5, - "style": "IPY_MODEL_ba0ac2e4973841049708071c20c31c48" - } - }, - "282b842cb9b24c7e978aedd18d52ecd4": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "30139e4607d244578e5b2b2771ddf407": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_4dbee46bfb174ba19723a81852d9735f", - "max": 5, - "style": "IPY_MODEL_1bbb9155a2fd43769c452976e012fe73" - } - }, - "30f9cad1b04a4916868b8ae3157977b8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "318214da17704d589cc9437bde628146": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_c35f800d041d41c48de7daa2488616d8", - "max": 5, - "style": "IPY_MODEL_ecc84bee67f34ec18b809756316263f8" - } - }, - "35f8b938909d48f2bd8c627d402b5dc3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_6f16f8622af8405ea222c85bdf91548f", - "value" - ], - "target": [ - "IPY_MODEL_0d21ad69059544b9967cf5eeeec71900", - "frame" - ] - } - }, - "36504819ed7c4eb8abd8d6e8de959ca8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_6f16f8622af8405ea222c85bdf91548f", - "max" - ], - "target": [ - "IPY_MODEL_0d21ad69059544b9967cf5eeeec71900", - "max_frame" - ] - } - }, - "38995112aba54857937c34fc40cd6109": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "3993fa9407cf4943a63cdbb989c9e614": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_318214da17704d589cc9437bde628146", - "value" - ], - "target": [ - "IPY_MODEL_87d92ef628f84c388d6c6501af28ea4d", - "frame" - ] - } - }, - "3c6c4f598c47480aabfb6700bf7dffb2": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_318214da17704d589cc9437bde628146", - "max" - ], - "target": [ - "IPY_MODEL_87d92ef628f84c388d6c6501af28ea4d", - "max_frame" - ] - } - }, - "3c6ca5e2a2c24696b73c91f5f552d378": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_7b52194dea4a4ba39d0815d775374cf8", - "width": "900.0" - } - }, - "42116a5e97384eee940be8ebe701cfd1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_d02698f84c534ed4b032d37f01b0e767", - "max": 5, - "style": "IPY_MODEL_e00fb3b115994e60bdeac8b05fef8a3c" - } - }, - "46b81ba49b57444cab1bbe2f5fd00d92": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_5a2c40a2636344469ac96c615b224224", - "max": 21, - "style": "IPY_MODEL_ab354c8b82d64580944bec964608e0ee" - } - }, - "4d7d755c8cda40c4bf20417cf3049bd9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_19cdf24fc8ab4e62a05219ff1ef81263", - "value" - ], - "target": [ - "IPY_MODEL_6ea3657f68ca462188997ae2514683ce", - "frame" - ] - } - }, - "4dbee46bfb174ba19723a81852d9735f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5003ecf2331640f2a2205ee1f76eb02b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_46b81ba49b57444cab1bbe2f5fd00d92", - "max" - ], - "target": [ - "IPY_MODEL_0d21ad69059544b9967cf5eeeec71900", - "max_frame" - ] - } - }, - "50ab2142131544a7a0bb42d42938f511": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "51a7fd1dea30444999e7050824658395": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5970304140b7436db540551f6d0c1db0": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5a283c2cfdbe4d09b592ea746c8a85d5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_5f93c65b33084646a6267bfef85e6247", - "width": "900.0" - } - }, - "5a2c40a2636344469ac96c615b224224": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "5f93c65b33084646a6267bfef85e6247": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "6497230e502c48ee92a49cb06c32ab6d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "670da71dec414c05a5e43ec82d0510e4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_282b842cb9b24c7e978aedd18d52ecd4", - "style": "IPY_MODEL_7b64f3398f9945c58380cf703c798003" - } - }, - "6ea3657f68ca462188997ae2514683ce": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "NGLModel", - "state": { - "_camera_orientation": [ - 11.095162889756295, - 0, - 0, - 0, - 0, - 11.095162889756295, - 0, - 0, - 0, - 0, - 11.095162889756295, - 0, - -0.0010000000474974513, - 0, - -0.3755000000237487, - 1 - ], - "_camera_str": "orthographic", - "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_0ee967c30c1c44ed8568e24a17c0cfa0", - "_igui": null, - "_iplayer": "IPY_MODEL_144d080b0b5e4fb28be472546e16c9c9", - "_ngl_color_dict": {}, - "_ngl_coordinate_resource": {}, - "_ngl_full_stage_parameters": { - "ambientColor": 14540253, - "ambientIntensity": 0.2, - "backgroundColor": "white", - "cameraEyeSep": 0.3, - "cameraFov": 40, - "cameraType": "orthographic", - "clipDist": 10, - "clipFar": 100, - "clipNear": 0, - "fogFar": 100, - "fogNear": 50, - "hoverTimeout": 0, - "impostor": true, - "lightColor": 14540253, - "lightIntensity": 1, - "mousePreset": "default", - "panSpeed": 1, - "quality": "medium", - "rotateSpeed": 2, - "sampleLevel": 0, - "tooltip": true, - "workerDefault": true, - "zoomSpeed": 1.2 - }, - "_ngl_msg_archive": [ - { - "args": [ - { - "binary": false, - "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 -0.000 0.001 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.002 -0.000 0.750 1.00 0.00 FE \nENDMDL\n", - "type": "blob" - } - ], - "kwargs": { - "defaultRepresentation": true, - "ext": "pdb", - "name": "nglview.adaptor.ASETrajectory" - }, - "methodName": "loadFile", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - }, - { - "args": [ - "spacefill" - ], - "component_index": 0, - "kwargs": { - "radius": 0.5, - "radiusType": "vdw", - "scale": 0.5, - "sele": "all" - }, - "methodName": "addRepresentation", - "reconstruc_color_scheme": false, - "target": "compList", - "type": "call_method" - }, - { - "args": [ - "ball+stick", - 0 - ], - "kwargs": {}, - "methodName": "removeRepresentationsByName", - "reconstruc_color_scheme": false, - "target": "Widget", - "type": "call_method" - }, - { - "args": [ - "unitcell" - ], - "component_index": 0, - "kwargs": { - "sele": "all" - }, - "methodName": "addRepresentation", - "reconstruc_color_scheme": false, - "target": "compList", - "type": "call_method" - }, - { - "args": [], - "kwargs": { - "cameraType": "orthographic" - }, - "methodName": "setParameters", - "reconstruc_color_scheme": false, - "target": "Stage", - "type": "call_method" - } - ], - "_ngl_original_stage_parameters": { - "ambientColor": 14540253, - "ambientIntensity": 0.2, - "backgroundColor": "white", - "cameraEyeSep": 0.3, - "cameraFov": 40, - "cameraType": "perspective", - "clipDist": 10, - "clipFar": 100, - "clipNear": 0, - "fogFar": 100, - "fogNear": 50, - "hoverTimeout": 0, - "impostor": true, - "lightColor": 14540253, - "lightIntensity": 1, - "mousePreset": "default", - "panSpeed": 1, - "quality": "medium", - "rotateSpeed": 2, - "sampleLevel": 0, - "tooltip": true, - "workerDefault": true, - "zoomSpeed": 1.2 - }, - "_ngl_repr_dict": { - "0": { - "0": { - "params": { - "assembly": "default", - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorMode": "hcl", - "colorReverse": false, - "colorScale": "", - "colorScheme": "element", - "colorValue": 9474192, - "defaultAssembly": "", - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disableImpostor": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "radiusData": {}, - "radiusScale": 1, - "radiusSize": 0.5, - "radiusType": "size", - "roughness": 0.4, - "sele": "all", - "side": "double", - "sphereDetail": 1, - "useInteriorColor": true, - "visible": true, - "wireframe": false - }, - "type": "spacefill" - }, - "1": { - "params": { - "clipCenter": { - "x": 0, - "y": 0, - "z": 0 - }, - "clipNear": 0, - "clipRadius": 0, - "colorMode": "hcl", - "colorReverse": false, - "colorScale": "", - "colorScheme": "element", - "colorValue": "orange", - "defaultAssembly": "", - "depthWrite": true, - "diffuse": 16777215, - "diffuseInterior": false, - "disableImpostor": false, - "disablePicking": false, - "flatShaded": false, - "interiorColor": 2236962, - "interiorDarkening": 0, - "lazy": false, - "matrix": { - "elements": [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ] - }, - "metalness": 0, - "opacity": 1, - "quality": "medium", - "radialSegments": 10, - "radiusData": {}, - "radiusScale": 1, - "radiusSize": 0.5, - "radiusType": "vdw", - "roughness": 0.4, - "sele": "all", - "side": "double", - "sphereDetail": 1, - "useInteriorColor": true, - "visible": true, - "wireframe": false - }, - "type": "unitcell" - } - } - }, - "_ngl_serialize": false, - "_ngl_version": "2.0.0-dev.36", - "_ngl_view_id": [ - "67151EDF-7CA9-4FB8-BFE3-F5828AA885A5" - ], - "_player_dict": {}, - "_scene_position": {}, - "_scene_rotation": {}, - "_synced_model_ids": [], - "_synced_repr_model_ids": [], - "_view_height": "", - "_view_width": "", - "background": "white", - "frame": 0, - "gui_style": null, - "layout": "IPY_MODEL_a07edf26c9904bb4978b9b27e1d43fbe", - "max_frame": 5, - "n_components": 1, - "picked": {} - } - }, - "6f16f8622af8405ea222c85bdf91548f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_38995112aba54857937c34fc40cd6109", - "max": 21, - "style": "IPY_MODEL_dd7c1edbe0914479bb138a1f6a611f8a" - } - }, - "71b7199638db42b0844d1f1a798219e6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "7abe5e28714a45ed9c9815d1814610f8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "7b52194dea4a4ba39d0815d775374cf8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "7b64f3398f9945c58380cf703c798003": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "87d92ef628f84c388d6c6501af28ea4d": { + "6ff36b28a9284eb78dd860df53174692": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", "state": { "_camera_orientation": [ - 11.095162889756295, - 0, + 14.593602577909778, 0, 0, 0, - 11.095162889756295, 0, + 14.593602577909778, 0, 0, 0, - 11.095162889756295, 0, - -0.0010000000474974513, + 14.593602577909778, 0, - -0.3755000000237487, + -0.8999999761581421, + -0.8999999761581421, + -0.8999999761581421, 1 ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_670da71dec414c05a5e43ec82d0510e4", + "_ibtn_fullscreen": "IPY_MODEL_cd356a5554c045d5a8691eceec72c901", "_igui": null, - "_iplayer": "IPY_MODEL_9cc5b4ff85c94432940499596a4c7e36", + "_iplayer": "IPY_MODEL_e10363ed797f4951929df20bf344a128", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -2305,7 +1669,7 @@ "args": [ { "binary": false, - "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 -0.000 0.001 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.002 -0.000 0.750 1.00 0.00 FE \nENDMDL\n", + "data": "CRYST1 2.400 2.400 2.400 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 5 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 6 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 7 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 8 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 9 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 10 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 11 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 12 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 13 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 14 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 15 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nENDMDL\n", "type": "blob" } ], @@ -2509,7 +1873,7 @@ "radialSegments": 10, "radiusData": {}, "radiusScale": 1, - "radiusSize": 0.5, + "radiusSize": 0.011999999473246623, "radiusType": "vdw", "roughness": 0.4, "sele": "all", @@ -2526,7 +1890,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "5F9674E3-B045-4A3D-BD17-2F238CCAE006" + "165512EC-20D3-4976-9143-5AD78CCDCF3E" ], "_player_dict": {}, "_scene_position": {}, @@ -2538,343 +1902,156 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_30f9cad1b04a4916868b8ae3157977b8", - "max_frame": 5, - "n_components": 1, - "picked": {} - } - }, - "8c6336bad9064f9cad3ed19754274617": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_30139e4607d244578e5b2b2771ddf407", - "max" - ], - "target": [ - "IPY_MODEL_fa5ea10926a449d4b77abc162d70178d", - "max_frame" - ] - } - }, - "9183457e6d744b1abbf704716cf04236": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "92dc4568b3c24f2b95c85d633473568a": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_42116a5e97384eee940be8ebe701cfd1", - "value" - ], - "target": [ - "IPY_MODEL_fa5ea10926a449d4b77abc162d70178d", - "frame" - ] - } - }, - "9a30c0daa6d347ed86caf7455f202fe3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_e0e998fd8c8d441d825a664d118b29f8", - "max" - ], - "target": [ - "IPY_MODEL_87d92ef628f84c388d6c6501af28ea4d", - "max_frame" - ] - } - }, - "9cab2efc281e4fc6835c0716effdd15f": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "9cc5b4ff85c94432940499596a4c7e36": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_318214da17704d589cc9437bde628146", - "IPY_MODEL_e0e998fd8c8d441d825a664d118b29f8" - ], - "layout": "IPY_MODEL_cbac2cdd8ee84d029d09e7ff29bc9766" - } - }, - "a07edf26c9904bb4978b9b27e1d43fbe": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} + "layout": "IPY_MODEL_af7e6fe6c4404360bb7d07731603c244", + "max_frame": 21, + "n_components": 1, + "picked": {} + } }, - "a54bf8b51b5a40578622dde9979c8005": { + "8a7a4f570717465692ab3dad94ae65bf": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_19cdf24fc8ab4e62a05219ff1ef81263", + "IPY_MODEL_37d125c6051843e3867636c19027f101", "max" ], "target": [ - "IPY_MODEL_6ea3657f68ca462188997ae2514683ce", + "IPY_MODEL_6ff36b28a9284eb78dd860df53174692", "max_frame" ] } }, - "a62a0f1514744ec08d5f939ed5df94be": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "ab354c8b82d64580944bec964608e0ee": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", - "state": { - "description_width": "" - } - }, - "ab9618d8d07842b59fdbaf17971d54f7": { + "92b260ef9632421b917a21b9a544eb7c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_249936014f0646f3a14d1080cec78d0b", + "IPY_MODEL_95ba0c01635e4981915ee666bb7032d4", "max" ], "target": [ - "IPY_MODEL_6ea3657f68ca462188997ae2514683ce", + "IPY_MODEL_59fe5f6c572a423e8b660aef1a486c18", "max_frame" ] } }, - "ae3762f2f98947db868664c6a1326dda": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_7abe5e28714a45ed9c9815d1814610f8", - "style": "IPY_MODEL_0a4cb31165cd4eb89830dd0f36aa7c1e" - } - }, - "b1fc7050885149dba9ca3a00e99b4746": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_318214da17704d589cc9437bde628146", - "value" - ], - "target": [ - "IPY_MODEL_e0e998fd8c8d441d825a664d118b29f8", - "value" - ] - } - }, - "b29c77988356427db507c1298a9db38d": { + "95ba0c01635e4981915ee666bb7032d4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", + "model_name": "IntSliderModel", "state": { - "source": [ - "IPY_MODEL_42116a5e97384eee940be8ebe701cfd1", - "value" - ], - "target": [ - "IPY_MODEL_30139e4607d244578e5b2b2771ddf407", - "value" - ] + "layout": "IPY_MODEL_b859d553e9f541b7b21297ade13f9563", + "max": 5, + "style": "IPY_MODEL_df134a5c8d3d49d09d58fc0061f3d564" } }, - "ba0ac2e4973841049708071c20c31c48": { + "95f20997c3de46ef8c58a5c2a3c3ae92": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", + "model_name": "ImageModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_2d1615d16e4247e681b25595f7470206", + "width": "900.0" } }, - "bc38255e7dd44daba29fe69ad6911a47": { + "9902b6f121644a89a2cb556e59e2ccc5": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "c0be76a3a96f46bc902e8db25764c74f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "992ddf02bc5042a7b1ab408485e0ed49": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", "state": { - "children": [ - "IPY_MODEL_6f16f8622af8405ea222c85bdf91548f", - "IPY_MODEL_46b81ba49b57444cab1bbe2f5fd00d92" - ], - "layout": "IPY_MODEL_d7bf3da906d94e838dd999ef1832f397" + "width": "34px" } }, - "c35f800d041d41c48de7daa2488616d8": { + "9994c848f67945c2bd543fa2459fa328": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "a0b5ad869deb4a09a909de9836a9b86a": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "c884b3f5cf674e4d8478167fc058fa11": { + "a1c4e972b36b4c30bfc18290301cd3af": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_6f16f8622af8405ea222c85bdf91548f", + "IPY_MODEL_2bf44ea06e744b6aa8225e5ea5f5f121", "value" ], "target": [ - "IPY_MODEL_46b81ba49b57444cab1bbe2f5fd00d92", - "value" + "IPY_MODEL_6ff36b28a9284eb78dd860df53174692", + "frame" ] } }, - "cb3ddd01b79b46d6b23cbd789e8e3e46": { + "a383fde41d2045beba4260f92e890162": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_02b5f410cf1f4c918efe5b60df593d97", - "style": "IPY_MODEL_71b7199638db42b0844d1f1a798219e6" - } - }, - "cb565f66fad540a18bac03d70da6d804": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "cbac2cdd8ee84d029d09e7ff29bc9766": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ce40e4194af0455e84cabb747fa7786c": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "ColormakerRegistryModel", + "model_name": "HBoxModel", "state": { - "_msg_ar": [], - "_msg_q": [], - "_ready": true, - "layout": "IPY_MODEL_e68bbb6b940e4a3ebff909e3b2571ac8" + "children": [ + "IPY_MODEL_f14bae1fbf4540f883736303a1a73e8d", + "IPY_MODEL_95ba0c01635e4981915ee666bb7032d4" + ], + "layout": "IPY_MODEL_16ebcbdddefe445e92feccb35962fb75" } }, - "d02698f84c534ed4b032d37f01b0e767": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d7bf3da906d94e838dd999ef1832f397": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "dd7c1edbe0914479bb138a1f6a611f8a": { + "a3f09001811b4237aa5c13360ec2f5c8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_name": "ImageModel", "state": { - "description_width": "" + "layout": "IPY_MODEL_9902b6f121644a89a2cb556e59e2ccc5", + "width": "900.0" } }, - "e00fb3b115994e60bdeac8b05fef8a3c": { + "a5fa61609eb8494bac75276abcf5aa62": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", + "model_name": "SliderStyleModel", "state": { "description_width": "" } }, - "e0e998fd8c8d441d825a664d118b29f8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_50ab2142131544a7a0bb42d42938f511", - "max": 5, - "style": "IPY_MODEL_108bed51860b4b21b253466ea3f75f0f" - } - }, - "e68bbb6b940e4a3ebff909e3b2571ac8": { + "aa1a6fceec024b4daac0262c7ac0246e": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", - "state": {} - }, - "ea1cb25d0a354ad481fa5c9584c17e0d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_42116a5e97384eee940be8ebe701cfd1", - "max" - ], - "target": [ - "IPY_MODEL_fa5ea10926a449d4b77abc162d70178d", - "max_frame" - ] - } - }, - "ecc84bee67f34ec18b809756316263f8": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", "state": { - "description_width": "" + "width": "34px" } }, - "f471943fcb1947f18d166b6b02d9f3ef": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "fa5ea10926a449d4b77abc162d70178d": { + "ad5a693af9a043c4a4212ac050de7059": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", "state": { "_camera_orientation": [ - 12.150049792069682, + 11.095162889756295, 0, 0, 0, 0, - 12.150049792069682, + 11.095162889756295, 0, 0, 0, 0, - 12.150049792069682, + 11.095162889756295, 0, -0.0010000000474974513, 0, @@ -2883,9 +2060,9 @@ ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_cb3ddd01b79b46d6b23cbd789e8e3e46", + "_ibtn_fullscreen": "IPY_MODEL_69b5d8a47e20486f941c996f522b7332", "_igui": null, - "_iplayer": "IPY_MODEL_19fdca61c5f5464b9ee1799459ff329b", + "_iplayer": "IPY_MODEL_f11d86e958624d83b46197be68bce93c", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -3139,7 +2316,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "1EE99A66-3185-4EED-811D-A42CC0C0CAF3" + "F6B52FC9-2316-48DE-93F3-198244426DAB" ], "_player_dict": {}, "_scene_position": {}, @@ -3151,35 +2328,177 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_cb565f66fad540a18bac03d70da6d804", + "layout": "IPY_MODEL_5687c957ddac4a2fb225cc2b642644a7", "max_frame": 5, "n_components": 1, "picked": {} } }, - "faf39035440f42ecb929d79a3dc32b64": { + "af7e6fe6c4404360bb7d07731603c244": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "b19230cc0b4a4743bc5e3b9d34fac0c8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "b44f8fe9d5104c50af0f8794a7e2937e": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "b859d553e9f541b7b21297ade13f9563": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "bc1a83d64dbe43c8abf0f7cc28f034cf": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "cd356a5554c045d5a8691eceec72c901": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "icon": "compress", + "layout": "IPY_MODEL_992ddf02bc5042a7b1ab408485e0ed49", + "style": "IPY_MODEL_9994c848f67945c2bd543fa2459fa328" + } + }, + "d31ec15aeb7b4e06ad10b5f522ed6b88": { + "model_module": "nglview-js-widgets", + "model_module_version": "3.0.1", + "model_name": "ColormakerRegistryModel", + "state": { + "_msg_ar": [], + "_msg_q": [], + "_ready": true, + "layout": "IPY_MODEL_e04b0c9924d34cd38417a2bd9560c598" + } + }, + "df134a5c8d3d49d09d58fc0061f3d564": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "description_width": "" + } + }, + "e04b0c9924d34cd38417a2bd9560c598": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "e10363ed797f4951929df20bf344a128": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_2bf44ea06e744b6aa8225e5ea5f5f121", + "IPY_MODEL_37d125c6051843e3867636c19027f101" + ], + "layout": "IPY_MODEL_b44f8fe9d5104c50af0f8794a7e2937e" + } + }, + "e7093d3a1f9747e6a9406ad1cc0ac00a": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "ef0cb900d3fe4d24870c51562ece945c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_645e8985689a489194eeaa84581953d9", + "width": "900.0" + } + }, + "f11d86e958624d83b46197be68bce93c": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_3a0064876a7f4e98bfb267f62ec63892", + "IPY_MODEL_61ca4c4fd4384d01bad6db8c0a5be94c" + ], + "layout": "IPY_MODEL_33216e0960ec4e6d8df7e122717bb329" + } + }, + "f13c120e4dfc4f1f899a597d36d8bc3f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "description_width": "" + } + }, + "f14bae1fbf4540f883736303a1a73e8d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_ff83c968407e4fbeb3f4061db31616c7", + "max": 5, + "style": "IPY_MODEL_25e351b99ca748e4bcdc313c232d20bc" + } + }, + "f1fd0f825d164a2787f4d33dfe1d13a7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_19cdf24fc8ab4e62a05219ff1ef81263", + "IPY_MODEL_f14bae1fbf4540f883736303a1a73e8d", "value" ], "target": [ - "IPY_MODEL_249936014f0646f3a14d1080cec78d0b", + "IPY_MODEL_95ba0c01635e4981915ee666bb7032d4", "value" ] } }, - "fcfe62c7f1294d71ad0d98a74568349b": { + "f4729c885ccf499f80afb857a584d80f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ImageModel", + "model_name": "LinkModel", "state": { - "layout": "IPY_MODEL_5970304140b7436db540551f6d0c1db0", - "width": "900.0" + "source": [ + "IPY_MODEL_3a0064876a7f4e98bfb267f62ec63892", + "value" + ], + "target": [ + "IPY_MODEL_61ca4c4fd4384d01bad6db8c0a5be94c", + "value" + ] + } + }, + "fa234acaa2da457d8778440384b23656": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "34px" } + }, + "ff83c968407e4fbeb3f4061db31616c7": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} } }, "version_major": 2, From 80f3f2f5b922adf5f0d5d1a6f9379ef392a3757e Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Tue, 11 Jul 2023 22:11:58 +0200 Subject: [PATCH 10/49] Split project.py into a package --- pyiron_contrib/tinybase/project.py | 253 ------------------ pyiron_contrib/tinybase/project/__init__.py | 7 + .../tinybase/project/base_adapter.py | 40 +++ pyiron_contrib/tinybase/project/h5io.py | 79 ++++++ pyiron_contrib/tinybase/project/interface.py | 103 +++++++ pyiron_contrib/tinybase/project/memory.py | 41 +++ 6 files changed, 270 insertions(+), 253 deletions(-) delete mode 100644 pyiron_contrib/tinybase/project.py create mode 100644 pyiron_contrib/tinybase/project/__init__.py create mode 100644 pyiron_contrib/tinybase/project/base_adapter.py create mode 100644 pyiron_contrib/tinybase/project/h5io.py create mode 100644 pyiron_contrib/tinybase/project/interface.py create mode 100644 pyiron_contrib/tinybase/project/memory.py diff --git a/pyiron_contrib/tinybase/project.py b/pyiron_contrib/tinybase/project.py deleted file mode 100644 index a736635ef..000000000 --- a/pyiron_contrib/tinybase/project.py +++ /dev/null @@ -1,253 +0,0 @@ -import abc -import os -import os.path -from typing import Union - -from pyiron_base import Project, DataContainer -from pyiron_contrib.tinybase.storage import ( - GenericStorage, - ProjectHDFioStorageAdapter, - DataContainerAdapter, - H5ioStorage, -) -from h5io_browser import Pointer as Hdf5Pointer -from pyiron_contrib.tinybase.database import TinyDB, GenericDatabase - - -class JobNotFoundError(Exception): - pass - - -class ProjectInterface(abc.ABC): - @classmethod - @abc.abstractmethod - def open_location(cls, location) -> "ProjectInterface": - pass - - @abc.abstractmethod - def create_storage(self, name) -> GenericStorage: - pass - - @abc.abstractmethod - def exists_storage(self, name) -> bool: - pass - - @abc.abstractmethod - def remove_storage(self, name): - pass - - @abc.abstractmethod - def _get_database(self) -> GenericDatabase: - pass - - @property - def database(self): - return self._get_database() - - @property - def create(self): - if not hasattr(self, "_creator"): - from pyiron_contrib.tinybase.creator import RootCreator, CREATOR_CONFIG - - self._creator = RootCreator(self, CREATOR_CONFIG) - return self._creator - - def load(self, name_or_id: Union[int, str]) -> "TinyJob": - """ - Load a job from storage. - - If the job name is given, it must be a child of this project and not - any of its sub projects. - - Args: - name_or_id (int, str): either the job name or its id - - Returns: - :class:`.TinyJob`: the loaded job - - Raises: - :class:`.JobNotFoundError`: if no job of the given name or id exists - """ - if isinstance(name_or_id, str): - pr = self - name = name_or_id - if not pr.exists_storage(name): - raise JobNotFoundError(f"No job with name {name} found!") - else: - try: - entry = self.database.get_item(name_or_id) - except ValueError as e: - raise JobNotFoundError(*e.args) - pr = self.open_location(entry.project) - name = entry.name - return pr.create_storage(name).to_object() - - @property - @abc.abstractmethod - def path(self): - pass - - @property - @abc.abstractmethod - def name(self): - pass - - def job_table(self): - return self.database.job_table() - - def get_job_id(self, name): - project_id = self.database.get_project_id(self.path) - return self.database.get_item_id(name, project_id) - - def remove(self, job_id): - entry = self.database.remove_item(job_id) - if entry.project == self.path: - pr = self - else: - pr = self.open_location(entry.project) - pr.remove_storage(entry.name) - - # TODO: - # def copy_to/move_to across types of ProjectInterface - -class FilesystemProject(ProjectInterface): - """ - A plain project that stores data in HDF5 files on the filesystem and uses TinyDB. - - The database file will be created in the first location opened, but sub projects created from this object will share - a database. A global database is not yet supported. - """ - - def __init__(self, path): - """ - Args: - path (str): path to the project folder; will be created if non-existing. - """ - self._path = path - self._database = None - - @classmethod - def open_location(cls, path): - return cls(path) - - def _get_job_file(self, name): - return os.path.join(self._path, name) + ".h5" - - def create_storage(self, name): - if not os.path.exists(self.path): - os.makedirs(self.path, exist_ok=True) - return H5ioStorage.from_file( - self, self._get_job_file(name), name - ) - - def exists_storage(self, name): - return os.path.exists(self._get_job_file(name)) - - def remove_storage(self, name): - try: - os.remove(self._get_job_file(name)) - except FileNotFoundError: - pass - - def _get_database(self): - if self._database is None: - self._database = TinyDB(os.path.join(self.path, "pyiron.db")) - return self._database - - @property - def name(self): - return os.path.basename(self._path) - - @property - def path(self): - return self._path - -class SingleHdfProject(FilesystemProject): - """ - Behaves likes a :class:`~.FilesystemProject` but stores all jobs in a single HDF5 file. - """ - - def _get_hdf(self): - return H5ioStorage.from_file(self, os.path.join(self.path, "project.h5")) - - def create_storage(self, name): - if not os.path.exists(self.path): - os.makedirs(self.path, exist_ok=True) - return self._get_hdf()[name] - - def exists_storage(self, name): - return name in self._get_hdf()[".."].list_groups() - - def remove_storage(self, name): - del self._get_hdf()[name] - -class ProjectAdapter(ProjectInterface): - def __init__(self, project): - self._project = project - self._database = None - - @classmethod - def open_location(cls, location): - return cls(Project(location)) - - def create_storage(self, name): - return ProjectHDFioStorageAdapter( - self, self._project.create_hdf(self._project.path, name) - ) - - def exists_storage(self, name) -> bool: - return self._project.create_hdf(self._project.path, name).file_exists - - def remove_storage(self, name): - self._project.create_hdf(self._project.path, name).remove_file() - - def _get_database(self): - if self._database is None: - self._database = TinyDB(os.path.join(self._project.path, "pyiron.db")) - return self._database - - @property - def name(self): - return self._project.name - - @property - def path(self): - return self._project.path - - -class InMemoryProject(ProjectInterface): - def __init__(self, location, db=None, storage=None): - if db is None: - db = TinyDB(":memory:") - self._db = db - self._location = location - if storage is None: - storage = {} - self._storage = storage - if location not in storage: - self._storage[location] = DataContainer() - - def open_location(self, location): - return self.__class__(location, db=self.database, storage=self._storage) - - def create_storage(self, name) -> GenericStorage: - return DataContainerAdapter( - self, self._storage[self._location], "/" - ).create_group(name) - - def exists_storage(self, name) -> bool: - return name in self._storage[self._location].list_groups() - - def remove_storage(self, name): - self._storage[self._location].pop(name) - - def _get_database(self) -> GenericDatabase: - return self._db - - @property - def path(self): - return self._location - - @property - def name(self): - return os.path.basename(self.path) diff --git a/pyiron_contrib/tinybase/project/__init__.py b/pyiron_contrib/tinybase/project/__init__.py new file mode 100644 index 000000000..46bc744de --- /dev/null +++ b/pyiron_contrib/tinybase/project/__init__.py @@ -0,0 +1,7 @@ +from pyiron_contrib.tinybase.project.interface import ( + ProjectInterface, + JobNotFoundError +) +from pyiron_contrib.tinybase.project.base_adapter import ProjectAdapter +from pyiron_contrib.tinybase.project.memory import InMemoryProject +from pyiron_contrib.tinybase.project.h5io import FilesystemProject, SingleHdfProject diff --git a/pyiron_contrib/tinybase/project/base_adapter.py b/pyiron_contrib/tinybase/project/base_adapter.py new file mode 100644 index 000000000..35ffe26bb --- /dev/null +++ b/pyiron_contrib/tinybase/project/base_adapter.py @@ -0,0 +1,40 @@ +import os.path + +from pyiron_base import Project +from pyiron_contrib.tinybase.storage import ProjectHDFioStorageAdapter +from pyiron_contrib.tinybase.storage import GenericStorage +from pyiron_contrib.tinybase.project.interface import ProjectInterface +from pyiron_contrib.tinybase.database import GenericDatabase, TinyDB + +class ProjectAdapter(ProjectInterface): + def __init__(self, project): + self._project = project + self._database = None + + @classmethod + def open_location(cls, location) -> "ProjectAdapter": + return cls(Project(location)) + + def create_storage(self, name) -> ProjectHDFioStorageAdapter: + return ProjectHDFioStorageAdapter( + self, self._project.create_hdf(self._project.path, name) + ) + + def exists_storage(self, name) -> bool: + return self._project.create_hdf(self._project.path, name).file_exists + + def remove_storage(self, name): + self._project.create_hdf(self._project.path, name).remove_file() + + def _get_database(self) -> GenericDatabase: + if self._database is None: + self._database = TinyDB(os.path.join(self._project.path, "pyiron.db")) + return self._database + + @property + def name(self) -> str: + return self._project.name + + @property + def path(self) -> str: + return self._project.path diff --git a/pyiron_contrib/tinybase/project/h5io.py b/pyiron_contrib/tinybase/project/h5io.py new file mode 100644 index 000000000..5b540e831 --- /dev/null +++ b/pyiron_contrib/tinybase/project/h5io.py @@ -0,0 +1,79 @@ +import os +import os.path + +from pyiron_contrib.tinybase.project.interface import ProjectInterface +from pyiron_contrib.tinybase.storage import GenericStorage, DataContainerAdapter, H5ioStorage +from pyiron_contrib.tinybase.database import GenericDatabase, TinyDB + +from h5io_browser import Pointer as Hdf5Pointer + +class FilesystemProject(ProjectInterface): + """ + A plain project that stores data in HDF5 files on the filesystem and uses TinyDB. + + The database file will be created in the first location opened, but sub projects created from this object will share + a database. A global database is not yet supported. + """ + + def __init__(self, path): + """ + Args: + path (str): path to the project folder; will be created if non-existing. + """ + self._path = path + self._database = None + + @classmethod + def open_location(cls, path): + return cls(path) + + def _get_job_file(self, name): + return os.path.join(self._path, name) + ".h5" + + def create_storage(self, name): + if not os.path.exists(self.path): + os.makedirs(self.path, exist_ok=True) + return H5ioStorage.from_file( + self, self._get_job_file(name), name + ) + + def exists_storage(self, name): + return os.path.exists(self._get_job_file(name)) + + def remove_storage(self, name): + try: + os.remove(self._get_job_file(name)) + except FileNotFoundError: + pass + + def _get_database(self): + if self._database is None: + self._database = TinyDB(os.path.join(self.path, "pyiron.db")) + return self._database + + @property + def name(self): + return os.path.basename(self._path) + + @property + def path(self): + return self._path + +class SingleHdfProject(FilesystemProject): + """ + Behaves likes a :class:`~.FilesystemProject` but stores all jobs in a single HDF5 file. + """ + + def _get_hdf(self): + return H5ioStorage.from_file(self, os.path.join(self.path, "project.h5")) + + def create_storage(self, name): + if not os.path.exists(self.path): + os.makedirs(self.path, exist_ok=True) + return self._get_hdf()[name] + + def exists_storage(self, name): + return name in self._get_hdf()[".."].list_groups() + + def remove_storage(self, name): + del self._get_hdf()[name] diff --git a/pyiron_contrib/tinybase/project/interface.py b/pyiron_contrib/tinybase/project/interface.py new file mode 100644 index 000000000..1daddcce4 --- /dev/null +++ b/pyiron_contrib/tinybase/project/interface.py @@ -0,0 +1,103 @@ +import abc + +from typing import Union + +from pyiron_contrib.tinybase.storage import GenericStorage +from pyiron_contrib.tinybase.database import GenericDatabase + + +class JobNotFoundError(Exception): + pass + + +class ProjectInterface(abc.ABC): + @classmethod + @abc.abstractmethod + def open_location(cls, location) -> "ProjectInterface": + pass + + @abc.abstractmethod + def create_storage(self, name) -> GenericStorage: + pass + + @abc.abstractmethod + def exists_storage(self, name) -> bool: + pass + + @abc.abstractmethod + def remove_storage(self, name): + pass + + @abc.abstractmethod + def _get_database(self) -> GenericDatabase: + pass + + @property + def database(self): + return self._get_database() + + @property + def create(self): + if not hasattr(self, "_creator"): + from pyiron_contrib.tinybase.creator import RootCreator, CREATOR_CONFIG + + self._creator = RootCreator(self, CREATOR_CONFIG) + return self._creator + + def load(self, name_or_id: Union[int, str]) -> "TinyJob": + """ + Load a job from storage. + + If the job name is given, it must be a child of this project and not + any of its sub projects. + + Args: + name_or_id (int, str): either the job name or its id + + Returns: + :class:`.TinyJob`: the loaded job + + Raises: + :class:`.JobNotFoundError`: if no job of the given name or id exists + """ + if isinstance(name_or_id, str): + pr = self + name = name_or_id + if not pr.exists_storage(name): + raise JobNotFoundError(f"No job with name {name} found!") + else: + try: + entry = self.database.get_item(name_or_id) + except ValueError as e: + raise JobNotFoundError(*e.args) + pr = self.open_location(entry.project) + name = entry.name + return pr.create_storage(name).to_object() + + @property + @abc.abstractmethod + def path(self): + pass + + @property + @abc.abstractmethod + def name(self): + pass + + def job_table(self): + return self.database.job_table() + + def get_job_id(self, name): + project_id = self.database.get_project_id(self.path) + return self.database.get_item_id(name, project_id) + + def remove(self, job_id): + entry = self.database.remove_item(job_id) + if entry.project == self.path: + pr = self + else: + pr = self.open_location(entry.project) + pr.remove_storage(entry.name) + + # TODO: + # def copy_to/move_to across types of ProjectInterface diff --git a/pyiron_contrib/tinybase/project/memory.py b/pyiron_contrib/tinybase/project/memory.py new file mode 100644 index 000000000..4b09bf646 --- /dev/null +++ b/pyiron_contrib/tinybase/project/memory.py @@ -0,0 +1,41 @@ +from pyiron_base import DataContainer +from pyiron_contrib.tinybase.project.interface import ProjectInterface +from pyiron_contrib.tinybase.storage import GenericStorage, DataContainerAdapter +from pyiron_contrib.tinybase.database import GenericDatabase, TinyDB + +class InMemoryProject(ProjectInterface): + def __init__(self, location, db=None, storage=None): + if db is None: + db = TinyDB(":memory:") + self._db = db + self._location = location + if storage is None: + storage = {} + self._storage = storage + if location not in storage: + self._storage[location] = DataContainer() + + def open_location(self, location) -> "InMemoryProject": + return self.__class__(location, db=self.database, storage=self._storage) + + def create_storage(self, name) -> GenericStorage: + return DataContainerAdapter( + self, self._storage[self._location], "/" + ).create_group(name) + + def exists_storage(self, name) -> bool: + return name in self._storage[self._location].list_groups() + + def remove_storage(self, name): + self._storage[self._location].pop(name) + + def _get_database(self) -> GenericDatabase: + return self._db + + @property + def path(self) -> str: + return self._location + + @property + def name(self) -> str: + return os.path.basename(self.path) From f8bc800059d4c5db9e229ef82ab8be9e9ec7f672 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Thu, 4 Jan 2024 23:01:11 +0100 Subject: [PATCH 11/49] Add section to show new project types --- notebooks/tinybase/TinyJob.ipynb | 1050 +++++++++++++++++------------- 1 file changed, 588 insertions(+), 462 deletions(-) diff --git a/notebooks/tinybase/TinyJob.ipynb b/notebooks/tinybase/TinyJob.ipynb index 0964e7fe7..eac4badc0 100644 --- a/notebooks/tinybase/TinyJob.ipynb +++ b/notebooks/tinybase/TinyJob.ipynb @@ -26,7 +26,7 @@ } ], "source": [ - "from pyiron_contrib.tinybase.project import FilesystemProject, InMemoryProject" + "from pyiron_contrib.tinybase.project import FilesystemProject, InMemoryProject, SingleHdfProject" ] }, { @@ -95,7 +95,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "d31ec15aeb7b4e06ad10b5f522ed6b88", + "model_id": "c2bd01f0def8431a8dd42a00c968a7d1", "version_major": 2, "version_minor": 0 }, @@ -146,14 +146,11 @@ }, "outputs": [ { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 8, - "metadata": {}, - "output_type": "execute_result" + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Job already finished!\n" + ] } ], "source": [ @@ -194,7 +191,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6ff36b28a9284eb78dd860df53174692", + "model_id": "7fa01f4b04d04e88976398c5bb3b6ba7", "version_major": 2, "version_minor": 0 }, @@ -273,53 +270,10 @@ }, "outputs": [ { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - " Step Time Energy fmax\n", - "LBFGS: 0 15:48:28 11.288146 189.5231\n", - "LBFGS: 1 15:48:28 1.168671 43.6957\n", - "LBFGS: 2 15:48:28 0.860403 38.6924\n", - "LBFGS: 3 15:48:28 0.362400 30.3554\n", - "LBFGS: 4 15:48:28 0.004806 24.0865\n", - "LBFGS: 5 15:48:28 -0.267437 19.0615\n", - "LBFGS: 6 15:48:28 -0.471646 15.0628\n", - "LBFGS: 7 15:48:28 -0.623506 11.8810\n", - "LBFGS: 8 15:48:28 -0.735237 9.3518\n", - "LBFGS: 9 15:48:28 -0.816458 7.3435\n", - "LBFGS: 10 15:48:28 -0.874705 5.7512\n", - "LBFGS: 11 15:48:28 -0.915849 4.4909\n", - "LBFGS: 12 15:48:28 -0.944435 3.4955\n", - "LBFGS: 13 15:48:28 -0.963943 2.7113\n", - "LBFGS: 14 15:48:28 -0.977006 2.0956\n", - "LBFGS: 15 15:48:28 -0.985585 1.6137\n", - "LBFGS: 16 15:48:28 -0.991109 1.2382\n", - "LBFGS: 17 15:48:28 -0.994598 0.9468\n", - "LBFGS: 18 15:48:28 -0.996763 0.7216\n", - "LBFGS: 19 15:48:28 -0.998083 0.5484\n", - "LBFGS: 20 15:48:28 -0.998876 0.4157\n", - "LBFGS: 21 15:48:28 -0.999347 0.3144\n", - "LBFGS: 22 15:48:28 -0.999623 0.2374\n", - "LBFGS: 23 15:48:28 -0.999784 0.1790\n", - "LBFGS: 24 15:48:28 -0.999877 0.1348\n", - "LBFGS: 25 15:48:28 -0.999930 0.1014\n", - "LBFGS: 26 15:48:28 -0.999960 0.0762\n", - "LBFGS: 27 15:48:28 -0.999977 0.0573\n", - "LBFGS: 28 15:48:28 -0.999987 0.0430\n", - "LBFGS: 29 15:48:28 -0.999993 0.0323\n", - "LBFGS: 30 15:48:28 -0.999996 0.0242\n", - "LBFGS: 31 15:48:28 -0.999998 0.0182\n", - "LBFGS: 32 15:48:28 -0.999999 0.0136\n", - "LBFGS: 33 15:48:28 -0.999999 0.0102\n", - "LBFGS: 34 15:48:28 -1.000000 0.0077\n", - "LBFGS: 35 15:48:28 -1.000000 0.0058\n", - "LBFGS: 36 15:48:28 -1.000000 0.0043\n", - "LBFGS: 37 15:48:28 -1.000000 0.0032\n", - "LBFGS: 38 15:48:28 -1.000000 0.0024\n", - "LBFGS: 39 15:48:28 -1.000000 0.0018\n", - "LBFGS: 40 15:48:28 -1.000000 0.0014\n", - "LBFGS: 41 15:48:28 -1.000000 0.0010\n", - "LBFGS: 42 15:48:28 -1.000000 0.0008\n" + "INFO:root:Job already finished!\n" ] } ], @@ -395,18 +349,32 @@ " finished\n", " AseMinimizeTask\n", " \n", + " \n", + " 2\n", + " 3\n", + " pyiron\n", + " murn\n", + " 3\n", + " 1\n", + " 3\n", + " tinyjob\n", + " finished\n", + " MurnaghanTask\n", + " \n", " \n", "\n", "" ], "text/plain": [ - " id username name jobtype_id project_id status_id location status \\\n", - "0 1 pyiron md 1 1 1 tinyjob finished \n", - "1 2 pyiron min 2 1 2 tinyjob finished \n", + " id username name jobtype_id project_id status_id location status \\\n", + "0 1 pyiron md 1 1 1 tinyjob finished \n", + "1 2 pyiron min 2 1 2 tinyjob finished \n", + "2 3 pyiron murn 3 1 3 tinyjob finished \n", "\n", " type \n", "0 AseMDTask \n", - "1 AseMinimizeTask " + "1 AseMinimizeTask \n", + "2 MurnaghanTask " ] }, "execution_count": 15, @@ -452,7 +420,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "59fe5f6c572a423e8b660aef1a486c18", + "model_id": "351325e64d054852a7dfc573a2737b7f", "version_major": 2, "version_minor": 0 }, @@ -532,7 +500,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "ad5a693af9a043c4a4212ac050de7059", + "model_id": "08137dd2cb684642959b1f959227db33", "version_major": 2, "version_minor": 0 }, @@ -605,12 +573,19 @@ "id": "18b5305a-8950-44af-bc2e-c9734b059713", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "INFO:root:Job already finished!\n" + ] + }, { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 584 ms, sys: 228 ms, total: 812 ms\n", - "Wall time: 5.02 s\n" + "CPU times: user 3.04 ms, sys: 0 ns, total: 3.04 ms\n", + "Wall time: 2.75 ms\n" ] } ], @@ -643,17 +618,153 @@ }, { "cell_type": "markdown", - "id": "1dfdd96a-41dc-4e39-a029-9d10eb6ecf5e", + "id": "331e30ef-cfdd-46ce-a7b4-c04b4fef4744", "metadata": {}, "source": [ - "# Pyiron purely in memory\n", + "# Alternative Project Implementations\n", "\n", - "Because the new ProjectInterface completely controls both the storage class and the database a job sees, we can easily swap them without changing anything in `TinyJob` at all. As a demonstration we can make here a project that persists only for the duration of the process life time. But it's not hard to imagine a number of different project type depending on database configuration or storage location (S3, a single HDF5 for all jobs, etc.)" + "Because the new ProjectInterface completely controls both the storage class and the database a job sees, we can easily swap them without changing anything in `TinyJob` at all. As a demonstration we can make here a project that persists only for the duration of the process life time and one that keeps every job in a single file. " + ] + }, + { + "cell_type": "markdown", + "id": "c83af6b6-ed06-40fc-9d84-5f164d89af09", + "metadata": {}, + "source": [ + "## Pyiron in a single HDF file" ] }, { "cell_type": "code", "execution_count": 27, + "id": "e4c1b466-1185-4664-8178-716068139f0c", + "metadata": { + "tags": [] + }, + "outputs": [], + "source": [ + "pr = SingleHdfProject.open_location('tinyjob_single')" + ] + }, + { + "cell_type": "markdown", + "id": "dee1cf49-8d35-4ca1-9e4b-cc29f2d9d441", + "metadata": { + "tags": [] + }, + "source": [ + "### MD Job" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "b41e37f5-45e2-49c7-af75-4457c7b9dec5", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:pyiron_log:Not supported parameter used!\n", + "INFO:root:Job already finished!\n", + "DEBUG:pyiron_log:Not supported parameter used!\n", + "INFO:root:Job already finished!\n", + "DEBUG:pyiron_log:Not supported parameter used!\n", + "INFO:root:Job already finished!\n" + ] + } + ], + "source": [ + "for T in [300, 600, 900]:\n", + " j = pr.create.job.AseMD(f'md_{T}')\n", + "\n", + " j.input.structure = pr.create.structure.bulk('Fe', a=1.2, cubic=True).repeat(2).to_ase()\n", + " j.input.calculator = MorsePotential()\n", + "\n", + " j.input.steps = 100\n", + " j.input.timestep = 3.0\n", + " j.input.temperature = float(T)\n", + " j.input.output_steps = 20\n", + "\n", + " j.run()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "d5dc0078-ee70-45f3-8f0a-3dafa4b50ee4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'groups': ['output', 'task'], 'nodes': ['MODULE', 'NAME', 'VERSION']}" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "j.storage.list_all()" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "3cd9f120-9eb7-4f34-80cb-9477d492c4ae", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'groups': ['md_300', 'md_600', 'md_900'], 'nodes': []}" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "j.storage[\"..\"].list_all()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "d0621236-07c4-4843-99e0-4c460fc7fa89", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "total 2.6M\n", + "drwxr-xr-x 2 ponder ponder 4.0K 4. Jan 18:39 .\n", + "drwxr-xr-x 7 ponder ponder 4.0K 4. Jan 22:57 ..\n", + "-rw-r--r-- 1 ponder ponder 2.6M 4. Jan 18:39 project.h5\n", + "-rw-r--r-- 1 ponder ponder 20K 4. Jan 18:39 pyiron.db\n" + ] + } + ], + "source": [ + "!ls -lha {pr.path}" + ] + }, + { + "cell_type": "markdown", + "id": "1dfdd96a-41dc-4e39-a029-9d10eb6ecf5e", + "metadata": {}, + "source": [ + "## Pyiron purely in memory" + ] + }, + { + "cell_type": "code", + "execution_count": 32, "id": "79a2bb61-0a5e-4a3a-b195-46d027738a0e", "metadata": {}, "outputs": [], @@ -663,7 +774,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 33, "id": "b4e6e0c9-a2c6-40ab-884e-a46e16c37b04", "metadata": {}, "outputs": [ @@ -701,7 +812,7 @@ "Index: []" ] }, - "execution_count": 28, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -712,7 +823,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 34, "id": "cef7c46f-551f-401e-96c2-214628e23967", "metadata": {}, "outputs": [ @@ -740,7 +851,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 35, "id": "e8a7ee30-d7a6-46fc-bf98-1b52c981470f", "metadata": {}, "outputs": [ @@ -801,7 +912,7 @@ "0 MurnaghanTask " ] }, - "execution_count": 30, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -812,10 +923,18 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 36, "id": "30871447-3e20-46ee-a58e-853d4f4cb5d9", "metadata": {}, - "outputs": [], + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:pyiron_log:Not supported parameter used!\n" + ] + } + ], "source": [ "j = pr.create.job.AseMD('md')\n", "j.input.structure = pr.create.structure.bulk('Fe', a=1.2, cubic=True).repeat(2).to_ase() # since our Atoms cannot be pickled, but parallel execution needs that we still convert back here\n", @@ -830,7 +949,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 37, "id": "e63d43c1-341f-4ec0-b0cf-9cd5ead51926", "metadata": {}, "outputs": [ @@ -905,7 +1024,7 @@ "1 AseMDTask " ] }, - "execution_count": 32, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -924,17 +1043,24 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 38, "id": "80da39e2-76d1-42e6-977f-241d2683188d", "metadata": {}, "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "DEBUG:pyiron_log:Not supported parameter used!\n" + ] + }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 33, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -953,7 +1079,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 39, "id": "a567f96a-cbb3-4d2d-95d1-6dcecee7ddb8", "metadata": {}, "outputs": [ @@ -1042,7 +1168,7 @@ "2 AseMDTask " ] }, - "execution_count": 34, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1073,209 +1199,40 @@ "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { - "0a002f8e4a8740cb8ad2316a5a26b313": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_3a0064876a7f4e98bfb267f62ec63892", - "value" - ], - "target": [ - "IPY_MODEL_ad5a693af9a043c4a4212ac050de7059", - "frame" - ] - } - }, - "0d8be4afa564446c9cc7c34417c3d66b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_2bf44ea06e744b6aa8225e5ea5f5f121", - "value" - ], - "target": [ - "IPY_MODEL_37d125c6051843e3867636c19027f101", - "value" - ] - } - }, - "10d72eb911034f878003b9af0e5a050d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "16ebcbdddefe445e92feccb35962fb75": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "25e351b99ca748e4bcdc313c232d20bc": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "2bf44ea06e744b6aa8225e5ea5f5f121": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_a0b5ad869deb4a09a909de9836a9b86a", - "max": 21, - "style": "IPY_MODEL_3cb94c258e4349fe9d36dbe4b6597013" - } - }, - "2d1615d16e4247e681b25595f7470206": { + "070b13da96d24d0b86b3a293a2d51ba1": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "2df5c436cc894bd09bd51332d193c728": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "312ccb87446e4ef798638418e84b6645": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", + "08137dd2cb684642959b1f959227db33": { + "model_module": "nglview-js-widgets", + "model_module_version": "3.0.1", + "model_name": "NGLModel", "state": { - "source": [ - "IPY_MODEL_f14bae1fbf4540f883736303a1a73e8d", - "max" - ], - "target": [ - "IPY_MODEL_59fe5f6c572a423e8b660aef1a486c18", - "max_frame" - ] - } - }, - "33216e0960ec4e6d8df7e122717bb329": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "37d125c6051843e3867636c19027f101": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_bc1a83d64dbe43c8abf0f7cc28f034cf", - "max": 21, - "style": "IPY_MODEL_a5fa61609eb8494bac75276abcf5aa62" - } - }, - "3a0064876a7f4e98bfb267f62ec63892": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_10d72eb911034f878003b9af0e5a050d", - "max": 5, - "style": "IPY_MODEL_49aa532729e04a838d627ea9876aae5d" - } - }, - "3cb94c258e4349fe9d36dbe4b6597013": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "4247217b33bb477bb0b7b331476c2f7c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_f14bae1fbf4540f883736303a1a73e8d", - "value" - ], - "target": [ - "IPY_MODEL_59fe5f6c572a423e8b660aef1a486c18", - "frame" - ] - } - }, - "46af07fb695b41b0bc889ee3e20baf79": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_2bf44ea06e744b6aa8225e5ea5f5f121", - "max" - ], - "target": [ - "IPY_MODEL_6ff36b28a9284eb78dd860df53174692", - "max_frame" - ] - } - }, - "49aa532729e04a838d627ea9876aae5d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "5687c957ddac4a2fb225cc2b642644a7": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "59f3db6d4f6d43378a54e9d73ab3e585": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_fa234acaa2da457d8778440384b23656", - "style": "IPY_MODEL_b19230cc0b4a4743bc5e3b9d34fac0c8" - } - }, - "59fe5f6c572a423e8b660aef1a486c18": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "NGLModel", - "state": { - "_camera_orientation": [ - 11.095162889756295, - 0, - 0, - 0, - 0, - 11.095162889756295, - 0, - 0, - 0, - 0, - 11.095162889756295, - 0, - -0.0010000000474974513, - 0, - -0.3755000000237487, - 1 + "_camera_orientation": [ + 11.095162889756295, + 0, + 0, + 0, + 0, + 11.095162889756295, + 0, + 0, + 0, + 0, + 11.095162889756295, + 0, + -0.0010000000474974513, + 0, + -0.3755000000237487, + 1 ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_59f3db6d4f6d43378a54e9d73ab3e585", + "_ibtn_fullscreen": "IPY_MODEL_588481f1524e43649459e6b7194a76a1", "_igui": null, - "_iplayer": "IPY_MODEL_a383fde41d2045beba4260f92e890162", + "_iplayer": "IPY_MODEL_d07626890bd74a29bd04ec058668bf96", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -1529,7 +1486,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "F1537BF1-1ED4-409D-A74E-3348B8695FD5" + "CF0B0BA4-6170-43D5-8D2F-59B88F8AA1B0" ], "_player_dict": {}, "_scene_position": {}, @@ -1541,102 +1498,131 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_64f13ab1085d48b787a425249788d0cb", + "layout": "IPY_MODEL_95697a13a98a4eeea598fcbf126d6dcd", "max_frame": 5, "n_components": 1, "picked": {} } }, - "6180e365c5af432b8c6b68264801dd7a": { + "1b0e9d5aae07450f84a2c28496c496e9": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_798cadc8bf3946ffa70758988f3684b0", + "width": "900.0" + } + }, + "1c1c2d2c44a24ab881e32f97148db31d": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "22fa3d7d1eca469c9e521c42abbcf252": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "2964704516cc4b88b351c52afdb42e60": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_3a0064876a7f4e98bfb267f62ec63892", + "IPY_MODEL_ba8929ed10914f5b9f4dae160b96c38d", "max" ], "target": [ - "IPY_MODEL_ad5a693af9a043c4a4212ac050de7059", + "IPY_MODEL_7fa01f4b04d04e88976398c5bb3b6ba7", "max_frame" ] } }, - "61ca4c4fd4384d01bad6db8c0a5be94c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_e7093d3a1f9747e6a9406ad1cc0ac00a", - "max": 5, - "style": "IPY_MODEL_f13c120e4dfc4f1f899a597d36d8bc3f" - } - }, - "645e8985689a489194eeaa84581953d9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "64f13ab1085d48b787a425249788d0cb": { + "2a8df7464c144ccaa969c9c83ed362e6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "6696c2baba1a4dc0a2b9b20b1f84e5e3": { + "2abc583998254b95bc37c9614c22a87b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_61ca4c4fd4384d01bad6db8c0a5be94c", + "IPY_MODEL_4dfd5ad0dbcd45e1a155a10f9fa0ccb5", "max" ], "target": [ - "IPY_MODEL_ad5a693af9a043c4a4212ac050de7059", + "IPY_MODEL_08137dd2cb684642959b1f959227db33", "max_frame" ] } }, - "69b5d8a47e20486f941c996f522b7332": { + "2b62b1aba5b04ff4bfd871244bd1c7e7": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ButtonModel", + "model_name": "LinkModel", "state": { - "icon": "compress", - "layout": "IPY_MODEL_aa1a6fceec024b4daac0262c7ac0246e", - "style": "IPY_MODEL_2df5c436cc894bd09bd51332d193c728" + "source": [ + "IPY_MODEL_ba8929ed10914f5b9f4dae160b96c38d", + "value" + ], + "target": [ + "IPY_MODEL_f3dea7f03fb04dc9996bc2613fb799f4", + "value" + ] + } + }, + "2e801ec9eac04bf4815fbf9ba5312d9e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_ac7875a1c7a346bdaae510866f7f02c0", + "max": 5, + "style": "IPY_MODEL_ed791c3db76b4335844879976e18efff" } }, - "6ff36b28a9284eb78dd860df53174692": { + "2fda43bd37a34c358f5086eb4b269ad0": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_5beac87558614f98b10b44df0bebde66", + "width": "900.0" + } + }, + "351325e64d054852a7dfc573a2737b7f": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", "state": { "_camera_orientation": [ - 14.593602577909778, + 11.095162889756295, 0, 0, 0, 0, - 14.593602577909778, + 11.095162889756295, 0, 0, 0, 0, - 14.593602577909778, + 11.095162889756295, 0, - -0.8999999761581421, - -0.8999999761581421, - -0.8999999761581421, + -0.0010000000474974513, + 0, + -0.3755000000237487, 1 ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_cd356a5554c045d5a8691eceec72c901", + "_ibtn_fullscreen": "IPY_MODEL_a1de9dadf70f44dfa053ba0f5a0622f7", "_igui": null, - "_iplayer": "IPY_MODEL_e10363ed797f4951929df20bf344a128", + "_iplayer": "IPY_MODEL_d1165b152eb3478c94ef45eb2c5e32c6", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -1669,7 +1655,7 @@ "args": [ { "binary": false, - "data": "CRYST1 2.400 2.400 2.400 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 5 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 6 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 7 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 8 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 9 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 10 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 11 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 12 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 13 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 14 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 15 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nENDMDL\n", + "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 -0.000 0.001 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.002 -0.000 0.750 1.00 0.00 FE \nENDMDL\n", "type": "blob" } ], @@ -1873,7 +1859,7 @@ "radialSegments": 10, "radiusData": {}, "radiusScale": 1, - "radiusSize": 0.011999999473246623, + "radiusSize": 0.5, "radiusType": "vdw", "roughness": 0.4, "sele": "all", @@ -1890,7 +1876,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "165512EC-20D3-4976-9143-5AD78CCDCF3E" + "8EE7F680-1056-43BB-937A-F3235C95F612" ], "_player_dict": {}, "_scene_position": {}, @@ -1902,124 +1888,95 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_af7e6fe6c4404360bb7d07731603c244", - "max_frame": 21, + "layout": "IPY_MODEL_cd36286772dd4423a5ab2ec15f299fba", + "max_frame": 5, "n_components": 1, "picked": {} } }, - "8a7a4f570717465692ab3dad94ae65bf": { + "4c7fb7d5854d4af6886de969fb2c6f6d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_37d125c6051843e3867636c19027f101", + "IPY_MODEL_ce51c9afc4c447a5bedd5de7a6790e7c", "max" ], "target": [ - "IPY_MODEL_6ff36b28a9284eb78dd860df53174692", + "IPY_MODEL_351325e64d054852a7dfc573a2737b7f", "max_frame" ] } }, - "92b260ef9632421b917a21b9a544eb7c": { + "4dfd5ad0dbcd45e1a155a10f9fa0ccb5": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_95ba0c01635e4981915ee666bb7032d4", - "max" - ], - "target": [ - "IPY_MODEL_59fe5f6c572a423e8b660aef1a486c18", - "max_frame" - ] - } - }, - "95ba0c01635e4981915ee666bb7032d4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", + "model_name": "PlayModel", "state": { - "layout": "IPY_MODEL_b859d553e9f541b7b21297ade13f9563", + "layout": "IPY_MODEL_2a8df7464c144ccaa969c9c83ed362e6", "max": 5, - "style": "IPY_MODEL_df134a5c8d3d49d09d58fc0061f3d564" + "style": "IPY_MODEL_d13481ecf17440cc8ab2cc190e8d3009" } }, - "95f20997c3de46ef8c58a5c2a3c3ae92": { + "50989b84464d4ab3b60603fab4809ea1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_2d1615d16e4247e681b25595f7470206", - "width": "900.0" - } - }, - "9902b6f121644a89a2cb556e59e2ccc5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "992ddf02bc5042a7b1ab408485e0ed49": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", + "model_name": "SliderStyleModel", "state": { - "width": "34px" + "description_width": "" } }, - "9994c848f67945c2bd543fa2459fa328": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "a0b5ad869deb4a09a909de9836a9b86a": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a1c4e972b36b4c30bfc18290301cd3af": { + "56d708f541654836a5ab858b097837b8": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_2bf44ea06e744b6aa8225e5ea5f5f121", + "IPY_MODEL_2e801ec9eac04bf4815fbf9ba5312d9e", "value" ], "target": [ - "IPY_MODEL_6ff36b28a9284eb78dd860df53174692", + "IPY_MODEL_351325e64d054852a7dfc573a2737b7f", "frame" ] } }, - "a383fde41d2045beba4260f92e890162": { + "584cfed18c7f40fc9d9d521af7f08686": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_name": "DescriptionStyleModel", "state": { - "children": [ - "IPY_MODEL_f14bae1fbf4540f883736303a1a73e8d", - "IPY_MODEL_95ba0c01635e4981915ee666bb7032d4" - ], - "layout": "IPY_MODEL_16ebcbdddefe445e92feccb35962fb75" + "description_width": "" } }, - "a3f09001811b4237aa5c13360ec2f5c8": { + "588481f1524e43649459e6b7194a76a1": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ImageModel", + "model_name": "ButtonModel", "state": { - "layout": "IPY_MODEL_9902b6f121644a89a2cb556e59e2ccc5", - "width": "900.0" + "icon": "compress", + "layout": "IPY_MODEL_72674ae629ae405ea7d1678546e5c864", + "style": "IPY_MODEL_99132b08b14e4705bb66ca58c0fd1738" + } + }, + "5b0f19a13c844825b6134d470384322f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "layout": "IPY_MODEL_070b13da96d24d0b86b3a293a2d51ba1", + "max": 5, + "style": "IPY_MODEL_5c5270f8a7dc4d6aaa312d4de4c4740b" } }, - "a5fa61609eb8494bac75276abcf5aa62": { + "5beac87558614f98b10b44df0bebde66": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "5c5270f8a7dc4d6aaa312d4de4c4740b": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "SliderStyleModel", @@ -2027,7 +1984,19 @@ "description_width": "" } }, - "aa1a6fceec024b4daac0262c7ac0246e": { + "5e6d292fcb254bda82d0e2cd1cca1cf6": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "5f78bf720c484a06acd8a0638380a250": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "72674ae629ae405ea7d1678546e5c864": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", @@ -2035,34 +2004,40 @@ "width": "34px" } }, - "ad5a693af9a043c4a4212ac050de7059": { + "798cadc8bf3946ffa70758988f3684b0": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "7fa01f4b04d04e88976398c5bb3b6ba7": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", "state": { "_camera_orientation": [ - 11.095162889756295, - 0, + 14.593602577909778, 0, 0, 0, - 11.095162889756295, 0, + 14.593602577909778, 0, 0, 0, - 11.095162889756295, 0, - -0.0010000000474974513, + 14.593602577909778, 0, - -0.3755000000237487, + -0.8999999761581421, + -0.8999999761581421, + -0.8999999761581421, 1 ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_69b5d8a47e20486f941c996f522b7332", + "_ibtn_fullscreen": "IPY_MODEL_d895c41a286c4aacaf82f651c6da855f", "_igui": null, - "_iplayer": "IPY_MODEL_f11d86e958624d83b46197be68bce93c", + "_iplayer": "IPY_MODEL_b7685c5bf04e47da9a351903f3f035c9", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -2095,7 +2070,7 @@ "args": [ { "binary": false, - "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 -0.000 0.001 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.002 -0.000 0.750 1.00 0.00 FE \nENDMDL\n", + "data": "CRYST1 2.400 2.400 2.400 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 5 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 6 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 7 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 8 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 9 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 10 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 11 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 12 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 13 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 14 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 15 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nENDMDL\n", "type": "blob" } ], @@ -2299,7 +2274,7 @@ "radialSegments": 10, "radiusData": {}, "radiusScale": 1, - "radiusSize": 0.5, + "radiusSize": 0.011999999473246623, "radiusType": "vdw", "roughness": 0.4, "sele": "all", @@ -2316,7 +2291,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "F6B52FC9-2316-48DE-93F3-198244426DAB" + "311346B1-2051-44A1-A0D6-2A1A6C18BEBC" ], "_player_dict": {}, "_scene_position": {}, @@ -2328,53 +2303,175 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_5687c957ddac4a2fb225cc2b642644a7", - "max_frame": 5, + "layout": "IPY_MODEL_e83dad5d0ea8451da58083fec376eb65", + "max_frame": 21, "n_components": 1, "picked": {} } }, - "af7e6fe6c4404360bb7d07731603c244": { + "820fe6075c5447808cc8d28a85f67b86": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_4dfd5ad0dbcd45e1a155a10f9fa0ccb5", + "value" + ], + "target": [ + "IPY_MODEL_08137dd2cb684642959b1f959227db33", + "frame" + ] + } + }, + "82f09a4050644b289b2441c08291e840": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "description_width": "" + } + }, + "95697a13a98a4eeea598fcbf126d6dcd": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "b19230cc0b4a4743bc5e3b9d34fac0c8": { + "99132b08b14e4705bb66ca58c0fd1738": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonStyleModel", "state": {} }, - "b44f8fe9d5104c50af0f8794a7e2937e": { + "9b8edfeb869d49378a53bc111bfd11f9": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "b859d553e9f541b7b21297ade13f9563": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", + "a1de9dadf70f44dfa053ba0f5a0622f7": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonModel", + "state": { + "icon": "compress", + "layout": "IPY_MODEL_d9a8f1bca598476596ee1ccf73b12a62", + "style": "IPY_MODEL_22fa3d7d1eca469c9e521c42abbcf252" + } + }, + "aa21aff770514650bbf4de70b7331f2b": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_4dfd5ad0dbcd45e1a155a10f9fa0ccb5", + "value" + ], + "target": [ + "IPY_MODEL_5b0f19a13c844825b6134d470384322f", + "value" + ] + } + }, + "aa817e59539b4e23aae722815c4a3763": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", "state": {} }, - "bc1a83d64dbe43c8abf0f7cc28f034cf": { + "ab24d50fb20b4bdba50441ecf8c85139": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_f3dea7f03fb04dc9996bc2613fb799f4", + "max" + ], + "target": [ + "IPY_MODEL_7fa01f4b04d04e88976398c5bb3b6ba7", + "max_frame" + ] + } + }, + "abd8361051044c9ea37e34d392f248f6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_9b8edfeb869d49378a53bc111bfd11f9", + "width": "900.0" + } + }, + "ac7875a1c7a346bdaae510866f7f02c0": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "cd356a5554c045d5a8691eceec72c901": { + "b7685c5bf04e47da9a351903f3f035c9": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ButtonModel", + "model_name": "HBoxModel", "state": { - "icon": "compress", - "layout": "IPY_MODEL_992ddf02bc5042a7b1ab408485e0ed49", - "style": "IPY_MODEL_9994c848f67945c2bd543fa2459fa328" + "children": [ + "IPY_MODEL_ba8929ed10914f5b9f4dae160b96c38d", + "IPY_MODEL_f3dea7f03fb04dc9996bc2613fb799f4" + ], + "layout": "IPY_MODEL_d261832e92e940518226face24d0599c" + } + }, + "ba8929ed10914f5b9f4dae160b96c38d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_f71e128bfc324795a5b521820e3acd93", + "max": 21, + "style": "IPY_MODEL_584cfed18c7f40fc9d9d521af7f08686" + } + }, + "badd0935939e43c991dc7fbaea635565": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_2e801ec9eac04bf4815fbf9ba5312d9e", + "value" + ], + "target": [ + "IPY_MODEL_ce51c9afc4c447a5bedd5de7a6790e7c", + "value" + ] + } + }, + "be63a4aba9e847689a3effc10b40d539": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_2e801ec9eac04bf4815fbf9ba5312d9e", + "max" + ], + "target": [ + "IPY_MODEL_351325e64d054852a7dfc573a2737b7f", + "max_frame" + ] } }, - "d31ec15aeb7b4e06ad10b5f522ed6b88": { + "c10d232958d04063949be3ecde7ef0b5": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "34px" + } + }, + "c2bd01f0def8431a8dd42a00c968a7d1": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "ColormakerRegistryModel", @@ -2382,119 +2479,148 @@ "_msg_ar": [], "_msg_q": [], "_ready": true, - "layout": "IPY_MODEL_e04b0c9924d34cd38417a2bd9560c598" + "layout": "IPY_MODEL_ecb20509792348a4bd0f06962b022fc8" } }, - "df134a5c8d3d49d09d58fc0061f3d564": { + "c62b973602f84dee9e544f24cfef9ec3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", + "model_name": "LinkModel", "state": { - "description_width": "" + "source": [ + "IPY_MODEL_ba8929ed10914f5b9f4dae160b96c38d", + "value" + ], + "target": [ + "IPY_MODEL_7fa01f4b04d04e88976398c5bb3b6ba7", + "frame" + ] } }, - "e04b0c9924d34cd38417a2bd9560c598": { + "cd36286772dd4423a5ab2ec15f299fba": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "e10363ed797f4951929df20bf344a128": { + "ce51c9afc4c447a5bedd5de7a6790e7c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "HBoxModel", + "model_name": "IntSliderModel", "state": { - "children": [ - "IPY_MODEL_2bf44ea06e744b6aa8225e5ea5f5f121", - "IPY_MODEL_37d125c6051843e3867636c19027f101" - ], - "layout": "IPY_MODEL_b44f8fe9d5104c50af0f8794a7e2937e" + "layout": "IPY_MODEL_5f78bf720c484a06acd8a0638380a250", + "max": 5, + "style": "IPY_MODEL_50989b84464d4ab3b60603fab4809ea1" } }, - "e7093d3a1f9747e6a9406ad1cc0ac00a": { + "ce7bcf9a08f1452c8b0716780779661b": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "ef0cb900d3fe4d24870c51562ece945c": { + "d07626890bd74a29bd04ec058668bf96": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ImageModel", + "model_name": "HBoxModel", "state": { - "layout": "IPY_MODEL_645e8985689a489194eeaa84581953d9", - "width": "900.0" + "children": [ + "IPY_MODEL_4dfd5ad0dbcd45e1a155a10f9fa0ccb5", + "IPY_MODEL_5b0f19a13c844825b6134d470384322f" + ], + "layout": "IPY_MODEL_1c1c2d2c44a24ab881e32f97148db31d" } }, - "f11d86e958624d83b46197be68bce93c": { + "d1165b152eb3478c94ef45eb2c5e32c6": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "HBoxModel", "state": { "children": [ - "IPY_MODEL_3a0064876a7f4e98bfb267f62ec63892", - "IPY_MODEL_61ca4c4fd4384d01bad6db8c0a5be94c" + "IPY_MODEL_2e801ec9eac04bf4815fbf9ba5312d9e", + "IPY_MODEL_ce51c9afc4c447a5bedd5de7a6790e7c" ], - "layout": "IPY_MODEL_33216e0960ec4e6d8df7e122717bb329" + "layout": "IPY_MODEL_5e6d292fcb254bda82d0e2cd1cca1cf6" } }, - "f13c120e4dfc4f1f899a597d36d8bc3f": { + "d13481ecf17440cc8ab2cc190e8d3009": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", + "model_name": "DescriptionStyleModel", "state": { "description_width": "" } }, - "f14bae1fbf4540f883736303a1a73e8d": { + "d261832e92e940518226face24d0599c": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "d895c41a286c4aacaf82f651c6da855f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "PlayModel", + "model_name": "ButtonModel", "state": { - "layout": "IPY_MODEL_ff83c968407e4fbeb3f4061db31616c7", - "max": 5, - "style": "IPY_MODEL_25e351b99ca748e4bcdc313c232d20bc" + "icon": "compress", + "layout": "IPY_MODEL_c10d232958d04063949be3ecde7ef0b5", + "style": "IPY_MODEL_aa817e59539b4e23aae722815c4a3763" } }, - "f1fd0f825d164a2787f4d33dfe1d13a7": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", + "d9a8f1bca598476596ee1ccf73b12a62": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", "state": { - "source": [ - "IPY_MODEL_f14bae1fbf4540f883736303a1a73e8d", - "value" - ], - "target": [ - "IPY_MODEL_95ba0c01635e4981915ee666bb7032d4", - "value" - ] + "width": "34px" } }, - "f4729c885ccf499f80afb857a584d80f": { + "e7b6909fbdc841478350994e52e45708": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_3a0064876a7f4e98bfb267f62ec63892", - "value" + "IPY_MODEL_5b0f19a13c844825b6134d470384322f", + "max" ], "target": [ - "IPY_MODEL_61ca4c4fd4384d01bad6db8c0a5be94c", - "value" + "IPY_MODEL_08137dd2cb684642959b1f959227db33", + "max_frame" ] } }, - "fa234acaa2da457d8778440384b23656": { + "e83dad5d0ea8451da58083fec376eb65": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", + "state": {} + }, + "ecb20509792348a4bd0f06962b022fc8": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "ed791c3db76b4335844879976e18efff": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", "state": { - "width": "34px" + "description_width": "" + } + }, + "f3dea7f03fb04dc9996bc2613fb799f4": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "IntSliderModel", + "state": { + "layout": "IPY_MODEL_ce7bcf9a08f1452c8b0716780779661b", + "max": 21, + "style": "IPY_MODEL_82f09a4050644b289b2441c08291e840" } }, - "ff83c968407e4fbeb3f4061db31616c7": { + "f71e128bfc324795a5b521820e3acd93": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", From 2b5b12a77d412b9bace1d55766ecb8a9dba44b0e Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Thu, 4 Jan 2024 23:16:00 +0100 Subject: [PATCH 12/49] Update docstring --- pyiron_contrib/tinybase/task.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyiron_contrib/tinybase/task.py b/pyiron_contrib/tinybase/task.py index 5c6994a1e..97cbb8cc5 100644 --- a/pyiron_contrib/tinybase/task.py +++ b/pyiron_contrib/tinybase/task.py @@ -64,8 +64,8 @@ class AbstractTask(Storable, abc.ABC): """ Basic unit of calculations. - Subclasses must implement :meth:`._get_input()`, :meth:`._make_output()` and :meth:`._execute()` and generally supply - their own :class:`.AbstractInput` and :class:`.AbstractOutput`. + Subclasses must implement :meth:`._get_input()` and :meth:`._execute()` and generally supply + their own :class:`.AbstractInput` and :class:`.AbstractOutput` (as returned from `_execute()`). """ def __init__(self, capture_exceptions=True): From 773861a43ead7101af977536c8603c10b836e535 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Fri, 5 Jan 2024 12:29:55 +0100 Subject: [PATCH 13/49] Add a small input class to capture computational parameters Like parallelization parameters, run time limits and working directory. --- pyiron_contrib/tinybase/task.py | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/pyiron_contrib/tinybase/task.py b/pyiron_contrib/tinybase/task.py index 97cbb8cc5..279907bdb 100644 --- a/pyiron_contrib/tinybase/task.py +++ b/pyiron_contrib/tinybase/task.py @@ -59,6 +59,12 @@ def is_done(self) -> True: """ return self.code == self.Code.DONE +class ComputeContext(AbstractInput): + cores: int = None + gpus: int = None + runtime: float = None + memory: float = None + working_directory: str = None class AbstractTask(Storable, abc.ABC): """ @@ -70,8 +76,13 @@ class AbstractTask(Storable, abc.ABC): def __init__(self, capture_exceptions=True): self._input = None + self._context = ComputeContext() self._capture_exceptions = capture_exceptions + @property + def context(self): + return self._context + @abc.abstractmethod def _get_input(self) -> AbstractInput: """ @@ -102,8 +113,15 @@ def _execute(self) -> Union[Tuple[ReturnStatus, AbstractOutput], AbstractOutput] def execute(self) -> Tuple[ReturnStatus, Optional[AbstractOutput]]: if not self.input.check_ready(): return ReturnStatus.aborted("Input not ready!"), None + cwd = os.getcwd() + if self.context.working_directory is not None: + nwd = contextlib.nullcontext(self.context.working_directory) + else: + nwd = TemporaryDirectory() try: - ret = self._execute() + with nwd as path, contextlib.chdir(path): + self.context.working_directory = path + ret = self._execute() if isinstance(ret, tuple): ret, output = ret elif isinstance(ret, AbstractOutput): @@ -132,11 +150,13 @@ def __iter__( # We might even avoid this by deriving from HasStorage and put _input in there def _store(self, storage): storage["input"] = self.input + storage["context"] = self.context @classmethod def _restore(cls, storage, version): task = cls() task._input = storage["input"].to_object() + task._context = storage["context"].to_object() return task def then(self, body, task = None): From 0908fa7908ef23fe40e969bf29d7a654a517c261 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Mon, 8 Jan 2024 09:48:32 +0100 Subject: [PATCH 14/49] Add method to projects to broker working directory --- pyiron_contrib/tinybase/job.py | 1 + pyiron_contrib/tinybase/lammps.py | 50 +++++++++---------- .../tinybase/project/base_adapter.py | 5 ++ pyiron_contrib/tinybase/project/h5io.py | 7 ++- pyiron_contrib/tinybase/project/interface.py | 4 ++ pyiron_contrib/tinybase/project/memory.py | 5 ++ pyiron_contrib/tinybase/task.py | 3 +- 7 files changed, 46 insertions(+), 29 deletions(-) diff --git a/pyiron_contrib/tinybase/job.py b/pyiron_contrib/tinybase/job.py index bfc14ad69..856a548ae 100644 --- a/pyiron_contrib/tinybase/job.py +++ b/pyiron_contrib/tinybase/job.py @@ -132,6 +132,7 @@ def run( submitter = "most_recent" if isinstance(submitter, str): submitter = getattr(self.project.create.executor, submitter)() + self.task.context.working_directory = self.project.request_directory(self.name) exe = self._submitter = submitter.submit(tasks=[self.task]) self._setup_submitter_callbacks() exe.run() diff --git a/pyiron_contrib/tinybase/lammps.py b/pyiron_contrib/tinybase/lammps.py index a6191e31c..fae231d6a 100644 --- a/pyiron_contrib/tinybase/lammps.py +++ b/pyiron_contrib/tinybase/lammps.py @@ -150,30 +150,26 @@ class LammpsStaticTask(AbstractTask): def _get_input(self): return LammpsInput() - def _get_output(self): - return LammpsStaticOutput() - - def _execute(self, output): - with TemporaryDirectory() as tmp_dir: - inp = LammpsInputTask(capture_exceptions=self._capture_exceptions) - inp.input.working_directory = tmp_dir - inp.input.structure = self.input.structure - inp.input.potential = self.input.potential - inp.input.calc_static() - ret, out = inp.execute() - if not ret.is_done(): - return ReturnStatus.aborted(f"Writing input failed: {ret.msg}") - - lmp = ShellTask(capture_exceptions=self._capture_exceptions) - lmp.input.command = ExecutablePathResolver("lammps", "lammps") - lmp.input.working_directory = tmp_dir - ret, out = lmp.execute() - if not ret.is_done(): - return ReturnStatus.aborted(f"Running lammps failed: {ret.msg}") - - psr = LammpsStaticParserTask(capture_exceptions=self._capture_exceptions) - psr.input.working_directory = tmp_dir - ret, out = psr.execute() - if not ret.is_done(): - return ReturnStatus.aborted(f"Parsing failed: {ret.msg}") - output.take(out) + def _execute(self): + inp = LammpsInputTask(capture_exceptions=self._capture_exceptions) + inp.input.working_directory = self.context.working_directory + inp.input.structure = self.input.structure + inp.input.potential = self.input.potential + inp.input.calc_static() + ret, out = inp.execute() + if not ret.is_done(): + return ReturnStatus.aborted(f"Writing input failed: {ret.msg}") + + lmp = ShellTask(capture_exceptions=self._capture_exceptions) + lmp.input.command = ExecutablePathResolver("lammps", "lammps") + lmp.input.working_directory = self.context.working_directory + ret, out = lmp.execute() + if not ret.is_done(): + return ReturnStatus.aborted(f"Running lammps failed: {ret.msg}") + + psr = LammpsStaticParserTask(capture_exceptions=self._capture_exceptions) + psr.input.working_directory = self.context.working_directory + ret, out = psr.execute() + if not ret.is_done(): + return ReturnStatus.aborted(f"Parsing failed: {ret.msg}") + return out diff --git a/pyiron_contrib/tinybase/project/base_adapter.py b/pyiron_contrib/tinybase/project/base_adapter.py index 35ffe26bb..f442824d9 100644 --- a/pyiron_contrib/tinybase/project/base_adapter.py +++ b/pyiron_contrib/tinybase/project/base_adapter.py @@ -26,6 +26,11 @@ def exists_storage(self, name) -> bool: def remove_storage(self, name): self._project.create_hdf(self._project.path, name).remove_file() + def request_directory(self, name): + path = os.path.join(self._project.path, name + "_hdf5", name) + os.makedirs(path, exist_ok=True) + return path + def _get_database(self) -> GenericDatabase: if self._database is None: self._database = TinyDB(os.path.join(self._project.path, "pyiron.db")) diff --git a/pyiron_contrib/tinybase/project/h5io.py b/pyiron_contrib/tinybase/project/h5io.py index 5b540e831..6a43ae346 100644 --- a/pyiron_contrib/tinybase/project/h5io.py +++ b/pyiron_contrib/tinybase/project/h5io.py @@ -28,7 +28,7 @@ def open_location(cls, path): return cls(path) def _get_job_file(self, name): - return os.path.join(self._path, name) + ".h5" + return os.path.join(self._path, name, "storage.h5") def create_storage(self, name): if not os.path.exists(self.path): @@ -46,6 +46,11 @@ def remove_storage(self, name): except FileNotFoundError: pass + def request_directory(self, name): + path = os.path.join(self.path, name, "files") + os.makedirs(path, exist_ok=True) + return path + def _get_database(self): if self._database is None: self._database = TinyDB(os.path.join(self.path, "pyiron.db")) diff --git a/pyiron_contrib/tinybase/project/interface.py b/pyiron_contrib/tinybase/project/interface.py index 1daddcce4..3b7a8a109 100644 --- a/pyiron_contrib/tinybase/project/interface.py +++ b/pyiron_contrib/tinybase/project/interface.py @@ -28,6 +28,10 @@ def exists_storage(self, name) -> bool: def remove_storage(self, name): pass + @abc.abstractmethod + def request_directory(self, name): + pass + @abc.abstractmethod def _get_database(self) -> GenericDatabase: pass diff --git a/pyiron_contrib/tinybase/project/memory.py b/pyiron_contrib/tinybase/project/memory.py index 4b09bf646..3f400362d 100644 --- a/pyiron_contrib/tinybase/project/memory.py +++ b/pyiron_contrib/tinybase/project/memory.py @@ -1,3 +1,5 @@ +import tempfile + from pyiron_base import DataContainer from pyiron_contrib.tinybase.project.interface import ProjectInterface from pyiron_contrib.tinybase.storage import GenericStorage, DataContainerAdapter @@ -29,6 +31,9 @@ def exists_storage(self, name) -> bool: def remove_storage(self, name): self._storage[self._location].pop(name) + def request_directory(self, name): + return tempfile.mkdtemp() + def _get_database(self) -> GenericDatabase: return self._db diff --git a/pyiron_contrib/tinybase/task.py b/pyiron_contrib/tinybase/task.py index 279907bdb..19088e4e9 100644 --- a/pyiron_contrib/tinybase/task.py +++ b/pyiron_contrib/tinybase/task.py @@ -1,7 +1,9 @@ import abc from copy import deepcopy +import contextlib from dataclasses import asdict import enum +from tempfile import TemporaryDirectory from typing import Optional, Callable, List, Generator, Tuple, Any, Union from pyiron_base.interfaces.object import HasStorage @@ -113,7 +115,6 @@ def _execute(self) -> Union[Tuple[ReturnStatus, AbstractOutput], AbstractOutput] def execute(self) -> Tuple[ReturnStatus, Optional[AbstractOutput]]: if not self.input.check_ready(): return ReturnStatus.aborted("Input not ready!"), None - cwd = os.getcwd() if self.context.working_directory is not None: nwd = contextlib.nullcontext(self.context.working_directory) else: From e5b1e05e037b73635adc550dc3d72c46f39105fb Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Mon, 8 Jan 2024 09:49:29 +0100 Subject: [PATCH 15/49] Fix changing pympipool API --- pyiron_contrib/tinybase/creator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyiron_contrib/tinybase/creator.py b/pyiron_contrib/tinybase/creator.py index 1d9657b3e..5f8df0a91 100644 --- a/pyiron_contrib/tinybase/creator.py +++ b/pyiron_contrib/tinybase/creator.py @@ -37,7 +37,7 @@ import ase.build -from pympipool import PoolExecutor as PyMPIPoolExecutor +from pympipool import Executor as PyMPIPoolExecutor from dask.distributed import Client, LocalCluster From a55145e9964680444b48aeca337fd86a78aa9a7f Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Mon, 8 Jan 2024 10:04:19 +0100 Subject: [PATCH 16/49] Quick fix to avoid to_object natively stored things --- pyiron_contrib/tinybase/container.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pyiron_contrib/tinybase/container.py b/pyiron_contrib/tinybase/container.py index 58054bc78..2c27f8d45 100644 --- a/pyiron_contrib/tinybase/container.py +++ b/pyiron_contrib/tinybase/container.py @@ -6,7 +6,7 @@ from copy import deepcopy from typing import TypeVar, List -from pyiron_contrib.tinybase.storage import HasHDFAdapaterMixin, Storable +from pyiron_contrib.tinybase.storage import Storable, GenericStorage from pyiron_base.interfaces.object import HasStorage from pyiron_atomistics.atomistics.structure.has_structure import HasStructure @@ -147,7 +147,11 @@ def _restore(cls, storage, version: str): state[name] = storage[name] for name in storage.list_groups(): - state[name] = storage[name].to_object() + value = storage[name] + if isinstance(value, GenericStorage): + state[name] = value.to_object() + else: + state[name] = value return cls(**state) From 3715fa47404ec5cae73f8a88486760bc0f70e8a5 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Mon, 8 Jan 2024 10:04:37 +0100 Subject: [PATCH 17/49] Update notebook --- notebooks/tinybase/TinyJob.ipynb | 1040 +++++++++++++++--------------- 1 file changed, 530 insertions(+), 510 deletions(-) diff --git a/notebooks/tinybase/TinyJob.ipynb b/notebooks/tinybase/TinyJob.ipynb index eac4badc0..0f95f825d 100644 --- a/notebooks/tinybase/TinyJob.ipynb +++ b/notebooks/tinybase/TinyJob.ipynb @@ -65,6 +65,16 @@ { "cell_type": "code", "execution_count": 4, + "id": "961292c0-4dfb-41a9-970b-13782eb049a2", + "metadata": {}, + "outputs": [], + "source": [ + "!rm -rf tinyjob" + ] + }, + { + "cell_type": "code", + "execution_count": 5, "id": "0f30286b-4434-4569-8f03-fadab46ebe34", "metadata": { "tags": [] @@ -86,7 +96,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "e31baebd-b2c8-4343-90ad-92d9128d1496", "metadata": { "tags": [] @@ -95,7 +105,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c2bd01f0def8431a8dd42a00c968a7d1", + "model_id": "6eb89b4339644ff5a2e79ff8f8c3a94f", "version_major": 2, "version_minor": 0 }, @@ -111,7 +121,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "18e6de26-308c-46ae-9672-b2db43447ea5", "metadata": { "tags": [] @@ -124,7 +134,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "72848cd2-fd51-4ad8-b56e-ca686074bb26", "metadata": { "tags": [] @@ -139,18 +149,21 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "56c0e73a-c42b-4814-a25a-e6974fea3d00", "metadata": { "tags": [] }, "outputs": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:Job already finished!\n" - ] + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ @@ -159,7 +172,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "2c533085-ade1-4585-9d3c-ed2e200f387c", "metadata": { "tags": [] @@ -171,7 +184,7 @@ "'finished'" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -182,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "49ccfe01-7b7e-4615-bf43-21c1bbffec66", "metadata": { "tags": [] @@ -191,7 +204,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "7fa01f4b04d04e88976398c5bb3b6ba7", + "model_id": "09f052769a8d47b9a1d34e8e32f2f92e", "version_major": 2, "version_minor": 0 }, @@ -217,7 +230,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "7b807119-da8d-475c-9aa8-c8e8c9afa115", "metadata": { "tags": [] @@ -229,7 +242,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "3a8cda32-df2e-4884-8cfd-84e438c5be69", "metadata": { "tags": [] @@ -247,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "d4b81c3f-4667-4b99-a2b3-08c7ee7e2c82", "metadata": { "tags": [] @@ -262,7 +275,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "e7494fee-d565-45e3-a819-c77ab0d2c7f6", "metadata": { "scrolled": true, @@ -270,10 +283,53 @@ }, "outputs": [ { - "name": "stderr", + "name": "stdout", "output_type": "stream", "text": [ - "INFO:root:Job already finished!\n" + " Step Time Energy fmax\n", + "LBFGS: 0 09:50:49 11.288146 189.5231\n", + "LBFGS: 1 09:50:49 1.168671 43.6957\n", + "LBFGS: 2 09:50:49 0.860403 38.6924\n", + "LBFGS: 3 09:50:49 0.362400 30.3554\n", + "LBFGS: 4 09:50:49 0.004806 24.0865\n", + "LBFGS: 5 09:50:49 -0.267437 19.0615\n", + "LBFGS: 6 09:50:49 -0.471646 15.0628\n", + "LBFGS: 7 09:50:49 -0.623506 11.8810\n", + "LBFGS: 8 09:50:49 -0.735237 9.3518\n", + "LBFGS: 9 09:50:49 -0.816458 7.3435\n", + "LBFGS: 10 09:50:49 -0.874705 5.7512\n", + "LBFGS: 11 09:50:49 -0.915849 4.4909\n", + "LBFGS: 12 09:50:49 -0.944435 3.4955\n", + "LBFGS: 13 09:50:49 -0.963943 2.7113\n", + "LBFGS: 14 09:50:49 -0.977006 2.0956\n", + "LBFGS: 15 09:50:49 -0.985585 1.6137\n", + "LBFGS: 16 09:50:49 -0.991109 1.2382\n", + "LBFGS: 17 09:50:49 -0.994598 0.9468\n", + "LBFGS: 18 09:50:49 -0.996763 0.7216\n", + "LBFGS: 19 09:50:49 -0.998083 0.5484\n", + "LBFGS: 20 09:50:49 -0.998876 0.4157\n", + "LBFGS: 21 09:50:49 -0.999347 0.3144\n", + "LBFGS: 22 09:50:49 -0.999623 0.2374\n", + "LBFGS: 23 09:50:49 -0.999784 0.1790\n", + "LBFGS: 24 09:50:49 -0.999877 0.1348\n", + "LBFGS: 25 09:50:49 -0.999930 0.1014\n", + "LBFGS: 26 09:50:49 -0.999960 0.0762\n", + "LBFGS: 27 09:50:49 -0.999977 0.0573\n", + "LBFGS: 28 09:50:49 -0.999987 0.0430\n", + "LBFGS: 29 09:50:49 -0.999993 0.0323\n", + "LBFGS: 30 09:50:49 -0.999996 0.0242\n", + "LBFGS: 31 09:50:49 -0.999998 0.0182\n", + "LBFGS: 32 09:50:49 -0.999999 0.0136\n", + "LBFGS: 33 09:50:49 -0.999999 0.0102\n", + "LBFGS: 34 09:50:49 -1.000000 0.0077\n", + "LBFGS: 35 09:50:49 -1.000000 0.0058\n", + "LBFGS: 36 09:50:49 -1.000000 0.0043\n", + "LBFGS: 37 09:50:49 -1.000000 0.0032\n", + "LBFGS: 38 09:50:49 -1.000000 0.0024\n", + "LBFGS: 39 09:50:49 -1.000000 0.0018\n", + "LBFGS: 40 09:50:49 -1.000000 0.0014\n", + "LBFGS: 41 09:50:49 -1.000000 0.0010\n", + "LBFGS: 42 09:50:49 -1.000000 0.0008\n" ] } ], @@ -286,7 +342,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "7c16a615-0913-4880-9694-2c125285babc", "metadata": { "tags": [] @@ -349,35 +405,21 @@ " finished\n", " AseMinimizeTask\n", " \n", - " \n", - " 2\n", - " 3\n", - " pyiron\n", - " murn\n", - " 3\n", - " 1\n", - " 3\n", - " tinyjob\n", - " finished\n", - " MurnaghanTask\n", - " \n", " \n", "\n", "" ], "text/plain": [ - " id username name jobtype_id project_id status_id location status \\\n", - "0 1 pyiron md 1 1 1 tinyjob finished \n", - "1 2 pyiron min 2 1 2 tinyjob finished \n", - "2 3 pyiron murn 3 1 3 tinyjob finished \n", + " id username name jobtype_id project_id status_id location status \\\n", + "0 1 pyiron md 1 1 1 tinyjob finished \n", + "1 2 pyiron min 2 1 2 tinyjob finished \n", "\n", " type \n", "0 AseMDTask \n", - "1 AseMinimizeTask \n", - "2 MurnaghanTask " + "1 AseMinimizeTask " ] }, - "execution_count": 15, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -388,7 +430,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "59ea5510-b6ce-4317-90c3-4af77db3d59a", "metadata": { "tags": [] @@ -396,7 +438,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -411,7 +453,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "3fb09d42-f800-46ee-9919-83180863e1ee", "metadata": { "tags": [] @@ -420,7 +462,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "351325e64d054852a7dfc573a2737b7f", + "model_id": "31f516acb1274474912b5cce65d519db", "version_major": 2, "version_minor": 0 }, @@ -446,7 +488,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "d32508b9-2854-4076-9109-08ede1b52dc2", "metadata": { "tags": [] @@ -459,7 +501,7 @@ " -1. ])" ] }, - "execution_count": 18, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } @@ -470,7 +512,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "db691097-72c6-45a4-89b1-6ec16018c8b8", "metadata": { "tags": [] @@ -478,7 +520,7 @@ "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAh8AAAGdCAYAAACyzRGfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAAur0lEQVR4nO3de3SU9b3v8c8zk2Ryn4QEAoEAkQTkjoBySyi2lb2osmX12GprFd1dbV0Fhc3qrtJ2V7e1ZrfdbemSA7v2rKN4rOJaW6Wcs6wt1UIICOVikC0WEogQLiEkkJlcJ8lkzh/JDERuuTwzz1zer7We1c4zT+b5Osu15uPv93u+P8Pn8/kEAAAQIjarCwAAALGF8AEAAEKK8AEAAEKK8AEAAEKK8AEAAEKK8AEAAEKK8AEAAEKK8AEAAEIqzuoCPqurq0tnz55VWlqaDMOwuhwAANAHPp9PjY2Nys3Nlc1247GNsAsfZ8+eVV5entVlAACAAaiurtaoUaNueE3YhY+0tDRJ3cWnp6dbXA0AAOgLt9utvLy8wO/4jYRd+PBPtaSnpxM+AACIMH1ZMsGCUwAAEFKEDwAAEFKEDwAAEFJht+YDAACreb1edXR0WF1G2LHb7YqLixt0KwzCBwAAV2hqatLp06fl8/msLiUsJScna8SIEUpISBjwZxA+AADo4fV6dfr0aSUnJ2vo0KE0u7yCz+dTe3u7Lly4oKqqKhUWFt60mdj1ED4AAOjR0dEhn8+noUOHKikpyepywk5SUpLi4+N18uRJtbe3KzExcUCfw4JTAAA+gxGP6xvoaEevzzChDgAAgD4jfAAAgJAifAAAEONefvllZWRkhOx+hA8AABBSMRM+GlratXH7cX3/vw5ZXQoAAKZatGiRVq5cqZUrVyojI0NZWVn60Y9+FOhVcunSJT388MPKzMxUcnKylixZooqKCknS9u3b9eijj8rlcskwDBmGoWeeeSao9cbUo7Y//9Pf5fNJa+6aoOHOgT0eBACIHT6fT60dXkvunRRv79dTN5s2bdI3v/lN7d27V/v379e3v/1tjRkzRt/61rf0yCOPqKKiQlu3blV6erqefPJJfelLX9KRI0c0f/58rVu3Tj/+8Y919OhRSVJqamqw/rEkxVD4yEhO0LSRTh067dLOigv6yuw8q0sCAIS51g6vJv34T5bc+8iz/6DkhL7/TOfl5enXv/61DMPQhAkTdPjwYf3617/WokWLtHXrVu3atUvz58+XJP3+979XXl6etmzZoq985StyOp0yDEPDhw8P1j9OLzEz7SJJRYXZkqSyyjqLKwEAwFxz587tNVIyb948VVRU6MiRI4qLi9OcOXMC72VlZWnChAn65JNPrCg1dkY+JKm4cKj+51+Pa1dlnbq6fLLZaCIDALi+pHi7jjz7D5bdO5h8Pp9lzdT6PfJRWlqqpUuXKjc3V4ZhaMuWLYH3Ojo69OSTT2rq1KlKSUlRbm6uHn74YZ09e9bMmgds5uhMJSfYVdfUrk9q3FaXAwAIc4ZhKDkhzpKjv8Fgz549V70uLCzUpEmT1NnZqb179wbeq6+v17FjxzRx4kRJUkJCgrze0K1t6Xf4aG5u1vTp07V+/fqr3mtpadHBgwf1r//6rzp48KDeeustHTt2TP/4j/9oSrGDlRBn09xbsiRJZRVMvQAAokd1dbXWrFmjo0eP6vXXX9cLL7ygVatWqbCwUPfee6++9a1vqaysTIcOHdI3vvENjRw5Uvfee68kaezYsWpqatJ7772nuro6tbS0BLXWfk+7LFmyREuWLLnme06nU9u2bet17oUXXtAdd9yhU6dOafTo0QOr0kRFBdl6/++12llRp+98bpzV5QAAYIqHH35Yra2tuuOOO2S32/X444/r29/+tiTppZde0qpVq3TPPfeovb1dCxcu1DvvvKP4+HhJ0vz58/XYY4/p/vvvV319vZ5++umgPm4b9DUf/ueGr9c5zePxyOPxBF673cGdDinuWXT6t08vqq3Dq8Qgz6kBABAK8fHxWrdunTZu3HjVe5mZmXrllVdu+PcbN2685t8GQ1Cfdmlra9NTTz2lr3/960pPT7/mNSUlJXI6nYEjLy+4j8AWDEvV8PREtXd2ad+nF4N6LwAAcLWghY+Ojg498MAD6urq0oYNG6573dq1a+VyuQJHdXV1sEqS1L14yP/I7U7WfQAAEHJBmXbp6OjQV7/6VVVVVen999+/7qiHJDkcDjkcjmCUcV3Fhdn6rwOnCR8AgKiwfft2q0voF9NHPvzBo6KiQn/5y1+UlZVl9i0GbUFB98jHJ+fcutDoucnVAADATP0OH01NTSovL1d5ebkkqaqqSuXl5Tp16pQ6Ozt13333af/+/fr9738vr9ermpoa1dTUqL293ezaByw71aHJud2jMbvodgoAQEj1O3zs379ft912m2677TZJ0po1a3Tbbbfpxz/+sU6fPq2tW7fq9OnTmjFjhkaMGBE4du/ebXrxg+Ff91FaccHiSgAAiC39XvOxaNGiwBa913Kj98JJccFQ/XbHCZVV1FnaYhYAgFgTUxvLXWn22Ew54myqbfSoorbJ6nIAAIgZMRs+EuPtuiN/iCSp9BhTLwAAhErMhg9JWlg4VJJUxqJTAEAEW7RokVavXn3N9x555BEtW7YspPXcTNDbq4cz/6LTPSfq5en0yhFHq3UAQHT5zW9+E3brMWN65OPW4WnKTnWoraNLB05esrocAABM53Q6r7u/mlViOnwYhhHYaK6MbqcAgCjx7rvvyul06pVXXrlq2mXRokV64okn9P3vf19DhgzR8OHDg7qD7bXEdPiQpKIC9nkBAFyHzye1N1tzDHCqZPPmzfrqV7+qV155RQ8//PA1r9m0aZNSUlK0d+9e/fznP9ezzz6rbdu2Deab6peYXvMhKTDy8d9nXbrY3K4hKQkWVwQACBsdLdLzudbc+wdnpYSUfv3Jhg0b9IMf/EB/+MMfdOedd173umnTpunpp5+WJBUWFmr9+vV67733dNdddw2q5L6K+fAxLD1RE3LSdPR8o3ZV1mnpdIv+JQMAYBDefPNNnT9/XmVlZbrjjjtueO20adN6vR4xYoRqa2uDWV4vMR8+pO7Rj6PnG1VWQfgAAFwhPrl7BMKqe/fDjBkzdPDgQb300ku6/fbbb9i5Oz4+vtdrwzDU1dU1oDIHgvCh7kdu/1dZlXZWXKDVOgDgMsPo99SHVcaNG6df/vKXWrRokex2u9avX291SdcV8wtOJWlOfpYS7DaddbXpRF2z1eUAADAg48eP11//+le9+eab1206Fg4Y+ZCUlGDX7LGZ2n28XmUVdRo3NNXqkgAAGJAJEybo/fffD4yAhCPCR4+iwmztPl6vnRUXtHz+WKvLAQCgz7Zv397r9cSJE3X+/Pk+XStJW7ZsMb+oG2DapYd/n5cPjterwxu6RTcAAMQawkePSSPSNSQlQc3tXn14qsHqcgAAiFqEjx42m6EFBf5W6xcsrgYAgOhF+LhCsb/VeiWt1gEACBbCxxWKelqtH6pukKulw+JqAACIToSPK+RmJGnc0BR1+aQPTjD6AQCxyjfATd1igRnfDeHjM4p7nnopZZdbAIg5/r4Y7e3tFlcSvlpaWiRd3aK9P+jz8RnFhdl6efenKiN8AEDMiYuLU3Jysi5cuKD4+HjZbPw3up/P51NLS4tqa2uVkZExqAZmhI/PmHNLluJshk5dbNHJ+maNyYqMnv4AgMEzDEMjRoxQVVWVTp48aXU5YSkjI0PDhw8f1GcQPj4j1RGnmWMy9beqi9pZUUf4AIAYk5CQoMLCQqZeriE+Pt6Ulu2Ej2soLsjW36ouqqyiTt+YO8bqcgAAIWaz2ZSYmGh1GVGLyaxr8D9yu+t4nTpptQ4AgKkIH9cwbVSG0hPj1NjWqY/OuKwuBwCAqEL4uAb7Fa3Wdx7jqRcAAMxE+LgOf7+Pskr2eQEAwEyEj+so7ln38eGpBjW20WodAACzED6uI29IssZkJauzy6c9Jy5aXQ4AAFGD8HED/tGPsgqmXgAAMAvh4waKCrrXfeyk1ToAAKYhfNzAvHFZstsMnahr1ulLLVaXAwBAVCB83IAzKV7TRzkliY3mAAAwCeHjJvyP3O6sJHwAAGAGwsdN+Bed7qqsk7fLZ3E1AABEPsLHTUzPy1CqI04NLR36+Cyt1gEAGCzCx03E222aNy5LEk+9AABgBsJHH/inXnbS7wMAgEEjfPSBf9HpgZOX1NLeaXE1AABENsJHH4zNStbIjCR1eH3aW0WrdQAABoPw0QeGYVyeejnGug8AAAaD8NFH/qmXskrWfQAAMBj9Dh+lpaVaunSpcnNzZRiGtmzZ0ut9n8+nZ555Rrm5uUpKStKiRYv08ccfm1WvZeaPy5JhSMfON6nG1WZ1OQAARKx+h4/m5mZNnz5d69evv+b7P//5z/WrX/1K69ev1759+zR8+HDdddddamxsHHSxVspMSdC0kT2t1ul2CgDAgPU7fCxZskTPPfecvvzlL1/1ns/n07p16/TDH/5QX/7ylzVlyhRt2rRJLS0teu2110wp2EpFPHILAMCgmbrmo6qqSjU1NVq8eHHgnMPh0Oc+9znt3r37mn/j8Xjkdrt7HeHKv+5jV2Wdumi1DgDAgJgaPmpqaiRJOTk5vc7n5OQE3vuskpISOZ3OwJGXl2dmSaaaOTpTyQl21TW16+81kT2NBACAVYLytIthGL1e+3y+q875rV27Vi6XK3BUV1cHoyRTJMTZNCd/iCSmXgAAGChTw8fw4cMl6apRjtra2qtGQ/wcDofS09N7HeHs8iO3LDoFAGAgTA0f+fn5Gj58uLZt2xY4197erh07dmj+/Plm3soy/mZje6suqq3Da3E1AABEnrj+/kFTU5MqKysDr6uqqlReXq4hQ4Zo9OjRWr16tZ5//nkVFhaqsLBQzz//vJKTk/X1r3/d1MKtUjAsVcPTE1XjbtO+Ty8GRkIAAEDf9Dt87N+/X3feeWfg9Zo1ayRJy5cv18svv6zvf//7am1t1Xe/+11dunRJc+bM0Z///GelpaWZV7WFDMNQUWG2/uvAaZVV1BE+AADoJ8Pn84XVM6Nut1tOp1Mulyts13/8ofyMVm0u18QR6frjqmKrywEAwHL9+f1mb5cBWFDQve7jk3NuXWj0WFwNAACRhfAxANmpDk0a0Z3qdvHUCwAA/UL4GKDi8f5W64QPAAD6g/AxQMUF3QtNd1ZcUJgtmwEAIKwRPgZo9thMOeJsqm30qKK2yepyAACIGISPAUqMt+uOQKt1pl4AAOgrwscg+Ludss8LAAB9R/gYBH+Dsb0nLsrTSat1AAD6gvAxCLcOT1N2qkOtHV4dOHnJ6nIAAIgIhI9BMAwjMPVSxroPAAD6hPAxSEUF9PsAAKA/CB+D5B/5+O+zLl1qbre4GgAAwh/hY5CGpSdqQk6afD5p13FGPwAAuBnChwmK/I/cHiN8AABwM4QPEwQWnVbW0WodAICbIHyYYE5+lhLsNp1paNWJumarywEAIKwRPkyQlGDX7LGZknjkFgCAmyF8mCSw7oPwAQDADRE+TLKwp9X6nhP16vB2WVwNAADhi/Bhkkkj0jUkJUFNnk6VVzdYXQ4AAGGL8GESm83Q/HFZkqSdx9jlFgCA6yF8mMg/9bKzknUfAABcD+HDRP5Fp4eqG+Rq6bC4GgAAwhPhw0S5GUkaNzRFXT7pgxOMfgAAcC2ED5MV+6deeOQWAIBrInyYrKiAfh8AANwI4cNkc8dlKc5m6NTFFp2sp9U6AACfRfgwWaojTjNHd7daZ/QDAICrET6CILDLLeEDAICrED6CwP/I7e7jdeqk1ToAAL0QPoJg2qgMpSfGyd3WqY/OuKwuBwCAsEL4CAK7zdCCAqZeAAC4FsJHkPinXnZWsM8LAABXInwEiX+flw9PNaixjVbrAAD4ET6CJG9IssZkJauzy6c9Jy5aXQ4AAGGD8BFElx+5ZeoFAAA/wkcQFRX07PNSyaJTAAD8CB9BNG9clmyGdOJCs840tFpdDgAAYYHwEUTOpHjNyMuQxNQLAAB+hI8gK+p56qWUfh8AAEgifATdQn+r9co6dXX5LK4GAADrET6CbHpehlIdcbrU0qGPz7qtLgcAAMsRPoIs3m7TvHFZkqRS1n0AAED4CIXL/T5Y9wEAgOnho7OzUz/60Y+Un5+vpKQk3XLLLXr22WfV1RW7W8sX9Wwyt//kRbW0d1pcDQAA1ooz+wN/9rOf6T//8z+1adMmTZ48Wfv379ejjz4qp9OpVatWmX27iJCfnaKRGUk609CqvVUXdeeEYVaXBACAZUwf+fjggw9077336u6779bYsWN13333afHixdq/f7/Zt4oYhmEEpl52HmPqBQAQ20wPH0VFRXrvvfd07NgxSdKhQ4dUVlamL33pS9e83uPxyO129zqiUXFPv4+yShadAgBim+nTLk8++aRcLpduvfVW2e12eb1e/fSnP9XXvva1a15fUlKif/u3fzO7jLAzf1yWDEM6dr5J591tyklPtLokAAAsYfrIxxtvvKFXX31Vr732mg4ePKhNmzbpP/7jP7Rp06ZrXr927Vq5XK7AUV1dbXZJYSEzJUHTRjolSTt56gUAEMNMH/n4l3/5Fz311FN64IEHJElTp07VyZMnVVJSouXLl191vcPhkMPhMLuMsFRUmK1Dp10qq7ig+2aNsrocAAAsYfrIR0tLi2y23h9rt9tj+lFbv6IC/7oPWq0DAGKX6SMfS5cu1U9/+lONHj1akydP1ocffqhf/epX+qd/+iezbxVxZo7JUHKCXXVN7fp7TaMm5aZbXRIAACFn+sjHCy+8oPvuu0/f/e53NXHiRH3ve9/Td77zHf3kJz8x+1YRxxFn15z8IZJ46gUAELsMn88XVuP/brdbTqdTLpdL6enRNzLwv8uq9Oz/O6Liwmz9n2/OsbocAABM0Z/fb/Z2CTF/s7G/VV1UW4fX4moAAAg9wkeIFQxLVU66Q57OLu379KLV5QAAEHKEjxDrbrXe89QL/T4AADGI8GEB/9RLKeEDABCDCB8WWFDQHT4+OefWhUaPxdUAABBahA8LZKc6NGlE90rg3ccZ/QAAxBbCh0WKx/dMvRwjfAAAYgvhwyLFgVbrFxRmrVYAAAgqwodFZo/NlCPOpvNujypqm6wuBwCAkCF8WCQx3q47elqt7+SpFwBADCF8WMj/yG1ZBfu8AABiB+HDQv5mY3tOXJSnk1brAIDYQPiw0K3D05Sd6lBrh1cHTzZYXQ4AACFB+LBQd6v17qmXnUy9AABiBOHDYkU93U7LKll0CgCIDYQPixX1jHwcPuPSpeZ2i6sBACD4CB8Wy0lP1IScNPl80i5arQMAYgDhIwwUBR65JXwAAKIf4SMMXF50WkerdQBA1CN8hIE5+VlKsNt0pqFVVXXNVpcDAEBQET7CQFKCXbPGZEqi1ToAIPoRPsJE8fjLUy8AAEQzwkeYKC7wt1qvV4e3y+JqAAAIHsJHmJicm67M5Hg1eTpVXt1gdTkAAAQN4SNM2GyGFhQw9QIAiH6EjzCysGeXW/Z5AQBEM8JHGPE3GztU3SBXa4fF1QAAEByEjzCSm5GkW4amqMsnfUCrdQBAlCJ8hJnLUy+EDwBAdCJ8hJminkWnZZWEDwBAdCJ8hJm547IUZzN0sr5Fp+pbrC4HAADTET7CTKojTjNH97Rar+SpFwBA9CF8hCH/Uy87jzH1AgCIPoSPMFTcEz52H69TJ63WAQBRhvARhqaNylB6YpzcbZ366IzL6nIAADAV4SMM2a9otV7GI7cAgChD+AhT/nUfhA8AQLQhfIQpf7Oxg6cuqcnTaXE1AACYh/ARpvKGJGtMVrI6u3zac7ze6nIAADAN4SOM+budssstACCaED7CWLF/nxdarQMAogjhI4zNG5clmyGduNCsMw2tVpcDAIApCB9hzJkUrxl5GZKkMqZeAABRIijh48yZM/rGN76hrKwsJScna8aMGTpw4EAwbhX1ivxTLzxyCwCIEqaHj0uXLmnBggWKj4/XH//4Rx05ckS//OUvlZGRYfatYsLCnn4fuyrr1NXls7gaAAAGL87sD/zZz36mvLw8vfTSS4FzY8eONfs2MWN6XoZSHXG61NKhj8+6NXWU0+qSAAAYFNNHPrZu3arZs2frK1/5ioYNG6bbbrtNv/vd7657vcfjkdvt7nXgsni7TXNvyZIklbLuAwAQBUwPHydOnNDGjRtVWFioP/3pT3rsscf0xBNP6JVXXrnm9SUlJXI6nYEjLy/P7JIi3sLxtFoHAEQPw+fzmbqQICEhQbNnz9bu3bsD55544gnt27dPH3zwwVXXezweeTyewGu32628vDy5XC6lp6ebWVrEOnGhSZ//5Q4l2G0qf/ouJSeYPlsGAMCguN1uOZ3OPv1+mz7yMWLECE2aNKnXuYkTJ+rUqVPXvN7hcCg9Pb3Xgd7ys1M0MiNJ7d4u7a26aHU5AAAMiunhY8GCBTp69Givc8eOHdOYMWPMvlXMMAxDxexyCwCIEqaHj3/+53/Wnj179Pzzz6uyslKvvfaaXnzxRa1YscLsW8WUokL2eQEARAfTw8ftt9+ut99+W6+//rqmTJmin/zkJ1q3bp0efPBBs28VUxaMy5ZhSMfON+m8u83qcgAAGLCgrFy85557dM899wTjo2NWZkqCpo506qPTLpVV1Ol/zBpldUkAAAwIe7tEkGKmXgAAUYDwEUGKCrr3eSmrrKfVOgAgYhE+IsjMMRlKTrCrrsmjv9c0Wl0OAAADQviIII44u+bkD5EklVUy9QIAiEyEjwhTVNg99bKTfh8AgAhF+IgwC3sWnf6t6qLaOrwWVwMAQP8RPiJMwbBU5aQ75Ons0v5PL1ldDgAA/Ub4iDDdrdb9Uy+s+wAARB7CRwS63O+DdR8AgMhD+IhACwq6w8eRc25daPRYXA0AAP1D+IhA2akOTRqRLknafZzRDwBAZCF8RCimXgAAkYrwEaGuXHTq89FqHQAQOQgfEWr22Ew54mw67/aosrbJ6nIAAOgzwkeESoy3646eVuulTL0AACII4SOC+dd9lNHvAwAQQQgfEayooHvdx54TF+XppNU6ACAyED4i2K3D05Sd6lBrh1cHTzZYXQ4AAH1C+IhgNpuhooIsSVJZJVMvAIDIQPiIcJcfuWXRKQAgMhA+IlxRz6LTw2dcutTcbnE1AADcHOEjwuWkJ2pCTpp8PmkXrdYBABGA8BEFigKP3BI+AADhj/ARBYqu2OeFVusAgHBH+IgCc/KHKMFu05mGVlXVNVtdDgAAN0T4iALJCXGaNSZTklRWydQLACC8ET6iRPH47qmX0mOEDwBAeCN8RIniQKv1enV4uyyuBgCA6yN8RInJuenKTI5Xk6dT5dUNVpcDAMB1ET6ihM1maEHB5adeAAAIV4SPKFIc6PfBPi8AgPBF+IgiRT37vJRXN8jV2mFxNQAAXBvhI4qMzEjSLUNT1OWTPjheb3U5AABcE+EjyiwM7HLL1AsAIDwRPqJMUc+iU5qNAQDCFeEjyswdl6U4m6GT9S06Vd9idTkAAFyF8BFlUh1xmjm6u9X6zkqmXgAA4YfwEYWKAo/cMvUCAAg/hI8o5O/3sauyTt4un8XVAADQG+EjCk0blaH0xDi52zr10ekGq8sBAKAXwkcUstNqHQAQxggfUYp1HwCAcEX4iFLFBd3Nxg6euqQmT6fF1QAAcBnhI0qNzkrWmKxkdXb5tIdW6wCAMBL08FFSUiLDMLR69epg3wqfQbdTAEA4Cmr42Ldvn1588UVNmzYtmLfBdRT37PNSyj4vAIAwErTw0dTUpAcffFC/+93vlJmZGazb4AbmjcuSzZBOXGjWmYZWq8sBAEBSEMPHihUrdPfdd+uLX/ziDa/zeDxyu929DpjDmRSv6XkZkqQyRj8AAGEiKOFj8+bNOnjwoEpKSm56bUlJiZxOZ+DIy8sLRkkxyz/1Qr8PAEC4MD18VFdXa9WqVXr11VeVmJh40+vXrl0rl8sVOKqrq80uKaZd2Wq9i1brAIAwEGf2Bx44cEC1tbWaNWtW4JzX61VpaanWr18vj8cju90eeM/hcMjhcJhdBnrMyMtQqiNOl1o69PFZt6aOclpdEgAgxpkePr7whS/o8OHDvc49+uijuvXWW/Xkk0/2Ch4Ivni7TXNvydJfPjmvnZUXCB8AAMuZHj7S0tI0ZcqUXudSUlKUlZV11XmExsLx2d3h41idvruowOpyAAAxjg6nMcDfbOzAyUtqbfdaXA0AINaZPvJxLdu3bw/FbXAd+dkpGpmRpDMNrdpbVa9FE4ZZXRIAIIYx8hEDDMMIPPXCI7cAAKsRPmJEUU/4KCN8AAAsRviIEQvGZcswpKPnG3Xe3WZ1OQCAGEb4iBGZKQmaOrL7MVtGPwAAViJ8xJDL6z7Y5wUAYB3CRwwpKuje56Wssl4+H63WAQDWIHzEkJljMpQUb1ddk0d/r2m0uhwAQIwifMQQR5xdc28ZIompFwCAdQgfMaaosHvqhX4fAACrED5izMKeRad/q7qotg5arQMAQo/wEWMKhqUqJ90hT2eX9n96yepyAAAxiPARYwzDCDz1srOSdR8AgNAjfMSgheN7+n0cY90HACD0CB8xaEFBd/g4cs6tuiaPxdUAAGIN4SMGZac6NGlEuiRpVyWjHwCA0CJ8xKjLrdYJHwCA0CJ8xKjiQL+PC7RaBwCEFOEjRs0emylHnE3n3R5V1jZZXQ4AIIYQPmJUYrxdd+T7W60z9QIACB3CRwy7vO6Dfh8AgNAhfMQwf7OxPScuytNJq3UAQGgQPmLYrcPTlJ3qUGuHVwdPNlhdDgAgRhA+YpjNZqioIEuSVEardQBAiBA+YlxRzyO3ZSw6BQCECOEjxvkXnX50xqVLze0WVwMAiAWEjxiXk56o8Tmp8vmk3cfrrS4HABADCB/o1e0UAIBgI3xARVfs80KrdQBAsBE+oDn5Q5Rgt+lMQ6uq6pqtLgcAEOUIH1ByQpxmjcmUJJVV8tQLACC4CB+Q1HvqBQCAYCJ8QJK0sGfR6QfH69Xh7bK4GgBANCN8QJI0OTddmcnxavJ06lB1g9XlAACiGOEDkrpbrS8o6J56KWXqBQAQRIQPBPi7nZbR7wMAEESEDwT493k5dNolV2uHxdUAAKIV4QMBIzOSdMvQFHm7fPqAVusAgCAhfKCX4p51H2WVTL0AAIKD8IFeLu/zwqJTAEBwED7Qy9xxWYqzGTpZ36JT9S1WlwMAiEKED/SS6ojTzNHdrdZ3MvUCAAgCwgeuUhR45JapFwCA+QgfuIo/fOyqrJO3y2dxNQCAaEP4wFWmjXQqPTFO7rZOfXS6wepyAABRxvTwUVJSottvv11paWkaNmyYli1bpqNHj5p9GwRRnN2m+eOYegEABIfp4WPHjh1asWKF9uzZo23btqmzs1OLFy9Wc3Oz2bdCEBWP7w4fPHILADBbnNkf+O677/Z6/dJLL2nYsGE6cOCAFi5caPbtECTFBd39Pg6euqQmT6dSHab/qwIAiFFBX/PhcrkkSUOGDLnm+x6PR263u9cB643OStaYrGR1dvm09wSt1gEA5glq+PD5fFqzZo2Kioo0ZcqUa15TUlIip9MZOPLy8oJZEvqhqICpFwCA+YIaPlauXKmPPvpIr7/++nWvWbt2rVwuV+Corq4OZknoh+JCf/ig2RgAwDxBm8h//PHHtXXrVpWWlmrUqFHXvc7hcMjhcASrDAzCvHHZshnS8QvNOtvQqtyMJKtLAgBEAdNHPnw+n1auXKm33npL77//vvLz882+BULEmRSv6XkZknjkFgBgHtPDx4oVK/Tqq6/qtddeU1pammpqalRTU6PW1lazb4UQ8O9yW8rUCwDAJKaHj40bN8rlcmnRokUaMWJE4HjjjTfMvhVCwL/uY/fxenXRah0AYALT13z4fPxARZMZeRlKdcTpYnO7jpxza8pIp9UlAQAiHHu74Ibi7TbNvSVLElMvAABzED5wU/6pFxadAgDMQPjATfnDx/5PL6m13WtxNQCASEf4wE3lZ6doZEaS2r1d2ltFq3UAwOAQPnBThmEw9QIAMA3hA31SVMg+LwAAcxA+0CcLxmXLMKSj5xtV626zuhwAQAQjfKBPMlMSNLWnxwejHwCAwSB8oM+KCnrWfVQSPgAAA0f4QJ/593nZWVFHJ1sAwIARPtBnM8dkKCnerromj/5e02h1OQCACEX4QJ854uyae8sQSTxyCwAYOMIH+qWoZ+qFfV4AAANF+EC/+JuN/a3qoto6aLUOAOg/wgf6pXBYqnLSHfJ0dmn/p5esLgcAEIEIH+gXwzBUVNDz1EslUy8AgP4jfKDfFo7vabV+jEWnAID+I3yg3xb0NBs7cs6tuiaPxdUAACIN4QP9lp3q0MQR6ZKkXXQ7BQD0E+EDA7KQXW4BAANE+MCAFPWEjzJarQMA+onwgQG5fewQOeJsqnG3qbK2yepyAAARhPCBAUmMt+uO/O5W60y9AAD6g/CBAfN3Oy1j0SkAoB8IHxgwf7OxPSfq1d7ZZXE1AIBIQfjAgN06PE3ZqQlqaffq4ClarQMA+obwgQGz2QwVFfgfuaXVOgCgbwgfGJSiwu6plzIWnQIA+ojwgUHxLzr96IxLl5rbLa4GABAJCB8YlJz0RI3PSZXPJ+0+Xm91OQCACED4wKAV+6deKln3AQC4OcIHBs3far30GK3WAQA3R/jAoM3JH6IEu01nGlr1aX2L1eUAAMIc4QODlpwQp1ljMiXxyC0A4OYIHzCFf+qFfV4AADdD+IApFvYsOt1zvF4dXlqtAwCuj/ABU0zOTVdmcrwaPZ06VN1gdTkAgDBG+IApbDZD8wuYegEA3BzhA6ZZWMg+LwCAmyN8wDT+fV4OnXbJ1dphcTUAgHBF+IBpRmYk6ZahKfJ2+fQBrdYBANdB+ICpinvWfdBqHQBwPYQPmCqwzwuLTgEA1xEXrA/esGGDfvGLX+jcuXOaPHmy1q1bp+Li4mDdDmFi7rgsxdkMfVrfoilP/0mJ8XYlxtuUFG9XUoJdiXF2JSbYlRRvU2K8XUnx9p5r/P/f1n3dFef85xP9n3HFeUecTTabYfU/NgCgH4ISPt544w2tXr1aGzZs0IIFC/Tb3/5WS5Ys0ZEjRzR69Ohg3BJhItURpyVTR+j/HjqrJk+nmjydQb+nI+5ykElK6A4kSQmXg83lgHNFCPrsuStDUELv846e/423GzIMgg4ADJbhC8I2pHPmzNHMmTO1cePGwLmJEydq2bJlKikpueHfut1uOZ1OuVwupaenm1eUzyd1sOlZKPh8PtU2etTa0aW2Du/lo9Ortvbuc60dXnk6L7/f2t6ltk6vPD3XtbZ71dbRpbbOz3xGR/f5dgu6qNpthhJ7go4j7ooQE2cLjMxcOWLjuHJ0x/93PaEm0T8KdEUISuwJTYlxdkZzAARffLJk4n9Q9ef32/SRj/b2dh04cEBPPfVUr/OLFy/W7t27r7re4/HI4/EEXrvdbrNL6tbRIj2fG5zPRi+GpJxg3iC+57CKt+fw3OxCAAhjPzgrJaRYcmvTF5zW1dXJ6/UqJ6f3z09OTo5qamquur6kpEROpzNw5OXlmV0SAAAII0FbcPrZuXGfz3fN+fK1a9dqzZo1gddutzs4ASQ+uTvlAWGqq8snT2eXWv1TVB1dam33T0V1n/f4p6x6zrV19H36qT8TrD71bza2f58dpA/u92f351LTZ6cBS9lsNj0Rn2zZ/U0PH9nZ2bLb7VeNctTW1l41GiJJDodDDofD7DKuZhiWDS8BfWGTlNRzAEA0M33aJSEhQbNmzdK2bdt6nd+2bZvmz59v9u0AAECECcq0y5o1a/TQQw9p9uzZmjdvnl588UWdOnVKjz32WDBuBwAAIkhQwsf999+v+vp6Pfvsszp37pymTJmid955R2PGjAnG7QAAQAQJSp+PwQhanw8AABA0/fn9Zm8XAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUkFprz4Y/oarbrfb4koAAEBf+X+3+9I4PezCR2NjoyQpLy/P4koAAEB/NTY2yul03vCasNvbpaurS2fPnlVaWpoMwzD1s91ut/Ly8lRdXc2+MUHE9xwafM+hw3cdGnzPoRGs79nn86mxsVG5ubmy2W68qiPsRj5sNptGjRoV1Hukp6fzL3YI8D2HBt9z6PBdhwbfc2gE43u+2YiHHwtOAQBASBE+AABASMVU+HA4HHr66aflcDisLiWq8T2HBt9z6PBdhwbfc2iEw/ccdgtOAQBAdIupkQ8AAGA9wgcAAAgpwgcAAAgpwgcAAAipmAkfGzZsUH5+vhITEzVr1izt3LnT6pKiTmlpqZYuXarc3FwZhqEtW7ZYXVJUKikp0e233660tDQNGzZMy5Yt09GjR60uK+ps3LhR06ZNCzRimjdvnv74xz9aXVbUKykpkWEYWr16tdWlRJ1nnnlGhmH0OoYPH25JLTERPt544w2tXr1aP/zhD/Xhhx+quLhYS5Ys0alTp6wuLao0Nzdr+vTpWr9+vdWlRLUdO3ZoxYoV2rNnj7Zt26bOzk4tXrxYzc3NVpcWVUaNGqV///d/1/79+7V//359/vOf17333quPP/7Y6tKi1r59+/Tiiy9q2rRpVpcStSZPnqxz584FjsOHD1tSR0w8ajtnzhzNnDlTGzduDJybOHGili1bppKSEgsri16GYejtt9/WsmXLrC4l6l24cEHDhg3Tjh07tHDhQqvLiWpDhgzRL37xC33zm9+0upSo09TUpJkzZ2rDhg167rnnNGPGDK1bt87qsqLKM888oy1btqi8vNzqUqJ/5KO9vV0HDhzQ4sWLe51fvHixdu/ebVFVgHlcLpek7h9GBIfX69XmzZvV3NysefPmWV1OVFqxYoXuvvtuffGLX7S6lKhWUVGh3Nxc5efn64EHHtCJEycsqSPsNpYzW11dnbxer3Jycnqdz8nJUU1NjUVVAebw+Xxas2aNioqKNGXKFKvLiTqHDx/WvHnz1NbWptTUVL399tuaNGmS1WVFnc2bN+vgwYPat2+f1aVEtTlz5uiVV17R+PHjdf78eT333HOaP3++Pv74Y2VlZYW0lqgPH36GYfR67fP5rjoHRJqVK1fqo48+UllZmdWlRKUJEyaovLxcDQ0NevPNN7V8+XLt2LGDAGKi6upqrVq1Sn/+85+VmJhodTlRbcmSJYH/P3XqVM2bN0/jxo3Tpk2btGbNmpDWEvXhIzs7W3a7/apRjtra2qtGQ4BI8vjjj2vr1q0qLS3VqFGjrC4nKiUkJKigoECSNHv2bO3bt0+/+c1v9Nvf/tbiyqLHgQMHVFtbq1mzZgXOeb1elZaWav369fJ4PLLb7RZWGL1SUlI0depUVVRUhPzeUb/mIyEhQbNmzdK2bdt6nd+2bZvmz59vUVXAwPl8Pq1cuVJvvfWW3n//feXn51tdUszw+XzyeDxWlxFVvvCFL+jw4cMqLy8PHLNnz9aDDz6o8vJygkcQeTweffLJJxoxYkTI7x31Ix+StGbNGj300EOaPXu25s2bpxdffFGnTp3SY489ZnVpUaWpqUmVlZWB11VVVSovL9eQIUM0evRoCyuLLitWrNBrr72mP/zhD0pLSwuM6jmdTiUlJVlcXfT4wQ9+oCVLligvL0+NjY3avHmztm/frnfffdfq0qJKWlraVeuVUlJSlJWVxTomk33ve9/T0qVLNXr0aNXW1uq5556T2+3W8uXLQ15LTISP+++/X/X19Xr22Wd17tw5TZkyRe+8847GjBljdWlRZf/+/brzzjsDr/1ziMuXL9fLL79sUVXRx//I+KJFi3qdf+mll/TII4+EvqAodf78eT300EM6d+6cnE6npk2bpnfffVd33XWX1aUBA3L69Gl97WtfU11dnYYOHaq5c+dqz549lvwWxkSfDwAAED6ifs0HAAAIL4QPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUoQPAAAQUv8fCM/lx7x5X9QAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -493,14 +535,14 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "id": "23ce6822-b38b-41f3-9269-109dbb152ecf", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "08137dd2cb684642959b1f959227db33", + "model_id": "c4fc225ea610406eba0b3c60a819f3dd", "version_major": 2, "version_minor": 0 }, @@ -526,7 +568,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "id": "654ce992-b73f-42e3-a32e-2e0dafa7c952", "metadata": { "tags": [] @@ -538,7 +580,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "id": "253237f0-b338-470c-bc54-3c7400a757b7", "metadata": {}, "outputs": [], @@ -549,7 +591,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "c801093b-499e-48a7-8444-77602ed88a96", "metadata": {}, "outputs": [], @@ -559,7 +601,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "1e30b36e-11e6-47d1-836e-cffea7b73cdd", "metadata": {}, "outputs": [], @@ -569,23 +611,16 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "18b5305a-8950-44af-bc2e-c9734b059713", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "INFO:root:Job already finished!\n" - ] - }, { "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 3.04 ms, sys: 0 ns, total: 3.04 ms\n", - "Wall time: 2.75 ms\n" + "CPU times: user 721 ms, sys: 309 ms, total: 1.03 s\n", + "Wall time: 4.99 s\n" ] } ], @@ -597,13 +632,13 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "id": "836bb2ec-4295-4a3c-b976-7a35d04aad36", "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -636,7 +671,17 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, + "id": "c178c3a3-f86c-4e80-a041-719ef2193b11", + "metadata": {}, + "outputs": [], + "source": [ + "!rm -rf tinyjob_single/" + ] + }, + { + "cell_type": "code", + "execution_count": 29, "id": "e4c1b466-1185-4664-8178-716068139f0c", "metadata": { "tags": [] @@ -658,23 +703,10 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 30, "id": "b41e37f5-45e2-49c7-af75-4457c7b9dec5", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:pyiron_log:Not supported parameter used!\n", - "INFO:root:Job already finished!\n", - "DEBUG:pyiron_log:Not supported parameter used!\n", - "INFO:root:Job already finished!\n", - "DEBUG:pyiron_log:Not supported parameter used!\n", - "INFO:root:Job already finished!\n" - ] - } - ], + "outputs": [], "source": [ "for T in [300, 600, 900]:\n", " j = pr.create.job.AseMD(f'md_{T}')\n", @@ -692,7 +724,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 31, "id": "d5dc0078-ee70-45f3-8f0a-3dafa4b50ee4", "metadata": {}, "outputs": [ @@ -702,7 +734,7 @@ "{'groups': ['output', 'task'], 'nodes': ['MODULE', 'NAME', 'VERSION']}" ] }, - "execution_count": 29, + "execution_count": 31, "metadata": {}, "output_type": "execute_result" } @@ -713,7 +745,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 32, "id": "3cd9f120-9eb7-4f34-80cb-9477d492c4ae", "metadata": {}, "outputs": [ @@ -723,7 +755,7 @@ "{'groups': ['md_300', 'md_600', 'md_900'], 'nodes': []}" ] }, - "execution_count": 30, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -734,7 +766,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 33, "id": "d0621236-07c4-4843-99e0-4c460fc7fa89", "metadata": {}, "outputs": [ @@ -742,11 +774,14 @@ "name": "stdout", "output_type": "stream", "text": [ - "total 2.6M\n", - "drwxr-xr-x 2 ponder ponder 4.0K 4. Jan 18:39 .\n", - "drwxr-xr-x 7 ponder ponder 4.0K 4. Jan 22:57 ..\n", - "-rw-r--r-- 1 ponder ponder 2.6M 4. Jan 18:39 project.h5\n", - "-rw-r--r-- 1 ponder ponder 20K 4. Jan 18:39 pyiron.db\n" + "total 1.9M\n", + "drwxr-xr-x 5 ponder ponder 4.0K 8. Jan 09:51 .\n", + "drwxr-xr-x 6 ponder ponder 4.0K 8. Jan 09:50 ..\n", + "drwxr-xr-x 3 ponder ponder 4.0K 8. Jan 09:50 md_300\n", + "drwxr-xr-x 3 ponder ponder 4.0K 8. Jan 09:50 md_600\n", + "drwxr-xr-x 3 ponder ponder 4.0K 8. Jan 09:51 md_900\n", + "-rw-r--r-- 1 ponder ponder 1.8M 8. Jan 09:51 project.h5\n", + "-rw-r--r-- 1 ponder ponder 20K 8. Jan 09:51 pyiron.db\n" ] } ], @@ -764,7 +799,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 34, "id": "79a2bb61-0a5e-4a3a-b195-46d027738a0e", "metadata": {}, "outputs": [], @@ -774,7 +809,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 35, "id": "b4e6e0c9-a2c6-40ab-884e-a46e16c37b04", "metadata": {}, "outputs": [ @@ -812,7 +847,7 @@ "Index: []" ] }, - "execution_count": 33, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -823,13 +858,13 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 36, "id": "cef7c46f-551f-401e-96c2-214628e23967", "metadata": {}, "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -851,7 +886,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 37, "id": "e8a7ee30-d7a6-46fc-bf98-1b52c981470f", "metadata": {}, "outputs": [ @@ -912,7 +947,7 @@ "0 MurnaghanTask " ] }, - "execution_count": 35, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -923,18 +958,10 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 38, "id": "30871447-3e20-46ee-a58e-853d4f4cb5d9", "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:pyiron_log:Not supported parameter used!\n" - ] - } - ], + "outputs": [], "source": [ "j = pr.create.job.AseMD('md')\n", "j.input.structure = pr.create.structure.bulk('Fe', a=1.2, cubic=True).repeat(2).to_ase() # since our Atoms cannot be pickled, but parallel execution needs that we still convert back here\n", @@ -949,7 +976,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 39, "id": "e63d43c1-341f-4ec0-b0cf-9cd5ead51926", "metadata": {}, "outputs": [ @@ -1024,7 +1051,7 @@ "1 AseMDTask " ] }, - "execution_count": 37, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -1043,24 +1070,17 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 40, "id": "80da39e2-76d1-42e6-977f-241d2683188d", "metadata": {}, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "DEBUG:pyiron_log:Not supported parameter used!\n" - ] - }, { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 38, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1079,7 +1099,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 41, "id": "a567f96a-cbb3-4d2d-95d1-6dcecee7ddb8", "metadata": {}, "outputs": [ @@ -1168,7 +1188,7 @@ "2 AseMDTask " ] }, - "execution_count": 39, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1199,40 +1219,59 @@ "widgets": { "application/vnd.jupyter.widget-state+json": { "state": { - "070b13da96d24d0b86b3a293a2d51ba1": { + "038f85f23848476c9afbdf4373190fd6": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "08137dd2cb684642959b1f959227db33": { + "06f136bd542447b1854595cb2d607c81": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_9511cf255289415a87d8eb4188a88901", + "max": 21, + "style": "IPY_MODEL_74be2440ed36407cab4db88cf0860e08" + } + }, + "079007666c444bdabb3b829dbd704ace": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_a3e73a855f2e49d5bb2d5868b05c8310", + "width": "900.0" + } + }, + "09f052769a8d47b9a1d34e8e32f2f92e": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", "state": { "_camera_orientation": [ - 11.095162889756295, - 0, + 14.593602577909778, 0, 0, 0, - 11.095162889756295, 0, + 14.593602577909778, 0, 0, 0, - 11.095162889756295, 0, - -0.0010000000474974513, + 14.593602577909778, 0, - -0.3755000000237487, + -0.8999999761581421, + -0.8999999761581421, + -0.8999999761581421, 1 ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_588481f1524e43649459e6b7194a76a1", + "_ibtn_fullscreen": "IPY_MODEL_5a51ef0639a0462da9d768bc7b7e7380", "_igui": null, - "_iplayer": "IPY_MODEL_d07626890bd74a29bd04ec058668bf96", + "_iplayer": "IPY_MODEL_8f74f356773746fb97c5ea65b696d117", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -1265,7 +1304,7 @@ "args": [ { "binary": false, - "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 -0.000 0.001 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.002 -0.000 0.750 1.00 0.00 FE \nENDMDL\n", + "data": "CRYST1 2.400 2.400 2.400 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 5 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 6 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 7 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 8 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 9 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 10 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 11 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 12 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 13 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 14 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 15 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nENDMDL\n", "type": "blob" } ], @@ -1469,7 +1508,7 @@ "radialSegments": 10, "radiusData": {}, "radiusScale": 1, - "radiusSize": 0.5, + "radiusSize": 0.011999999473246623, "radiusType": "vdw", "roughness": 0.4, "sele": "all", @@ -1486,7 +1525,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "CF0B0BA4-6170-43D5-8D2F-59B88F8AA1B0" + "2C636F00-DD46-4114-8E27-88300FD7DD3E" ], "_player_dict": {}, "_scene_position": {}, @@ -1498,104 +1537,58 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_95697a13a98a4eeea598fcbf126d6dcd", - "max_frame": 5, + "layout": "IPY_MODEL_833ebd67ecf348279ba9092206cf7ff8", + "max_frame": 21, "n_components": 1, "picked": {} } }, - "1b0e9d5aae07450f84a2c28496c496e9": { + "1a46fe9c6a834075952df882f27a2f1c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "ImageModel", + "model_name": "ButtonModel", "state": { - "layout": "IPY_MODEL_798cadc8bf3946ffa70758988f3684b0", - "width": "900.0" + "icon": "compress", + "layout": "IPY_MODEL_76ca239a000b466182cef72a93063dc3", + "style": "IPY_MODEL_bd7ee1ff51ec4c588bf847ea5d65c3c2" } }, - "1c1c2d2c44a24ab881e32f97148db31d": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "22fa3d7d1eca469c9e521c42abbcf252": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "2964704516cc4b88b351c52afdb42e60": { + "24ee9ae04f794a8099ee9a2404d0a857": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", + "model_name": "IntSliderModel", "state": { - "source": [ - "IPY_MODEL_ba8929ed10914f5b9f4dae160b96c38d", - "max" - ], - "target": [ - "IPY_MODEL_7fa01f4b04d04e88976398c5bb3b6ba7", - "max_frame" - ] + "layout": "IPY_MODEL_c2cb82557fae4fda94579d287f056dd4", + "max": 5, + "style": "IPY_MODEL_94dae57aa8e44c21a2f4093dd76a0fc4" } }, - "2a8df7464c144ccaa969c9c83ed362e6": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "2abc583998254b95bc37c9614c22a87b": { + "2f48bccbfcb546ce8072b392d24b6233": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", + "model_name": "IntSliderModel", "state": { - "source": [ - "IPY_MODEL_4dfd5ad0dbcd45e1a155a10f9fa0ccb5", - "max" - ], - "target": [ - "IPY_MODEL_08137dd2cb684642959b1f959227db33", - "max_frame" - ] + "layout": "IPY_MODEL_fa53daa2b11b47c4891b85c29c2566d4", + "max": 5, + "style": "IPY_MODEL_6b252e01b9e94254bab3f8d937e10f18" } }, - "2b62b1aba5b04ff4bfd871244bd1c7e7": { + "305f8e9e9e004875b766af2d1e9b929d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_ba8929ed10914f5b9f4dae160b96c38d", + "IPY_MODEL_881cc27c576549a2bc9f8df351295f57", "value" ], "target": [ - "IPY_MODEL_f3dea7f03fb04dc9996bc2613fb799f4", - "value" + "IPY_MODEL_c4fc225ea610406eba0b3c60a819f3dd", + "frame" ] } }, - "2e801ec9eac04bf4815fbf9ba5312d9e": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_ac7875a1c7a346bdaae510866f7f02c0", - "max": 5, - "style": "IPY_MODEL_ed791c3db76b4335844879976e18efff" - } - }, - "2fda43bd37a34c358f5086eb4b269ad0": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_5beac87558614f98b10b44df0bebde66", - "width": "900.0" - } - }, - "351325e64d054852a7dfc573a2737b7f": { + "31f516acb1274474912b5cce65d519db": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", @@ -1620,9 +1613,9 @@ ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_a1de9dadf70f44dfa053ba0f5a0622f7", + "_ibtn_fullscreen": "IPY_MODEL_1a46fe9c6a834075952df882f27a2f1c", "_igui": null, - "_iplayer": "IPY_MODEL_d1165b152eb3478c94ef45eb2c5e32c6", + "_iplayer": "IPY_MODEL_b64cc1b2e3c349218db69ae729c93097", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -1876,7 +1869,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "8EE7F680-1056-43BB-937A-F3235C95F612" + "84CE43D0-EF97-4B31-AAEB-85E60D531159" ], "_player_dict": {}, "_scene_position": {}, @@ -1888,95 +1881,274 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_cd36286772dd4423a5ab2ec15f299fba", + "layout": "IPY_MODEL_d240169915f149248847eb7261f3db6c", "max_frame": 5, "n_components": 1, "picked": {} } }, - "4c7fb7d5854d4af6886de969fb2c6f6d": { + "3545072b43b240088c82631be2341edf": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "3886e41abf0347aaa2a6908f3f11621d": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_ce51c9afc4c447a5bedd5de7a6790e7c", + "IPY_MODEL_2f48bccbfcb546ce8072b392d24b6233", "max" ], "target": [ - "IPY_MODEL_351325e64d054852a7dfc573a2737b7f", + "IPY_MODEL_31f516acb1274474912b5cce65d519db", "max_frame" ] } }, - "4dfd5ad0dbcd45e1a155a10f9fa0ccb5": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_2a8df7464c144ccaa969c9c83ed362e6", - "max": 5, - "style": "IPY_MODEL_d13481ecf17440cc8ab2cc190e8d3009" - } - }, - "50989b84464d4ab3b60603fab4809ea1": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", - "state": { - "description_width": "" - } - }, - "56d708f541654836a5ab858b097837b8": { + "3b87f0d0cd034252a91e0baeabe65bb3": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_2e801ec9eac04bf4815fbf9ba5312d9e", + "IPY_MODEL_06f136bd542447b1854595cb2d607c81", "value" ], "target": [ - "IPY_MODEL_351325e64d054852a7dfc573a2737b7f", - "frame" + "IPY_MODEL_70a3ea22fe684ab9a820bce25946cd81", + "value" ] } }, - "584cfed18c7f40fc9d9d521af7f08686": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" + "41351978cfb14d378fcb2194d8d94c5f": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "4fa8d2b7743b4f219d01310590372565": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_881cc27c576549a2bc9f8df351295f57", + "max" + ], + "target": [ + "IPY_MODEL_c4fc225ea610406eba0b3c60a819f3dd", + "max_frame" + ] } }, - "588481f1524e43649459e6b7194a76a1": { + "5415f748692e4af98a974e50bec40e8e": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "59ba6ca4d1c942fd975fc35995343966": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "5a51ef0639a0462da9d768bc7b7e7380": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonModel", "state": { "icon": "compress", - "layout": "IPY_MODEL_72674ae629ae405ea7d1678546e5c864", - "style": "IPY_MODEL_99132b08b14e4705bb66ca58c0fd1738" + "layout": "IPY_MODEL_a61fc92984ec44c9a8f18b6c7f276849", + "style": "IPY_MODEL_82fb0f2232874147b5489c4fab2d036d" + } + }, + "5aba29605f0845b19e35084636ff691a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_59ba6ca4d1c942fd975fc35995343966", + "width": "900.0" + } + }, + "5fceb36da4b641ecacd34173cf54f8a5": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_06f136bd542447b1854595cb2d607c81", + "value" + ], + "target": [ + "IPY_MODEL_09f052769a8d47b9a1d34e8e32f2f92e", + "frame" + ] + } + }, + "602a6aaacd2a4e38b9c7c95f4240a5ae": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" } }, - "5b0f19a13c844825b6134d470384322f": { + "69526ff60e5d47f5906cefa78d26abda": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_fa171f870e084368839a110fb3bb67fc", + "value" + ], + "target": [ + "IPY_MODEL_31f516acb1274474912b5cce65d519db", + "frame" + ] + } + }, + "6b252e01b9e94254bab3f8d937e10f18": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "description_width": "" + } + }, + "6eb89b4339644ff5a2e79ff8f8c3a94f": { + "model_module": "nglview-js-widgets", + "model_module_version": "3.0.1", + "model_name": "ColormakerRegistryModel", + "state": { + "_msg_ar": [], + "_msg_q": [], + "_ready": true, + "layout": "IPY_MODEL_fd7d9c8e45e5495ba7088c49099fcede" + } + }, + "70a3ea22fe684ab9a820bce25946cd81": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "IntSliderModel", "state": { - "layout": "IPY_MODEL_070b13da96d24d0b86b3a293a2d51ba1", - "max": 5, - "style": "IPY_MODEL_5c5270f8a7dc4d6aaa312d4de4c4740b" + "layout": "IPY_MODEL_41351978cfb14d378fcb2194d8d94c5f", + "max": 21, + "style": "IPY_MODEL_a0e33570d0fa4c36b4804c0a6f5916b8" + } + }, + "74be2440ed36407cab4db88cf0860e08": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "DescriptionStyleModel", + "state": { + "description_width": "" + } + }, + "761edaffefdf436b9820a66c98ecf5fe": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_881cc27c576549a2bc9f8df351295f57", + "IPY_MODEL_24ee9ae04f794a8099ee9a2404d0a857" + ], + "layout": "IPY_MODEL_9b8911dedc6a4702acf69b88e19c2db8" + } + }, + "76ca239a000b466182cef72a93063dc3": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "34px" } }, - "5beac87558614f98b10b44df0bebde66": { + "7c46a902c98d4e9d954fa4bdbae4740b": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": { + "width": "34px" + } + }, + "82376befd1a34030bfb611d4eff01f91": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "82fb0f2232874147b5489c4fab2d036d": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "833ebd67ecf348279ba9092206cf7ff8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "5c5270f8a7dc4d6aaa312d4de4c4740b": { + "881cc27c576549a2bc9f8df351295f57": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "PlayModel", + "state": { + "layout": "IPY_MODEL_82376befd1a34030bfb611d4eff01f91", + "max": 5, + "style": "IPY_MODEL_f5385733930e48d4a878d19ec65aa94c" + } + }, + "8e3a06909454450cbaf3a863b69968cb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_fa171f870e084368839a110fb3bb67fc", + "max" + ], + "target": [ + "IPY_MODEL_31f516acb1274474912b5cce65d519db", + "max_frame" + ] + } + }, + "8f17226bdbb34f7399575cc3c9bc78bb": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_881cc27c576549a2bc9f8df351295f57", + "value" + ], + "target": [ + "IPY_MODEL_24ee9ae04f794a8099ee9a2404d0a857", + "value" + ] + } + }, + "8f74f356773746fb97c5ea65b696d117": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_06f136bd542447b1854595cb2d607c81", + "IPY_MODEL_70a3ea22fe684ab9a820bce25946cd81" + ], + "layout": "IPY_MODEL_3545072b43b240088c82631be2341edf" + } + }, + "94dae57aa8e44c21a2f4093dd76a0fc4": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "SliderStyleModel", @@ -1984,19 +2156,57 @@ "description_width": "" } }, - "5e6d292fcb254bda82d0e2cd1cca1cf6": { + "9511cf255289415a87d8eb4188a88901": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "5f78bf720c484a06acd8a0638380a250": { + "9718c2f7b7544043b7baf462e28f6ca6": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ImageModel", + "state": { + "layout": "IPY_MODEL_038f85f23848476c9afbdf4373190fd6", + "width": "900.0" + } + }, + "9b8911dedc6a4702acf69b88e19c2db8": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "72674ae629ae405ea7d1678546e5c864": { + "a0e33570d0fa4c36b4804c0a6f5916b8": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "SliderStyleModel", + "state": { + "description_width": "" + } + }, + "a3e73a855f2e49d5bb2d5868b05c8310": { + "model_module": "@jupyter-widgets/base", + "model_module_version": "1.2.0", + "model_name": "LayoutModel", + "state": {} + }, + "a4349898924c42adace0627d45f1d55a": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_06f136bd542447b1854595cb2d607c81", + "max" + ], + "target": [ + "IPY_MODEL_09f052769a8d47b9a1d34e8e32f2f92e", + "max_frame" + ] + } + }, + "a61fc92984ec44c9a8f18b6c7f276849": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", @@ -2004,40 +2214,73 @@ "width": "34px" } }, - "798cadc8bf3946ffa70758988f3684b0": { + "b4b8f6b557a34e8898b059cb3496344f": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "LinkModel", + "state": { + "source": [ + "IPY_MODEL_24ee9ae04f794a8099ee9a2404d0a857", + "max" + ], + "target": [ + "IPY_MODEL_c4fc225ea610406eba0b3c60a819f3dd", + "max_frame" + ] + } + }, + "b64cc1b2e3c349218db69ae729c93097": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "HBoxModel", + "state": { + "children": [ + "IPY_MODEL_fa171f870e084368839a110fb3bb67fc", + "IPY_MODEL_2f48bccbfcb546ce8072b392d24b6233" + ], + "layout": "IPY_MODEL_f4a6da491f0b46d2a4a5b85c00b7ff01" + } + }, + "bd7ee1ff51ec4c588bf847ea5d65c3c2": { + "model_module": "@jupyter-widgets/controls", + "model_module_version": "1.5.0", + "model_name": "ButtonStyleModel", + "state": {} + }, + "c2cb82557fae4fda94579d287f056dd4": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "7fa01f4b04d04e88976398c5bb3b6ba7": { + "c4fc225ea610406eba0b3c60a819f3dd": { "model_module": "nglview-js-widgets", "model_module_version": "3.0.1", "model_name": "NGLModel", "state": { "_camera_orientation": [ - 14.593602577909778, + 11.095162889756295, 0, 0, 0, 0, - 14.593602577909778, + 11.095162889756295, 0, 0, 0, 0, - 14.593602577909778, + 11.095162889756295, 0, - -0.8999999761581421, - -0.8999999761581421, - -0.8999999761581421, + -0.0010000000474974513, + 0, + -0.3755000000237487, 1 ], "_camera_str": "orthographic", "_gui_theme": null, - "_ibtn_fullscreen": "IPY_MODEL_d895c41a286c4aacaf82f651c6da855f", + "_ibtn_fullscreen": "IPY_MODEL_c9f7aaa9c5d04b159fe3ee079e59529f", "_igui": null, - "_iplayer": "IPY_MODEL_b7685c5bf04e47da9a351903f3f035c9", + "_iplayer": "IPY_MODEL_761edaffefdf436b9820a66c98ecf5fe", "_ngl_color_dict": {}, "_ngl_coordinate_resource": {}, "_ngl_full_stage_parameters": { @@ -2070,7 +2313,7 @@ "args": [ { "binary": false, - "data": "CRYST1 2.400 2.400 2.400 90.00 90.00 90.00 P 1\nMODEL 1\nATOM 1 Fe MOL 1 0.000 0.000 0.000 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.600 0.600 0.600 1.00 0.00 FE \nATOM 3 Fe MOL 1 0.000 1.200 0.000 1.00 0.00 FE \nATOM 4 Fe MOL 1 0.600 1.800 0.600 1.00 0.00 FE \nATOM 5 Fe MOL 1 1.200 0.000 0.000 1.00 0.00 FE \nATOM 6 Fe MOL 1 1.800 0.600 0.600 1.00 0.00 FE \nATOM 7 Fe MOL 1 1.200 1.200 0.000 1.00 0.00 FE \nATOM 8 Fe MOL 1 1.800 1.800 0.600 1.00 0.00 FE \nATOM 9 Fe MOL 1 0.000 0.000 1.200 1.00 0.00 FE \nATOM 10 Fe MOL 1 0.600 0.600 1.800 1.00 0.00 FE \nATOM 11 Fe MOL 1 0.000 1.200 1.200 1.00 0.00 FE \nATOM 12 Fe MOL 1 0.600 1.800 1.800 1.00 0.00 FE \nATOM 13 Fe MOL 1 1.200 0.000 1.200 1.00 0.00 FE \nATOM 14 Fe MOL 1 1.800 0.600 1.800 1.00 0.00 FE \nATOM 15 Fe MOL 1 1.200 1.200 1.200 1.00 0.00 FE \nATOM 16 Fe MOL 1 1.800 1.800 1.800 1.00 0.00 FE \nENDMDL\n", + "data": "MODEL 1\nATOM 1 Fe MOL 1 0.000 -0.000 0.001 1.00 0.00 FE \nATOM 2 Fe MOL 1 0.002 -0.000 0.750 1.00 0.00 FE \nENDMDL\n", "type": "blob" } ], @@ -2274,7 +2517,7 @@ "radialSegments": 10, "radiusData": {}, "radiusScale": 1, - "radiusSize": 0.011999999473246623, + "radiusSize": 0.5, "radiusType": "vdw", "roughness": 0.4, "sele": "all", @@ -2291,7 +2534,7 @@ "_ngl_serialize": false, "_ngl_version": "2.0.0-dev.36", "_ngl_view_id": [ - "311346B1-2051-44A1-A0D6-2A1A6C18BEBC" + "4CE1D101-4D00-439C-8CDA-7D1723ED20F2" ], "_player_dict": {}, "_scene_position": {}, @@ -2303,247 +2546,71 @@ "background": "white", "frame": 0, "gui_style": null, - "layout": "IPY_MODEL_e83dad5d0ea8451da58083fec376eb65", - "max_frame": 21, + "layout": "IPY_MODEL_c84561f2971b4b9ea55284f5468bb553", + "max_frame": 5, "n_components": 1, "picked": {} } }, - "820fe6075c5447808cc8d28a85f67b86": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_4dfd5ad0dbcd45e1a155a10f9fa0ccb5", - "value" - ], - "target": [ - "IPY_MODEL_08137dd2cb684642959b1f959227db33", - "frame" - ] - } - }, - "82f09a4050644b289b2441c08291e840": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "SliderStyleModel", - "state": { - "description_width": "" - } - }, - "95697a13a98a4eeea598fcbf126d6dcd": { + "c84561f2971b4b9ea55284f5468bb553": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "99132b08b14e4705bb66ca58c0fd1738": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "9b8edfeb869d49378a53bc111bfd11f9": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "a1de9dadf70f44dfa053ba0f5a0622f7": { + "c9f7aaa9c5d04b159fe3ee079e59529f": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "ButtonModel", "state": { "icon": "compress", - "layout": "IPY_MODEL_d9a8f1bca598476596ee1ccf73b12a62", - "style": "IPY_MODEL_22fa3d7d1eca469c9e521c42abbcf252" - } - }, - "aa21aff770514650bbf4de70b7331f2b": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_4dfd5ad0dbcd45e1a155a10f9fa0ccb5", - "value" - ], - "target": [ - "IPY_MODEL_5b0f19a13c844825b6134d470384322f", - "value" - ] + "layout": "IPY_MODEL_7c46a902c98d4e9d954fa4bdbae4740b", + "style": "IPY_MODEL_5415f748692e4af98a974e50bec40e8e" } }, - "aa817e59539b4e23aae722815c4a3763": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonStyleModel", - "state": {} - }, - "ab24d50fb20b4bdba50441ecf8c85139": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_f3dea7f03fb04dc9996bc2613fb799f4", - "max" - ], - "target": [ - "IPY_MODEL_7fa01f4b04d04e88976398c5bb3b6ba7", - "max_frame" - ] - } - }, - "abd8361051044c9ea37e34d392f248f6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ImageModel", - "state": { - "layout": "IPY_MODEL_9b8edfeb869d49378a53bc111bfd11f9", - "width": "900.0" - } - }, - "ac7875a1c7a346bdaae510866f7f02c0": { + "d240169915f149248847eb7261f3db6c": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "b7685c5bf04e47da9a351903f3f035c9": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_ba8929ed10914f5b9f4dae160b96c38d", - "IPY_MODEL_f3dea7f03fb04dc9996bc2613fb799f4" - ], - "layout": "IPY_MODEL_d261832e92e940518226face24d0599c" - } - }, - "ba8929ed10914f5b9f4dae160b96c38d": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "PlayModel", - "state": { - "layout": "IPY_MODEL_f71e128bfc324795a5b521820e3acd93", - "max": 21, - "style": "IPY_MODEL_584cfed18c7f40fc9d9d521af7f08686" - } - }, - "badd0935939e43c991dc7fbaea635565": { + "da623284092c4b579e84498cf475699c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_2e801ec9eac04bf4815fbf9ba5312d9e", + "IPY_MODEL_fa171f870e084368839a110fb3bb67fc", "value" ], "target": [ - "IPY_MODEL_ce51c9afc4c447a5bedd5de7a6790e7c", + "IPY_MODEL_2f48bccbfcb546ce8072b392d24b6233", "value" ] } }, - "be63a4aba9e847689a3effc10b40d539": { + "f353ff40b3eb4968bb49852c1f944f6c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "LinkModel", "state": { "source": [ - "IPY_MODEL_2e801ec9eac04bf4815fbf9ba5312d9e", + "IPY_MODEL_70a3ea22fe684ab9a820bce25946cd81", "max" ], "target": [ - "IPY_MODEL_351325e64d054852a7dfc573a2737b7f", + "IPY_MODEL_09f052769a8d47b9a1d34e8e32f2f92e", "max_frame" ] } }, - "c10d232958d04063949be3ecde7ef0b5": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "c2bd01f0def8431a8dd42a00c968a7d1": { - "model_module": "nglview-js-widgets", - "model_module_version": "3.0.1", - "model_name": "ColormakerRegistryModel", - "state": { - "_msg_ar": [], - "_msg_q": [], - "_ready": true, - "layout": "IPY_MODEL_ecb20509792348a4bd0f06962b022fc8" - } - }, - "c62b973602f84dee9e544f24cfef9ec3": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "LinkModel", - "state": { - "source": [ - "IPY_MODEL_ba8929ed10914f5b9f4dae160b96c38d", - "value" - ], - "target": [ - "IPY_MODEL_7fa01f4b04d04e88976398c5bb3b6ba7", - "frame" - ] - } - }, - "cd36286772dd4423a5ab2ec15f299fba": { + "f4a6da491f0b46d2a4a5b85c00b7ff01": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "ce51c9afc4c447a5bedd5de7a6790e7c": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_5f78bf720c484a06acd8a0638380a250", - "max": 5, - "style": "IPY_MODEL_50989b84464d4ab3b60603fab4809ea1" - } - }, - "ce7bcf9a08f1452c8b0716780779661b": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "d07626890bd74a29bd04ec058668bf96": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_4dfd5ad0dbcd45e1a155a10f9fa0ccb5", - "IPY_MODEL_5b0f19a13c844825b6134d470384322f" - ], - "layout": "IPY_MODEL_1c1c2d2c44a24ab881e32f97148db31d" - } - }, - "d1165b152eb3478c94ef45eb2c5e32c6": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "HBoxModel", - "state": { - "children": [ - "IPY_MODEL_2e801ec9eac04bf4815fbf9ba5312d9e", - "IPY_MODEL_ce51c9afc4c447a5bedd5de7a6790e7c" - ], - "layout": "IPY_MODEL_5e6d292fcb254bda82d0e2cd1cca1cf6" - } - }, - "d13481ecf17440cc8ab2cc190e8d3009": { + "f5385733930e48d4a878d19ec65aa94c": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", "model_name": "DescriptionStyleModel", @@ -2551,76 +2618,29 @@ "description_width": "" } }, - "d261832e92e940518226face24d0599c": { + "f88f7e7b83fe4bd792c505d062c8c6c4": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "d895c41a286c4aacaf82f651c6da855f": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "ButtonModel", - "state": { - "icon": "compress", - "layout": "IPY_MODEL_c10d232958d04063949be3ecde7ef0b5", - "style": "IPY_MODEL_aa817e59539b4e23aae722815c4a3763" - } - }, - "d9a8f1bca598476596ee1ccf73b12a62": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": { - "width": "34px" - } - }, - "e7b6909fbdc841478350994e52e45708": { + "fa171f870e084368839a110fb3bb67fc": { "model_module": "@jupyter-widgets/controls", "model_module_version": "1.5.0", - "model_name": "LinkModel", + "model_name": "PlayModel", "state": { - "source": [ - "IPY_MODEL_5b0f19a13c844825b6134d470384322f", - "max" - ], - "target": [ - "IPY_MODEL_08137dd2cb684642959b1f959227db33", - "max_frame" - ] + "layout": "IPY_MODEL_f88f7e7b83fe4bd792c505d062c8c6c4", + "max": 5, + "style": "IPY_MODEL_602a6aaacd2a4e38b9c7c95f4240a5ae" } }, - "e83dad5d0ea8451da58083fec376eb65": { + "fa53daa2b11b47c4891b85c29c2566d4": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", "state": {} }, - "ecb20509792348a4bd0f06962b022fc8": { - "model_module": "@jupyter-widgets/base", - "model_module_version": "1.2.0", - "model_name": "LayoutModel", - "state": {} - }, - "ed791c3db76b4335844879976e18efff": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "DescriptionStyleModel", - "state": { - "description_width": "" - } - }, - "f3dea7f03fb04dc9996bc2613fb799f4": { - "model_module": "@jupyter-widgets/controls", - "model_module_version": "1.5.0", - "model_name": "IntSliderModel", - "state": { - "layout": "IPY_MODEL_ce7bcf9a08f1452c8b0716780779661b", - "max": 21, - "style": "IPY_MODEL_82f09a4050644b289b2441c08291e840" - } - }, - "f71e128bfc324795a5b521820e3acd93": { + "fd7d9c8e45e5495ba7088c49099fcede": { "model_module": "@jupyter-widgets/base", "model_module_version": "1.2.0", "model_name": "LayoutModel", From 485f2df9486d27a90350d4f47a18e1dcead28fc5 Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Mon, 8 Jan 2024 10:17:25 +0000 Subject: [PATCH 18/49] [dependabot skip] Update env file --- .binder/environment.yml | 1 + docs/environment.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.binder/environment.yml b/.binder/environment.yml index ea4d87ad3..ab7f00349 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -20,6 +20,7 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 +- h5io_browser =0.0.5 - python >= 3.10 - lammps - nglview >=3.0.8 diff --git a/docs/environment.yml b/docs/environment.yml index 18a9fed87..829390d76 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -22,3 +22,4 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 +- h5io_browser =0.0.5 From d0619fde8366d6c9c6286263a159b72f3ad84dae Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Mon, 8 Jan 2024 11:32:29 +0100 Subject: [PATCH 19/49] stick with h5io_browser==0.0.4 for dependency compat --- .ci_support/environment.yml | 2 +- setup.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index c7f8030e7..94922a1e2 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -20,4 +20,4 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.5 +- h5io_browser =0.0.4 diff --git a/setup.py b/setup.py index e27595cce..571a8bc10 100644 --- a/setup.py +++ b/setup.py @@ -55,7 +55,7 @@ 'tinybase': [ 'distributed==2023.12.1', 'pympipool==0.7.9' - 'h5io_browser==0.0.5', + 'h5io_browser==0.0.4', ] }, cmdclass=versioneer.get_cmdclass(), From c256bbb83ea9aca74ff6d59a1afb698f25781ec8 Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Mon, 8 Jan 2024 10:33:52 +0000 Subject: [PATCH 20/49] [dependabot skip] Update env file --- .binder/environment.yml | 2 +- docs/environment.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.binder/environment.yml b/.binder/environment.yml index ab7f00349..bf720372a 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -20,7 +20,7 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.5 +- h5io_browser =0.0.4 - python >= 3.10 - lammps - nglview >=3.0.8 diff --git a/docs/environment.yml b/docs/environment.yml index 829390d76..9a6a9e6e9 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -22,4 +22,4 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.5 +- h5io_browser =0.0.4 From 68dce7eb52ee7f91870d7732c1029a4edcaaf657 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Tue, 9 Jan 2024 21:16:28 +0000 Subject: [PATCH 21/49] Bump versions again --- .ci_support/environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index 52d258303..aa8864054 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -6,7 +6,7 @@ dependencies: - coverage - codacy-coverage - matplotlib =3.8.2 -- numpy =1.26.2 +- numpy =1.26.3 - pyiron_base =0.6.20 - pyiron_atomistics =0.4.4 - pyparsing =3.1.1 @@ -20,4 +20,4 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.4 +- h5io_browser =0.0.5 From 1075ad04005db49f6553d76b0a343cc6c05aa75e Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Tue, 9 Jan 2024 21:16:47 +0000 Subject: [PATCH 22/49] [dependabot skip] Update env file --- .binder/environment.yml | 4 ++-- docs/environment.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.binder/environment.yml b/.binder/environment.yml index ee31f6553..ceb11c920 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -6,7 +6,7 @@ dependencies: - coverage - codacy-coverage - matplotlib =3.8.2 -- numpy =1.26.2 +- numpy =1.26.3 - pyiron_base =0.6.20 - pyiron_atomistics =0.4.4 - pyparsing =3.1.1 @@ -20,7 +20,7 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.4 +- h5io_browser =0.0.5 - python >= 3.10 - lammps - nglview >=3.0.8 diff --git a/docs/environment.yml b/docs/environment.yml index 1f2d266f4..be1253537 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -8,7 +8,7 @@ dependencies: - coverage - codacy-coverage - matplotlib =3.8.2 -- numpy =1.26.2 +- numpy =1.26.3 - pyiron_base =0.6.20 - pyiron_atomistics =0.4.4 - pyparsing =3.1.1 @@ -22,4 +22,4 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.4 +- h5io_browser =0.0.5 From dcd3193e232d09497a5b1613dcfff8a5560a5a04 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 10 Jan 2024 07:10:32 +0100 Subject: [PATCH 23/49] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index b9a668bf0..ad9cc715f 100644 --- a/setup.py +++ b/setup.py @@ -54,7 +54,7 @@ ], 'tinybase': [ 'distributed==2023.12.1', - 'pympipool==0.7.9' + 'pympipool==0.7.9', 'h5io_browser==0.0.4', ] }, From 6ca8b87cea2febcc4d2be185325646a33dc9843e Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 10 Jan 2024 07:15:15 +0100 Subject: [PATCH 24/49] Update setup.py --- setup.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.py b/setup.py index ad9cc715f..bcf5cfe58 100644 --- a/setup.py +++ b/setup.py @@ -31,7 +31,7 @@ packages=find_packages(exclude=["*tests*"]), install_requires=[ 'matplotlib==3.8.2', - 'numpy==1.26.2', + 'numpy==1.26.3', 'pyiron_base==0.6.20', 'scipy==1.11.4', 'seaborn==0.13.1', From 22b0505bc152169bbbaa438a3513b0cd8285db5a Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Wed, 10 Jan 2024 06:16:58 +0000 Subject: [PATCH 25/49] Format black --- pyiron_contrib/tinybase/ase.py | 35 ++++++++++--------- pyiron_contrib/tinybase/container.py | 25 +++++++++++-- pyiron_contrib/tinybase/creator.py | 23 ++++-------- pyiron_contrib/tinybase/executor.py | 7 ++-- pyiron_contrib/tinybase/job.py | 12 +++++-- pyiron_contrib/tinybase/murn.py | 19 ++++++---- pyiron_contrib/tinybase/project/__init__.py | 5 +-- .../tinybase/project/base_adapter.py | 1 + pyiron_contrib/tinybase/project/h5io.py | 12 ++++--- pyiron_contrib/tinybase/project/memory.py | 1 + pyiron_contrib/tinybase/shell.py | 2 +- pyiron_contrib/tinybase/storage.py | 3 ++ pyiron_contrib/tinybase/task.py | 21 ++++++----- 13 files changed, 100 insertions(+), 66 deletions(-) diff --git a/pyiron_contrib/tinybase/ase.py b/pyiron_contrib/tinybase/ase.py index 960f5bd50..13e71b937 100644 --- a/pyiron_contrib/tinybase/ase.py +++ b/pyiron_contrib/tinybase/ase.py @@ -8,7 +8,7 @@ EnergyPotOutput, MDOutput, field, - USER_REQUIRED + USER_REQUIRED, ) from pyiron_contrib.tinybase.task import AbstractTask, ReturnStatus @@ -87,14 +87,16 @@ def parse(): dyn.run(self.input.steps) return MDOutput( - structures=structures, - pot_energies=np.array(pot_energies), - kin_energies=np.array(kin_energies), - forces=np.array(forces), + structures=structures, + pot_energies=np.array(pot_energies), + kin_energies=np.array(kin_energies), + forces=np.array(forces), ) + _ASE_OPTIMIZER_MAP = {"LBFGS": LBFGS, "FIRE": FIRE, "GPMIN": GPMin} + class AseMinimizeInput(AseInput, StructureInput, MinimizeInput): algo: Literal[list(_ASE_OPTIMIZER_MAP.keys())] = "LBFGS" minimizer_kwargs: dict = field(default_factory=dict) @@ -115,9 +117,7 @@ def gpmin(self): self.minimizer_kwargs = {} def get_ase_optimizer(self, structure): - return _ASE_OPTIMIZER_MAP.get(self.algo)( - structure, **self.minimizer_kwargs - ) + return _ASE_OPTIMIZER_MAP.get(self.algo)(structure, **self.minimizer_kwargs) class AseMinimizeTask(AbstractTask): @@ -146,18 +146,21 @@ def parse(): parse() output = MDOutput( - structures=structures, - pot_energies=np.array(pot_energies), - kin_energies=np.array(kin_energies), - forces=np.array(forces), + structures=structures, + pot_energies=np.array(pot_energies), + kin_energies=np.array(kin_energies), + forces=np.array(forces), ) max_force = abs(output.forces[-1]).max() force_tolerance = self.input.ionic_force_tolerance if max_force > force_tolerance: - return ReturnStatus( - "not_converged", - f"force in last step ({max_force}) is larger than tolerance ({force_tolerance})!", - ), output + return ( + ReturnStatus( + "not_converged", + f"force in last step ({max_force}) is larger than tolerance ({force_tolerance})!", + ), + output, + ) else: return output diff --git a/pyiron_contrib/tinybase/container.py b/pyiron_contrib/tinybase/container.py index 2c27f8d45..e6e086569 100644 --- a/pyiron_contrib/tinybase/container.py +++ b/pyiron_contrib/tinybase/container.py @@ -117,6 +117,7 @@ def doc(self, text): self.__doc__ = text return self + # derives from ABCMeta instead of type, so that other classes can use it as a metaclass and still derive from Storable # (which derives from ABC and therefor already has a metaclass) class _MakeDataclass(abc.ABCMeta): @@ -124,6 +125,7 @@ def __new__(meta, name, bases, ns, **kwargs): cls = super().__new__(meta, name, bases, ns) return dataclass(cls) + class StorableDataclass(Storable, metaclass=_MakeDataclass): """ Base class for data classes that automatically implement Storable. @@ -183,21 +185,28 @@ def __repr__(self): def __str__(self): return self._name + USER_REQUIRED = Sentinel("USERINPUT") + class AbstractInput(StorableDataclass): def check_ready(self): - return all(getattr(self, field.name) is not USER_REQUIRED for field in fields(self)) + return all( + getattr(self, field.name) is not USER_REQUIRED for field in fields(self) + ) + class StructureInput(AbstractInput): structure: Atoms = USER_REQUIRED + class MDInput(AbstractInput): steps: int = USER_REQUIRED timestep: float = USER_REQUIRED temperature: float = USER_REQUIRED output_steps: int = USER_REQUIRED + class MinimizeInput(AbstractInput): ionic_force_tolerance: float = 1e-5 max_steps: int = 500 @@ -207,26 +216,32 @@ class MinimizeInput(AbstractInput): class AbstractOutput(StorableDataclass): pass + class EnergyPotOutput(AbstractOutput): energy_pot: float + class EnergyKinOutput(AbstractOutput): energy_kin: float + class ForceOutput(AbstractOutput): forces: npt.NDArray[float] + class StaticOutput(EnergyPotOutput, EnergyKinOutput): pass T = TypeVar("T") + class StaticMode(abc.ABC): @abc.abstractmethod def select(self, array: npt.NDArray[T]) -> T: pass + class MDOutput(HasStructure, AbstractOutput): pot_energies: npt.NDArray[float] kin_energies: npt.NDArray[float] @@ -250,21 +265,25 @@ class Mean(StaticMode): """ Average over the given range of steps. """ + __slots__ = ("_start", "_stop") + def __init__(self, start: float, stop: float = 1.0): assert 0 <= start <= 1 and 0 <= stop <= 1, "Range check!" self._start, self._stop = start, stop def select(self, array): - na = int( (len(array) - 1) * self._start) - no = int( (len(array) - 1) * self._stop) + na = int((len(array) - 1) * self._start) + no = int((len(array) - 1) * self._stop) return array[na:no].mean(axis=0) class Last(StaticMode): """ Return the last step. """ + __slots__ = () + def select(self, array): return array[-1] diff --git a/pyiron_contrib/tinybase/creator.py b/pyiron_contrib/tinybase/creator.py index 5f8df0a91..e09c04e0e 100644 --- a/pyiron_contrib/tinybase/creator.py +++ b/pyiron_contrib/tinybase/creator.py @@ -18,10 +18,7 @@ import importlib from typing import Union from functools import wraps -from concurrent.futures import ( - ProcessPoolExecutor, - ThreadPoolExecutor -) +from concurrent.futures import ProcessPoolExecutor, ThreadPoolExecutor try: from os import sched_getaffinity @@ -200,7 +197,7 @@ def f(self, *args, **kwargs): @_save def process(self, max_processes=_DEFAULT_CPUS, **kwargs): return FuturesSubmitter( - ProcessPoolExecutor(max_workers=max_processes, **kwargs) + ProcessPoolExecutor(max_workers=max_processes, **kwargs) ) @_save @@ -210,30 +207,22 @@ def foreground(self): @wraps(ThreadPoolExecutor) @_save def background(self, max_workers=4, **kwargs): - return FuturesSubmitter( - ThreadPoolExecutor(max_workers=max_workers, **kwargs) - ) + return FuturesSubmitter(ThreadPoolExecutor(max_workers=max_workers, **kwargs)) @wraps(LocalCluster) @_save def dask_local(self, n_workers=_DEFAULT_CPUS, **kwargs): - return FuturesSubmitter( - LocalCluster(n_workers=n_workers, **kwargs) - ) + return FuturesSubmitter(LocalCluster(n_workers=n_workers, **kwargs)) @wraps(Client) @_save def dask_cluster(self, cluster, **kwargs): - return FuturesSubmitter( - Client(cluster, **kwargs) - ) + return FuturesSubmitter(Client(cluster, **kwargs)) @wraps(PyMPIPoolExecutor) @_save def pympipool(self, max_workers=_DEFAULT_CPUS, **kwargs): - return FuturesSubmitter( - PyMPIPoolExecutor(max_workers=max_workers, **kwargs) - ) + return FuturesSubmitter(PyMPIPoolExecutor(max_workers=max_workers, **kwargs)) del _save diff --git a/pyiron_contrib/tinybase/executor.py b/pyiron_contrib/tinybase/executor.py index 8c457de02..cb67be1e3 100644 --- a/pyiron_contrib/tinybase/executor.py +++ b/pyiron_contrib/tinybase/executor.py @@ -8,6 +8,7 @@ from pyiron_contrib.tinybase.task import AbstractTask, TaskGenerator + class RunMachine: class Code(enum.Enum): INIT = "init" @@ -156,6 +157,7 @@ class Submitter: Exists only to have a single object from which multiple contexts can be spawned. """ + def submit(self, tasks: List[AbstractTask]) -> ExecutionContext: return ExecutionContext(tasks) @@ -252,11 +254,10 @@ def _run_running(self): else: logging.info("Some tasks are still executing!") + class FuturesSubmitter(Submitter): def __init__(self, executor): self._executor = executor def submit(self, tasks): - return FuturesExecutionContext( - self._executor, tasks - ) + return FuturesExecutionContext(self._executor, tasks) diff --git a/pyiron_contrib/tinybase/job.py b/pyiron_contrib/tinybase/job.py index 856a548ae..2f8d5b2d2 100644 --- a/pyiron_contrib/tinybase/job.py +++ b/pyiron_contrib/tinybase/job.py @@ -97,7 +97,9 @@ def _set_output(self, data): self._output = data["output"][0] def _setup_submitter_callbacks(self): - self._submitter._run_machine.observe("ready", lambda _: self.store(self.storage)) + self._submitter._run_machine.observe( + "ready", lambda _: self.store(self.storage) + ) self._submitter._run_machine.observe("finished", self._set_output) self._submitter._run_machine.observe( "finished", lambda _: self.store(self.storage) @@ -106,7 +108,9 @@ def _setup_submitter_callbacks(self): self._submitter._run_machine.observe("ready", self._add_to_database) self._submitter._run_machine.observe("running", self._update_status("running")) self._submitter._run_machine.observe("collect", self._update_status("collect")) - self._submitter._run_machine.observe("finished", self._update_status("finished")) + self._submitter._run_machine.observe( + "finished", self._update_status("finished") + ) def run( self, submitter: Union[Submitter, str, None] = None @@ -132,7 +136,9 @@ def run( submitter = "most_recent" if isinstance(submitter, str): submitter = getattr(self.project.create.executor, submitter)() - self.task.context.working_directory = self.project.request_directory(self.name) + self.task.context.working_directory = self.project.request_directory( + self.name + ) exe = self._submitter = submitter.submit(tasks=[self.task]) self._setup_submitter_callbacks() exe.run() diff --git a/pyiron_contrib/tinybase/murn.py b/pyiron_contrib/tinybase/murn.py index b834a3e1b..1a5db8b90 100644 --- a/pyiron_contrib/tinybase/murn.py +++ b/pyiron_contrib/tinybase/murn.py @@ -27,10 +27,13 @@ class MurnaghanInput(StructureInput, ListInput): task: AbstractTask = USER_REQUIRED - strains: npt.NDArray[float] = field(default_factory=lambda: np.linspace(-0.2, 0.2, 7)) + strains: npt.NDArray[float] = field( + default_factory=lambda: np.linspace(-0.2, 0.2, 7) + ) def check_ready(self): - if not super().check_ready(): return False + if not super().check_ready(): + return False strain_ready = len(self.strains) > 0 task = self.task task.input.structure = self.structure @@ -81,7 +84,11 @@ def _get_input(self): def _extract_output(self, step, task, ret, output): if ret.is_done(): - return {'step': step, 'energy_pot': output.energy_pot, 'volume': task.input.structure.get_volume()} + return { + "step": step, + "energy_pot": output.energy_pot, + "volume": task.input.structure.get_volume(), + } def _join_output(self, outputs): energies = np.full(self.input.strains.shape, np.nan) @@ -90,7 +97,7 @@ def _join_output(self, outputs): energies[output["step"]] = output["energy_pot"] volumes[output["step"]] = output["volume"] return MurnaghanOutput( - base_structure=self.input.structure.copy(), - energies=energies, - volumes=volumes, + base_structure=self.input.structure.copy(), + energies=energies, + volumes=volumes, ) diff --git a/pyiron_contrib/tinybase/project/__init__.py b/pyiron_contrib/tinybase/project/__init__.py index 46bc744de..ff6860b9c 100644 --- a/pyiron_contrib/tinybase/project/__init__.py +++ b/pyiron_contrib/tinybase/project/__init__.py @@ -1,7 +1,4 @@ -from pyiron_contrib.tinybase.project.interface import ( - ProjectInterface, - JobNotFoundError -) +from pyiron_contrib.tinybase.project.interface import ProjectInterface, JobNotFoundError from pyiron_contrib.tinybase.project.base_adapter import ProjectAdapter from pyiron_contrib.tinybase.project.memory import InMemoryProject from pyiron_contrib.tinybase.project.h5io import FilesystemProject, SingleHdfProject diff --git a/pyiron_contrib/tinybase/project/base_adapter.py b/pyiron_contrib/tinybase/project/base_adapter.py index f442824d9..30266727e 100644 --- a/pyiron_contrib/tinybase/project/base_adapter.py +++ b/pyiron_contrib/tinybase/project/base_adapter.py @@ -6,6 +6,7 @@ from pyiron_contrib.tinybase.project.interface import ProjectInterface from pyiron_contrib.tinybase.database import GenericDatabase, TinyDB + class ProjectAdapter(ProjectInterface): def __init__(self, project): self._project = project diff --git a/pyiron_contrib/tinybase/project/h5io.py b/pyiron_contrib/tinybase/project/h5io.py index 6a43ae346..0d3bca25a 100644 --- a/pyiron_contrib/tinybase/project/h5io.py +++ b/pyiron_contrib/tinybase/project/h5io.py @@ -2,11 +2,16 @@ import os.path from pyiron_contrib.tinybase.project.interface import ProjectInterface -from pyiron_contrib.tinybase.storage import GenericStorage, DataContainerAdapter, H5ioStorage +from pyiron_contrib.tinybase.storage import ( + GenericStorage, + DataContainerAdapter, + H5ioStorage, +) from pyiron_contrib.tinybase.database import GenericDatabase, TinyDB from h5io_browser import Pointer as Hdf5Pointer + class FilesystemProject(ProjectInterface): """ A plain project that stores data in HDF5 files on the filesystem and uses TinyDB. @@ -33,9 +38,7 @@ def _get_job_file(self, name): def create_storage(self, name): if not os.path.exists(self.path): os.makedirs(self.path, exist_ok=True) - return H5ioStorage.from_file( - self, self._get_job_file(name), name - ) + return H5ioStorage.from_file(self, self._get_job_file(name), name) def exists_storage(self, name): return os.path.exists(self._get_job_file(name)) @@ -64,6 +67,7 @@ def name(self): def path(self): return self._path + class SingleHdfProject(FilesystemProject): """ Behaves likes a :class:`~.FilesystemProject` but stores all jobs in a single HDF5 file. diff --git a/pyiron_contrib/tinybase/project/memory.py b/pyiron_contrib/tinybase/project/memory.py index 3f400362d..e496c355f 100644 --- a/pyiron_contrib/tinybase/project/memory.py +++ b/pyiron_contrib/tinybase/project/memory.py @@ -5,6 +5,7 @@ from pyiron_contrib.tinybase.storage import GenericStorage, DataContainerAdapter from pyiron_contrib.tinybase.database import GenericDatabase, TinyDB + class InMemoryProject(ProjectInterface): def __init__(self, location, db=None, storage=None): if db is None: diff --git a/pyiron_contrib/tinybase/shell.py b/pyiron_contrib/tinybase/shell.py index 231f1c40e..6d53ce31a 100644 --- a/pyiron_contrib/tinybase/shell.py +++ b/pyiron_contrib/tinybase/shell.py @@ -8,7 +8,7 @@ AbstractInput, AbstractOutput, USER_REQUIRED, - field + field, ) from pyiron_contrib.tinybase.task import AbstractTask, ReturnStatus diff --git a/pyiron_contrib/tinybase/storage.py b/pyiron_contrib/tinybase/storage.py index ac054e8d9..e5ca606fc 100644 --- a/pyiron_contrib/tinybase/storage.py +++ b/pyiron_contrib/tinybase/storage.py @@ -11,6 +11,7 @@ from h5io_browser import Pointer as Hdf5Pointer + class GenericStorage(HasGroups, abc.ABC): """ Generic interface to store things. @@ -326,6 +327,7 @@ def project(self): def name(self): return self._name + class H5ioStorage(GenericStorage): """ Store objects in HDF5 files. @@ -389,6 +391,7 @@ def project(self): def name(self): return self._pointer.h5_path.rsplit("/", maxsplit=1)[1] + # DESIGN: equivalent of HasHDF but with generalized language class Storable(abc.ABC): """ diff --git a/pyiron_contrib/tinybase/task.py b/pyiron_contrib/tinybase/task.py index 19088e4e9..eca8e6c5d 100644 --- a/pyiron_contrib/tinybase/task.py +++ b/pyiron_contrib/tinybase/task.py @@ -61,13 +61,15 @@ def is_done(self) -> True: """ return self.code == self.Code.DONE + class ComputeContext(AbstractInput): cores: int = None - gpus: int = None + gpus: int = None runtime: float = None memory: float = None working_directory: str = None + class AbstractTask(Storable, abc.ABC): """ Basic unit of calculations. @@ -160,7 +162,7 @@ def _restore(cls, storage, version): task._context = storage["context"].to_object() return task - def then(self, body, task = None): + def then(self, body, task=None): series = SeriesTask() series.input.first(self) series.input.then(FunctionTask(body), lambda inp, out: inp.args.append(out)) @@ -289,11 +291,9 @@ def __iter__(self): extracted_outputs = [] for i, (task, ret, output) in enumerate(zip(tasks, returns, outputs)): - extracted_outputs.append( - self._extract_output(i, task, ret, output) - ) + extracted_outputs.append(self._extract_output(i, task, ret, output)) - return ReturnStatus("done"), self._join_output(extracted_outputs ) + return ReturnStatus("done"), self._join_output(extracted_outputs) class SeriesInput(AbstractInput): @@ -315,9 +315,12 @@ class SeriesInput(AbstractInput): connections: list = USER_REQUIRED def check_ready(self): - if not super().check_ready(): return False - if not (0 < len(self.tasks) == len(self.connections) + 1): return False - if not self.tasks[0].input.check_ready(): return False + if not super().check_ready(): + return False + if not (0 < len(self.tasks) == len(self.connections) + 1): + return False + if not self.tasks[0].input.check_ready(): + return False return True def first(self, task): From 3a20c07a930bfad3b7af565e7dcaa871638365df Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Mon, 15 Jan 2024 22:56:23 +0100 Subject: [PATCH 26/49] Bump h5io_browser again So that https://github.com/h5io/h5io/pull/69 is included. --- .binder/environment.yml | 2 +- .ci_support/environment.yml | 2 +- docs/environment.yml | 2 +- setup.py | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.binder/environment.yml b/.binder/environment.yml index ceb11c920..2d6d53334 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -20,7 +20,7 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.5 +- h5io_browser =0.0.6 - python >= 3.10 - lammps - nglview >=3.0.8 diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index aa8864054..e42dcee7a 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -20,4 +20,4 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.5 +- h5io_browser =0.0.6 diff --git a/docs/environment.yml b/docs/environment.yml index be1253537..88f4c67e5 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -22,4 +22,4 @@ dependencies: - aws-sam-translator =1.77.0 - pympipool =0.7.9 - distributed =2023.12.1 -- h5io_browser =0.0.5 +- h5io_browser =0.0.6 diff --git a/setup.py b/setup.py index bcf5cfe58..f3dcedcd4 100644 --- a/setup.py +++ b/setup.py @@ -55,7 +55,7 @@ 'tinybase': [ 'distributed==2023.12.1', 'pympipool==0.7.9', - 'h5io_browser==0.0.4', + 'h5io_browser==0.0.6', ] }, cmdclass=versioneer.get_cmdclass(), From b36777cecb2424a6adab55e9374378f13c7769aa Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 15 Jan 2024 23:30:50 +0100 Subject: [PATCH 27/49] Update environment.yml --- .binder/environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.binder/environment.yml b/.binder/environment.yml index 2d6d53334..b42e9821c 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -7,8 +7,8 @@ dependencies: - codacy-coverage - matplotlib =3.8.2 - numpy =1.26.3 -- pyiron_base =0.6.20 -- pyiron_atomistics =0.4.4 +- pyiron_base =0.6.22 +- pyiron_atomistics =0.4.6 - pyparsing =3.1.1 - scipy =1.11.4 - seaborn =0.13.1 From 69cb1b09bf7bc2c5cc1f79a4e51032057f4c5b2b Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Mon, 15 Jan 2024 22:31:09 +0000 Subject: [PATCH 28/49] [dependabot skip] Update env file --- .binder/environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.binder/environment.yml b/.binder/environment.yml index b42e9821c..2d6d53334 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -7,8 +7,8 @@ dependencies: - codacy-coverage - matplotlib =3.8.2 - numpy =1.26.3 -- pyiron_base =0.6.22 -- pyiron_atomistics =0.4.6 +- pyiron_base =0.6.20 +- pyiron_atomistics =0.4.4 - pyparsing =3.1.1 - scipy =1.11.4 - seaborn =0.13.1 From f733f2028d9bf1558003aa0885cc4381ff8fd82b Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Mon, 15 Jan 2024 23:31:14 +0100 Subject: [PATCH 29/49] Update environment.yml --- .ci_support/environment.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.ci_support/environment.yml b/.ci_support/environment.yml index e42dcee7a..830f5e7e5 100644 --- a/.ci_support/environment.yml +++ b/.ci_support/environment.yml @@ -7,8 +7,8 @@ dependencies: - codacy-coverage - matplotlib =3.8.2 - numpy =1.26.3 -- pyiron_base =0.6.20 -- pyiron_atomistics =0.4.4 +- pyiron_base =0.6.22 +- pyiron_atomistics =0.4.6 - pyparsing =3.1.1 - scipy =1.11.4 - seaborn =0.13.1 From d75866a8bcd4ab97e5c24fe1b9be8f979e43f743 Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Mon, 15 Jan 2024 22:31:30 +0000 Subject: [PATCH 30/49] [dependabot skip] Update env file --- .binder/environment.yml | 4 ++-- docs/environment.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.binder/environment.yml b/.binder/environment.yml index 2d6d53334..b42e9821c 100644 --- a/.binder/environment.yml +++ b/.binder/environment.yml @@ -7,8 +7,8 @@ dependencies: - codacy-coverage - matplotlib =3.8.2 - numpy =1.26.3 -- pyiron_base =0.6.20 -- pyiron_atomistics =0.4.4 +- pyiron_base =0.6.22 +- pyiron_atomistics =0.4.6 - pyparsing =3.1.1 - scipy =1.11.4 - seaborn =0.13.1 diff --git a/docs/environment.yml b/docs/environment.yml index 88f4c67e5..c73865bdc 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -9,8 +9,8 @@ dependencies: - codacy-coverage - matplotlib =3.8.2 - numpy =1.26.3 -- pyiron_base =0.6.20 -- pyiron_atomistics =0.4.4 +- pyiron_base =0.6.22 +- pyiron_atomistics =0.4.6 - pyparsing =3.1.1 - scipy =1.11.4 - seaborn =0.13.1 From 7b6ab72d80cfa49eda8a7a5885457be97f27d89e Mon Sep 17 00:00:00 2001 From: liamhuber Date: Mon, 15 Jan 2024 15:27:06 -0800 Subject: [PATCH 31/49] Sync setup dependencies --- setup.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/setup.py b/setup.py index f3dcedcd4..6ed935fb9 100644 --- a/setup.py +++ b/setup.py @@ -32,7 +32,7 @@ install_requires=[ 'matplotlib==3.8.2', 'numpy==1.26.3', - 'pyiron_base==0.6.20', + 'pyiron_base==0.6.22', 'scipy==1.11.4', 'seaborn==0.13.1', 'pyparsing==3.1.1', @@ -40,7 +40,7 @@ extras_require={ 'atomistic': [ 'ase==3.22.1', - 'pyiron_atomistics==0.4.4', + 'pyiron_atomistics==0.4.6', 'pycp2k==0.2.2', ], 'fenics': [ From ed8fb2117dd8b5055cf51dcf37a012c51fac62a4 Mon Sep 17 00:00:00 2001 From: liamhuber Date: Mon, 15 Jan 2024 15:28:04 -0800 Subject: [PATCH 32/49] No mutable default --- pyiron_contrib/tinybase/shell.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyiron_contrib/tinybase/shell.py b/pyiron_contrib/tinybase/shell.py index 6d53ce31a..10b8dc01e 100644 --- a/pyiron_contrib/tinybase/shell.py +++ b/pyiron_contrib/tinybase/shell.py @@ -104,12 +104,15 @@ def __str__(self): return self.path() +def _zero_list(): + return [0] + class ShellInput(AbstractInput): command: str = USER_REQUIRED working_directory: str = USER_REQUIRED arguments: list = field(default_factory=list) environ: dict = field(default_factory=dict) - allowed_returncode: list = [0] + allowed_returncode: list = field(default_factory=_zero_list) class ShellOutput(AbstractOutput): From c75eee72905a3ad3db879f11a53fbd09b4c46a9a Mon Sep 17 00:00:00 2001 From: liamhuber Date: Mon, 15 Jan 2024 15:32:15 -0800 Subject: [PATCH 33/49] Use available pympipool import --- notebooks/tinybase/ASE.ipynb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/notebooks/tinybase/ASE.ipynb b/notebooks/tinybase/ASE.ipynb index cfc563457..7142c7ed5 100644 --- a/notebooks/tinybase/ASE.ipynb +++ b/notebooks/tinybase/ASE.ipynb @@ -156,7 +156,7 @@ "metadata": {}, "outputs": [], "source": [ - "from pympipool import PoolExecutor" + "from pympipool import Executor" ] }, { @@ -177,7 +177,7 @@ "metadata": {}, "outputs": [], "source": [ - "process = FuturesSubmitter(PoolExecutor(4))" + "process = FuturesSubmitter(Executor(4))" ] }, { @@ -1275,7 +1275,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.11.7" }, "widgets": { "application/vnd.jupyter.widget-state+json": { From 4a6524221721ae92b1871dcf69007ef4be6015b1 Mon Sep 17 00:00:00 2001 From: liamhuber Date: Mon, 15 Jan 2024 16:00:34 -0800 Subject: [PATCH 34/49] Black newline --- pyiron_contrib/tinybase/shell.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyiron_contrib/tinybase/shell.py b/pyiron_contrib/tinybase/shell.py index 10b8dc01e..fff94192f 100644 --- a/pyiron_contrib/tinybase/shell.py +++ b/pyiron_contrib/tinybase/shell.py @@ -107,6 +107,7 @@ def __str__(self): def _zero_list(): return [0] + class ShellInput(AbstractInput): command: str = USER_REQUIRED working_directory: str = USER_REQUIRED From b9dced87396fe55a06ebbc007254f3098326ce61 Mon Sep 17 00:00:00 2001 From: liamhuber Date: Mon, 15 Jan 2024 16:07:36 -0800 Subject: [PATCH 35/49] Purge pympipool from notebooks --- notebooks/tinybase/ASE.ipynb | 20 -------------------- 1 file changed, 20 deletions(-) diff --git a/notebooks/tinybase/ASE.ipynb b/notebooks/tinybase/ASE.ipynb index 7142c7ed5..fb593a977 100644 --- a/notebooks/tinybase/ASE.ipynb +++ b/notebooks/tinybase/ASE.ipynb @@ -149,16 +149,6 @@ "make_process = lambda n: FuturesSubmitter(ProcessPoolExecutor(max_workers=n))" ] }, - { - "cell_type": "code", - "execution_count": 12, - "id": "f1bfdf31-84ee-42bd-a230-d990f2cc6116", - "metadata": {}, - "outputs": [], - "source": [ - "from pympipool import Executor" - ] - }, { "cell_type": "code", "execution_count": 13, @@ -170,16 +160,6 @@ "thread = FuturesSubmitter(ThreadPoolExecutor(max_workers=4))" ] }, - { - "cell_type": "code", - "execution_count": 14, - "id": "ea7fe786-3c55-40b0-a309-4428e06fa3d7", - "metadata": {}, - "outputs": [], - "source": [ - "process = FuturesSubmitter(Executor(4))" - ] - }, { "cell_type": "code", "execution_count": 15, From 483e2eef121e30447f274ce0416ac906951d46f5 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Mon, 22 Jan 2024 16:51:24 +0100 Subject: [PATCH 36/49] Generalize nbands hack --- pyiron_contrib/jobfactories/__init__.py | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/pyiron_contrib/jobfactories/__init__.py b/pyiron_contrib/jobfactories/__init__.py index 36d6bdbda..6ce135bea 100644 --- a/pyiron_contrib/jobfactories/__init__.py +++ b/pyiron_contrib/jobfactories/__init__.py @@ -4,7 +4,7 @@ from abc import ABC, abstractmethod import contextlib -from typing import Optional, Callable +from typing import Optional, Callable, Dict class JobFactory(HasStorage, ABC): @@ -310,7 +310,14 @@ def __init__(self): def incar(self): return self.storage.incar - def enable_nband_hack(self, nelec: dict): + def enable_nband_hack(self, nelec: Dict[str, int]): + """ + Set a per element NBANDS estimate. + + Structures far from (global) equilibrium may require more empty states than the default VASP provides. + This allows to provide a mapping between elements and integers that give a "per element" NBAND that is summed + over all atoms in a structure. + """ self.storage.nband_nelec_map = nelec def _get_hamilton(self): @@ -334,9 +341,8 @@ def _prepare_job(self, job, structure): for k, v in self.incar.items(): job.input.incar[k] = v if self.storage.nband_nelec_map is not None: - # weird structure sometimes require more bands - # HACK: for Mg/Al/Ca, since Ca needs a lot of electrons - elems = {"Mg", "Al", "Ca"} + # ensure we apply the hack only for structures where we know an NBAND estimate for all elements + elems = set(self.storage.nband_nelec_map.keys()) if elems.union(set(structure.get_chemical_symbols())) == elems: nelect = sum( self.storage.nband_nelec_map[el] From b0772f0950a473d57f2f3acd647dc6bfdf7b0173 Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Mon, 22 Jan 2024 19:38:53 +0000 Subject: [PATCH 37/49] [dependabot skip] Update env file --- docs/environment.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/environment.yml b/docs/environment.yml index 1f5f1eed3..c33998b4d 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -2,7 +2,10 @@ channels: - conda-forge dependencies: - ipykernel +- myst-parser - nbsphinx +- sphinx-gallery +- sphinx-rtd-theme - ase =3.22.1 - coveralls - coverage From 2608bab2d6ad907f474f2f08231e133eb0ba9fa4 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Fri, 26 Jan 2024 16:36:59 +0100 Subject: [PATCH 38/49] Keep task context pure We previously set the AbstractTask.context.working_directory in execute automatically, if not set before. But this can break re-usability of a task, so do not do it for now. --- pyiron_contrib/tinybase/lammps.py | 7 ++++--- pyiron_contrib/tinybase/task.py | 5 ++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/pyiron_contrib/tinybase/lammps.py b/pyiron_contrib/tinybase/lammps.py index fae231d6a..e7fe11305 100644 --- a/pyiron_contrib/tinybase/lammps.py +++ b/pyiron_contrib/tinybase/lammps.py @@ -152,7 +152,8 @@ def _get_input(self): def _execute(self): inp = LammpsInputTask(capture_exceptions=self._capture_exceptions) - inp.input.working_directory = self.context.working_directory + cwd = os.getcwd() + inp.input.working_directory = cwd inp.input.structure = self.input.structure inp.input.potential = self.input.potential inp.input.calc_static() @@ -162,13 +163,13 @@ def _execute(self): lmp = ShellTask(capture_exceptions=self._capture_exceptions) lmp.input.command = ExecutablePathResolver("lammps", "lammps") - lmp.input.working_directory = self.context.working_directory + lmp.input.working_directory = cwd ret, out = lmp.execute() if not ret.is_done(): return ReturnStatus.aborted(f"Running lammps failed: {ret.msg}") psr = LammpsStaticParserTask(capture_exceptions=self._capture_exceptions) - psr.input.working_directory = self.context.working_directory + psr.input.working_directory = cwd ret, out = psr.execute() if not ret.is_done(): return ReturnStatus.aborted(f"Parsing failed: {ret.msg}") diff --git a/pyiron_contrib/tinybase/task.py b/pyiron_contrib/tinybase/task.py index eca8e6c5d..f04176e75 100644 --- a/pyiron_contrib/tinybase/task.py +++ b/pyiron_contrib/tinybase/task.py @@ -123,7 +123,6 @@ def execute(self) -> Tuple[ReturnStatus, Optional[AbstractOutput]]: nwd = TemporaryDirectory() try: with nwd as path, contextlib.chdir(path): - self.context.working_directory = path ret = self._execute() if isinstance(ret, tuple): ret, output = ret @@ -222,8 +221,8 @@ class FunctionTask(AbstractTask): `**kwargs` respectively. The return value is set to :attr:`.FunctionOutput.result`. """ - def __init__(self, function): - super().__init__() + def __init__(self, function, **kwargs): + super().__init__(**kwargs) self._function = function def _get_input(self): From bd04579a097386e3de2ed92dae56297a96c3cd5b Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Fri, 26 Jan 2024 18:48:06 +0100 Subject: [PATCH 39/49] Update notebooks --- notebooks/tinybase/ASE.ipynb | 650 ++++++++++++++---- notebooks/tinybase/Basic.ipynb | 281 ++++---- notebooks/tinybase/Lammps.ipynb | 125 ++-- notebooks/tinybase/TinyJob.ipynb | 223 +++--- .../lammps/bin/run_lammps_default.sh | 2 +- 5 files changed, 809 insertions(+), 472 deletions(-) diff --git a/notebooks/tinybase/ASE.ipynb b/notebooks/tinybase/ASE.ipynb index fb593a977..05e9db963 100644 --- a/notebooks/tinybase/ASE.ipynb +++ b/notebooks/tinybase/ASE.ipynb @@ -54,14 +54,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/ponder/science/phd/dev/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", + "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "4585059f23074248b390928e085da7ef", + "model_id": "f90c051f147d49c3a76fc04641c031ff", "version_major": 2, "version_minor": 0 }, @@ -151,7 +151,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "id": "54df86b3-1986-4395-bd06-ee89d88f5213", "metadata": {}, "outputs": [], @@ -162,7 +162,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 13, "id": "c6630920-6ab7-4273-883e-999020b1fe5a", "metadata": { "tags": [] @@ -183,7 +183,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 14, "id": "a6af72cb-989b-46c3-a2b5-4d2b9c5fd1eb", "metadata": { "tags": [] @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 15, "id": "5b2a9d62-3f74-4acf-acb6-e72dcd984704", "metadata": { "tags": [] @@ -207,7 +207,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 16, "id": "1af70322-897e-487d-ba18-239ba5bfb7ba", "metadata": { "tags": [] @@ -219,7 +219,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 17, "id": "273902ef-03f3-4f68-8668-4e6c6055a302", "metadata": { "tags": [] @@ -232,7 +232,7 @@ " EnergyPotOutput(energy_pot=-0.00013307075712109978))" ] }, - "execution_count": 19, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -251,7 +251,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 18, "id": "02cfe01b-0b24-4723-a79b-d41ffb146bf9", "metadata": { "tags": [] @@ -263,7 +263,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "id": "466d1f9a-b707-4c05-a8af-5414d76bd8eb", "metadata": { "tags": [] @@ -276,7 +276,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 20, "id": "dfdfc027-1608-43ad-9d15-0c649986eb73", "metadata": { "tags": [] @@ -291,7 +291,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 21, "id": "57192a54-cd0f-4d2d-a675-33c3248738ad", "metadata": {}, "outputs": [ @@ -299,8 +299,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 30.4 s, sys: 1min 34s, total: 2min 4s\n", - "Wall time: 8.37 s\n" + "CPU times: user 49.1 s, sys: 1min 36s, total: 2min 25s\n", + "Wall time: 16.3 s\n" ] } ], @@ -311,7 +311,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 22, "id": "412aed30-6adf-4a54-8496-bea647bb520e", "metadata": { "tags": [] @@ -320,15 +320,15 @@ { "data": { "text/plain": [ - "array([-303.20813268, -303.20813268, -299.50417176, -300.69291846,\n", - " -300.88356067, -299.87440092, -300.56706777, -300.41201114,\n", - " -300.53923815, -300.01925116, -300.52098807, -300.26017925,\n", - " -299.78016937, -300.92936235, -300.34657506, -300.3104632 ,\n", - " -300.78479057, -300.66513799, -301.17922564, -300.44390943,\n", - " -300.40110099, -300.76322532])" + "array([-303.20813268, -303.20813268, -298.86792333, -300.15096402,\n", + " -300.7462843 , -300.16608615, -300.56006011, -300.59147484,\n", + " -299.96928271, -300.51674144, -299.51395339, -301.08170514,\n", + " -299.82074548, -299.6503962 , -300.20371318, -299.40176248,\n", + " -300.27585337, -299.45772029, -300.95343737, -299.51643985,\n", + " -300.44682088, -300.55408998])" ] }, - "execution_count": 24, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -339,7 +339,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 23, "id": "9e06cd6d-e0f7-40dd-93f2-777f86ffe2eb", "metadata": { "tags": [] @@ -347,7 +347,7 @@ "outputs": [ { "data": { - "image/png": "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jbS0NIWiorvp3LkzFi9ejD///BPz589HWloaunXrhszMTKVDo0oYX0t8nbmGAQMGYOnSpdiyZQs+/fRT7N+/H3369IFWq1U6tGpNkiRMmzYNPXr0QMuWLQFUzdeWw3c3tZfbt2CXJEnWbdnJdgMGDDBdb9WqFbp27YqGDRti0aJFmDZtmoKRkbn4OnMNI0aMMF1v2bIl4uLiEB0djd9//x2PPPKIgpFVb88//zyOHTuGnTt33vG9qvTacvkRixo1asDd3f2OzC4jI+OODJCci5+fH1q1aoVz584pHQpVwrh6h68z1xQREYHo6Gi+1hT0wgsvYP369fjnn39Qt25d0/1V8bXl8omFl5cXOnTogE2bNpW5f9OmTejWrZtCUZE5tFotTp06hYiICKVDoUrUr18f4eHhZV5nOp0O27Zt4+vMBWRmZiIlJYWvNQVIkoTnn38ev/zyC7Zs2YL69euX+X5VfG1ViamQadOmYcyYMYiLi0PXrl0xb948JCcnY9KkSUqHRrd4+eWXMWjQINSrVw8ZGRl47733oNFoMHbsWKVDIwB5eXk4f/686falS5dw5MgRhIaGol69epg6dSo++OADxMbGIjY2Fh988AF8fX3x+OOPKxh19VTR7yo0NBQzZszAo48+ioiICCQmJuL1119HjRo18PDDDysYdfU0efJkLFu2DOvWrUNAQIBpZCIoKAg+Pj5QqVRV77Wl6JoUGX311VdSdHS05OXlJbVv3960lIecx4gRI6SIiAjJ09NTioyMlB555BHpxIkTSodFpf755x8JwB2XsWPHSpIklsW99dZbUnh4uKRWq6V77rlHSkhIUDboaqqi31VBQYHUv39/qWbNmpKnp6dUr149aezYsVJycrLSYVdLd/s9AZAWLFhgekxVe21x23QiIiKSjcvXWBAREZHzYGJBREREsmFiQURERLJhYkFERESyYWJBREREsmFiQURERLJhYkFERESyYWJBREREsmFiQURERLJhYkFERESyYWJBREREsmFiQURERLL5fxnur+hAic6yAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -362,7 +362,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 24, "id": "bb70a653-6231-4f4e-9bbe-279811acc895", "metadata": { "tags": [] @@ -371,7 +371,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "fed07636a64848c6abeb00752bbf5123", + "model_id": "33fe01503fee40398dc8655596481702", "version_major": 2, "version_minor": 0 }, @@ -397,7 +397,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 25, "id": "f816e2af-0455-4e05-9c39-2e9f615d8f34", "metadata": { "tags": [] @@ -409,7 +409,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 26, "id": "22314020-8f48-487b-a765-229a77d79a2f", "metadata": { "tags": [] @@ -421,7 +421,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 27, "id": "ff411a05-82e1-4581-b06e-ab2fd7e0be3b", "metadata": { "tags": [] @@ -433,7 +433,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 28, "id": "5574f0d5-d800-472a-9418-8c6ccc1e555b", "metadata": { "tags": [] @@ -446,7 +446,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 29, "id": "9e02d6dd-0fa6-4dd6-a7ab-3e648958eb20", "metadata": { "tags": [] @@ -455,7 +455,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "e55ea3654a284592b217e1abb8293151", + "model_id": "b5353e0d70e84bf8a727bf697bbeff22", "version_major": 2, "version_minor": 0 }, @@ -473,7 +473,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 30, "id": "663e4435-1cd0-4ce2-9593-85453f4c846a", "metadata": { "tags": [] @@ -487,7 +487,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 31, "id": "37440e5a-75ff-4601-813a-f5c8df9413ad", "metadata": { "tags": [] @@ -499,7 +499,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 32, "id": "91e4fcdb-5a4b-4499-9ed7-742dae88b2ad", "metadata": {}, "outputs": [ @@ -508,29 +508,29 @@ "output_type": "stream", "text": [ " Step Time Energy fmax\n", - "LBFGS: 0 00:07:16 -0.511670 2.5257\n", - "LBFGS: 1 00:07:16 -0.713127 2.9848\n", - "LBFGS: 2 00:07:16 -0.082483 0.4842\n", - "LBFGS: 3 00:07:16 -0.052236 0.3092\n", - "LBFGS: 4 00:07:16 -0.023154 0.1381\n", - "LBFGS: 5 00:07:16 -0.011968 0.0716\n", - "LBFGS: 6 00:07:16 -0.005874 0.0352\n", - "LBFGS: 7 00:07:16 -0.002950 0.0177\n", - "LBFGS: 8 00:07:16 -0.001470 0.0088\n", - "LBFGS: 9 00:07:16 -0.000735 0.0044\n", - "LBFGS: 10 00:07:16 -0.000368 0.0022\n", - "LBFGS: 11 00:07:16 -0.000184 0.0011\n", - "LBFGS: 12 00:07:16 -0.000092 0.0006\n", - "LBFGS: 13 00:07:16 -0.000046 0.0003\n", - "LBFGS: 14 00:07:16 -0.000023 0.0001\n", - "LBFGS: 15 00:07:16 -0.000011 0.0001\n", - "LBFGS: 16 00:07:16 -0.000006 0.0000\n", - "LBFGS: 17 00:07:16 -0.000003 0.0000\n", - "LBFGS: 18 00:07:16 -0.000001 0.0000\n", - "LBFGS: 19 00:07:16 -0.000001 0.0000\n", - "LBFGS: 20 00:07:16 -0.000000 0.0000\n", - "LBFGS: 21 00:07:16 -0.000000 0.0000\n", - "LBFGS: 22 00:07:16 -0.000000 0.0000\n" + "LBFGS: 0 18:22:26 -0.511670 2.5257\n", + "LBFGS: 1 18:22:26 -0.713127 2.9848\n", + "LBFGS: 2 18:22:26 -0.082483 0.4842\n", + "LBFGS: 3 18:22:26 -0.052236 0.3092\n", + "LBFGS: 4 18:22:26 -0.023154 0.1381\n", + "LBFGS: 5 18:22:26 -0.011968 0.0716\n", + "LBFGS: 6 18:22:26 -0.005874 0.0352\n", + "LBFGS: 7 18:22:26 -0.002950 0.0177\n", + "LBFGS: 8 18:22:26 -0.001470 0.0088\n", + "LBFGS: 9 18:22:26 -0.000735 0.0044\n", + "LBFGS: 10 18:22:26 -0.000368 0.0022\n", + "LBFGS: 11 18:22:26 -0.000184 0.0011\n", + "LBFGS: 12 18:22:26 -0.000092 0.0006\n", + "LBFGS: 13 18:22:26 -0.000046 0.0003\n", + "LBFGS: 14 18:22:26 -0.000023 0.0001\n", + "LBFGS: 15 18:22:26 -0.000011 0.0001\n", + "LBFGS: 16 18:22:26 -0.000006 0.0000\n", + "LBFGS: 17 18:22:26 -0.000003 0.0000\n", + "LBFGS: 18 18:22:26 -0.000001 0.0000\n", + "LBFGS: 19 18:22:26 -0.000001 0.0000\n", + "LBFGS: 20 18:22:26 -0.000000 0.0000\n", + "LBFGS: 21 18:22:26 -0.000000 0.0000\n", + "LBFGS: 22 18:22:26 -0.000000 0.0000\n" ] } ], @@ -540,7 +540,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 33, "id": "e74b7e76-2078-42fd-96a2-89ae04d551a7", "metadata": {}, "outputs": [ @@ -550,7 +550,7 @@ "StaticOutput(energy_kin=0.0, energy_pot=-8.972451867356014e-08)" ] }, - "execution_count": 35, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -561,13 +561,13 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 34, "id": "d36a445c-eee6-4189-a376-4a6ba7446740", "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiMAAAGdCAYAAADAAnMpAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA1H0lEQVR4nO3dfXRU9b3v8c9kkkweIIMQSAKEEBEQCaCEiglFaa3pied4pfZqWtcB6cGHXNQ25NojyFkVWV7j8gFjq0E5ikirNKsXa123ObU5KghFPTUH0ApVVDQRE2KizAQSJsnMvn8kMzDkgZlJMnuSeb/WmuXMnr33fIdx1nzy3b/92xbDMAwBAACYJMbsAgAAQHQjjAAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmIowAgAATBVrdgGB8Hg8+vLLLzV69GhZLBazywEAAAEwDEMtLS2aOHGiYmL67n8MizDy5ZdfKjMz0+wyAABACOrq6jR58uQ+nx8WYWT06NGSut5MSkqKydUAAIBAOJ1OZWZm+n7H+zIswoj30ExKSgphBACAYeZcQywYwAoAAExFGAEAAKYijAAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmIowAgAATEUYAQAApiKMAAAAUxFGAACAqYbFhfKAaGEYhjo9hjrdhjo9HnW6DXV4PHL7lhnqdHv81vEYhjyG5PYY8hiGDEPyGIbcntP3vc8b3fe7lnXfPGc+lgxDMtS1rWEYMqSe97trleR7zdPPdT32vh/ffd979D7u+Zx3wZnrGt2PDN9KZ6x/1j69++1txZ7bnL2k5756PNfX8n62CYXR5ysBQ+eH8ycrZ5LdlNcmjAB9ONXhlrOtQ8fbOtTW7lZbh1unOtw61eGRq/P0fd9/O91qa3d3P+ddfvo577L2To863F0Bw/dfT1d4cHv4EQJgjkumnEcYAYaCYRhqbXfreFuHjre2y9Ha0X2/Q8fbuh933z/e2iFHW9fteGuH2jrcZpfvE2e1yBpjUVxMjKxWi2JjYhQb07Us1mpRjMUii0WyWs64H9N1P8YixZxx32KxdK0Xo+5l3etYLLJ0b2uRZPEtkyzqWti13OL/vNT9nP+2vsfeFeS97310er3enzt9yfHTz/lfhvzsq5KffZHyHs+ftaDPi5r3c7Xzs2vo67VC2PWQCrQ+RK/pE0aZ9tohhZGKigo9/PDDqq+v1+zZs1VeXq7Fixf3uu6KFSv0/PPP91h+0UUX6YMPPgjl5QGfDrdHdV+36kjTSd/ts+aTOuZ0dYeLdnW4Q+82xFgke2KckuJjlRAXo4Q4a/ctRgmxXfdt3uWxXcsTz1jH5r0fe3pbW2yMYr2BwmpRbIxFsdaucNF161pujbEozhrjCxAAMFIFHUYqKytVUlKiiooKLVq0SE8//bQKCwt18OBBTZkypcf6jz/+uB588EHf487OTs2bN0/XX3/9wCpH1HB7DH15vE2fNZ/0Dx1NJ1X3TVtAhzbirBaNSYrXmMQ4jUmKkz0xXmOS4k4/PuO5Md3P2ZPiNCo+VjExBAEAGEoWo69RXH1YuHCh5s+fr02bNvmWzZo1S0uXLlVZWdk5t3/55Zd13XXX6ciRI8rKygroNZ1Op+x2uxwOh1JSUoIpF8OEYRj6qsWlT7tDxpmh4/OvW9Xe6elz28Q4q6amJuv81GRNTU1SduooTbQndIWPpK6AkRhnpbsAAGEW6O93UJ2R9vZ21dTUaM2aNX7LCwoKtHfv3oD28eyzz+p73/tewEEEI5PHY+jvDS3a8/FX2n24Sftqj+uEq7PP9eOtMZoyLklTxyXr/PHJmjouWdmpXbe0FBtBAwCGsaDCSFNTk9xut9LS0vyWp6WlqaGh4Zzb19fX6z/+4z/04osv9ruey+WSy+XyPXY6ncGUiQhV72jTnsNN2vNxk/7ycZOaTrT7PR9jkSafl+QLGdmpyb6Ox8QxibJyuAQARqSQBrCe/VeoYRgB/WW6detWjRkzRkuXLu13vbKyMt13332hlIYIcsLVqbc/adaej5u0+/BX+uSrk37PJ8ZZddn5Y7XoglQtuiBV08aPUnws8/ABQLQJKoykpqbKarX26II0Njb26JaczTAMbdmyRcuWLVN8fHy/665du1alpaW+x06nU5mZmcGUChN0uj068IWju/vxlfbVHlfnGYNLYyzSnMljtPiCVH17eqrmTzmP8AEACC6MxMfHKzc3V9XV1frBD37gW15dXa1rr72232137dqljz/+WCtXrjzn69hsNtlstmBKgwkMw9CRppPdnY8mvf1Js1rOGveRNS5Jiy5I1eILUpU/LVX2pDiTqgUARKqgD9OUlpZq2bJlWrBggfLy8rR582bV1taquLhYUldX4+jRo9q2bZvfds8++6wWLlyonJycwakcpvnmZLvK//Mj/eehRh093ub3nD0xTosuGKdvXzBei6enKnNskklVAgCGi6DDSFFRkZqbm7VhwwbV19crJydHVVVVvrNj6uvrVVtb67eNw+HQjh079Pjjjw9O1TDNro++0s9/d0CNLV0DjOOtMcrNOk/fnp6qb1+QqpxJdgaaAgCCEvQ8I2ZgnhHznepw68H/+Lu27v1MknT++GStu3qW8qaNU1I8VxUAAPQ0JPOMIDr97ahDP/vtPt/ZMDflZWlN4SwlxltNrgwAMBIQRtAnt8fQU7s+0WPVH6nTY2jCaJsevn6erpgx3uzSAAAjCGEEvar7ulWrK/fr3c+/kSQV5qTrgR/M0XnJ/Z+WDQBAsAgj8GMYhn5X84Xue+UDnWx3a5QtVuv/x2z9cP4kplwHAAwJwgh8vj7ZrrUvvadXPzgmSfrW1PO08YaLOT0XADCkCCOQJL3xYaP+9f++p69aXIqzWrT6qhm67fJpnKYLABhyhJEo19bu1gNVh/Trtz+XJE2fMEqPFV2snEl2kysDAEQLwkgUO1B3XKsr9+vTpq5Tdn+yaKru/ocLlRDHKbsAgPAhjEShTrdHFTs/0S9fO6xOj6G0FJseuX6eFk/nlF0AQPgRRqLM580ntbpyv/679rgk6R/nZuj/LM3RmCRO2QUAmIMwEiUMw1DlX+u04f8dVGu7W6NtsdqwdLaWXswpuwAAcxFGosA3J9t194739OeDXafsLsweq0dvmKfJ53HKLgDAfISREe7tT5tV8tv9anCeUpzVorsKZurmxedzyi4AIGIQRkaoTrdHv3ztsH71xscyDOn81GT98seXcMouACDiEEZGoC++adXPfrtfNd3XlblhwWTde81sJdv4uAEAkYdfpxGm6v16rdnxnpynOjXaFqv7f5Cjay+eZHZZAAD0iTAyQrS1u7Xh/x3U9v+qlSRdnDlGv/zRJZoyjkGqAIDIRhgZAQ7VO3Xn9n36uPGELBbpf10xTauvmqE4a4zZpQEAcE6EkWHMMAz9+u3Pdf8fD6m906MJo216rOhiLbog1ezSAAAIGGFkmPrmZLt+/n/f038e6po75LsXTtDD/3Ouxo2ymVwZAADBIYwMQ2990qzVlV1zh8RbY7T26gu1In8qM6kCAIYlwsgw0un26PHXDusJ79wh45P1qx9fotkTmTsEADB8EUaGibPnDilakKl7/8dFSornIwQADG/8kg0Df3yvXmteek8t3XOHPHDdHF0zb6LZZQEAMCgIIxGsa+6QD7T9v+okSZdM6Zo7JHMsc4cAAEYOwkiE+vpku254+i3f3CGrlkxTyfeYOwQAMPIQRiLU7/cd1ceNJ5Q6yqZf/uhi5TN3CABghOLP7AjVfMIlSfqnuRkEEQDAiEYYiVCOtg5JUkpinMmVAAAwtAgjEcp5qlOSZCeMAABGOMJIhPJ2RggjAICRjjASoQgjAIBoQRiJUE7CCAAgShBGIhSdEQBAtCCMRCDDMAgjAICoQRiJQCfb3XJ7DElSSiLz0gEARjbCSATydkXirBYlxllNrgYAgKEVUhipqKhQdna2EhISlJubq927d/e7vsvl0rp165SVlSWbzaZp06Zpy5YtIRUcDRytpw/RWCwWk6sBAGBoBX0MoLKyUiUlJaqoqNCiRYv09NNPq7CwUAcPHtSUKVN63eaGG27QsWPH9Oyzz+qCCy5QY2OjOjs7B1z8SOU8xeyrAIDoEXQY2bhxo1auXKmbb75ZklReXq5XX31VmzZtUllZWY/1//SnP2nXrl369NNPNXbsWEnS1KlTB1b1CMfgVQBANAnqME17e7tqampUUFDgt7ygoEB79+7tdZtXXnlFCxYs0EMPPaRJkyZpxowZuuuuu9TW1tbn67hcLjmdTr9bNCGMAACiSVCdkaamJrndbqWlpfktT0tLU0NDQ6/bfPrpp9qzZ48SEhL0+9//Xk1NTVq1apW+/vrrPseNlJWV6b777gumtBGFCc8AANEkpAGsZw+qNAyjz4GWHo9HFotFL7zwgi699FJdffXV2rhxo7Zu3dpnd2Tt2rVyOBy+W11dXShlDlt0RgAA0SSozkhqaqqsVmuPLkhjY2OPbolXRkaGJk2aJLvd7ls2a9YsGYahL774QtOnT++xjc1mk81mC6a0EYUwAgCIJkF1RuLj45Wbm6vq6mq/5dXV1crPz+91m0WLFunLL7/UiRMnfMs++ugjxcTEaPLkySGUPPJ5w0hKAmEEADDyBX2YprS0VM8884y2bNmiQ4cOafXq1aqtrVVxcbGkrkMsy5cv961/4403aty4cfrJT36igwcP6s0339TPf/5z/cu//IsSExMH752MIHRGAADRJOhTe4uKitTc3KwNGzaovr5eOTk5qqqqUlZWliSpvr5etbW1vvVHjRql6upq3XnnnVqwYIHGjRunG264Qffff//gvYsRxtcZIYwAAKKAxTAMw+wizsXpdMput8vhcCglJcXscobclY/u1CdfndT2Wy5T3rRxZpcDAEBIAv395to0EcjR1jU7LYdpAADRgDASYQzDOD3PSBJhBAAw8hFGIsypDo/a3R5JdEYAANGBMBJhvINXrTEWJcdbTa4GAIChRxiJMGee1tvXrLYAAIwkhJEIc3rCs6DPugYAYFgijEQYJjwDAEQbwkiEYcIzAEC0IYxEGCedEQBAlCGMRBgO0wAAog1hJMIQRgAA0YYwEmE4TAMAiDaEkQhDZwQAEG0IIxGGMAIAiDaEkQjDqb0AgGhDGIkwdEYAANGGMBJhCCMAgGhDGIkgpzrccnV6JHGYBgAQPQgjEcR5qqsrYrFIo21cKA8AEB0IIxHE6btib5xiYiwmVwMAQHgQRiII40UAANGIMBJBCCMAgGhEGIkghBEAQDQijEQQRythBAAQfQgjEcTR1ilJSknkTBoAQPQgjEQQpoIHAEQjwkgE8c4zwmEaAEA0IYxEEAawAgCiEWEkghBGAADRiDASQZyEEQBAFCKMRBA6IwCAaEQYiSCEEQBANCKMRIgOt0et7W5JhBEAQHQhjEQIb1dEkkYnEEYAANGDMBIhvGFktC1W1hiLydUAABA+hJEI4WT2VQBAlAopjFRUVCg7O1sJCQnKzc3V7t27+1x3586dslgsPW5///vfQy56JGLwKgAgWgUdRiorK1VSUqJ169Zp3759Wrx4sQoLC1VbW9vvdh9++KHq6+t9t+nTp4dc9EhEGAEARKugw8jGjRu1cuVK3XzzzZo1a5bKy8uVmZmpTZs29bvdhAkTlJ6e7rtZrdaQix6JmPAMABCtggoj7e3tqqmpUUFBgd/ygoIC7d27t99tL7nkEmVkZOjKK6/UG2+80e+6LpdLTqfT7zbS0RkBAESroMJIU1OT3G630tLS/JanpaWpoaGh120yMjK0efNm7dixQy+99JJmzpypK6+8Um+++Wafr1NWVia73e67ZWZmBlPmsOQLI0mEEQBAdIkNZSOLxf/UU8MweizzmjlzpmbOnOl7nJeXp7q6Oj3yyCO6/PLLe91m7dq1Ki0t9T12Op0jPpDQGQEARKugOiOpqamyWq09uiCNjY09uiX9ueyyy3T48OE+n7fZbEpJSfG7jXTeMJKSEFI+BABg2AoqjMTHxys3N1fV1dV+y6urq5Wfnx/wfvbt26eMjIxgXnrEczDPCAAgSgX9Z3hpaamWLVumBQsWKC8vT5s3b1Ztba2Ki4sldR1iOXr0qLZt2yZJKi8v19SpUzV79my1t7frN7/5jXbs2KEdO3YM7jsZ5pxtnZI4TAMAiD5Bh5GioiI1Nzdrw4YNqq+vV05OjqqqqpSVlSVJqq+v95tzpL29XXfddZeOHj2qxMREzZ49W3/84x919dVXD967GAEYMwIAiFYWwzAMs4s4F6fTKbvdLofDMWLHj8y591W1uDr1+v++QuePH2V2OQAADFigv99cmyYCuD2GWlwcpgEARCfCSATwzr4qMYAVABB9CCMRwDteJDneqjgrHwkAILrwyxcBGLwKAIhmhJEIwBwjAIBoRhiJAIQRAEA0I4xEAOcpDtMAAKIXYSQCMGYEABDNCCMRgDACAIhmhJEI4CSMAACiGGEkAtAZAQBEM8JIBCCMAACiGWEkAhBGAADRjDASAZhnBAAQzQgjEcDR6u2MxJpcCQAA4UcYMZnHY6jF1SmJzggAIDoRRkzW4uqUYXTdZ8wIACAaEUZM5p1jJCEuRrZYq8nVAAAQfoQRk3EmDQAg2hFGTEYYAQBEO8KIyQgjAIBoRxgxGWEEABDtCCMmY8IzAEC0I4yYzBdGEggjAIDoRBgxGYdpAADRjjBiMidhBAAQ5QgjJqMzAgCIdoQRk9EZAQBEO8KIyXydkSTCCAAgOhFGTMZhGgBAtCOMmMgwDDlPdUoijAAAohdhxEQnXJ1yewxJhBEAQPQijJjIe4gm3hojWywfBQAgOvELaKIzp4K3WCwmVwMAgDkIIyZytnnHi8SaXAkAAOYhjJiIM2kAAJBC+pO8oqJCDz/8sOrr6zV79myVl5dr8eLF59zuL3/5i6644grl5ORo//79obz0iMKEZwAwfLjdbnV0dJhdRkSJi4uT1Wod8H6CDiOVlZUqKSlRRUWFFi1apKefflqFhYU6ePCgpkyZ0ud2DodDy5cv15VXXqljx44NqOiRgs4IAEQ+wzDU0NCg48ePm11KRBozZozS09MHNPYx6DCyceNGrVy5UjfffLMkqby8XK+++qo2bdqksrKyPre77bbbdOONN8pqterll18OueCRhDACAJHPG0QmTJigpKQkTjjoZhiGWltb1djYKEnKyMgIeV9BhZH29nbV1NRozZo1fssLCgq0d+/ePrd77rnn9Mknn+g3v/mN7r///nO+jsvlksvl8j12Op3BlDlsEEYAILK53W5fEBk3bpzZ5UScxMRESVJjY6MmTJgQ8iGboAawNjU1ye12Ky0tzW95WlqaGhoaet3m8OHDWrNmjV544QXFxgaWfcrKymS32323zMzMYMocNs48tRcAEHm8Y0SSkpJMriRyef9tBjKeJqSzac5uURmG0Wvbyu1268Ybb9R9992nGTNmBLz/tWvXyuFw+G51dXWhlBnxCCMAMDxwaKZvg/FvE9RhmtTUVFmt1h5dkMbGxh7dEklqaWnRu+++q3379umOO+6QJHk8HhmGodjYWP35z3/Wd7/73R7b2Ww22Wy2YEobljhMAwBAkJ2R+Ph45ebmqrq62m95dXW18vPze6yfkpKi999/X/v37/fdiouLNXPmTO3fv18LFy4cWPXDnPMUYQQAgKDPpiktLdWyZcu0YMEC5eXlafPmzaqtrVVxcbGkrkMsR48e1bZt2xQTE6OcnBy/7SdMmKCEhIQey6MR84wAACLV1q1bVVJSEpZTmoMOI0VFRWpubtaGDRtUX1+vnJwcVVVVKSsrS5JUX1+v2traQS90pDEMg8M0AAAoxAGsq1at0meffSaXy6Wamhpdfvnlvue2bt2qnTt39rnt+vXrmX1VUluHWx1uQxJhBAAw+JYsWaI77rhDd9xxh8aMGaNx48bp3/7t32QYXb8933zzjZYvX67zzjtPSUlJKiws1OHDhyVJO3fu1E9+8hM5HA5ZLBZZLBatX79+yGrlCm0m8XZFYmMsSoof+FS6AIDwMAxDbR3usL9uYpw16DNXnn/+ea1cuVLvvPOO3n33Xd16663KysrSLbfcohUrVujw4cN65ZVXlJKSorvvvltXX321Dh48qPz8fJWXl+sXv/iFPvzwQ0nSqFGjhuJtSSKMmObMQzScMgYAw0dbh1sX/eLVsL/uwQ3fV1J8cD/bmZmZeuyxx2SxWDRz5ky9//77euyxx7RkyRK98sor+stf/uI7AeWFF15QZmamXn75ZV1//fWy2+2yWCxKT08firfjh6v2msTRyngRAMDQuuyyy/z+4M3Ly9Phw4d18OBBxcbG+p3VOm7cOM2cOVOHDh0Ke510RkzChGcAMDwlxll1cMP3TXndodbXJKZDjTBiEsIIAAxPFosl6MMlZnn77bd7PJ4+fbouuugidXZ26p133vEdpmlubtZHH32kWbNmSeqaW8ztDs/YGA7TmMR5qlMSh2kAAEOnrq5OpaWl+vDDD7V9+3b96le/0s9+9jNNnz5d1157rW655Rbt2bNHBw4c0D//8z9r0qRJuvbaayVJU6dO1YkTJ/Taa6+pqalJra2tQ1YnYcQkpwewDo90DQAYfpYvX662tjZdeumluv3223XnnXfq1ltvlSQ999xzys3N1T/90z8pLy9PhmGoqqpKcXFdfyTn5+eruLhYRUVFGj9+vB566KEhq5NfQpMw+yoAYKjFxcWpvLxcmzZt6vHceeedp23btvW7/aZNm3rddrDRGTEJs68CANCFMGISwggAAF04TGMSwggAYCj1d2mWSENnxCSc2gsAQBfCiEnojAAA0IUwYhJfZySBMAIAiG6EEROc6nCrvdMjSbInEUYAANGNMGIC7xwjMRZp1DCZUhgAgKFCGDHBmYNXY2LCf0EiAAAiCWHEBAxeBQAMtSVLlqikpKTX51asWKGlS5eGtZ7+cIzABIQRAICZHn/8cRmGYXYZPoQRExBGAABmstvtZpfgh8M0JmDCMwBAuP3pT3+S3W7Xtm3behymWbJkiX7605/qX//1XzV27Filp6dr/fr1YauNzogJ6IwAwDBmGFJHa/hfNy5JsoR20sNvf/tb3Xrrrfr1r3+ta6+9Vq+//nqPdZ5//nmVlpbqnXfe0VtvvaUVK1Zo0aJFuuqqqwZa+TkRRkzAhGcAMIx1tEoPTAz/697zpRSfHPRmFRUVuueee/SHP/xB3/nOd/pcb+7cubr33nslSdOnT9cTTzyh1157jTAyUjnbOiXRGQEADK0dO3bo2LFj2rNnjy699NJ+1507d67f44yMDDU2Ng5leT6EERNwmAYAhrG4pK4uhRmvG6SLL75Y//3f/63nnntO3/rWt2Tp5zBPXJz/b5LFYpHH4wn6NUNBGDGBkzACAMOXxRLS4RIzTJs2TY8++qiWLFkiq9WqJ554wuySekUYMQGdEQBAuMyYMUNvvPGGlixZotjYWJWXl5tdUg+EERMQRgAA4TRz5ky9/vrrvg5JpCGMmIAwAgAYajt37vR7PGvWLB07diygdSXp5ZdfHvyi+sCkZ2HW3ulRW4dbEmEEAACJMBJ23q6IxSKNTqAxBQAAYSTMvGFklC1WMTGhzaQHAMBIQhgJM+cpxosAAHAmwkiYMXgVAAB/hJEwY8IzABh+DMMwu4SINRj/NoSRMKMzAgDDh3eK9NZWE67SO0x4/23Onk4+GCGdzlFRUaGHH35Y9fX1mj17tsrLy7V48eJe192zZ4/uvvtu/f3vf1dra6uysrJ02223afXq1SEXPZw5WgkjADBcWK1WjRkzxnfBuKSkpH6v7xJNDMNQa2urGhsbNWbMmAFNphZ0GKmsrFRJSYkqKiq0aNEiPf300yosLNTBgwc1ZcqUHusnJyfrjjvu0Ny5c5WcnKw9e/botttuU3Jysm699daQCx+u6IwAwPCSnp4uSWG7gu1wM2bMGN+/UagsRpAHexYuXKj58+dr06ZNvmWzZs3S0qVLVVZWFtA+rrvuOiUnJ+vXv/51QOs7nU7Z7XY5HA6lpKQEU27E+fnvDuh3NV/o59+fqdu/c4HZ5QAAAuR2u9XR0WF2GRElLi6u345IoL/fQXVG2tvbVVNTozVr1vgtLygo0N69ewPax759+7R3717df//9fa7jcrnkcrl8j51OZzBlRjQ6IwAwPFmt1oi8rstIENQA1qamJrndbqWlpfktT0tLU0NDQ7/bTp48WTabTQsWLNDtt9+um2++uc91y8rKZLfbfbfMzMxgyoxohBEAAPyFdDbN2YN3DMM454Ce3bt3691339VTTz2l8vJybd++vc91165dK4fD4bvV1dWFUmZEcp7qlCSlEEYAAJAU5GGa1NRUWa3WHl2QxsbGHt2Ss2VnZ0uS5syZo2PHjmn9+vX68Y9/3Ou6NptNNpstmNKGDeYZAQDAX1Cdkfj4eOXm5qq6utpveXV1tfLz8wPej2EYfmNCogmHaQAA8Bf0qb2lpaVatmyZFixYoLy8PG3evFm1tbUqLi6W1HWI5ejRo9q2bZsk6cknn9SUKVN04YUXSuqad+SRRx7RnXfeOYhvY3jodHt0wtV1mIYwAgBAl6DDSFFRkZqbm7VhwwbV19crJydHVVVVysrKkiTV19ertrbWt77H49HatWt15MgRxcbGatq0aXrwwQd12223Dd67GCa840UkKSUhpPnmAAAYcYKeZ8QMI2WekSNNJ/WdR3ZqlC1Wf7vv+2aXAwDAkAr095tr04QR40UAAOiJMBJG3jDCab0AAJxGGAmj050RxosAAOBFGAkj7xwjKQl0RgAA8CKMhBFjRgAA6IkwEkbMvgoAQE+EkTCiMwIAQE+EkTDyhZEkwggAAF6EkTCiMwIAQE+EkTBinhEAAHoijIQRnREAAHoijIQRYQQAgJ4II2Hi8Rg64eq6ai+TngEAcBphJExaTnXKe31kOiMAAJxGGAkT7yGaxDir4mP5ZwcAwItfxTBhvAgAAL0jjIQJYQQAgN4RRsKEMAIAQO8II2HChGcAAPSOMBImdEYAAOgdYSRMCCMAAPSOMBImzlPewzSxJlcCAEBkIYyECZ0RAAB6RxgJEydhBACAXhFGwoTOCAAAvSOMhAlhBACA3hFGwoQwAgBA7wgjYeDxGIwZAQCgD4SRMDjR3imP0XWfGVgBAPBHGAkDR2tXV8QWG6OEOKvJ1QAAEFkII2HgnfCMQzQAAPREGAkDLpIHAEDfCCNhwOBVAAD6RhgJA07rBQCgb4SRMCCMAADQN8JIGBBGAADoW0hhpKKiQtnZ2UpISFBubq52797d57ovvfSSrrrqKo0fP14pKSnKy8vTq6++GnLBwxEDWAEA6FvQYaSyslIlJSVat26d9u3bp8WLF6uwsFC1tbW9rv/mm2/qqquuUlVVlWpqavSd73xH11xzjfbt2zfg4ocLR1unJDojAAD0xmIYhhHMBgsXLtT8+fO1adMm37JZs2Zp6dKlKisrC2gfs2fPVlFRkX7xi18EtL7T6ZTdbpfD4VBKSkow5fZr54eNevvTr3XtxRM1K2Pw9nu25Vv+S29+9JUeuX6e/mfu5CF7HQAAIkmgv9+xwey0vb1dNTU1WrNmjd/ygoIC7d27N6B9eDwetbS0aOzYsX2u43K55HK5fI+dTmcwZQbshXdqVX3wmFJHxQ9pGOHUXgAA+hbUYZqmpia53W6lpaX5LU9LS1NDQ0NA+3j00Ud18uRJ3XDDDX2uU1ZWJrvd7rtlZmYGU2bA5k22S5IOfOEYkv17ecNISkJQ2Q8AgKgQ0gBWi8Xi99gwjB7LerN9+3atX79elZWVmjBhQp/rrV27Vg6Hw3erq6sLpcxzmjN5jCTpvS+OD8n+vXxn0yTRGQEA4GxB/amempoqq9XaowvS2NjYo1tytsrKSq1cuVK/+93v9L3vfa/fdW02m2w2WzClhWTupK7OyOfNrTre2q4xSfGD/hqGYXBqLwAA/QiqMxIfH6/c3FxVV1f7La+urlZ+fn6f223fvl0rVqzQiy++qH/8x38MrdIhcF5yvKaMTZIkvX90aA7VtLa71enpGiNMGAEAoKegD9OUlpbqmWee0ZYtW3To0CGtXr1atbW1Ki4ultR1iGX58uW+9bdv367ly5fr0Ucf1WWXXaaGhgY1NDTI4RjacRqBmts9buS9IRo34u2KxFktSoyzDslrAAAwnAUdRoqKilReXq4NGzbo4osv1ptvvqmqqiplZWVJkurr6/3mHHn66afV2dmp22+/XRkZGb7bz372s8F7FwMwr3vcyIG640Oy/zMP0QQyrgYAgGgT0ukdq1at0qpVq3p9buvWrX6Pd+7cGcpLhE24OiPMvgoAQO+i/to0OZPsirFIDc5TanSeGvT9M3gVAID+RX0YSbbF6oIJoyQNzXwjTHgGAED/oj6MSNLcIZxvxHeYJoEwAgBAbwgjOj1uhM4IAADhRxjR6c7I+18cV5DXDTwnxowAANA/woikWRmjFWe16JvWDn3xTdug7pswAgBA/wgjkmyxVl2Y3nXV3gODPG6EMAIAQP8II92Gar4R5hkBAKB/hJFuQzUTK50RAAD6RxjpNjezqzPyt6MOuT2DN4jV0dYpiTACAEBfCCPdLhg/SolxVp1sd+vTr04M2n6dp7o7I0mEEQAAekMY6RZrjdHsid5BrIMzbuRUh1vtnR5JUkpCSJcBAgBgxCOMnOHM+UYGg3e8iDXGolE2wggAAL0hjJxhXubgzsR6eir4WFkslkHZJwAAIw1h5AzezsjBeqfv8MpAcCYNAADnRhg5w9RxSUpJiFV7p0cfHWsZ8P4crYQRAADOhTByBovF4uuODMZMrEx4BgDAuRFGzuKbibVu4ONGOEwDAMC5EUbOMhSdEcIIAAB9I4ycxdsZOdx4Qm3t7gHtyzfhGWEEAIA+EUbOkmFPUOoom9weQwfrB3aohs4IAADnRhg5i8Vi0bzu7siBAY4bcTKAFQCAcyKM9MI7buS9AY4boTMCAMC5EUZ64b2C73sDnImVMAIAwLkRRnoxr7sz8mnTSV+gCAVhBACAcyOM9GJscrwmn5coSfrb0dC7I4QRAADOjTDSh3kDnG/E1enWqY6u69swgBUAgL4RRvowZ4AzsXq7IhaLNNoWO2h1AQAw0hBG+uCd/Oz9EA/TONs6JUkpCXGKibEMWl0AAIw0hJE+zJlkl8UiHT3epqYTrqC3Z7wIAACBIYz0YXRCnM5PTZYU2nwjpyc84xANAAD9IYz0wzeINYRxI3RGAAAIDGGkH95xI6F0RggjAAAEhjDSj7mZYyR1zcRqGEZQ2xJGAAAIDGGkHxdlpCg2xqLmk+06erwtqG0dXCQPAICAEEb6kRBn1Yy00ZKCv04NnREAAAITUhipqKhQdna2EhISlJubq927d/e5bn19vW688UbNnDlTMTExKikpCbVWU8wL8aJ5hBEAAAITdBiprKxUSUmJ1q1bp3379mnx4sUqLCxUbW1tr+u7XC6NHz9e69at07x58wZccLjN7T6jJthBrE7CCAAAAQk6jGzcuFErV67UzTffrFmzZqm8vFyZmZnatGlTr+tPnTpVjz/+uJYvXy673T7ggsPNNxPrFw55PIEPYqUzAgBAYIIKI+3t7aqpqVFBQYHf8oKCAu3du3fQinK5XHI6nX43s8xIGy1bbIxaXJ060nwy4O18k54lEEYAAOhPUGGkqalJbrdbaWlpfsvT0tLU0NAwaEWVlZXJbrf7bpmZmYO272DFWWM0e2KKpOAO1dAZAQAgMCENYLVY/C/8ZhhGj2UDsXbtWjkcDt+trq5u0PYdirlBzsTa4fboZLtbEmEEAIBzCerCKampqbJarT26II2NjT26JQNhs9lks9kGbX8DdfqMmuMBre89RCMxzwgAAOcSVGckPj5eubm5qq6u9lteXV2t/Pz8QS0skng7Ix986VSH23PO9b2HaEbbYmWNGbyOEQAAI1HQl5QtLS3VsmXLtGDBAuXl5Wnz5s2qra1VcXGxpK5DLEePHtW2bdt82+zfv1+SdOLECX311Vfav3+/4uPjddFFFw3Ouxhi2eOSNdoWqxZXpw4fO6GLuseQ9IXZVwEACFzQYaSoqEjNzc3asGGD6uvrlZOTo6qqKmVlZUnqmuTs7DlHLrnkEt/9mpoavfjii8rKytJnn302sOrDJCbGopxJdr31abPe++J4wGGE8SIAAJxb0GFEklatWqVVq1b1+tzWrVt7LAv2InORaG5mVxg58IVDP7q0/3WdpzolEUYAAAgE16YJ0LwgZmKlMwIAQOAIIwHyzsT6YUOLTnW4+13XN+FZYkiNJwAAogphJECTxiRqXHK8Oj2GDtb3PyMsnREAAAJHGAmQxWLxdUfeqzve77qOVsIIAACBIowE4fQVfPufiZXOCAAAgSOMBMHXGTkaWBhhnhEAAM6NMBIEb2fkk69O6ISrs8/16IwAABA4wkgQxo+2aaI9QYYhvd/PoRrCCAAAgSOMBGluAPONOAkjAAAEjDASpLm+K/j23hlxewy1uJiBFQCAQBFGguSdifVAH52RllMdvvsMYAUA4NwII0HKmdTVGfnimzY1n3D1eN47XiQp3qo4K/+8AACcC7+WQbInxun81GRJvZ/iy+BVAACCQxgJwZzu+UZ6O6OGMAIAQHAIIyHo74waJjwDACA4hJEQzOvujBz4wiHDMPyeozMCAEBwCCMhmD3RLmuMRV+1uNTgPOX3HGEEAIDgEEZCkBhv1fQJoyRJB+r8x40QRgAACA5hJETz+hg34mxjwjMAAIJBGAlRXzOxMhU8AADBIYyE6MzOyJmDWE+fTRNrRlkAAAw7hJEQzUgbrXhrjJynOvV5c6tvOWNGAAAIDmEkRPGxMZo1MUWS/3VqCCMAAASHMDIA3vlGzhw3QhgBACA4hJEBOHsmVo/HkPMUM7ACABAMRlkOgLcz8rejTnW6PTrZ7pZ3LCudEQAAAkMYGYDzx49ScrxVJ9vd+virE0qO7/rnTIiLkS3WanJ1AAAMDxymGQBrjEU5k7rHjdQ5GC8CAEAICCMDNC9zjKSuM2qY8AwAgOARRgZozqTTZ9T4JjxLIIwAABAowsgAeWdi/XuDU00nXJLojAAAEAzCyABljk3UeUlx6nAbevvI15IIIwAABIMwMkAWi0Vzursjf/m4SRJzjAAAEAzCyCDwzjdyvJUBrAAABIswMgi8M7F6EUYAAAgcYWQQeDsjXoQRAAACF1IYqaioUHZ2thISEpSbm6vdu3f3u/6uXbuUm5urhIQEnX/++XrqqadCKjZSTUhJUHpKgu8xYQQAgMAFHUYqKytVUlKidevWad++fVq8eLEKCwtVW1vb6/pHjhzR1VdfrcWLF2vfvn2655579NOf/lQ7duwYcPGRZO4Z3RF7EmEEAIBAWQzDe2m3wCxcuFDz58/Xpk2bfMtmzZqlpUuXqqysrMf6d999t1555RUdOnTIt6y4uFgHDhzQW2+9FdBrOp1O2e12ORwOpaSkBFNu3wxD6mgdnH1JemrXJ3r8tcOSpD/c/m3NSBs1aPsGAGDIxSVJFsug7jLQ3++gLpTX3t6umpoarVmzxm95QUGB9u7d2+s2b731lgoKCvyWff/739ezzz6rjo4OxcX17CK4XC65XC6/NzPoOlqlByYO2u6KJRV7j9Q8O2i7BQAgPO75UopPNuWlgzpM09TUJLfbrbS0NL/laWlpamho6HWbhoaGXtfv7OxUU1NTr9uUlZXJbrf7bpmZmcGUCQAAhpGgOiNelrPaOIZh9Fh2rvV7W+61du1alZaW+h47nc7BDyRxSV0pcBDtOvyVZEhXzBg/qPsFAGDIxSWZ9tJBhZHU1FRZrdYeXZDGxsYe3Q+v9PT0XtePjY3VuHHjet3GZrPJZrMFU1rwLJZBb0ddMduc9hYAAMNZUIdp4uPjlZubq+rqar/l1dXVys/P73WbvLy8Huv/+c9/1oIFC3odLwIAAKJL0Kf2lpaW6plnntGWLVt06NAhrV69WrW1tSouLpbUdYhl+fLlvvWLi4v1+eefq7S0VIcOHdKWLVv07LPP6q677hq8dwEAAIatoMeMFBUVqbm5WRs2bFB9fb1ycnJUVVWlrKwsSVJ9fb3fnCPZ2dmqqqrS6tWr9eSTT2rixIn65S9/qR/+8IeD9y4AAMCwFfQ8I2YYknlGAADAkAr095tr0wAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmIowAgAATEUYAQAApiKMAAAAUwU9HbwZvJPEOp1OkysBAACB8v5un2uy92ERRlpaWiRJmZmZJlcCAACC1dLSIrvd3ufzw+LaNB6PR19++aVGjx4ti8UyaPt1Op3KzMxUXV0d17wxEZ9DZOBziAx8DpGBz2FwGIahlpYWTZw4UTExfY8MGRadkZiYGE2ePHnI9p+SksL/bBGAzyEy8DlEBj6HyMDnMHD9dUS8GMAKAABMRRgBAACmiuowYrPZdO+998pms5ldSlTjc4gMfA6Rgc8hMvA5hNewGMAKAABGrqjujAAAAPMRRgAAgKkIIwAAwFSEEQAAYKqoDiMVFRXKzs5WQkKCcnNztXv3brNLiirr16+XxWLxu6Wnp5td1oj35ptv6pprrtHEiRNlsVj08ssv+z1vGIbWr1+viRMnKjExUUuWLNEHH3xgTrEj2Lk+hxUrVvT4flx22WXmFDuClZWV6Vvf+pZGjx6tCRMmaOnSpfrwww/91uE7MfSiNoxUVlaqpKRE69at0759+7R48WIVFhaqtrbW7NKiyuzZs1VfX++7vf/++2aXNOKdPHlS8+bN0xNPPNHr8w899JA2btyoJ554Qn/961+Vnp6uq666yneNKAyOc30OkvQP//APft+PqqqqMFYYHXbt2qXbb79db7/9tqqrq9XZ2amCggKdPHnStw7fiTAwotSll15qFBcX+y278MILjTVr1phUUfS59957jXnz5pldRlSTZPz+97/3PfZ4PEZ6errx4IMP+padOnXKsNvtxlNPPWVChdHh7M/BMAzjpptuMq699lpT6olmjY2NhiRj165dhmHwnQiXqOyMtLe3q6amRgUFBX7LCwoKtHfvXpOqik6HDx/WxIkTlZ2drR/96Ef69NNPzS4pqh05ckQNDQ1+3w2bzaYrrriC74YJdu7cqQkTJmjGjBm65ZZb1NjYaHZJI57D4ZAkjR07VhLfiXCJyjDS1NQkt9uttLQ0v+VpaWlqaGgwqaros3DhQm3btk2vvvqq/v3f/10NDQ3Kz89Xc3Oz2aVFLe///3w3zFdYWKgXXnhBr7/+uh599FH99a9/1Xe/+125XC6zSxuxDMNQaWmpvv3tbysnJ0cS34lwGRZX7R0qFovF77FhGD2WYegUFhb67s+ZM0d5eXmaNm2ann/+eZWWlppYGfhumK+oqMh3PycnRwsWLFBWVpb++Mc/6rrrrjOxspHrjjvu0Hvvvac9e/b0eI7vxNCKys5IamqqrFZrj1Tb2NjYI/0ifJKTkzVnzhwdPnzY7FKilvdsJr4bkScjI0NZWVl8P4bInXfeqVdeeUVvvPGGJk+e7FvOdyI8ojKMxMfHKzc3V9XV1X7Lq6urlZ+fb1JVcLlcOnTokDIyMswuJWplZ2crPT3d77vR3t6uXbt28d0wWXNzs+rq6vh+DDLDMHTHHXfopZde0uuvv67s7Gy/5/lOhEfUHqYpLS3VsmXLtGDBAuXl5Wnz5s2qra1VcXGx2aVFjbvuukvXXHONpkyZosbGRt1///1yOp266aabzC5tRDtx4oQ+/vhj3+MjR45o//79Gjt2rKZMmaKSkhI98MADmj59uqZPn64HHnhASUlJuvHGG02seuTp73MYO3as1q9frx/+8IfKyMjQZ599pnvuuUepqan6wQ9+YGLVI8/tt9+uF198UX/4wx80evRoXwfEbrcrMTFRFouF70Q4mHouj8mefPJJIysry4iPjzfmz5/vO5UL4VFUVGRkZGQYcXFxxsSJE43rrrvO+OCDD8wua8R74403DEk9bjfddJNhGF2nMt57771Genq6YbPZjMsvv9x4//33zS16BOrvc2htbTUKCgqM8ePHG3FxccaUKVOMm266yaitrTW77BGnt89AkvHcc8/51uE7MfQshmEY4Y9AAAAAXaJyzAgAAIgchBEAAGAqwggAADAVYQQAAJiKMAIAAExFGAEAAKYijAAAAFMRRgAAgKkIIwAAwFSEEQAAYCrCCAAAMBVhBAAAmOr/A1VSgfcfiHXlAAAAAElFTkSuQmCC", + "image/png": "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", "text/plain": [ "
" ] @@ -582,7 +582,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 35, "id": "dd164778-634c-4785-903a-08a5243999ce", "metadata": { "tags": [] @@ -594,7 +594,7 @@ "5.383470999656264e-07" ] }, - "execution_count": 37, + "execution_count": 35, "metadata": {}, "output_type": "execute_result" } @@ -605,7 +605,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 36, "id": "d2cc3b3a-5daa-49bb-9d6d-2994ebc74273", "metadata": { "tags": [] @@ -614,7 +614,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "9c99afded50e4b3ea8654240ad965b50", + "model_id": "a415a54de0d04274b7f1fe5e5632c08e", "version_major": 2, "version_minor": 0 }, @@ -650,7 +650,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 37, "id": "4acdeafc-90b5-4b3f-9559-c74b9fa221ab", "metadata": { "tags": [] @@ -662,7 +662,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 38, "id": "f8cf3136-9b7c-4f1e-b630-962795527946", "metadata": { "tags": [] @@ -676,7 +676,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 39, "id": "fef21aa4-d9f1-4d4a-8761-af1bc3121e5b", "metadata": { "tags": [] @@ -685,10 +685,10 @@ { "data": { "text/plain": [ - "AseStaticInput(structure=Sentinel(USERINPUT), calculator=)" + "AseStaticInput(structure=Sentinel(USERINPUT), calculator=)" ] }, - "execution_count": 41, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } @@ -699,7 +699,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 40, "id": "41a68b17-c7c4-4a5f-8f04-11bee18fe55a", "metadata": { "tags": [] @@ -711,7 +711,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 41, "id": "fd107556-99b6-4042-9209-9412b4bbff94", "metadata": { "tags": [] @@ -725,7 +725,7 @@ " 1.06685884, 1.08738037, 1.10715524, 1.12624788, 1.14471424])" ] }, - "execution_count": 43, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -736,7 +736,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 42, "id": "9820e859-f1c2-4b25-b121-feea7843a9c5", "metadata": { "tags": [] @@ -748,7 +748,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 43, "id": "aa6720b1-f59c-48c9-85da-ae0cff8f856a", "metadata": {}, "outputs": [ @@ -762,7 +762,7 @@ " -4.21510997, -3.8073844 , -3.43743364, -3.10432631, -2.80567942]))" ] }, - "execution_count": 45, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -773,7 +773,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 44, "id": "98c712a2-ee74-4c28-bce0-cb4824a930e6", "metadata": { "tags": [] @@ -781,7 +781,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -796,7 +796,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 45, "id": "14162f5b-1318-4595-8c8c-d6346a21721d", "metadata": {}, "outputs": [ @@ -806,7 +806,7 @@ "0.6788605670604869" ] }, - "execution_count": 47, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -817,7 +817,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 46, "id": "0f5ff296-df33-40d2-851b-02d6ded72dd6", "metadata": {}, "outputs": [ @@ -827,7 +827,7 @@ "0.6788605670604871" ] }, - "execution_count": 48, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -838,7 +838,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 47, "id": "92b06330-b1fc-41d0-8bd8-bf1b11bf448c", "metadata": {}, "outputs": [ @@ -848,7 +848,7 @@ "Atoms(symbols='Fe', pbc=True, cell=[[-0.553656237540387, 0.553656237540387, 0.553656237540387], [0.553656237540387, -0.553656237540387, 0.553656237540387], [0.553656237540387, 0.553656237540387, -0.553656237540387]])" ] }, - "execution_count": 49, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } @@ -867,7 +867,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 48, "id": "89169376-be36-4ceb-9f4e-6e1f3247bc62", "metadata": {}, "outputs": [], @@ -877,7 +877,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 49, "id": "2ee9f1d4-5b14-4340-98d4-4bd293af89a4", "metadata": {}, "outputs": [], @@ -889,17 +889,17 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 50, "id": "3d73a9de-7b4e-476a-b50a-ac6a3957a7ab", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "AseStaticInput(structure=Sentinel(USERINPUT), calculator=)" + "AseStaticInput(structure=Sentinel(USERINPUT), calculator=)" ] }, - "execution_count": 52, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -910,7 +910,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 51, "id": "0f075d90-e636-49be-b1a6-741a56363f54", "metadata": {}, "outputs": [], @@ -920,7 +920,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 52, "id": "79c89012-5b28-4124-9681-2507e0690b49", "metadata": { "scrolled": true, @@ -931,8 +931,108 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 335 ms, sys: 257 ms, total: 591 ms\n", - "Wall time: 30.6 s\n" + "CPU times: user 282 ms, sys: 310 ms, total: 592 ms\n", + "Wall time: 4.82 s\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -1.343424 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 2.280069 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 0.267656 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 4.789242 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -2.629060 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -3.649939 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -4.454841 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -5.083160 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -5.566847 0.0000\n", + " Step Time Energy fmax\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.387468 0.0000\n", + "LBFGS: 0 18:22:33 -6.199650 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -5.931922 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.509714 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.602730 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.578212 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.591354 0.0000\n", + " Step Time Energy fmax\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.486634 0.0000\n", + "LBFGS: 0 18:22:33 -6.550795 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.403518 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.305315 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -5.818275 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.195227 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -6.075929 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -5.949656 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:33 -5.683346 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -5.407813 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -5.546166 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -5.131003 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -5.269181 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -4.993885 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -4.724699 0.0000\n", + " Step Time Energy fmax\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -4.858318 0.0000\n", + "LBFGS: 0 18:22:34 -4.593346 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -4.338382 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -4.464509 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -4.215110 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -4.094800 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.863323 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.752221 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.644218 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.977523 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.539298 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.437434 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.242705 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.338585 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.059620 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -2.887661 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -3.149737 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -2.972284 0.0000\n", + " Step Time Energy fmax\n", + "LBFGS: 0 18:22:34 -2.805679 0.0000\n" ] } ], @@ -945,13 +1045,13 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 53, "id": "d8244dd3-f388-43c2-94de-0862ae3b0c7a", "metadata": {}, "outputs": [ { "data": { - "image/png": "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lZXJZrNp3Lhx+s1vfhOlauPLUM/ts88+q8mTJystLU1FRUX6p3/6JzU1NUWp2vjx1ltvaf78+SouLpbFYtFLL710xtesX79eU6ZMkd1u19ixY/Uf//EfkS80Dg313P7xj3/UnDlzlJeXp8zMTE2fPl2vvfZadIqNM6H8ve0Tzu8ygkgIVq1apYULF+r+++/Xtm3bNHPmTM2bN08HDhw47evcbre++c1v6qqrropSpfEnlHP75S9/WX/5y1/05JNP6uOPP9Zzzz2niRMnRrHq+DDUc/v222/rm9/8pm655Rbt2LFDL7zwgjZv3qxbb701ypXHvra2Nk2ePFnLly8f1PHV1dW65pprNHPmTG3btk333XefvvOd7+gPf/hDhCuNP0M9t2+99ZbmzJmj1atXa+vWrZo9e7bmz5+vbdu2RbjS+DPUc9sn7N9lBobskksuMW6//fZ++yZOnGjce++9p33djTfeaPzwhz80HnjgAWPy5MkRrDB+DfXcvvrqq4bL5TKampqiUV5cG+q5/elPf2qMHTu2376f//znRklJScRqHAkkGS+++OJpj1m8eLExceLEfvtuu+0249JLL41gZfFvMOf2VM455xzjwQcfDH9BI8hQzm24v8toERmizs5Obd26VXPnzu23f+7cudq4ceOAr3vqqae0Z88ePfDAA5EuMW6Fcm5ffvllTZ06VY888ohGjx6tCRMm6Hvf+568Xm80So4boZzbGTNm6ODBg1q9erUMw9Dhw4f1+9//Xp/97GejUfKI9u677570Z/GZz3xGW7ZsUVdXl0lVjUx+v18tLS3Kzs42u5QRIRLfZTF90btY1NjYqJ6eHhUUFPTbX1BQoPr6+lO+pqqqSvfee682bNig5GRO+UBCObd79+7V22+/LbvdrhdffFGNjY264447dPToUcaJnCCUcztjxgw9++yzuvHGG9XR0aHu7m59/vOf1y9+8YtolDyi1dfXn/LPoru7W42NjSoqKjKpspHn0UcfVVtbm7785S+bXUrci9R3GS0iIbJYLP0eG4Zx0j5J6unp0U033aQHH3xQEyZMiFZ5cW2w51YK/LZjsVj07LPP6pJLLtE111yjxx57TE8//TStIqcwlHP74Ycf6jvf+Y5+9KMfaevWrVqzZo2qq6t1++23R6PUEe9Ufxan2o/QPffcc1q6dKlWrVql/Px8s8uJa5H8LuPX8yHKzc1VUlLSSb9FNjQ0nPQbjiS1tLRoy5Yt2rZtm+666y5JgS9PwzCUnJys119/XVdeeWVUao91Qz23klRUVKTRo0f3u9z02WefLcMwdPDgQVVWVka05ngRyrldtmyZPvWpT+n73/++JOn8889Xenq6Zs6cqZ/85Cf81j4MhYWFp/yzSE5OVk5OjklVjSyrVq3SLbfcohdeeEGf/vSnzS4n7kXyu4wWkSFKTU3VlClTtHbt2n77165dqxkzZpx0fGZmprZv3673338/uN1+++0666yz9P7772vatGnRKj3mDfXcStKnPvUp1dbWqrW1Nbhv165dslqtKikpiWi98SSUc9ve3i6rtf9/EUlJSZKO//aO0EyfPv2kP4vXX39dU6dOVUpKiklVjRzPPfecbr75Zq1cuZIxTWES0e+yYQ93TUDPP/+8kZKSYjz55JPGhx9+aCxcuNBIT0839u3bZxiGYdx7773GN77xjQFfz6yZgQ313La0tBglJSXGDTfcYOzYscNYv369UVlZadx6661m/Qgxa6jn9qmnnjKSk5ONJ554wtizZ4/x9ttvG1OnTjUuueQSs36EmNXS0mJs27bN2LZtmyHJeOyxx4xt27YZ+/fvNwzj5HO7d+9eIy0tzbjnnnuMDz/80HjyySeNlJQU4/e//71ZP0LMGuq5XblypZGcnGz88pe/NOrq6oJbc3OzWT9CzBrquf2kcH2XEURC9Mtf/tIoKyszUlNTjYsuushYv3598LkFCxYYV1xxxYCvJYic3lDP7c6dO41Pf/rThsPhMEpKSoxFixYZ7e3tUa46Pgz13P785z83zjnnHMPhcBhFRUXG1772NePgwYNRrjr2vfnmm4akk7YFCxYYhnHqc7tu3TrjwgsvNFJTU43y8nJjxYoV0S88Dgz13F5xxRWnPR7HhfL39kTh+i6zGAZtrAAAwByMEQEAAKYhiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqCCAAAMA1BBAAAmIYgAgAATEMQAQAApiGIAAAA0xBEAACAaQgiAADANP8f+Ziut0B0zN0AAAAASUVORK5CYII=", + "image/png": "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lZXJZrNp3Lhx+s1vfhOlauPLUM/ts88+q8mTJystLU1FRUX6p3/6JzU1NUWp2vjx1ltvaf78+SouLpbFYtFLL710xtesX79eU6ZMkd1u19ixY/Uf//EfkS80Dg313P7xj3/UnDlzlJeXp8zMTE2fPl2vvfZadIqNM6H8ve0Tzu8ygkgIVq1apYULF+r+++/Xtm3bNHPmTM2bN08HDhw47evcbre++c1v6qqrropSpfEnlHP75S9/WX/5y1/05JNP6uOPP9Zzzz2niRMnRrHq+DDUc/v222/rm9/8pm655Rbt2LFDL7zwgjZv3qxbb701ypXHvra2Nk2ePFnLly8f1PHV1dW65pprNHPmTG3btk333XefvvOd7+gPf/hDhCuNP0M9t2+99ZbmzJmj1atXa+vWrZo9e7bmz5+vbdu2RbjS+DPUc9sn7N9lBobskksuMW6//fZ++yZOnGjce++9p33djTfeaPzwhz80HnjgAWPy5MkRrDB+DfXcvvrqq4bL5TKampqiUV5cG+q5/elPf2qMHTu2376f//znRklJScRqHAkkGS+++OJpj1m8eLExceLEfvtuu+0249JLL41gZfFvMOf2VM455xzjwQcfDH9BI8hQzm24v8toERmizs5Obd26VXPnzu23f+7cudq4ceOAr3vqqae0Z88ePfDAA5EuMW6Fcm5ffvllTZ06VY888ohGjx6tCRMm6Hvf+568Xm80So4boZzbGTNm6ODBg1q9erUMw9Dhw4f1+9//Xp/97GejUfKI9u677570Z/GZz3xGW7ZsUVdXl0lVjUx+v18tLS3Kzs42u5QRIRLfZTF90btY1NjYqJ6eHhUUFPTbX1BQoPr6+lO+pqqqSvfee682bNig5GRO+UBCObd79+7V22+/LbvdrhdffFGNjY264447dPToUcaJnCCUcztjxgw9++yzuvHGG9XR0aHu7m59/vOf1y9+8YtolDyi1dfXn/LPoru7W42NjSoqKjKpspHn0UcfVVtbm7785S+bXUrci9R3GS0iIbJYLP0eG4Zx0j5J6unp0U033aQHH3xQEyZMiFZ5cW2w51YK/LZjsVj07LPP6pJLLtE111yjxx57TE8//TStIqcwlHP74Ycf6jvf+Y5+9KMfaevWrVqzZo2qq6t1++23R6PUEe9Ufxan2o/QPffcc1q6dKlWrVql/Px8s8uJa5H8LuPX8yHKzc1VUlLSSb9FNjQ0nPQbjiS1tLRoy5Yt2rZtm+666y5JgS9PwzCUnJys119/XVdeeWVUao91Qz23klRUVKTRo0f3u9z02WefLcMwdPDgQVVWVka05ngRyrldtmyZPvWpT+n73/++JOn8889Xenq6Zs6cqZ/85Cf81j4MhYWFp/yzSE5OVk5OjklVjSyrVq3SLbfcohdeeEGf/vSnzS4n7kXyu4wWkSFKTU3VlClTtHbt2n77165dqxkzZpx0fGZmprZv3673338/uN1+++0666yz9P7772vatGnRKj3mDfXcStKnPvUp1dbWqrW1Nbhv165dslqtKikpiWi98SSUc9ve3i6rtf9/EUlJSZKO//aO0EyfPv2kP4vXX39dU6dOVUpKiklVjRzPPfecbr75Zq1cuZIxTWES0e+yYQ93TUDPP/+8kZKSYjz55JPGhx9+aCxcuNBIT0839u3bZxiGYdx7773GN77xjQFfz6yZgQ313La0tBglJSXGDTfcYOzYscNYv369UVlZadx6661m/Qgxa6jn9qmnnjKSk5ONJ554wtizZ4/x9ttvG1OnTjUuueQSs36EmNXS0mJs27bN2LZtmyHJeOyxx4xt27YZ+/fvNwzj5HO7d+9eIy0tzbjnnnuMDz/80HjyySeNlJQU4/e//71ZP0LMGuq5XblypZGcnGz88pe/NOrq6oJbc3OzWT9CzBrquf2kcH2XEURC9Mtf/tIoKyszUlNTjYsuushYv3598LkFCxYYV1xxxYCvJYic3lDP7c6dO41Pf/rThsPhMEpKSoxFixYZ7e3tUa46Pgz13P785z83zjnnHMPhcBhFRUXG1772NePgwYNRrjr2vfnmm4akk7YFCxYYhnHqc7tu3TrjwgsvNFJTU43y8nJjxYoV0S88Dgz13F5xxRWnPR7HhfL39kTh+i6zGAZtrAAAwByMEQEAAKYhiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqCCAAAMA1BBAAAmIYgAgAATEMQAQAApiGIAAAA0xBEAACAaQgiAADANP8f+Ziut0B0zN0AAAAASUVORK5CYII=", "text/plain": [ "
" ] @@ -974,7 +1074,7 @@ }, { "cell_type": "code", - "execution_count": 56, + "execution_count": 54, "id": "149c52b5-a0ce-4e6b-ba55-d94d33aa2f8a", "metadata": { "tags": [] @@ -986,7 +1086,7 @@ }, { "cell_type": "code", - "execution_count": 57, + "execution_count": 55, "id": "5a965b5b-40e6-4689-aab0-06b3e658cf65", "metadata": {}, "outputs": [], @@ -1001,17 +1101,30 @@ }, { "cell_type": "code", - "execution_count": 58, - "id": "2f3d4e7c-fda3-4acc-89b6-74fa561681da", + "execution_count": 56, + "id": "331821d7-1d65-4f69-8a76-7bd7f5b33a3c", "metadata": {}, "outputs": [], "source": [ - "ser = mint.then(lambda output: output.static_output())" + "from operator import methodcaller\n", + "# ser = mint.then(lambda output: output.static_output())\n", + "# same as above, but can be pickled, where as lambda cannot\n", + "ser = mint.then(methodcaller('static_output'))" ] }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 57, + "id": "55ec9373-9939-42b6-b628-14ecc976d468", + "metadata": {}, + "outputs": [], + "source": [ + "ser._capture_exceptions = False" + ] + }, + { + "cell_type": "code", + "execution_count": 58, "id": "918c79ee-401c-43a3-9dfc-8c7d51ffac85", "metadata": {}, "outputs": [], @@ -1021,7 +1134,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 59, "id": "aca24005-ea49-4389-bc26-f292fd0a75a2", "metadata": { "tags": [] @@ -1034,7 +1147,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 60, "id": "2c835700-7ece-4818-9b03-c60bf8fb0b04", "metadata": { "tags": [] @@ -1046,7 +1159,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 61, "id": "0925864e-4dd1-4f4e-ace4-aac09c55e787", "metadata": { "scrolled": true, @@ -1057,8 +1170,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 1.64 s, sys: 618 ms, total: 2.25 s\n", - "Wall time: 1min 43s\n" + "CPU times: user 310 ms, sys: 327 ms, total: 638 ms\n", + "Wall time: 1.36 s\n" ] } ], @@ -1071,9 +1184,69 @@ "ret = exe.status[0]" ] }, + { + "cell_type": "code", + "execution_count": 62, + "id": "7d6e4d20-7cca-41ef-85e3-5f24895bd876", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[ReturnStatus(Code.DONE, None)]" + ] + }, + "execution_count": 62, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exe.status" + ] + }, { "cell_type": "code", "execution_count": 63, + "id": "10650ff2-d8f1-40c2-a3f5-30c267188c21", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[MurnaghanOutput(base_structure=Atoms(symbols='Fe', pbc=True, cell=[[-0.6, 0.6, 0.6], [0.6, -0.6, 0.6], [0.6, 0.6, -0.6]]), volumes=array([0.432 , 0.44963265, 0.46726531, 0.48489796, 0.50253061,\n", + " 0.52016327, 0.53779592, 0.55542857, 0.57306122, 0.59069388,\n", + " 0.60832653, 0.62595918, 0.64359184, 0.66122449, 0.67885714,\n", + " 0.6964898 , 0.71412245, 0.7317551 , 0.74938776, 0.76702041,\n", + " 0.78465306, 0.80228571, 0.81991837, 0.83755102, 0.85518367,\n", + " 0.87281633, 0.89044898, 0.90808163, 0.92571429, 0.94334694,\n", + " 0.96097959, 0.97861224, 0.9962449 , 1.01387755, 1.0315102 ,\n", + " 1.04914286, 1.06677551, 1.08440816, 1.10204082, 1.11967347,\n", + " 1.13730612, 1.15493878, 1.17257143, 1.19020408, 1.20783673,\n", + " 1.22546939, 1.24310204, 1.26073469, 1.27836735, 1.296 ]), energies=array([ 4.78924238, 2.28006854, 0.26765599, -1.34342385, -2.62905986,\n", + " -3.64993906, -4.4548411 , -5.08315968, -5.56684658, -5.93192168,\n", + " -6.19965019, -6.38746798, -6.50971391, -6.57821157, -6.60273036,\n", + " -6.5913544 , -6.55079527, -6.48663436, -6.40351826, -6.3053145 ,\n", + " -6.19522745, -6.07592945, -5.94965606, -5.81827541, -5.68334616,\n", + " -5.54616619, -5.40781345, -5.26918051, -5.13100331, -4.99388532,\n", + " -4.85831813, -4.72469907, -4.59334586, -4.46450884, -4.3383816 ,\n", + " -4.21510997, -4.09479966, -3.97752272, -3.86332306, -3.75222112,\n", + " -3.64421787, -3.53929817, -3.43743364, -3.33858511, -3.24270468,\n", + " -3.1497372 , -3.05961953, -2.97228403, -2.88766101, -2.80567942]))]" + ] + }, + "execution_count": 63, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exe.output" + ] + }, + { + "cell_type": "code", + "execution_count": 64, "id": "4bf2df15-31dc-474c-b3df-f7c32b0fdaf2", "metadata": { "tags": [] @@ -1082,11 +1255,11 @@ { "data": { "text/plain": [ - "array([4.78924238, 4.51769267, 4.25194477, 3.99187529, 3.7373637 ,\n", - " 3.48829227, 3.244546 , 3.00601254, 2.77258214, 2.54414756])" + "array([ 4.78924238, 2.28006854, 0.26765599, -1.34342385, -2.62905986,\n", + " -3.64993906, -4.4548411 , -5.08315968, -5.56684658, -5.93192168])" ] }, - "execution_count": 63, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } @@ -1097,13 +1270,13 @@ }, { "cell_type": "code", - "execution_count": 64, + "execution_count": 65, "id": "eb0a2daf-9dab-4174-bfee-0cd1ef8c474e", "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiIAAAGdCAYAAAAvwBgXAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAAA6CklEQVR4nO3dd3Rc9bnu8WdGZVSs3rtkucgFNxkbN0y16YGE3sGQ+AIhhJNGODnAObnxOqHcc0gCCQk4JBhwgEAgNDuAe7dl4yoXSVazutW7tO8fksYWbpKtmT3l+1lr1sJ7Zjyv18aeR7/y/iyGYRgCAAAwgdXsAgAAgPciiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqCCAAAMA1BBAAAmIYgAgAATONrdgGn093drdLSUoWEhMhisZhdDgAAGADDMNTQ0KDExERZracf83DpIFJaWqqUlBSzywAAAGehqKhIycnJp32NSweRkJAQST1/kNDQUJOrAQAAA1FfX6+UlBT79/jpuHQQ6ZuOCQ0NJYgAAOBmBrKsgsWqAADANAQRAABgGoIIAAAwDUEEAACYhiACAABMQxABAACmIYgAAADTEEQAAIBpCCIAAMA0BBEAAGAagggAADANQQQAAJjGpQ+9c5Tcsga9t61YkcH+Wjg30+xyAADwWl45InKkrkWvrMrTBzklZpcCAIBX88ogkhgeKEkqrW0xuRIAALybVwaRhLAASVJ9a6ca2zpNrgYAAO/llUEkJMBPoQE9y2OOMCoCAIBpvDKISMdNz9S1mlwJAADeiyDCiAgAAKbx2iDSt06EqRkAAMzjtUGkb0SkpJapGQAAzOLFQaR3RKSOEREAAMzivUEkjDUiAACYzXuDyHG7ZgzDMLkaAAC8k9cGkbjQAFksUntnt6qb2s0uBwAAr+S1QcTf16qYYTZJ0hEWrAIAYAqvDSLS8TtnWCcCAIAZvDyIsHMGAAAzeXcQYecMAACm8uogksB5MwAAmMqrg0hS79QMIyIAAJjDq4NIQu/UDLtmAAAwh1cHkb5dM+UNrero6ja5GgAAvI/TgsiiRYtksVj02GOPOesjzygq2F/+PlYZhlRez6gIAADO5pQgsnnzZr3yyiuaMGGCMz5uwKxWixLs60QIIgAAOJvDg0hjY6PuuOMO/fGPf1RERISjP27Q+rbw0ksEAADnc3gQefjhh3X11VfrsssuO+Nr29raVF9f3+/haH0jInRXBQDA+Xwd+Zu//fbb2rZtmzZv3jyg1y9atEjPPPOMI0s6QVJfm/ejBBEAAJzNYSMiRUVF+sEPfqA33nhDAQEBA3rPE088obq6OvujqKjIUeXZJUdw3gwAAGZx2IjI1q1bVVFRoezsbPu1rq4urVq1Sr/97W/V1tYmHx+ffu+x2Wyy2WyOKumkksKDJEnFjIgAAOB0Dgsil156qXbu3Nnv2n333aesrCz99Kc/PSGEmMU+InK0RYZhyGKxmFwRAADew2FBJCQkROPHj+93LTg4WFFRUSdcN1PfYtWWji7VNLUraphzR2QAAPBmXt1ZVZJsvj6KC+0JH6wTAQDAuRy6a+abVqxY4cyPG7Ck8ECV17ep+GiLJiSHm10OAABew+tHRCQpOaJnwSpbeAEAcC6CiKSk3gWrxUebTa4EAADvQhARvUQAADALQUTHuqvSSwQAAOciiOjEXiIAAMA5CCI61l21oa1T9S2dJlcDAID3IIhICvT3UVSwvySpuJYFqwAAOAtBpNfx0zMAAMA5CCK9jm3hJYgAAOAsBJFe9qZmbOEFAMBpCCK9jm3hZY0IAADOQhDpRVMzAACcjyDSizUiAAA4H0GkV9/UTG1zhxrb6CUCAIAzEER6hQT4KSzQTxJbeAEAcBaCyHH61okU1bBgFQAAZyCIHCc1smcLbxE7ZwAAcAqCyHH6gkghIyIAADgFQeQ4yX0jIjWsEQEAwBkIIsexT80wIgIAgFMQRI6T0rtYtbCmWYZhmFwNAACejyBynKSIQFksUktHl6qb2s0uBwAAj0cQOY7N10cJoQGSWLAKAIAzEES+IZl1IgAAOA1B5BtYsAoAgPMQRL4hJYJeIgAAOAtB5BtSo/ravNNLBAAARyOIfAMjIgAAOA9B5Bv61ogcqWtRR1e3ydUAAODZCCLfEBNik83Xqm5DKq1legYAAEciiHyDxWJRCoffAQDgFASRk0jl8DsAAJyCIHISx585AwAAHIcgchIpNDUDAMApCCInYZ+aOUoQAQDAkQgiJ9E3InK4miACAIAjEUROom9EpK6lQ3XNHSZXAwCA5yKInESwzVcxITZJ0uGaJpOrAQDAcxFETiE9qmdUpIDpGQAAHIYgcgppUcGSpMNVjIgAAOAoBJFTYEQEAADHI4icgn1EpJoREQAAHIUgcgrpfUGEpmYAADgMQeQUUnunZiob2tTU1mlyNQAAeCaCyCmEBfopIshPEo3NAABwFILIabBOBAAAxyKInAY7ZwAAcCyCyGn0jYgU0l0VAACHcGgQWbRokc4//3yFhIQoNjZW119/vXJzcx35kUMqPbp3RKSKEREAABzBoUFk5cqVevjhh7VhwwYtX75cnZ2dmjdvnpqa3GOEgTUiAAA4lq8jf/PPPvus368XL16s2NhYbd26VRdeeKEjP3pI9PUSKa1rVWtHlwL8fEyuCAAAz+LQIPJNdXV1kqTIyMiTPt/W1qa2tjb7r+vr651S16lEBPkpJMBXDa2dKqpp1si4EFPrAQDA0zhtsaphGHr88cc1e/ZsjR8//qSvWbRokcLCwuyPlJQUZ5V3UhaLxT4qws4ZAACGntOCyCOPPKKvv/5ab7311ilf88QTT6iurs7+KCoqclZ5p9TXYZV1IgAADD2nTM18//vf14cffqhVq1YpOTn5lK+z2Wyy2WzOKGnAjvUSIYgAADDUHBpEDMPQ97//fb3//vtasWKFMjIyHPlxDmGfmmELLwAAQ86hQeThhx/Wm2++qX/84x8KCQlRWVmZJCksLEyBgYGO/OghMzymJ4jkVzEiAgDAUHPoGpGXX35ZdXV1uuiii5SQkGB/LF261JEfO6QyoodJkkpqW9Ta0WVyNQAAeBaHT824u8hgf4UH+am2uUMF1U3Kig81uyQAADwGZ80MQEZ0z/RMXiXTMwAADCWCyAD0BRHWiQAAMLQIIgMwnBERAAAcgiAyAMNjehas5lc1mlwJAACehSAyAPY1IkzNAAAwpAgiA9DX1Ky2uUNHm9pNrgYAAM9BEBmAQH8fJYYFSGJUBACAoUQQGaCMmL4Fq6wTAQBgqBBEBmh4dN+CVUZEAAAYKgSRAaKXCAAAQ48gMkAZHH4HAMCQI4gM0PDjRkS6u93/DB0AAFwBQWSAkiOC5OdjUVtnt0rrWswuBwAAj0AQGSAfq0VpUUzPAAAwlAgig9C3YPVQBVt4AQAYCgSRQRgR27OF9yC9RAAAGBIEkUEY0Xv43UFGRAAAGBIEkUGwj4hUsEYEAIChQBAZhOG9vUSqGttU19xhcjUAALg/gsgghAT4KT605/A71okAAHDuCCKD1Dc9w84ZAADOHUFkkNg5AwDA0CGIDFJmLDtnAAAYKgSRQcrsXbBKEAEA4NwRRAapb2qm6GizWju6TK4GAAD3RhAZpJhhNoUG+MowpLxK+okAAHAuCCKDZLFYju2cYcEqAADnhCByFkawYBUAgCFBEDkLbOEFAGBoEETOQmYMTc0AABgKBJGz0DciklfVpK5uw+RqAABwXwSRs5AcESSbr1Xtnd0qrGk2uxwAANwWQeQs+FiP7ZzZX95gcjUAALgvgshZGh0XIknaX0YQAQDgbBFEztKo+N4gwoJVAADOGkHkLI2K652aYUQEAICzRhA5S6N6p2byqhrV0dVtcjUAALgngshZSgoPVLC/jzq6DBVUceYMAABngyByliwWi0b2jorksnMGAICzQhA5B/adM+UsWAUA4GwQRM7BSBasAgBwTggi52C0fQsvQQQAgLNBEDkHfVMzBVVNau3oMrkaAADcD0HkHMSE2BQW6KduQzpUyToRAAAGiyByDiwWi31U5AALVgEAGDSCyDnqW7DKFl4AAAaPIHKO7AtW2TkDAMCgEUTO0SiamgEAcNacEkReeuklZWRkKCAgQNnZ2Vq9erUzPtYpxsSHSpKKj7aovrXD5GoAAHAvDg8iS5cu1WOPPaYnn3xSOTk5mjNnjq688koVFhY6+qOdIizIT4lhAZKkXKZnAAAYFIcHkRdeeEELFizQAw88oDFjxuh//ud/lJKSopdfftnRH+00YxJ6RkX2Hqk3uRIAANyLQ4NIe3u7tm7dqnnz5vW7Pm/ePK1bt+6E17e1tam+vr7fwx1kJfSsEyGIAAAwOA4NIlVVVerq6lJcXFy/63FxcSorKzvh9YsWLVJYWJj9kZKS4sjyhsyxERGmZgAAGAynLFa1WCz9fm0YxgnXJOmJJ55QXV2d/VFUVOSM8s5ZVu+C1dyyBnV1GyZXAwCA+/B15G8eHR0tHx+fE0Y/KioqThglkSSbzSabzebIkhwiIzpYNl+rWjq6VFjTrIzoYLNLAgDALTh0RMTf31/Z2dlavnx5v+vLly/XzJkzHfnRTuVjtdgbm7FOBACAgXP41Mzjjz+uP/3pT3rttde0d+9e/fCHP1RhYaEWLlzo6I92qr5+IvsIIgAADJhDp2Yk6ZZbblF1dbX+8z//U0eOHNH48eP1ySefKC0tzdEf7VR9O2f2sGAVAIABc3gQkaSHHnpIDz30kDM+yjR9O2f2lTEiAgDAQHHWzBCh1TsAAINHEBkitHoHAGDwCCJDKItW7wAADApBZAiN7Q0ie0oJIgAADARBZAiNT+oJIrtK60yuBAAA90AQGULjEsMk9awRae/sNrkaAABcH0FkCCVHBCo0wFcdXYb2l7NgFQCAMyGIDCGLxaLxST2jIqwTAQDgzAgiQ6wviLBOBACAMyOIDLFxib0LVksIIgAAnAlBZIj1LVjde6RBXd2GydUAAODaCCJDLCM6WEH+Pmrp6FJ+VaPZ5QAA4NIIIkPMx2qxNzbbVcKCVQAATocg4gCsEwEAYGAIIg4wjp0zAAAMCEHEAcb3LljdXVovw2DBKgAAp0IQcYCRccPk72NVQ2unCmuazS4HAACXRRBxAD8fq7ISQiRJXxczPQMAwKkQRBxkQnLP9MzXxbXmFgIAgAsjiDjIhORwSdIORkQAADglgoiDTOwNIrtK6uiwCgDAKRBEHGRE7DAF+fuoub1LhyrpsAoAwMkQRBzEx2qxn8S7o6jW3GIAAHBRBBEHmmhfsMo6EQAAToYg4kB9C1bZOQMAwMkRRByob8Hq3iMNau/sNrcYAABcEEHEgVIiAxUR5Kf2rm7tK+MkXgAAvokg4kAWi0Xn9fUTYcEqAAAnIIg4WN+CVRqbAQBwIoKIg01kwSoAAKdEEHGwiSnhkqQDFY1qaO0wtxgAAFwMQcTBYkJsSo4IlGFIO4qYngEA4HgEESeYkhohSdpWeNTkSgAAcC0EESeYkhouScohiAAA0A9BxAkm946I5BTVyjA4iRcAgD4EEScYkxAqm69Vtc0dyqtqMrscAABcBkHECfx9rZrQ209k22GmZwAA6EMQcZLjp2cAAEAPgoiT9C1YZUQEAIBjCCJO0reFd395gxrbOk2uBgAA10AQcZLY0AAlhQeq2+AAPAAA+hBEnGgy/UQAAOiHIOJE2Wk90zNbWCcCAIAkgohTnZ8eKUnaeviourppbAYAAEHEibLiQxTs76OG1k7lljWYXQ4AAKYjiDiRr49VU3qnZzYX1JhcDQAA5iOIONm03ukZgggAAAQRp5t6XBDhADwAgLdzWBApKCjQggULlJGRocDAQGVmZuqpp55Se3u7oz7SLUxODZefj0Xl9W0qqmkxuxwAAEzl66jfeN++feru7tYf/vAHjRgxQrt27dKDDz6opqYmPffcc476WJcX4Oej85LCtK2wVpsKapQaFWR2SQAAmMZhQeSKK67QFVdcYf/18OHDlZubq5dfftmrg4jUs413W2GtthTU6MbsZLPLAQDANE5dI1JXV6fIyMhTPt/W1qb6+vp+D0/U109kEwtWAQBezmlB5NChQ/rNb36jhQsXnvI1ixYtUlhYmP2RkpLirPKcamp6zxbevMomVTW2mVwNAADmGXQQefrpp2WxWE772LJlS7/3lJaW6oorrtBNN92kBx544JS/9xNPPKG6ujr7o6ioaPB/IjcQHuSvUXHDJElbGBUBAHixQa8ReeSRR3Trrbee9jXp6en2/y4tLdXFF1+sGTNm6JVXXjnt+2w2m2w222BLckvTM6K0v7xRG/JqdMX4BLPLAQDAFIMOItHR0YqOjh7Qa0tKSnTxxRcrOztbixcvltVK25I+MzKj9NcNh7X+ULXZpQAAYBqH7ZopLS3VRRddpNTUVD333HOqrKy0PxcfH++oj3UbFwyPkiTlljeourFNUcO8YyQIAIDjOSyILFu2TAcPHtTBgweVnNx/iyodRaXIYH9lxYdoX1mDNuTV6OoJTM8AALyPw+ZK7r33XhmGcdIHevSNiqzPqzK5EgAAzMGiDRPNyOwNIqwTAQB4KYKIiaZnRMpikQ5VNqmivtXscgAAcDqCiInCg/w1Jj5UkrQ+j1ERAID3IYiYrG96ZkMejc0AAN6HIGKyGcP7gggjIgAA70MQMdm04ZGyWqT8qiaV1raYXQ4AAE5FEDFZaICfJqaES5LWHGAbLwDAuxBEXMCcET0t81cdqDzDKwEA8CwEERcwZ1SMJGndoWp1d9PwDQDgPQgiLmBSSriG2XxV09SuPUfqzS4HAACnIYi4AD8fq73dO9MzAABvQhBxEXNG9qwTYcEqAMCbEERcRF8Q2VJwVC3tXSZXAwCAcxBEXERGdLCSwgPV3tWtjfk0NwMAeAeCiIuwWCz2UZHVTM8AALwEQcSFzBnZs4135X4WrAIAHKehtUNf7C3Xf/1zj97aVGhqLb6mfjr6mT0iWj5Wiw5WNKqoplkpkUFmlwQA8AAdXd3KKazVmgOVWnOwSjuK69TV27dqWnqkbpuWalptBBEXEhbkp+zUCG0qqNGK3ArdNSPd7JIAAG7IMAwdrGjU6gNVWnOwShvzqtX0jY0Q6VFBmpEZrbmjok2qsgdBxMVcnBWrTQU1+iq3kiACABiwivpWrT1UpdUHqrT2YJXK69v6PR8V7K+ZI6I1Z0S0Zo6IUnKEa4y6E0RczMVZMfrvz/Zp3aEqtXZ0KcDPx+ySAAAuqKmtU5vya+zBI7e8od/zNl+rpmVEas7IaM0aEa0x8aGyWi0mVXtqBBEXMzouRAlhATpS16r1edW6eHSs2SUBAFyAYRjaXVqvlfsrtXJ/pXIKj6qj69j5ZBaLND4xTLNH9ox6TEmLcIsfZgkiLsZiseii0bF6a1OhVuyrIIgAgBerbW7XqgNVWplbqVUHKlXZ0H+6JTkiUHNGRmv2iBjNzIxSRLC/SZWePYKIC7okqyeIfJVbqacNQxaL6w2lAQCGXle3oZ0ldVqRW6GV+yu1o6hWxx/KHuTvo5m9C0wvHBWjtKhg84odIgQRFzQzM0r+PlYV1jTrUGWTRsQOM7skAICDVDa0afWBSq3IrdTqA5U62tzR7/ms+BDNHRWjuaNilJ0eIZuv60+3DAZBxAUF23w1fXikVh+o0pf7ygkiAOBBuroNbS86qq/2VWrF/grtKqnv93xIgK/mjIzW3FExunBUjBLCAk2q1DkIIi7q0qxYrT5QpX/tqdB3L8w0uxwAwDmob+3Q6v1V+mJvub7KrThh1GN8UqguGhWruaNjNCklXH4+3tP4nCDioi4bG6enP9qjLYdrVN3YpqhhNrNLAgAMQn5Vk77YW64v91VoU36NOo9b7BEa4Ku5o2N1Ue+oR0yI9/4bTxBxUckRQRqXGKrdpfX6Yl+Fbp6aYnZJAIDT6Ojq1paCo/pyX7m+2FehvMqmfs9nxgTr0jFxujQrVtlpEfL1olGP0yGIuLB5Y+O1u7Rey3aXE0QAwAUdbWrXyv2V+tfecq3cX6mG1k77c34+Fk3PiNIlWbG6JCtW6dHuv8PFEQgiLuzysXH6f//arzUHK9XS3qVAf89aKQ0A7qiwulnL9pRp2e5ybTlc0297bWSwvy4eHatLx8RqzshohQT4mVeomyCIuLAxCSFKjghU8dEWrTpQqfnj4s0uCQC8Tl9H02W7y7RsT7n2lfVvpZ4VH6JLx8Tqkqw4TUoJl48LtlF3ZQQRF2axWHT52DgtXlug5XvKCSIA4CSdXd3aVFCjZbvLtXxPuUpqW+zP+Vgtmp4Rqfnj4nXpmFiXOTzOXRFEXNy8sfFavLZAX+wtV2dXN4ubAMBBWtq7tHJ/pZbtKdOX+ypUe9wW20A/H80dFaN54+J0SVaswoPcr5W6qyKIuLjz0yMUHuSno80d2lRQo5mZ0WaXBAAeo6apXV/sLdeyPeVafaBSrR3d9ucigvx02Zg4zRsXrzkjo93iADl3RBBxcb4+Vs0bG6e/bSnWJzuPEEQA4BxVNrTps91l+nTnEW3Iq+632DQ5IlDzx8Vr3tg4ttg6CUHEDVx1XoL+tqVYn+0q0zPXjWchFAAMUnl9qz7bVaZPdh7RpoIaGceFj7EJoZo3Lk7zxsZrTEIIB406GUHEDcwaEa2wQD9VNbZrY341oyIAMACltS36bFeZPt11RFsOH+0XPiamhOuq8fG6cnyCUqNYbGomgogb8POxav44pmcA4EyKjzbrs11l+njnEeUU1vZ7bkpquK46L0FXjI9np4sLIYi4CaZnAODkimqa9fHOI/p05xHtKK6zX7dYpPPTInXlefG6Yny8x59i664IIm6C6RkAOKasrlUf7zyij3aUantRrf261SJNy4jUVeclaP64eMWFBphXJAaEIOImmJ4B4O1qmtr1SW/4OH7BqdUizciM0lXnJWje2HivPsnWHRFE3Ejf9MynO8v09LXj2FYGwOPVt3Zo2e5yfbSjVGsOVqnruL22U9MidN2kRF05PoHw4cYIIm5k1ohoRQb7q7qpXWsOVumi0bFmlwQAQ665vVNf7K3QRztKtSK3Uu1dx5qMnZcUpmsnJujqCYlKCmfNhycgiLgRPx+rrp2QoNfXH9YHOSUEEQAeo72zWyv3V+qjHaX6195yNbd32Z8bETtM101M1LUTE5URHWxilXAEgoib+dbkJL2+/rA+312uprZOBdu4hQDck2EY2nr4qN7PKdHHO4/0O9slNTJI105M0LUTEzU6jiZjnoxvMTczOSVcaVFBOlzdrOV7ynX95CSzSwKAQTlU2ah/5JTo/e0lKqo5dqptbIhN1/aOfExMDiN8eAmCiJuxWCz61qQkvfjFAX2wvYQgAsAtVDW26aMdpfogp6Rfr49gfx9dMT5BN0xO0ozMKHokeSGCiBu6flKiXvzigFYfqFJVY5uih7FaHIDraWnv0rI9Zfogp0SrDhzb8eJjtejCkdG6fnKS5o2NV6A/p9p6M6cEkba2Nk2fPl07duxQTk6OJk2a5IyP9VjDY4ZpYnKYdhTX6aMdpbpvVobZJQGAJKmr29C6Q1V6P6dEn+8qU9Nxi04nJofphslJumZiIj9Awc4pQeQnP/mJEhMTtWPHDmd8nFe4fnKSdhTX6b1txQQRAKY7WNGo97YV6+/bilVe32a/nhIZqBsmJelbk5OUGTPMxArhqhweRD799FMtW7ZM7733nj799FNHf5zXuH5SkhZ9sk+7Suq1u7RO4xLDzC4JgJepb+3QP3cc0Ttbi/odMBcW6KdrJiTo21OSNCU1gkWnOC2HBpHy8nI9+OCD+uCDDxQUdOaTDtva2tTWdixJ19fXO7I8txYR7K/Lx8bp451H9M6WYo27jiACwPH6pl7e2VKsz3eXqa2zp9mYj9Wii0bF6MbsZF0yJlY2X9Z9YGAcFkQMw9C9996rhQsXaurUqSooKDjjexYtWqRnnnnGUSV5nJumJuvjnUf0fk6JfnZllgL8+IsPwDHyKvumXkp0pK7Vfn1k7DDdNDVZ109KUiwHzOEsDDqIPP3002cMC5s3b9a6detUX1+vJ554YsC/9xNPPKHHH3/c/uv6+nqlpKQMtkSvMWdkjBLCAnSkrlX/2luuayYkml0SAA/S0Nqhj78+one3FmvL4aP262GBfvrWpETdmJ2s85Lo94FzYzEMwzjzy46pqqpSVVXVaV+Tnp6uW2+9VR999FG//0G7urrk4+OjO+64Q6+//voZP6u+vl5hYWGqq6tTaGjoYMr0Gs8vy9VvvjyoC0fF6C/3TzO7HABurrvb0Pq8ar2zpUif7S5Ta0fP1IvVIs0dFaMbs1N06ZhYRmBxWoP5/h50EBmowsLCfms8SktLNX/+fL377ruaPn26kpOTz/h7EETO7HB1k+Y+u0IWi7Tmp5dwCBSAs1JW16p3txZp6Zaift1OR8QO043ZybphcpLimHrBAA3m+9tha0RSU1P7/XrYsJ5tW5mZmQMKIRiYtKhgXTA8UhvyarR0U6Eenzfa7JIAuInOrm59lVuppZsL9eW+CvX2G1NIgK+um5iom6am0GodDkdnVQ9w5wVp2pBXo7c2F+n7l46Un4/V7JIAuLDC6mYt3VKod7YUq6Lh2E7FaemRuuX8FF11XgLdTuE0Tgsi6enpctAskNebNzZe0cNsqmxo07Ld5bp6QoLZJQFwMW2dXfp8d7mWbi7U2oPV9utRwf76Tnaybp6aohGxNByD8zEi4gH8fa26bVqKfvPlQb2x4TBBBIDd/vIGvb2pSH/PKVZtc4ckyWLp2XV36/kpumxMnPx9GUWFeQgiHuK2aan63VcHtT6vWgcrGjQiNsTskgCYpLm9U//8+oje3lSobcd1PE0IC9BNU1N0U3ayUiLP3GQScAaCiIdIDA/UpWPitHxPud7YUKinrxtndkkAnGx/eYOWbDisv28rUUNbpyTJ12rRpWNidev5qbpwVIx8rCw8hWshiHiQuy5I0/I95XpvW7F+PH+0gm3cXsDTtXV26bNdZVqyoVCbCmrs19OignTr+an6TnaSYkPYdgvXxTeVB5k9IlrDo4OVV9Wkd7cW656Z6WaXBMBBCqubtWTTYb2zpVg1Te2Ses57uWxMrO68IE2zMqNlZfQDboAg4kGsVovum52hX3ywS6+tzdedF6QxDAt4kM6ubn2xr0JLNhZq1f5K+/X40ADdNi1Vt5yfovgwRj/gXggiHuY7U5L03Oe5OlzdrC/2lmveuHizSwJwjsrqWvX25kK9valIZfXHDpy7cFSM7pyeqkuyYuVL/yC4KYKIhwny99Ud01P10opD+tOafIII4Ka6uw2tOVilJRsP6197K9TV2/Y0MthfN09N0e3TUpUaxc4XuD+CiAe6e0a6XlmVp035NdpZXKfzksPMLgnAANU2t+tvW4q0ZGOhDlc3269PS4/UHRek6orx8bL50vUUnoMg4oHiwwJ0zYQEfbC9VH9ak6f/vXWy2SUBOIPdpXX6y7rD+mB7ido6e068DbH56jvZybp9eqpGxdEbCJ6JIOKhHpgzXB9sL9VHO0r1b5ePZggXcEEdXd36bFeZ/rK+QJsLjtqvj0kI1T0z0nTdpEQF+fPPNDwb/4d7qPFJYZo7KkYr91fq96sO6Vc3nGd2SQB6VTS06q2NRVqy8bD90Dlfq0VXjI/XPTPTNTUtghNv4TUIIh7s4YtHaOX+Sr27pVg/uHSk4kLZ1geYxTAMbSs8qtfXHdanu46oo6tn8WlMiE23T0vV7dNT+TsKr0QQ8WDTMiJ1fnqENhcc1Z9W5+nJq8eaXRLgdVo7uvTh9lK9vr5Au0vr7dez0yJ094w0XTk+gUPn4NUIIh7uoYtH6L7Fm7VkY6EeumiEIoL9zS4J8ApFNc16Y+NhLd1cZD/11uZr1bcmJeruGekan8RuNkAiiHi8i0bFaGxCqPYcqdef1uTpx/OzzC4J8FiGYWjtwWr9eV2BvthXLqNn9kVJ4YG6a0aabpmawg8DwDcQRDycxWLRo5eO1MI3tmrx2gLdPytDUcNsZpcFeJTWji79Y3uJXltToNzyBvv1OSOjdfeMdF2SFctxC8ApEES8wPxxcRqfFKpdJfX6w6o8/fyqMWaXBHiEioZWvbH+sN7YWGg/eC7I30c3Zifr7hnpGhE7zOQKAddHEPECFotF/zZvtO5bvFmvryvQA7MzFMvqfOCs7S6t02trCvTRjlK1d/U0H0sKD9Q9M9N0y/mpCgv0M7lCwH0QRLzERaNiNCU1XNsKa/XSikN6+rpxZpcEuJWubkNf7qvQq2vytCGvxn59Smq4Fswervnj4jh4DjgLBBEvYbFY9KN5o3X7nzbqzY2FWjA7QymRdFsFzqSprVPvbCnS4nUF9rNffKwWXXVegu6fla7JqREmVwi4N4KIF5k5IlqzRkRp7cFqPbcslzNogNMoPtqs19cV6O3NRWpo7ZQkhQb46rbpqbpnRroSwwNNrhDwDAQRL/PElWN07W/X6B/bS3X/rAxNTAk3uyTAZfR1P31tTYE+212mru6e/bcZ0cG6f1a6vpOdzNkvwBDjb5SXGZ8UphsmJ+nv20r0fz/Zq6XfvYAzLeD1Orq69emuMr26Jl87imrt12eNiNKC2Rm6aFSsrGy/BRyCIOKFfjRvtD7++og25ddo+Z5yzRsXb3ZJgCnqmjv05qZC/WV9gY7UtUqS/H16up/ePztDYxJCTa4Q8HwEES+UGB6oB+Zk6HdfHdKiT/dp7ugY2Xx9zC4LcJq8ykYtXlugd7cWq6WjS5IUPcxfd16QpjumpykmhKZ/gLMQRLzUwrmZ+tuWYuVXNelPq/P18MUjzC4JcCjDMLTuULVeXZOvL/dV2K9nxYdowewMXTsxUQF+BHLA2QgiXiokwE9PXjVGjy3drt98eUDXT05SErsA4IH6Tr99bW2+9pX1tF+3WKRLs2J1/6wMzciMYp0UYCKCiBf71qREvbmpUJvya/TLf+7Ry3dmm10SMGQqG9r0xobDWrLxsKoae9qvB/r56KapybpvVoYyooNNrhCARBDxahaLRf/5rXG6+sU1+nRXmVbtr9SFo2LMLgs4J3tK6/Xa2nx9uP1Y+/XEsADdMzNdt56fqrAg2q8DroQg4uWy4kN178x0vbomX09+sFOfP3YhfRLgdrrt7dfztT6v2n59cmq4FszO0Pxx8fKj/TrgkvjGgX54+Sh9tqtMRTUten7Zfv3imrFmlwQMSFNbp97dWqzFa/NVcFz79SvHx+v+2RmaQvt1wOURRKBhNl/93xvG697Fm/Xa2nxdPSGBf8Dh0kpqW/SXdQV6a1Oh6nvbr4cE+Or2aam6e2Y6C68BN0IQgSTpotGx+vaUno6rP333a/3z0dn0FoHL2VZ4VK+uyddnu/q3X79vVrq+MyVZwTb+SQPcDX9rYfeLq8dqZW6lDlQ06oXl+/XElWPMLglQ53Ht17cf1359ZmaU7p+VoUuyaL8OuDOCCOwigv31q2+fp+/9dateWZWni0bFakZmlNllwUvVNXfo7c2Fen1dgUqPa79+3aRE3T8rQ2MTab8OeAKCCPqZPy5et56forc3F+nf/rZdnz52ocIC2e4I58mvatLitfl6d2uxmtt72q9HBfe0X7/zAtqvA56GIIIT/OKasVqfV63D1c36xQe79L+3TqLzJByqr/36a2vy9WVuhYye5R/Kig/R/bMzdB3t1wGPRRDBCYJtvvp/t0zSTb9frw93lGpGZpRum5ZqdlnwQK0dXfrH9hK9tqZAueUN9uuXZMVqwewMzaT9OuDxCCI4qSmpEfrRvNH678/26akPd+u8pDCNTwozuyx4iIr6Vv11w2Et2Viomqae9utB/j66KTtZ98xM1/CYYSZXCMBZCCI4pe9dOFxbCmr0xb4KPbRkmz76/mzWi+Cc7Cyu02tr8/XPr0vV0dUz/5IUHqh7Z6br5vNT+P8L8EIEEZyS1WrR8zdP1NUvrlFhTbMeX7pdr9w9VT5slcQgdHZ1a/mecr22Nl+bC47ar5+fHqH7Z2Xo8rFx8qX9OuC1CCI4rfAgf7185xTd+Pv1+mJfhX79+T76i2BA6lo69LfNRfrzugKV1LZIknytFl07MVH3zUrXhORwcwsE4BIIIjijCcnhevbGCfrB29v1h5V5Ghkbohuzk80uCy4qv6pJf16br3eO234bGeyvO6an6s4L0hQXGmByhQBcCUEEA/KtSUk6UN6o3351UD//+06lRgZpWkak2WXBRXR3G1p9sEqvryvQV8dtvx0dF6L7Z6frW5OS2H4L4KQIIhiwxy8fpYMVjfpsd5keeH2z/rZwhrLi6W7pzepbO/TulmL9dcNh5Vc12a9fmhWr+9l+C2AALIbR97OL66mvr1dYWJjq6uoUGsoXnitoae/Sna9u1NbDRxUXatN7/2emkiOCzC4LTpZb1qC/rC/Q+zkl9umXEJuvbpyarLsuSGP7LeDlBvP9TRDBoNU2t+um36/XgYpGDY8J1tLvzqDtthfo2/3y+voCbcirsV8fFTdMd89I1w2Tkzj9FoCkwX1/O3zP3Mcff6zp06crMDBQ0dHR+va3v+3oj4SDhQf56y8LpikxLEB5lU26/Y8bVNXYZnZZcJCqxjb99ssDmvPrr/R/lmzThrwa+VgtunJ8vN568AJ9/tiFuvOCNEIIgLPi0H853nvvPT344IP61a9+pUsuuUSGYWjnzp2O/Eg4SUJYoN588ALd8krPyMgdf9yoNx+crqhhjIx4AsMwtK2wVm9sOKyPvz6i9q5uST2Hz902LVW3T09VYnigyVUC8AQOm5rp7OxUenq6nnnmGS1YsOCsfg+mZlxfflWTbvnDelU0tGlk7DD9dcF0xYexPdNd1bd26IOcEr25sVD7yo6d/TIpJVz3zEzTVeclyObL7hcApzeY72+HjYhs27ZNJSUlslqtmjx5ssrKyjRp0iQ999xzGjdu3Enf09bWpra2Y0P89fX1jioPQyQjOlhvf/cC3fbHDTpQ0ajvvLxOf10wjcWKbsQwDG0vqtWbGwv10delau3oGf2w+Vp1zYRE3T0jTRNTws0tEoDHctiIyNtvv63bbrtNqampeuGFF5Senq7nn39ey5Yt0/79+xUZeWIPiqefflrPPPPMCdcZEXF9RTXNuvu1TcqvalJUsL9eu/d8vrxcXENrhz7YXqo3NxZq75FjoX9U3DDdPi1VN0xOVlgQZ78AGDyH7po5VVg43ubNm7V//37dcccd+sMf/qDvfve7knpGPJKTk/XLX/5S3/ve905438lGRFJSUggibqKqsU33vLZJu0vrZfO16vmbJ+qaCYlml4Xj9I1+LN1cpA93lNq33vr7WnXNeQm6fXqqstMi6P0B4Jw4dGrmkUce0a233nra16Snp6uhoWd+eezYsfbrNptNw4cPV2Fh4UnfZ7PZZLOx2NFdRQ+z6e3vXqBH38rRV7mVeuTNHB2saNSjl4yUlYPyTFVR36r3c0r0ztZiHaxotF/PjAnW7dPT9J0pSQoP8jexQgDeatBBJDo6WtHR0Wd8XXZ2tmw2m3JzczV79mxJUkdHhwoKCpSWljb4SuEWQgL89Kd7ztevPtmrV9fk63/+dUDbi2r1/E0T2VHjZO2d3fpib7ne2Vqslfsr1dXdM/gZ4GfVFePiddu0VE3LiGT0A4CpHLZYNTQ0VAsXLtRTTz2llJQUpaWl6dlnn5Uk3XTTTY76WLgAH6tFv7hmrEbHh+gXH+zSitxKXfXiar1462RNHx5ldnkeb1dJnd7dWqx/bC/R0eYO+/UpqeG6aWqKrp6QoNAA1n4AcA0O7SPy7LPPytfXV3fddZdaWlo0ffp0ffnll4qIiHDkx8JF3Dw1RROSw/Twkm06VNmk2/64QY9cMlKPXDxC/r4O76XnVYpqmvXhjlJ9uL1UueXHtt3Ghdr07SnJujE7WZnsZALggmjxDodrbu/Uf/xjt97dWiypZ1fGf39ngianEkjPRWVDmz7+ulT/2FGqnMJa+3V/H6suHxenm7KTNWdkjHxYnwPAyThrBi7pox2levrD3apuapfFIt07M13/Nm+0htEafMDqWjr0+e4yfbSjVGsPVql32YesFmlGZpS+NTFJ88fHKyyQqRcA5iGIwGUdbWrXf328R3/fViJJih7mr8cuG6Vbz0+Rrw/TNSdTUd+qZXvK9fnuMq0/VK3O7mN/ZSelhOu6iYm6ZkKCYkPpaAvANRBE4PJW7q/U0x/uVn5Vk6SebaQ/vSJLl4+NYxeHpMPVTfp8d5k+312ubYVHdfzf0lFxw3TdxERdOzFRaVHB5hUJAKdAEIFb6Ojq1psbC/W/XxxQTVO7JCkrPkQL52bqmgkJXjVC0t7ZrS0FNVq5v1Irciv7LTiVekY+5o+L1/xxcbTPB+DyCCJwK/WtHfr9ikN6fV2Bmno7fSZHBOremem6YXKSx/YfKapptgePdYeq7F1OpZ4t0DOGR2n+uDhdPjaegwQBuBWCCNxSXXOH/rqhQIvXFqi6d4TEz8eieePidcvUFM3MjHLbURLDMFRY06yNeTXakF+tjXk1Kqlt6fea6GE2zR0Vo4tGx2jOyGg6nQJwWwQRuLWW9i79PadYb28q0s6SOvv1iCA/XT42TleMj9fMzGgF+LnucfStHV3ae6ReO0vqtPXwUW3Mq1FZfWu/1/hYLZqSGq6LRsdq7qgYjU0IpRU+AI9AEIHH2FVSp6Wbi/TPr0v7dQm1+VqVnRahGcOjNCMzSuMSwxTob04wqW1u18GKRu0vb9Su0jp9XVyr3LIGdXT1/6vl52PRhORwTc+I1PThUcpOi2DrMgCPRBCBx+ns6tamghp9vqtMy/aU60hd/9EFq0XKjBmmcYmhykoIVXpUkFIjg5UWFaTgc/yy7+42VNXUppKjLSqtbVVpbYsKa5p1sKJRByoaVdXYdtL3RQb7a0JymD18TEmNMC0sAYAzEUTg0QzD0KHKJq3Pq9b6Q1XalF+jqsb2U74+xOaryGH+igz2V0SQvwL8rLL5+sjma5W/r1WG0bODp72zW+1d3Wrt6FZtc7uONrertrlDtS0d9gPjTiUpPFCZscM0Jj5EE5LDNSE5TMkRgWxFBuCVCCLwKoZhqKKhTbtL67SrpF4HKxp1uKZZhdVN/aZzzoXVIsWFBigpPFCJ4YFKighUZswwjYwdpszYYUyxAMBxBvP9zb+ecHsWi0VxoQGKCw3QJVlx/Z6rb+1QVUObapraVdXYrrqWdrV19ox+tHV2q62jS7JYZPO1ys/HIj+fntGS8CA/hQf52UdRIoP95eemO3YAwJURRODRQgP8FBrgp+ExZlcCADgZfsQDAACmIYgAAADTEEQAAIBpCCIAAMA0BBEAAGAagggAADANQQQAAJiGIAIAAExDEAEAAKYhiAAAANMQRAAAgGkIIgAAwDQEEQAAYBqXPn3XMAxJUn19vcmVAACAger73u77Hj8dlw4iDQ0NkqSUlBSTKwEAAIPV0NCgsLCw077GYgwkrpiku7tbpaWlCgkJkcVisV+vr69XSkqKioqKFBoaamKFOBnuj+vjHrk27o/r4x6dnmEYamhoUGJioqzW068CcekREavVquTk5FM+Hxoayv8ALoz74/q4R66N++P6uEendqaRkD4sVgUAAKYhiAAAANO4ZRCx2Wx66qmnZLPZzC4FJ8H9cX3cI9fG/XF93KOh49KLVQEAgGdzyxERAADgGQgiAADANAQRAABgGoIIAAAwjcsGkZdeekkZGRkKCAhQdna2Vq9ePaD3rV27Vr6+vpo0aZJjC/Ryg70/bW1tevLJJ5WWliabzabMzEy99tprTqrWOw32Hi1ZskQTJ05UUFCQEhISdN9996m6utpJ1XqXVatW6dprr1ViYqIsFos++OCDM75n5cqVys7OVkBAgIYPH67f//73ji/USw32/vz973/X5ZdfrpiYGIWGhmrGjBn6/PPPnVOsB3DJILJ06VI99thjevLJJ5WTk6M5c+boyiuvVGFh4WnfV1dXp7vvvluXXnqpkyr1Tmdzf26++WZ98cUXevXVV5Wbm6u33npLWVlZTqzauwz2Hq1Zs0Z33323FixYoN27d+udd97R5s2b9cADDzi5cu/Q1NSkiRMn6re//e2AXp+fn6+rrrpKc+bMUU5Ojn7+85/r0Ucf1XvvvefgSr3TYO/PqlWrdPnll+uTTz7R1q1bdfHFF+vaa69VTk6Ogyv1EIYLmjZtmrFw4cJ+17Kysoyf/exnp33fLbfcYvz7v/+78dRTTxkTJ050YIXebbD359NPPzXCwsKM6upqZ5QHY/D36NlnnzWGDx/e79qLL75oJCcnO6xG9JBkvP/++6d9zU9+8hMjKyur37Xvfe97xgUXXODAymAYA7s/JzN27FjjmWeeGfqCPJDLjYi0t7dr69atmjdvXr/r8+bN07p16075vsWLF+vQoUN66qmnHF2iVzub+/Phhx9q6tSp+vWvf62kpCSNGjVKP/rRj9TS0uKMkr3O2dyjmTNnqri4WJ988okMw1B5ebneffddXX311c4oGWewfv36E+7n/PnztWXLFnV0dJhUFU6lu7tbDQ0NioyMNLsUt+Byh95VVVWpq6tLcXFx/a7HxcWprKzspO85cOCAfvazn2n16tXy9XW5P5JHOZv7k5eXpzVr1iggIEDvv/++qqqq9NBDD6mmpoZ1Ig5wNvdo5syZWrJkiW655Ra1traqs7NT1113nX7zm984o2ScQVlZ2UnvZ2dnp6qqqpSQkGBSZTiZ559/Xk1NTbr55pvNLsUtuNyISB+LxdLv14ZhnHBNkrq6unT77bfrmWee0ahRo5xVntcb6P2Ren46sFgsWrJkiaZNm6arrrpKL7zwgv785z8zKuJAg7lHe/bs0aOPPqr/+I//0NatW/XZZ58pPz9fCxcudEapGICT3c+TXYe53nrrLT399NNaunSpYmNjzS7HLbjc8EF0dLR8fHxO+MmtoqLihJ8IJKmhoUFbtmxRTk6OHnnkEUk9X3yGYcjX11fLli3TJZdc4pTavcFg748kJSQkKCkpqd+R0GPGjJFhGCouLtbIkSMdWrO3OZt7tGjRIs2aNUs//vGPJUkTJkxQcHCw5syZo1/+8pf8xG2y+Pj4k95PX19fRUVFmVQVvmnp0qVasGCB3nnnHV122WVml+M2XG5ExN/fX9nZ2Vq+fHm/68uXL9fMmTNPeH1oaKh27typ7du32x8LFy7U6NGjtX37dk2fPt1ZpXuFwd4fSZo1a5ZKS0vV2Nhov7Z//35ZrVYlJyc7tF5vdDb3qLm5WVZr/38OfHx8JB37yRvmmTFjxgn3c9myZZo6dar8/PxMqgrHe+utt3TvvffqzTffZG3VYJm3TvbU3n77bcPPz8949dVXjT179hiPPfaYERwcbBQUFBiGYRg/+9nPjLvuuuuU72fXjGMN9v40NDQYycnJxo033mjs3r3bWLlypTFy5EjjgQceMOuP4PEGe48WL15s+Pr6Gi+99JJx6NAhY82aNcbUqVONadOmmfVH8GgNDQ1GTk6OkZOTY0gyXnjhBSMnJ8c4fPiwYRgn3p+8vDwjKCjI+OEPf2js2bPHePXVVw0/Pz/j3XffNeuP4NEGe3/efPNNw9fX1/jd735nHDlyxP6ora0164/gVlwyiBiGYfzud78z0tLSDH9/f2PKlCnGypUr7c/dc889xty5c0/5XoKI4w32/uzdu9e47LLLjMDAQCM5Odl4/PHHjebmZidX7V0Ge49efPFFY+zYsUZgYKCRkJBg3HHHHUZxcbGTq/YOX331lSHphMc999xjGMbJ78+KFSuMyZMnG/7+/kZ6errx8ssvO79wLzHY+zN37tzTvh6nZzEMxl0BAIA5XG6NCAAA8B4EEQAAYBqCCAAAMA1BBAAAmIYgAgAATEMQAQAApiGIAAAA0xBEAACAaQgiAADANAQRAABgGoIIAAAwDUEEAACY5v8DVFNSeP/dujsAAAAASUVORK5CYII=", + "image/png": "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", "text/plain": [ "
" ] @@ -1121,96 +1294,98 @@ "id": "04d5b556-70e8-4023-8033-963ca066cb18", "metadata": {}, "source": [ - "# Combine MD and Murnaghan" + "# Combine MD and Murnaghan\n", + "\n", + "Obviously the one would need to increase sampling size to obtain reasonable values." ] }, { "cell_type": "code", - "execution_count": 65, + "execution_count": 66, "id": "7196bbf5-dcab-41d2-87e4-b3bc292a24e7", "metadata": { "tags": [] }, "outputs": [], "source": [ - "m = MurnaghanTask(capture_exceptions=False)" + "m = MurnaghanTask()" ] }, { "cell_type": "code", - "execution_count": 99, + "execution_count": 67, "id": "e5141a6b-a0e7-4534-a59f-46cac32e7e60", "metadata": {}, "outputs": [], "source": [ - "md = AseMDTask(capture_exceptions=False)\n", + "md = AseMDTask()\n", "md.input.calculator = MorsePotential()\n", - "md.input.steps = 500\n", + "md.input.steps = 100\n", "md.input.output_steps = 100\n", - "md.input.temperature = 300\n", + "md.input.temperature = 100\n", "md.input.timestep = 3" ] }, { "cell_type": "code", - "execution_count": 102, + "execution_count": 68, "id": "d21ee69e-056b-400d-932f-8f89917405dd", "metadata": {}, "outputs": [], "source": [ - "m.input.task = md.then(lambda output: output.static_output(how=output.Mean(0.5, 1.0)))" + "#m.input.task = md.then(lambda output: output.static_output(how=output.Mean(0.25, 1.0)))\n", + "# Same problem with pickling as above\n", + "from pyiron_contrib.tinybase.container import MDOutput\n", + "m.input.task = md.then(methodcaller('static_output', how=MDOutput.Mean(start=0.25, stop=1.0)))" ] }, { "cell_type": "code", - "execution_count": 103, + "execution_count": 69, "id": "132a228b-2703-4e23-a2a4-987ba5411872", "metadata": { "tags": [] }, "outputs": [], "source": [ - "m.input.structure = bulk(\"Fe\", cubic=True, a=1.2)" + "m.input.structure = bulk(\"Fe\", cubic=True, crystalstructure='fcc', a=1.385)" ] }, { "cell_type": "code", - "execution_count": 108, + "execution_count": 70, "id": "af1e3dba-a377-4403-8b61-4a5404ea1715", "metadata": { "tags": [] }, "outputs": [], "source": [ - "m.input.set_strain_range(.5, 50)" + "m.input.set_strain_range(.05, 5)" ] }, { "cell_type": "code", - "execution_count": 109, - "id": "05710eb5-3140-4cc7-a2d6-0e99f57b9cc3", + "execution_count": 71, + "id": "8a87284b-84ca-4f1d-ab81-37bfb9bf83e0", "metadata": { "scrolled": true, "tags": [] }, "outputs": [ { - "ename": "KeyboardInterrupt", - "evalue": "", - "output_type": "error", - "traceback": [ - "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", - "\u001b[0;31mKeyboardInterrupt\u001b[0m Traceback (most recent call last)", - "File \u001b[0;32m:3\u001b[0m\n", - "File \u001b[0;32m~/science/phd/dev/contrib/pyiron_contrib/tinybase/executor.py:141\u001b[0m, in \u001b[0;36mExecutionContext.wait\u001b[0;34m(self, until, timeout, sleep)\u001b[0m\n\u001b[1;32m 139\u001b[0m start \u001b[38;5;241m=\u001b[39m time\u001b[38;5;241m.\u001b[39mmonotonic()\n\u001b[1;32m 140\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m until \u001b[38;5;241m!=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_run_machine\u001b[38;5;241m.\u001b[39mstate \u001b[38;5;129;01mand\u001b[39;00m time\u001b[38;5;241m.\u001b[39mmonotonic() \u001b[38;5;241m-\u001b[39m start \u001b[38;5;241m<\u001b[39m timeout:\n\u001b[0;32m--> 141\u001b[0m \u001b[43mtime\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43msleep\u001b[49m\u001b[43m(\u001b[49m\u001b[43msleep\u001b[49m\u001b[43m)\u001b[49m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 369 ms, sys: 292 ms, total: 661 ms\n", + "Wall time: 2min 4s\n" ] } ], "source": [ "%%time\n", - "exe = process.submit([m])\n", + "exe = make_process(5).submit([m])\n", "exe.run()\n", + "\n", "exe.wait()\n", "output = exe.output[0]\n", "ret = exe.status[0]" @@ -1218,24 +1393,205 @@ }, { "cell_type": "code", - "execution_count": null, - "id": "a7602323-bb99-4245-8ce7-a52e670daafd", - "metadata": { - "tags": [] - }, + "execution_count": 72, + "id": "a3940d36-f4c1-460e-9544-079e6a4f71c9", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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uXPnzsces5onPq26Abt3Sd/KlSvF33//XXzrrbdEe3v7qjPT3333XTEiIqJq+8LCQtHb21t85ZVXxHPnzon79+8Xn3nmGXHy5MlV2yxYsEDcuXOnmJqaKp4/f15cvHixqFKpxOXLl9f7+GpLivn4I3O5akyKuZg3b564Y8cOMTU1VTx16pQ4ceJEUaVSiUeOHKn38dWWFPORmZkpOjg4iDNmzBBTUlLEbdu2iY0bNxb/+c9/1vv4akvKPythYWHimDFj6m0sxiDFfMydO1d0dHQUv//+ezEtLU3cuXOnGBAQII4ePbrex1dbUszH4cOHxU2bNompqanigQMHxL59+4otWrQQb9++Xd/Dq7Xazsc948ePF0NCQmo8ZkJCgqhUKsV//etf4vnz58V//etfvHz+aX311Veir6+vaG1tLT777LPi/v37q35vwoQJYnh4eLXtz58/L/br10+0tbUVvb29xbffflssKSmp+v3Zs2eLLVu2FG1sbERXV1exR48eYlxcXH0Np86MPR9/ZC5FSBSNPxdvvfWW2Lx5c9Ha2lr08PAQ+/fvLyYmJtbXcOpMiu+NxMREMSQkRFSr1aK/v784f/58Ua/X18dw6kyK+UhJSREBiDt37qyPIRiVsedDp9OJ8+bNEwMCAkQbGxvRx8dHjI6ONosf/KJo/PnYt2+f2LZtW1GtVotubm5iRESEmJWVVV/DqbPazsedO3dEW1tb8euvv37oMTds2CC2bt1atLKyEtu0aSNu2rSpVpkEUTThtUUiIiIiCVn8OUJERERkuViEiIiIyGKxCBEREZHFYhEiIiIii8UiRERERBaLRYiIiIgsFosQERERWSwWISIiIrJYLEJERERksViEiIiIyGKxCBEREZHFYhEiIiIii/X/AfIDtDC6NxVcAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "output.plot()" + ] + }, + { + "cell_type": "code", + "execution_count": 73, + "id": "0cf9e04e-8a57-4dd0-8d5e-dcd05142befa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "MurnaghanOutput(base_structure=Atoms(symbols='Fe4', pbc=True, cell=[1.385, 1.385, 1.385]), volumes=array([2.52390454, 2.59032308, 2.65674163, 2.72316017, 2.78957871]), energies=array([-26.99473018, -27.31430624, -27.44231513, -27.42907923,\n", + " -27.29935109]))" + ] + }, + "execution_count": 73, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "output" + ] + }, + { + "cell_type": "code", + "execution_count": 74, + "id": "dcbfb0da-3db5-4d57-b36d-4a4a48703c67", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "2.656743103964501" + ] + }, + "execution_count": 74, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "output.equilibrium_volume" + ] + }, + { + "cell_type": "markdown", + "id": "c80f8200-af0d-4d50-a049-a800f7c1941e", + "metadata": {}, + "source": [ + "## Thermal Expansion" + ] + }, + { + "cell_type": "code", + "execution_count": 75, + "id": "d8ebffdc-f5d4-4e45-90cc-1350608d65f8", + "metadata": {}, "outputs": [], "source": [ - "output.energies[:10]" + "from copy import deepcopy" ] }, { "cell_type": "code", - "execution_count": null, - "id": "a3940d36-f4c1-460e-9544-079e6a4f71c9", + "execution_count": 76, + "id": "87b3bd35-e8bd-460f-822c-6452139648e0", "metadata": {}, "outputs": [], "source": [ - "output.plot()" + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 77, + "id": "93d6721c-d82f-451d-954b-fc495b7bc103", + "metadata": {}, + "outputs": [], + "source": [ + "Ts = np.linspace(50, 450, 5)\n", + "ms = []\n", + "for T in Ts:\n", + " ms.append(deepcopy(m))\n", + " ms[-1].input.temperature = T" + ] + }, + { + "cell_type": "code", + "execution_count": 78, + "id": "f58f7c3f-c6e1-40c5-afc5-cbffde66d8a9", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([ 50., 150., 250., 350., 450.])" + ] + }, + "execution_count": 78, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Ts" + ] + }, + { + "cell_type": "code", + "execution_count": 79, + "id": "1fb4362c-0b33-48dd-be85-60bbf4d3130a", + "metadata": {}, + "outputs": [], + "source": [ + "exe = make_process(8).submit(ms)\n", + "exe.run()\n", + "exe.wait()" + ] + }, + { + "cell_type": "code", + "execution_count": 80, + "id": "7d3f992b-4c23-4ec5-8760-559013144647", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 80, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for T, o in zip(Ts, exe.output):\n", + " plt.plot(o.volumes, o.energies, label=T)\n", + "plt.legend()" + ] + }, + { + "cell_type": "code", + "execution_count": 84, + "id": "d684e7f0-b2cb-4edf-8130-3658454ddb4c", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 84, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAiwAAAGdCAYAAAAxCSikAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAA9hAAAPYQGoP6dpAABFPUlEQVR4nO3deXRTd34//LfkRd5k4U3eMWYx4AWaiQ0BHMIEYgiQGSad7A1Z299MbZopk/QXl+SZaWdxhk5pks4ztNMCbg9h6UlMysMWnAAmhJAQArGNwQbMYrDkFUteZcu6zx/2FQhvkhfde6X365x7TizdK3+/uU788X3fz/eqBEEQQERERCRjaqkHQERERDQSFixEREQkeyxYiIiISPZYsBAREZHssWAhIiIi2WPBQkRERLLHgoWIiIhkjwULERERyZ6v1AMYLzabDbW1tdBqtVCpVFIPh4iIiJwgCAJaW1sRFxcHtXro6ygeU7DU1tYiMTFR6mEQERHRKNTU1CAhIWHI9z2mYNFqtQD6JhwaGirxaIiIiMgZZrMZiYmJ9t/jQ/GYgkWMgUJDQ1mwEBERKcxIt3PwplsiIiKSPRYsREREJHssWIiIiEj2WLAQERGR7LFgISIiItljwUJERESyx4KFiIiIZI8FCxEREckeCxYiIiKSPRYsREREJHssWIiIiEj2WLAQERGR7LFgIY93+LwRxRV1Ug+DiIjGwGOe1kw0mJu3O/B/tp+BCsAXbz6MWF2g1EMiIqJR4BUW8mgHy4wQBMAmAAfKjFIPh4iIRokFC3m0fWUG+z/vL62VcCRERDQWLFjIY9U0d+C7mhaoVIBKBXx7owW3WjqlHhYREY0CCxbyWAf6r648kByBrCnhAICDd11xISIi5WDBQh5rf39xsnJOLFZlxAIA9pWyYCEiUiIWLOSRapo7UHrTBLUKWJEWg0fTY6BSAedqWnDzdofUwyMiIhexYCGPJF5deWBqBKK0GuhDAzDPHguxW4iISGlYsJBH2t8f/ayaE2t/bXX/P+/jfSxERIrDgoU8zvWmdpTduhMHiZanx0CtAr6raUFNM2MhIiIlYcFCHkeMgxZOi0REiMb+ul4bgPnJEQDudBAREZEysGAhjzNYHCQSX9vPgoWISFFcKlgKCgqQlZUFrVYLvV6PNWvWoLKycthjXnzxRahUqgFbWlqafZ//+I//wIMPPoiwsDCEhYVh2bJl+Prrr0c3I/JqVxvbcb7WDB+1CsvvioNEK/pjodKbJtxoYixERKQULhUsJSUlyM3NxalTp1BcXAyr1YqcnBy0t7cPecx7770Hg8Fg32pqahAeHo4nnnjCvs+xY8fwzDPP4OjRo/jyyy8xefJk5OTk4NatW6OfGXmlA/Y4KALhwf4D3o8M0WDBtL5YiFdZiIiUQyUIgjDagxsaGqDX61FSUoLFixc7dczHH3+Mxx9/HFevXkVSUtKg+/T29iIsLAx/+MMfsHbtWqc+12w2Q6fTwWQyITQ01Ok5kGd59L3PccFgxjuPZ+DpeZMH3eeDr65jw55ypMeHYt+6B908QiIiupuzv7/HdA+LyWQCAISHhzt9zJYtW7Bs2bIhixUA6OjoQE9Pz7Cfa7FYYDabHTbybtUNbbhgGDoOEq1I64uFym+Zcb1p6KuDREQkH6MuWARBwPr165GdnY309HSnjjEYDDh48CBeffXVYfd78803ER8fj2XLlg25T0FBAXQ6nX1LTEx0afzkecQ4aNH0SIQNEgeJIkI0WDgtEgBjISIipRh1wZKXl4fS0lLs3LnT6WMKCwsxadIkrFmzZsh9Nm7ciJ07d6KoqAgBAQFD7pefnw+TyWTfampqXBk+eSDxOUGrMwZ2B93L3i3EZwsRESnCqAqWdevWYe/evTh69CgSEhKcOkYQBGzduhXPP/88/P0H/+v397//PX7729/i8OHDmDNnzrCfp9FoEBoa6rCR97pc34aLxlb4qlXISYsecf/laTHwUatwvtaMq42MhYiI5M6lgkUQBOTl5aGoqAhHjhxBcnKy08eWlJTg8uXLeOWVVwZ9/5/+6Z/wq1/9CocOHUJmZqYrwyKyx0HZMyIxKWjoOEgUHuyPhdO4iBwRkVK4VLDk5uZi+/bt2LFjB7RaLYxGI4xGIzo7O+375OfnD9rZs2XLFsyfP3/Q+102btyIt956C1u3bsWUKVPsn9vW1jaKKZE3si8W50QcJLI/W4ixEBGR7LlUsGzevBkmkwlLlixBbGysfdu9e7d9H4PBgBs3bjgcZzKZ8NFHHw15deWPf/wjuru78eMf/9jhc3//+9+PYkrkbS7VtaKyrhV+PirkpA7dHXSvnNQY+KpVuGAw40oDi2MiIjnzdWVnZ5ZsKSwsHPCaTqdDR8fQq4peu3bNlWEQORA7fR6cEQVdkJ/Tx4UF+2PR9EiUVDXgQKkB65bOmKghEhHRGPFZQqR4Yhy00oU4SCRGSGxvJiKSNxYspGhVda24VN8GPx8VHkkduTvoXjlp0fBVq3DR2IrL9YyFiIjkigULKZp4dWXxjCjoAp2Pg0STgvyRPaNvETl2CxERyRcLFlIsQRDsUY64ENxo2GMhdgsREckWCxZSrKq6Nlyub4O/jxrLRhEHiXJSY+Dno0JlXSsu1bWO4wiJiGi8sGAhxdpfWgsAWJwShdAA1+MgkS7IDw/OiOr7TMZCRESyxIKFFEkQBOzrLy5WjyEOEjEWIiKSNxYspEgXja2obmiHv68aS2frx/x5y1Kj4e+jxqX6NlQxFiIikh0WLKRI4pWQJSlR0I4hDhLpAv3wYH+3EJfqJyKSHxYspDjj1R10L/Gz9pfWOrWqMxERuQ8LFlKcC4ZWXG0U46DRdwfdS4yFrjS0o6qOi8gREckJCxZSnP1lfd1B358ZhRCNS4/DGlZogB8Wp/R3C/V3IBERkTywYCFFEQTBfv/Kqjlx4/75YsfRvjIDYyEiIhlhwUKKcr7WjGtNHdD4qrF01ti7g+61dLYe/r5qVDe046KR3UJERHLBgoUURbzZ9uFZegSPYxwk0gb4YYk9FmK3EBGRXLBgIcVwjIPGrzvoXvZuIcZCRESywYKFFKP8lhk3mjsQ4KfGwxMQB4mWzo6GxleNq43tqDCYJ+z7EBGR81iwkGLs6+8OeniWHkH+4x8HiUI0vlgyk7EQEZGcsGAhRXCIgzLGvzvoXmIH0gHGQkREssCChRSh7JYJN293ItDPB9+fFTXh32/pLD00vmpca+rA+VrGQkREUmPBQoogXl15ePbExkGiYI2v/T4ZsTOJiIikw4KFZE8QBPsDCVdnTFx30L3uPFuIsRARkdRYsJDsfXfThFstnQjy98GSmRPXHXSvh2fpEeCnxo3mDpTfYixERCQlFiwke+JzfZbOjkagv4/bvm+Qvy+Wzup7uKLYoURERNJgwUKy5tgd5L44SMRYiIhIHliwkKydrWlBrakLwf4+9rVR3On7M/UI9PPBzdudKL1pcvv3JyKiPixYSNbEqytLZ0cjwM99cZAo0N8HD89mtxARkdRYsJBs2WwCDpZN/LODRiJ2JjEWIiKSDgsWkq2746CHUtwfB4mWzNQjyN8Ht1o68R1jISIiSbBgIdkS46BHUqWJg0SB/j5YOju6f0zsFiIikgILFpIlm03AAXscNPHPDhrJKsZCRESSYsFCsvTtjdswmrug1fjiwRmRUg8HS2ZGIdjfB7WmLpytaZF6OEREXocFC8nSPpnEQaIAPx8sSxVjIXYLERG5GwsWkh3HOEi67qB7ibHQgTIDbDbGQkRE7sSChWTnm+u3Ud9qgTbAF9kyiINEi1OiEKLxhcHUhbM1t6UeDhGRV2HBQrIjduI8khoNja/0cZAowM8Hy/oXkdvHWIiIyK1YsJCs9NoEHCw3AgBWyygOEokdSwfLjIyFiIjciAULyco315rvxEHTpVssbigPzoiEVuMLo7kL395gLERE5C4sWEhWxOf1LE+Lgb+v/H48A/x88Eh/txBjISIi95HfbwTyWr02AQfK+uIgOXUH3UscG7uFiIjcx6WCpaCgAFlZWdBqtdDr9VizZg0qKyuHPebFF1+ESqUasKWlpdn3OX/+PP78z/8cU6ZMgUqlwrvvvjuqyZCyfX21GY1tFugC/bBomny6g+6VPSMS2gBf1Lda8M11xkJERO7gUsFSUlKC3NxcnDp1CsXFxbBarcjJyUF7e/uQx7z33nswGAz2raamBuHh4XjiiSfs+3R0dGDq1Kl45513EBMTM/rZkKLtL+vrDlqeFi3LOEik8fVBTmrfzymfLURE5B6+rux86NAhh6+3bdsGvV6PM2fOYPHixYMeo9PpoNPp7F9//PHHuH37Nl566SX7a1lZWcjKygIAvPnmm64MiTyEtdeGQ+ViHCT9s4NGsnpOLD769iYOlBvx/zyWBh+1SuohERF5tDH9GWsymQAA4eHhTh+zZcsWLFu2DElJSWP51rBYLDCbzQ4bKVdfHNSNSUF+WDgtQurhjGjR9EiEBviiodWC09eapR4OEZHHG3XBIggC1q9fj+zsbKSnpzt1jMFgwMGDB/Hqq6+O9tvaFRQU2K/e6HQ6JCYmjvkzSTr7xO6g1Bj4+cg3DhL5+6qRkybGQuwWIiKaaKP+zZCXl4fS0lLs3LnT6WMKCwsxadIkrFmzZrTf1i4/Px8mk8m+1dTUjPkzSRrWXhs+KZd/d9C9xLEeLDeil91CREQTyqV7WETr1q3D3r17cfz4cSQkJDh1jCAI2Lp1K55//nn4+/uP5ts60Gg00Gg0Y/4ckt5XV5vR1N6NsCA/LFBAHCRaNC0SukA/NLZZ8PXVZkWNnYhIaVy6wiIIAvLy8lBUVIQjR44gOTnZ6WNLSkpw+fJlvPLKKy4PkjybuADbinRlxEEif181lqf1LSIndjgREdHEcOm3Q25uLrZv344dO3ZAq9XCaDTCaDSis7PTvk9+fj7Wrl074NgtW7Zg/vz5g97v0t3djXPnzuHcuXPo7u7GrVu3cO7cOVy+fHkUUyIl6esO6itYVmXIvzvoXmJH06FyI6y9NolHQ0TkuVwqWDZv3gyTyYQlS5YgNjbWvu3evdu+j8FgwI0bNxyOM5lM+Oijj4a8ulJbW4v77rsP9913HwwGA37/+9/jvvvuG5ebc0nevqxuwu2OHoQH++OBqc53m8nFwmkRmBTkh8a2bnx9ld1CREQTxaV7WARh5BsLCwsLB7ym0+nQ0dEx5DFTpkxx6rPJ8+y/Kw7yVVAcJPLzUWNFWgx2na7BvjIDFk6X7wq9RERKprzfEOQxenptOHS+rztodYZyuoPuJXYLMRYiIpo4LFhIMievNKGloweRIf6Yl6y8OEi0YGoEwoL80NzejVPVjIWIiCYCCxaSjPgcnuVpyoyDRL4+aqxI719Ejt1CREQTQrm/JUjRenpt+OR8HQBlLRY3FLHDibEQEdHEYMFCkvjiciNMnX1x0Pxk5S+49sDUcIQH++N2Rw++rG6SejhERB6HBQtJQuwOejQ91iOedOwQC/HZQkRE444FC7ldt9WGT84r79lBIxE7nQ6dN6KHsRAR0bhiwUJu98XlRpi7rIjSapA1RbndQfealxyOyBB/tHT04OQVxkJEROOJBQu5nfjsoJXpMR4RB4kcYyF2CxERjScWLORWFmsvDleIcZDynh00ErFb6JPzdei2MhYiIhovLFjIrU5cakRrlxV6rQaZSWFSD2fc9cVCGpg6e/DFlUaph0NE5DFYsJBbiR00KzNiofagOEjko1bhUXYLERGNOxYs5DYWay+KKzxnsbihiHM7fN7IWIiIaJywYCG3+byqEa0WK6JDNbh/sufFQaKsKeGI0mpg7rLii8uMhYiIxgMLFnKb/WWeHQeJfNQqrOyPhfYxFiIiGhcsWMgtunruxEGrPTgOEokdUIcrjLBYeyUeDRGR8rFgIbc4XtWANosVsboA3JfouXGQKDMpDHqtBq1dVpy4xFiIiGisWLCQW3hLHCRSq1VY2b9UP7uFiIjGjgULTbiunl586gXdQfcSo6/iijp09TAWIiIaCxYsNOGOVTagvbsX8ZMCcV/iJKmH4zbfmxyGmNAAtFqs+JyxEBHRmLBgoQknxkGPpsdApfL8OEikVqvwaAafLURENB5YsNCE6urpxWcXvC8OEomx0KcX6hkLERGNAQsWmlDHKuvR0R8H/ZkXxUGi+xLDEKsLQJvFiuNVDVIPh4hIsViw0IQSF05bNSfWq+IgkUO3UBm7hYiIRosFC02Yzu5efHahHgCwKsP74iCRGIV9ym4hIqJRY8FCE+ZoZT06e3qREBaIOQk6qYcjmfsSJyF+UiDau3txrJKxEBHRaLBgoQmz38vjIJFKpcJKsVuIsRAR0aiwYKEJ0dFtxWcX+58dlBEn8WikJz5b6LMLdejsZixEROQqFiw0IY5crEdXjw2Tw4OQHh8q9XAkNzdBh/hJgejo7sWxynqph0NEpDgsWGhCiHHQygzvjoNEKpXKfvPtPsZCREQuY8FC467dYsXR/qsIq71wsbihiJ1SRy7UMxYiInIRCxYad2IclBQRhLQ4xkGiOQk6JIQForOn117QERGRc1iw0LizdwcxDnJwdywk/jsiIiLnsGChcdV2Vxzkjc8OGonYMfXZxTp0dFslHg0RkXKwYKFx9dmFOlisNiRHBiM1lnHQvdLjQzE5PAhdPTYcuchYiIjIWSxYaFwxDhoeYyEiotFhwULjprWrB8f6n0jMOGho9m6hi/VotzAWIiJyBgsWGjefXahHt9WGqVHBmBWjlXo4spUWF4opEUGwWG34jLEQEZFTWLDQuNnHOMgpfc8WEmOhWolHQ0SkDC4VLAUFBcjKyoJWq4Ver8eaNWtQWVk57DEvvvgiVCrVgC0tLc1hv48++gipqanQaDRITU3Fnj17XJ8NSaa1qwfHGQc5Tfx3dKyyAW2MhYiIRuRSwVJSUoLc3FycOnUKxcXFsFqtyMnJQXt7+5DHvPfeezAYDPatpqYG4eHheOKJJ+z7fPnll3jqqafw/PPP47vvvsPzzz+PJ598El999dXoZ0Zu9emFOnT32jAtKhgzoxkHjSQ1NhTJkcF9sdCFOqmHQ0QkeypBEITRHtzQ0AC9Xo+SkhIsXrzYqWM+/vhjPP7447h69SqSkpIAAE899RTMZjMOHjxo32/FihUICwvDzp07nfpcs9kMnU4Hk8mE0FC207rbq/91Gp9eqMffLJ2B9Y+kSD0cRfj9J5X4w9HLyEmNxp/WZko9HCIiSTj7+3tM97CYTCYAQHh4uNPHbNmyBcuWLbMXK0DfFZacnByH/ZYvX46TJ0+OZXjkJqbOHhyvagTAZwe5wh4LVTWgtatH4tEQEcnbqAsWQRCwfv16ZGdnIz093aljDAYDDh48iFdffdXhdaPRiOjoaIfXoqOjYTQah/wsi8UCs9nssJE0Pq3oi4Nm6EOQwjjIabNitJgaFYxuqw2fXWC3EBHRcEZdsOTl5aG0tNTpyAYACgsLMWnSJKxZs2bAe/d2lQiCMGynSUFBAXQ6nX1LTEx0ehw0vvaX9XcH8eqKS1QqFVb3dwvt4yJyRETDGlXBsm7dOuzduxdHjx5FQkKCU8cIgoCtW7fi+eefh7+/v8N7MTExA66m1NfXD7jqcrf8/HyYTCb7VlNT4/pEaMxMHT34/FJ/d1AGCxZXrZrT92yh41UNMDMWIiIakksFiyAIyMvLQ1FREY4cOYLk5GSnjy0pKcHly5fxyiuvDHhvwYIFKC4udnjt8OHDWLhw4ZCfp9FoEBoa6rCR+x2uMKKnV8DMaC1mMA5yWUp0CKbrQ9Dda8OnFewWIiIaiksFS25uLrZv344dO3ZAq9XCaDTCaDSis7PTvk9+fj7Wrl074NgtW7Zg/vz5g97v8tprr+Hw4cP43e9+h4sXL+J3v/sdPv30U/zsZz9zfUbkVmIctJJXV0bFcRE5xkJERENxqWDZvHkzTCYTlixZgtjYWPu2e/du+z4GgwE3btxwOM5kMuGjjz4a9OoKACxcuBC7du3Ctm3bMGfOHBQWFmL37t2YP3/+KKZE7mLq6MGJS33dQavmxEg8GuUSO6s+v9QIUydjISKiwfi6srMzS7YUFhYOeE2n06Gjo2PY43784x/jxz/+sSvDIYl9UmGE1SZgVowW0/WMg0YrJVqLGfoQXKpvw6cVdfjz+527L4yIyJvwWUI0avvvenYQjY3YYSVGbERE5IgFC43K7fZufHG5Lw5ayXbmMROLvs8vNcDUwViIiOheLFhoVA73x0GzY0MxLSpE6uEo3oxoLWZGa9HTK+BwxdALJhIReSsWLDQq4kJnXIp//DAWIiIaGgsWcllzezdOXmkCwHbm8ST+uzxxqREtHd0Sj4aISF5YsJDLPjlvRK9NQFpcKJIjg6UejseYrg/BrBgtrDYBh89zETkioruxYCGXid1BvLoy/sSbb/cxFiIicsCChVzS1GbBl9V9cRDbmcef2HF18nIjbrczFiIiErFgIZd8cr4OvTYB6fGhmMI4aNxNiwrB7NjQvliI3UJERHYsWMgl+8tqAQCrMuIkHonnEjuv9vHZQkREdixYyGmNbRZ8eYVx0EQT7w06eaUJzYyFiIgAsGAhFxwqN8ImAHMSdJgcEST1cDxWcmQw0uJC0WsT8Ml5xkJERAALFnIBnx3kPvZF5BgLEREBYMFCTqpv7cJXV7lYnLusssdCjWhqs0g8GiIi6bFgIad80h8HzU2chMRwxkETLSkiGOnxobAJwCHGQkRELFjIOfvscVCMxCPxHmInFmMhIiIWLOSE+tYufH2tGQDjIHcSY6FT1U1oZCxERF6OBQuN6FC5EYIA/FniJCSEMQ5yl8kRQZiToOuLhcoZCxGRd2PBQiMS4yBxQTNyH/EqC2MhIvJ2LFhoWHXmLpzuj4MeZRzkdmIE99XVJtS3dkk8GiIi6bBgoWEdLDNAEIDvTZ6E+EmBUg/H6ySGB2Fu4iTYhL5OLSIib8WChYa1v6y/O2gOnx0kldUZfLYQERELFhqS0dSF09duAwBWsp1ZMo/2/7v/+loz6s2MhYjIO7FgoSEd6L+6kpkUhlgd4yCpJIQF4c8SJ0EQgIOMhYjIS7FgoSGJcRDXXpHeaj5biIi8HAsWGpTB1Ikz18U4iAWL1MQOrdPXm1HHWIiIvBALFhrUgbK+6CFrShhidAESj4biJwXie5P7Y6EyXmUhIu/DgoUGtb+0FsCdhctIemKn1n4WLETkhViw0AC3Wjrx7Y0WqFRcLE5OxE6t09duw2hiLERE3oUFCw0gRg5ZU8IRHco4SC5idYHITAoDcKeDi4jIW7BgoQH47CD5WiV2C7FgISIvw4KFHNQ0d+BcTV8ctCKdi8XJzaPpsVCpgDPXb6O2pVPq4RARuQ0LFnJwsLzvL/f5yeHQaxkHyU2MLoCxEBF5JRYs5EBcmIzdQfIlnhvGQkTkTViwkF1Ncwe+u2mCWgUsZxwkW49m9MVCZ2+04BZjISLyEixYyE6MGOYnRzAOkrHo0ABkTQkHwEXkiMh7sGAhOzFiWMXuINkTO7j28dlCROQlWLAQAOBGUwdK++MgdgfJ34r0GKhUwLmaFtQ0d0g9HCKiCceChQDcubqyYFoEIkM0Eo+GRqLXBmB+cn8sVM6rLETk+ViwEABgf5n47KA4iUdCzrI/W4ixEBF5AZcKloKCAmRlZUGr1UKv12PNmjWorKwc8TiLxYINGzYgKSkJGo0G06ZNw9atW+3v9/T04B//8R8xbdo0BAQEYO7cuTh06JDrs6FRudbYjvJbZvioVVieFi31cMhJK9JioFYB3900MRYiIo/nUsFSUlKC3NxcnDp1CsXFxbBarcjJyUF7e/uwxz355JP47LPPsGXLFlRWVmLnzp2YNWuW/f233noL//7v/45//dd/RUVFBX7yk5/gRz/6Ec6ePTu6WZFLxDho4bQIRDAOUoworQbzkyMAcE0WIvJ8KkEQhNEe3NDQAL1ej5KSEixevHjQfQ4dOoSnn34a1dXVCA8PH3SfuLg4bNiwAbm5ufbX1qxZg5CQEGzfvt2psZjNZuh0OphMJoSGhro+GS+28r3PUWEwo+DxDDwzb7LUwyEXbD91HW99XI6MeB3+v3XZUg+HiMhlzv7+HtM9LCaTCQCGLEQAYO/evcjMzMTGjRsRHx+PlJQUvP766+jsvLPglcViQUCA47ofgYGBOHHixJCfa7FYYDabHTZy3dXGdlQYxDiI3UFKsyK9LxYqu2XCjSbGQkTkuUZdsAiCgPXr1yM7Oxvp6elD7lddXY0TJ06gvLwce/bswbvvvosPP/zQ4WrK8uXLsWnTJly6dAk2mw3FxcX43//9XxgMQ1/mLigogE6ns2+JiYmjnYpXO3BXHBQe7C/xaMhVkSEaLJjGWIiIPN+oC5a8vDyUlpZi586dw+5ns9mgUqnwwQcfYN68eVi5ciU2bdqEwsJC+1WW9957DzNmzMCsWbPg7++PvLw8vPTSS/Dx8Rnyc/Pz82EymexbTU3NaKfi1cSFx1ZzsTjFEju7xE4vIiJPNKqCZd26ddi7dy+OHj2KhISEYfeNjY1FfHw8dDqd/bXZs2dDEATcvHkTABAVFYWPP/4Y7e3tuH79Oi5evIiQkBAkJycP+bkajQahoaEOG7nmSkMbLhjM8FWrkJPKOEiplqdFw0etQvktM641Dn8DPBGRUrlUsAiCgLy8PBQVFeHIkSPDFhSiRYsWoba2Fm1tbfbXqqqqoFarBxQ7AQEBiI+Ph9VqxUcffYQf/vCHrgyPXHSg/+rKoumRCGMcpFgRIRosZCxERB7OpYIlNzcX27dvx44dO6DVamE0GmE0Gh1uoM3Pz8fatWvtXz/77LOIiIjASy+9hIqKChw/fhxvvPEGXn75ZQQGBgIAvvrqKxQVFaG6uhqff/45VqxYAZvNhr/7u78bp2nSYPjsIM+xKqPvHHIROSLyVC4VLJs3b4bJZMKSJUsQGxtr33bv3m3fx2Aw4MaNG/avQ0JCUFxcjJaWFmRmZuK5557DY489hvfff9++T1dXF9566y2kpqbiRz/6EeLj43HixAlMmjRp7DOkQV2ub8VFYyv8fFRYzjhI8ZanxcBHrUKFwYzqhraRDyAiUhhfV3Z2ZsmWwsLCAa/NmjULxcXFQx7z0EMPoaKiwpWh0BjtLzUCALKnR0IX5CfxaGiswoL9sXBaBD6/1IgDZQbkPTxD6iEREY0rPkvIS4kdJSszGAd5CrHTax9jISLyQCxYvNClulZU1bXBz4fdQZ4kJzUGvmoVLhpbcYWxEBF5GBYsXki82fbBGVGMgzxIWLA/Fk2PBHCnA4yIyFOwYPFCYifJKsZBHkfs+GJ7MxF5GhYsXqaqrhWX6tvg76PGstRoqYdD42x5agz8fPpiocv1rVIPh4ho3LBg8TLiDZmLUyKhC2Qc5Gl0QX7I7o+FxE4wIiJPwILFiwiCgP2lfd1BXCzOc62aw2cLEZHnYcHiRSrrWnGloR3+vmosm804yFM9khoNPx8VquraUFXHWIiIPAMLFi8i3mz7UEoUtAGMgzyVLtAPD86IAsCl+onIc7Bg8RJ9cRC7g7yFeI4PsFuIiDwECxYvcdHYiurGvjho6Wy91MOhCbYsNRr+PmpcqmcsRESegQWLlxCvrixhHOQVdIF+WJzS1y3EpfqJyBOwYPECgiDYFxJjd5D3sC8iV1rr1INLiYjkjAWLF6gwmHG1sR0aXzWWsjvIayybHQ1/XzWuNLSjkrEQESkcCxYvIMZB35+pR4jGV+LRkLtoA/zwUAq7hYjIM7Bg8XCMg7zbanssZGAsRESKxoLFw52vNeN6UwcC/NR4eBa7g7zN0v5YqLqxHRcMjIWISLlYsHi4fXfFQcGMg7xOiMYXS8RYiEv1E5GCsWDxYH1xEJ8d5O3Ec3+gzMhYiIgUiwWLByu/ZUZNcyfjIC+3dHY0NL5qXG1sR4XBLPVwiIhGhQWLB9vXf3Vl6axoBPkzDvJWIRpffH9mX8HKbiEiUioWLB7K4dlBjIO8nn0RuTJ2CxGRMrFg8VClN024ebsTgX4+9r+uyXs9PEuPAD81rjd14HwtYyEiUh4WLB5KXHtl6Ww9Av19JB4NSS1Y42u/j4nPFiIiJWLB4oHujoNWMw6ifqsy4gD0tTczFiIipWHB4oHO1bTgVksngvx9sIRxEPX7/qwoBPr5oKa5E2W3TFIPh4jIJSxYPJB4dWXp7GgE+DEOoj5B/ndiIXYLEZHSsGDxMDabgAPis4MyGAeRI3YLEZFSsWDxMOdutqDW1IVgfx8smRkl9XBIZr4/U49APx/cvN2J0puMhYhIOViweBjxUv+yVMZBNFCgvw+Wzu6PhcoYCxGRcrBg8SCMg8gZYufY/lLGQkSkHCxYPMjZmtswmLoQovHF4hTGQTS4JTP1CPL3wa2WTpyraZF6OERETmHB4kHEBcEeYRxEwwjw88Gy2dEA2C1ERMrBgsVDMA4iV4jdQgfKDLDZGAsRkfyxYPEQZ27cRp3ZAq3GFw+mREo9HJK5h1KiEOzvg1pTF84yFiIiBWDB4iH23xUHaXwZB9HwAvx8sCyVsRARKQcLFg/gEAfx2UHkJDE6PFjOWIiI5I8Fiwf45vpt1LdaoA3wRfYMxkHknMUpUQjR+MJg6sLZmttSD4eIaFgsWDzA/tJaAEBOagzjIHJagJ8PHumPhfYxFiIimWPBonC9NgEHyo0A7iwIRuQsMRZitxARyZ1LBUtBQQGysrKg1Wqh1+uxZs0aVFZWjnicxWLBhg0bkJSUBI1Gg2nTpmHr1q0O+7z77ruYOXMmAgMDkZiYiL/9279FV1eXa7PxQqevNaOh1YLQAF8sms44iFzzYEoktBpf1JktOHODsRARyZevKzuXlJQgNzcXWVlZsFqt2LBhA3JyclBRUYHg4OAhj3vyySdRV1eHLVu2YPr06aivr4fVarW//8EHH+DNN9/E1q1bsXDhQlRVVeHFF18EAPzLv/zL6GbmJcQOj+VpMfD35QUzco3G1wePpEWj6Ntb2F9qQNaUcKmHREQ0KJcKlkOHDjl8vW3bNuj1epw5cwaLFy8e8piSkhJUV1cjPLzvf4ZTpkxx2OfLL7/EokWL8Oyzz9rff+aZZ/D111+7Mjyv02sTcLCc3UE0NqvnxKLo21s4UGbA26tT4aNWST0kIqIBxvQnucnU93h6sRAZzN69e5GZmYmNGzciPj4eKSkpeP3119HZ2WnfJzs7G2fOnLEXKNXV1Thw4ABWrVo15OdaLBaYzWaHzdt8dbUJjW3d0AX6MQ6iUcueHgVtgC/qWy345lqz1MMhIhqUS1dY7iYIAtavX4/s7Gykp6cPuV91dTVOnDiBgIAA7NmzB42Njfjrv/5rNDc32+9jefrpp9HQ0IDs7GwIggCr1Yqf/vSnePPNN4f83IKCAvzDP/zDaIfvEe7EQdHw82EcRKPj76tGTmoMPvr2JvaXGTB/aoTUQyIiGmDUv+Xy8vJQWlqKnTt3DrufzWaDSqXCBx98gHnz5mHlypXYtGkTCgsL7VdZjh07ht/85jf44x//iG+//RZFRUXYt28ffvWrXw35ufn5+TCZTPatpqZmtFNRJGuvDYf6u4NWzYmTeDSkdGKH2cFyI3rZLUREMjSqKyzr1q3D3r17cfz4cSQkJAy7b2xsLOLj46HT6eyvzZ49G4Ig4ObNm5gxYwbefvttPP/883j11VcBABkZGWhvb8df/dVfYcOGDVCrB9ZVGo0GGo1mNMP3CF9fbUZTezcmBflh4TT+RUxjs2h6JEIDfNHQasHpa814gFdZiEhmXLrCIggC8vLyUFRUhCNHjiA5OXnEYxYtWoTa2lq0tbXZX6uqqoJarbYXOx0dHQOKEh8fHwiCAEHgX3uD2de/FP+KtBjGQTRm/r5qLE+LAcBnCxGRPLn0my43Nxfbt2/Hjh07oNVqYTQaYTQaHW6gzc/Px9q1a+1fP/vss4iIiMBLL72EiooKHD9+HG+88QZefvllBAYGAgAee+wxbN68Gbt27cLVq1dRXFyMt99+Gz/4wQ/g48OVW+/lGAexO4jGx6o5d54txFiIiOTGpUho8+bNAIAlS5Y4vL5t2zb7uikGgwE3btywvxcSEoLi4mKsW7cOmZmZiIiIwJNPPolf//rX9n3eeustqFQqvPXWW7h16xaioqLw2GOP4Te/+c0op+XZTlU3o7m9G2FBfljAS/c0ThZNj4Qu0A+Nbd346moTFk5j5xkRyYdK8JDMxWw2Q6fTwWQyITQ0VOrhTKj8olLs/LoGz8ybjILHM6QeDnmQ//thKXZ/U4Pn5k/Gb37Eny0imnjO/v7mzQ8K03NXHMRnB9F4E2OhQ+VGWHttEo+GiOgOFiwK8+WVJtzu6EFEsD/mJ3MZdRpfC6ZFICzID03t3fjqKheRIyL5YMGiMPbF4tJj4MvuIBpnfj53uoX2sVuIiGSEv/EUpKfXhk8q+uOgDMZBNDHEWOiT84yFiEg+WLAoyMkrTWjp6EFkiD/mMQ6iCbJgal8s1NzejVPVjIWISB5YsCjI/tJaAMAKxkE0gXx91FiR3neVZX9ZrcSjISLqw996CtFtteGT83UAgFUZfHYQTazVd3UL9TAWIiIZYMGiEF9caYSpsweRIRrGQTTh5ieHIyLYH7c7evDllSaph0NExIJFKcTuoJUZMfBRqyQeDXm6vliIzxYiIvlgwaIAfXFQ/7OD2B1EbmJfRO48YyEikh4LFgU4cbkBrV1W6LUaZE5hHETuMT85ApEh/jB19uCLy41SD4eIvBwLFgUQF/B6NJ1xELmPj1rFWIiIZIMFi8xZrL0orujvDprD7iByL7Ej7XBFHbqtjIWISDosWGTuxKXGO3FQUpjUwyEvMy85HJEhmr5Y6ApjISKSDgsWmbvTHRQLNeMgcjMftQorMxgLEZH0WLDIWFfPnThIXMiLyN3EzrRPzhsZCxGRZFiwyNjnlxrRarEiJjQA35vMOIikkTklHHqtBq1dVpy43CD1cIjIS7FgkTHx2UGMg0hKfbFQ31WWfYyFiEgiLFhk6u44aBXjIJKY+DNYfL4OFmuvxKMhIm/EgkWmSqoa0N7dizhdAO5LnCT1cMjL3T85DNGhGrRarPi8it1CROR+LFhkSuzIeJRxEMmAWq3Co+l9V1n2lzEWIiL3Y8EiQ109vfjsAuMgkhexU+3Tijp09TAWIiL3YsEiQ8cq++Kg+EmBjININr43OQwxoQF9sdAlxkJE5F4sWGRIvOS+MiMGKhXjIJIH9V3dQmIHGxGRu7BgkZnO7rvjID47iOTF3i3EWIiI3IwFi8wcq6xHR38cNDdBJ/VwiBzclzgJcboAtHf3oqSKi8gRkfuwYJGZff1x0Oo5sYyDSHYcYyF2CxGR+7BgkZGObiuOXKgHwO4gki/xZ/PTC4yFiMh9WLDIyNGLDejs6UVieCAy4hkHkTz9WeIkxE8KREd3L45V1ks9HCLyEixYZGR/2Z1nBzEOIrlSqVRYmREDgM8WIiL3YcEiEx3dVhy52PfX6uoMdgeRvIkdbEcu1qOzm7EQEU08FiwyceRiPbp6bJgcHoT0+FCph0M0rLkJOsZCRORWLFhkQuy4WMXuIFIAlUplX6p/H58tRERuwIJFBtotd+KgVRnsDiJlELuFjlyoR0e3VeLREJGnY8EiA59drIfFasOUiCCkxTEOImXIiNchMTwQnT29OHqRi8gR0cRiwSID4nNZGAeRkqhUKqzqv0Fc7HAjIpooLFgk1max4mhl31+nq9gdRAoj3sdy5GI92i2MhYho4rBgkdhnF+rQbbVhamQwZsdqpR4OkUvS4kIxOTwIXT02+31YREQTgQWLxMSFt7hYHCmRSqWy33zLZwsR0URyqWApKChAVlYWtFot9Ho91qxZg8rKyhGPs1gs2LBhA5KSkqDRaDBt2jRs3brV/v6SJUugUqkGbKtWrXJ9RgrS2tVjf+Itnx1ESiV2th2tZCxERBPH15WdS0pKkJubi6ysLFitVmzYsAE5OTmoqKhAcHDwkMc9+eSTqKurw5YtWzB9+nTU19fDar3zP7aioiJ0d3fbv25qasLcuXPxxBNPjGJKyvHZhfq+OCgqGLNiGAeRMqXFhWJKRBCuNXXgs4v1+MFc3otFROPPpYLl0KFDDl9v27YNer0eZ86cweLFi4c8pqSkBNXV1QgPDwcATJkyxWEf8XXRrl27EBQU5PEFixgHrWYcRAomxkL/79Er2F9ay4KFiCbEmO5hMZlMAAYWHHfbu3cvMjMzsXHjRsTHxyMlJQWvv/46Ojs7hzxmy5YtePrpp4e9amOxWGA2mx02JTF39eC4PQ7i/+BJ2cQOt6OVDWhjLEREE2DUBYsgCFi/fj2ys7ORnp4+5H7V1dU4ceIEysvLsWfPHrz77rv48MMPkZubO+j+X3/9NcrLy/Hqq68O+/0LCgqg0+nsW2Ji4minIolPK+rQ3WvDdH0IUqJDpB4O0ZjMjtViamQwuq02fHahTurhEJEHGnXBkpeXh9LSUuzcuXPY/Ww2G1QqFT744APMmzcPK1euxKZNm1BYWDjoVZYtW7YgPT0d8+bNG/Zz8/PzYTKZ7FtNTc1opyIJ+7ODGAeRB7i7W2gfu4WIaAKMqmBZt24d9u7di6NHjyIhIWHYfWNjYxEfHw+dTmd/bfbs2RAEATdv3nTYt6OjA7t27Rrx6goAaDQahIaGOmxKYerswfFL7A4izyL+LJdUNqC1q0fi0RCRp3GpYBEEAXl5eSgqKsKRI0eQnJw84jGLFi1CbW0t2tra7K9VVVVBrVYPKHb+53/+BxaLBX/xF3/hyrAUp7iiDj29AlKiQ5ASze4g8gwzo7WYGhWM7l4bPmUsRETjzKWCJTc3F9u3b8eOHTug1WphNBphNBodop38/HysXbvW/vWzzz6LiIgIvPTSS6ioqMDx48fxxhtv4OWXX0ZgYKDD52/ZsgVr1qxBRETEGKclb+Kzg1byyczkQVQqFVZncBE5IpoYLhUsmzdvhslkwpIlSxAbG2vfdu/ebd/HYDDgxo0b9q9DQkJQXFyMlpYWZGZm4rnnnsNjjz2G999/3+Gzq6qqcOLECbzyyitjnJK8mTp6cOJyI4A7C24ReQqx4+14VSPMjIWIaBy5tA6LIAgj7lNYWDjgtVmzZqG4uHjY41JSUpz6fKU7XGFET6+AmdFazGAcRB4mJToE0/UhuFzfhk8r6vD494a/x42IyFl8lpCb7S/r7w7izbbkgVQqlf3KIWMhIhpPLFjcqKWjGycu9cVBvH+FPJVYjB+/1ABTJ2MhIhofLFjc6PD5OlhtAmbFaDFdz8XiyDOlRGuREh2Cnl4BxRXsFiKi8cGCxY329cdBqxkHkYcTl+oXO+KIiMaKBYub3G7vxheXGQeRd1g1JwYA8PmlRpg6GAsR0dixYHGTT84b0WsTkBobiqlRjIPIs03XazEzWgurTcAnFUaph0NEHoAFi5uwO4i8jfizzm4hIhoPLFjcoLm9GyevNAFgHETeQ/xZ/+JyI1o6uiUeDREpHQsWNxDjoLS4UCRHBks9HCK3mK4PwayYvljo8Hl2CxHR2LBgcQPxkjjjIPI2Ykec2CFHRDRaLFgmWFObBSev8NlB5J3ujoVutzMWIqLRY8EywQ6dN8ImABnxOiRFMA4i7zI1KgSpsaHotQn45Dy7hYho9FiwTDDGQeTt7N1CjIWIaAxYsEyghlYLTlX3dQcxDiJvJf7sn7zShKY2i8SjISKlYsEygcQ4aG6CDonhQVIPh0gSUyKDkRYnxkLsFiKi0WHBMoHE56hw7RXydndiIT5biIhGhwXLBKlv7cLXV5sBsGAhEmOhLxkLEdEosWCZIJ+U98dBiZMYB5HXS4oIRka8DjahLyolInIVC5YJsq+/O2g1r64QAeCzhYhobFiwTIB6cxe+vtYXBz2aESPxaIjkQYyFTlU3oaGVsRARuYYFywQ4WG6EIAD3TZ6EhDDGQUQAkBgehLkJjIWIaHRYsEwA+2JxjIOIHNyJhdgtRESuYcEyzoymLpy+zu4gosGI/018dbUZ9a1dEo+GiJSEBcs4O1hugCAA9yeFIW5SoNTDIZKVhLAgzE2cBEEADpUzFiIi57FgGWdiHMSrK0SDEzvn9rFbiIhcwIJlHBlNXfjm+m0AwEp2BxENSuycO32tGfVmxkJE5BwWLOPoQP/TaDOTwhCrYxxENJiEsCDcN7kvFjrIWIiInMSCZRzt7y9YxE4IIhqc2EHHReSIyFksWMZJbUsnzly/DZUKeDSdBQvRcMR7vE5fb4bRxFiIiEbGgmWciHFQVlI4YnQBEo+GSN7iJgXi/qSw/liIV1mIaGQsWMYJ4yAi1zAWIiJXsGAZBzdvd+DsjZb+OIjdQUTOEGOhb67fhsHUKfFoiEjuWLCMg4NlfZ0O86aEQx/KOIjIGTG6AGQmhQEADpSxW4iIhseCZRzsYxxENCp8thAROYsFyxjVNHfgu5q+OGgF4yAilzyaHguVCvj2RgtqWxgLEdHQWLCMkdjhMD85HHot4yAiV8ToApCVFA7gTqcdEdFgWLCMkdjhsGpOnMQjIVImeyzEgoWIhsGCZQxqmjvw3U0T1CpgRRrjIKLReDQ9BioVcPZGC27e7pB6OEQkUyxYxkD8i/CBqRGI0mokHg2RMulDAzBvSl8sdJDdQkQ0BBYsY3AnDmJ3ENFYrO7/b2gfYyEiGoJLBUtBQQGysrKg1Wqh1+uxZs0aVFZWjnicxWLBhg0bkJSUBI1Gg2nTpmHr1q0O+7S0tCA3NxexsbEICAjA7NmzceDAAddm40bXm9pRdotxENF4WJ4eA7UK+K6mBTXNjIWIaCBfV3YuKSlBbm4usrKyYLVasWHDBuTk5KCiogLBwcFDHvfkk0+irq4OW7ZswfTp01FfXw+r1Wp/v7u7G4888gj0ej0+/PBDJCQkoKamBlqtdvQzm2BiHLRwWiQiQhgHEY2FXhuAecnhOFXdjANlBvyfh6ZJPSQikhmXCpZDhw45fL1t2zbo9XqcOXMGixcvHvKYkpISVFdXIzy8L6eeMmWKwz5bt25Fc3MzTp48CT8/PwBAUlKSK0NzOzEOEpcXJ6KxWTUnjgULEQ1pTPewmEwmALAXIoPZu3cvMjMzsXHjRsTHxyMlJQWvv/46Ojs7HfZZsGABcnNzER0djfT0dPz2t79Fb2/vkJ9rsVhgNpsdNne51tiO87Vm+KhVWJ4W7bbvS+TJVqT1x0I3TYyFiGiAURcsgiBg/fr1yM7ORnp6+pD7VVdX48SJEygvL8eePXvw7rvv4sMPP0Rubq7DPh9++CF6e3tx4MABvPXWW/jnf/5n/OY3vxnycwsKCqDT6exbYmLiaKfisjtxUATjIKJxEqXV4IGpEQC4JgsRDTTqgiUvLw+lpaXYuXPnsPvZbDaoVCp88MEHmDdvHlauXIlNmzahsLDQfpXFZrNBr9fjT3/6E+6//348/fTT2LBhAzZv3jzk5+bn58NkMtm3mpqa0U7FZfbuIMZBROPqzrOFWLAQkaNRFSzr1q3D3r17cfToUSQkJAy7b2xsLOLj46HT6eyvzZ49G4Ig4ObNm/Z9UlJS4OPj47CP0WhEd3f3oJ+r0WgQGhrqsLlDdUMbKgxiHMTuIKLxJMZCZbdMuN7ULvVwiEhGXCpYBEFAXl4eioqKcOTIESQnJ494zKJFi1BbW4u2tjb7a1VVVVCr1fZiZ9GiRbh8+TJsNpvDPrGxsfD393dliBNOfN7JoumRCAuW19iIlC4iRIOF0yIBMBYiIkcuFSy5ubnYvn07duzYAa1WC6PRCKPR6HADbX5+PtauXWv/+tlnn0VERAReeuklVFRU4Pjx43jjjTfw8ssvIzAwEADw05/+FE1NTXjttddQVVWF/fv347e//a3DfS5ysa//UvVqxkFEE4KxEBENxqWCZfPmzTCZTFiyZAliY2Pt2+7du+37GAwG3Lhxw/51SEgIiouL0dLSgszMTDz33HN47LHH8P7779v3SUxMxOHDh3H69GnMmTMHf/M3f4PXXnsNb7755jhMcfxcrm/DRWMrfNUq5LA7iGhCLE+LgY9ahfO1ZlxtZCxERH1cWodFEIQR9yksLBzw2qxZs1BcXDzscQsWLMCpU6dcGY7biXFQ9oxITApiHEQ0EcKD/bFwWgQ+v9SIA2UG5H5/utRDIiIZ4LOEXMDF4ojcQ+zAYyxERCIWLE66XN+KyrpW+PmosDyV3UFEE0mMhSoMZlQ3tI18ABF5PBYsTtpf2vfY++zpkdAF+Uk8GiLPFhbsj0XT+7qFDrBbiIjAgsVp+8tqAfQ974SIJp7YibePsRARgQWLU6rqWlFV1wY/HxUeSWV3EJE75KRFw1etwkVjKy7XMxYi8nYsWJwg3vi3eEYUdIGMg4jcYVKQP7JnMBYioj4sWEYgCIJ9xU1xQSsicg92CxGRiAXLCKrq2nC5vg3+PmosYxxE5FY5qTHw81Ghsq4Vl+papR4OEUnIpYXjvNH+0r6bbRenRCE0gHEQkTvpgvyQPT0SRysb8Pb/lmNWjHsecko0Gs4srjqu38+t363PXz44FYnhQRJ8ZxYswxIEAfvscRDXXiGSwmNz43C0sgGnqptxqrpZ6uEQebU198WzYJEjQQD+74pZOFhmwLLZjIOIpPDDP4uHubMHjW3dUg+FxkCAABVUUg9jUCp5DkuW/7ZiQgMk+94qwd3XsCaI2WyGTqeDyWRCaCgvGxMRESmBs7+/edMtERERyR4LFiIiIpI9FixEREQkeyxYiIiISPZYsBAREZHssWAhIiIi2WPBQkRERLLHgoWIiIhkjwULERERyR4LFiIiIpI9FixEREQkeyxYiIiISPZYsBAREZHs+Uo9gPEiPnTabDZLPBIiIiJylvh7W/w9PhSPKVhaW1sBAImJiRKPhIiIiFzV2toKnU435PsqYaSSRiFsNhtqa2uh1WqhUqnG7XPNZjMSExNRU1OD0NDQcftcOfH0OXJ+yufpc+T8lM/T5ziR8xMEAa2trYiLi4NaPfSdKh5zhUWtViMhIWHCPj80NNQjfwjv5ulz5PyUz9PnyPkpn6fPcaLmN9yVFRFvuiUiIiLZY8FCREREsseCZQQajQa/+MUvoNFopB7KhPH0OXJ+yufpc+T8lM/T5yiH+XnMTbdERETkuXiFhYiIiGSPBQsRERHJHgsWIiIikj0WLERERCR7LFgA/PKXv4RKpXLYYmJi7O8LgoBf/vKXiIuLQ2BgIJYsWYLz589LOOKRHT9+HI899hji4uKgUqnw8ccfO7zvzJwsFgvWrVuHyMhIBAcH4wc/+AFu3rzpxlkMbaT5vfjiiwPO6QMPPOCwj5znV1BQgKysLGi1Wuj1eqxZswaVlZUO+yj5HDozP6Wfw82bN2POnDn2hbYWLFiAgwcP2t9X8vkDRp6f0s/fvQoKCqBSqfCzn/3M/prSz+G9BpujnM4jC5Z+aWlpMBgM9q2srMz+3saNG7Fp0yb84Q9/wOnTpxETE4NHHnnE/vwiOWpvb8fcuXPxhz/8YdD3nZnTz372M+zZswe7du3CiRMn0NbWhtWrV6O3t9dd0xjSSPMDgBUrVjic0wMHDji8L+f5lZSUIDc3F6dOnUJxcTGsVitycnLQ3t5u30fJ59CZ+QHKPocJCQl455138M033+Cbb77Bww8/jB/+8If2X2hKPn/AyPMDlH3+7nb69Gn86U9/wpw5cxxeV/o5vNtQcwRkdB4FEn7xi18Ic+fOHfQ9m80mxMTECO+88479ta6uLkGn0wn/9m//5qYRjg0AYc+ePfavnZlTS0uL4OfnJ+zatcu+z61btwS1Wi0cOnTIbWN3xr3zEwRBeOGFF4Qf/vCHQx6jpPkJgiDU19cLAISSkhJBEDzvHN47P0HwvHMoCIIQFhYm/Od//qfHnT+ROD9B8Jzz19raKsyYMUMoLi4WHnroIeG1114TBMGz/hscao6CIK/zyCss/S5duoS4uDgkJyfj6aefRnV1NQDg6tWrMBqNyMnJse+r0Wjw0EMP4eTJk1INd0ycmdOZM2fQ09PjsE9cXBzS09MVM+9jx45Br9cjJSUFf/mXf4n6+nr7e0qbn8lkAgCEh4cD8LxzeO/8RJ5yDnt7e7Fr1y60t7djwYIFHnf+7p2fyBPOX25uLlatWoVly5Y5vO5J53CoOYrkch495uGHYzF//nz893//N1JSUlBXV4df//rXWLhwIc6fPw+j0QgAiI6OdjgmOjoa169fl2K4Y+bMnIxGI/z9/REWFjZgH/F4OXv00UfxxBNPICkpCVevXsXbb7+Nhx9+GGfOnIFGo1HU/ARBwPr165GdnY309HQAnnUOB5sf4BnnsKysDAsWLEBXVxdCQkKwZ88epKam2v9HrvTzN9T8AM84f7t27cK3336L06dPD3jPU/4bHG6OgLzOIwsW9J0QUUZGBhYsWIBp06bhv/7rv+w3F6lUKodjBEEY8JrSjGZOSpn3U089Zf/n9PR0ZGZmIikpCfv378fjjz8+5HFynF9eXh5KS0tx4sSJAe95wjkcan6ecA5nzpyJc+fOoaWlBR999BFeeOEFlJSU2N9X+vkban6pqamKP381NTV47bXXcPjwYQQEBAy5n5LPoTNzlNN5ZCQ0iODgYGRkZODSpUv2bqF7K8X6+voBlbVSODOnmJgYdHd34/bt20PuoySxsbFISkrCpUuXAChnfuvWrcPevXtx9OhRJCQk2F/3lHM41PwGo8Rz6O/vj+nTpyMzMxMFBQWYO3cu3nvvPY85f0PNbzBKO39nzpxBfX097r//fvj6+sLX1xclJSV4//334evrax+jks/hSHMc7KZZKc8jC5ZBWCwWXLhwAbGxsUhOTkZMTAyKi4vt73d3d6OkpAQLFy6UcJSj58yc7r//fvj5+TnsYzAYUF5ersh5NzU1oaamBrGxsQDkPz9BEJCXl4eioiIcOXIEycnJDu8r/RyONL/BKO0cDkYQBFgsFsWfv6GI8xuM0s7f0qVLUVZWhnPnztm3zMxMPPfcczh37hymTp2q+HM40hx9fHwGHCPpeRzXW3gV6uc//7lw7Ngxobq6Wjh16pSwevVqQavVCteuXRMEQRDeeecdQafTCUVFRUJZWZnwzDPPCLGxsYLZbJZ45ENrbW0Vzp49K5w9e1YAIGzatEk4e/ascP36dUEQnJvTT37yEyEhIUH49NNPhW+//VZ4+OGHhblz5wpWq1WqadkNN7/W1lbh5z//uXDy5Enh6tWrwtGjR4UFCxYI8fHxipnfT3/6U0Gn0wnHjh0TDAaDfevo6LDvo+RzONL8POEc5ufnC8ePHxeuXr0qlJaWCn//938vqNVq4fDhw4IgKPv8CcLw8/OE8zeYeztolH4OB3P3HOV2HlmwCILw1FNPCbGxsYKfn58QFxcnPP7448L58+ft79tsNuEXv/iFEBMTI2g0GmHx4sVCWVmZhCMe2dGjRwUAA7YXXnhBEATn5tTZ2Snk5eUJ4eHhQmBgoLB69Wrhxo0bEsxmoOHm19HRIeTk5AhRUVGCn5+fMHnyZOGFF14YMHY5z2+wuQEQtm3bZt9HyedwpPl5wjl8+eWXhaSkJMHf31+IiooSli5dai9WBEHZ508Qhp+fJ5y/wdxbsCj9HA7m7jnK7TyqBEEQxveaDREREdH44j0sREREJHssWIiIiEj2WLAQERGR7LFgISIiItljwUJERESyx4KFiIiIZI8FCxEREckeCxYiIiKSPRYsREREJHssWIiIiEj2WLAQERGR7LFgISIiItn7/wE053BwoKOAXwAAAABJRU5ErkJggg==", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.plot(Ts, [o.equilibrium_volume for o in exe.output])" ] } ], diff --git a/notebooks/tinybase/Basic.ipynb b/notebooks/tinybase/Basic.ipynb index 08d2862a9..a7134dfbb 100644 --- a/notebooks/tinybase/Basic.ipynb +++ b/notebooks/tinybase/Basic.ipynb @@ -18,14 +18,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/ponder/science/phd/dev/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", + "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "10441339d81d4221949e9f6bdc996597", + "model_id": "92ea51941b1449efb837e69617ef6c97", "version_major": 2, "version_minor": 0 }, @@ -71,7 +71,7 @@ }, { "cell_type": "code", - "execution_count": 70, + "execution_count": 5, "id": "7ff37ff5-8247-4f2c-a175-6063b37ac0be", "metadata": {}, "outputs": [], @@ -82,7 +82,7 @@ }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 6, "id": "88b1b600-28e0-4ad9-82d6-b2bd993efbda", "metadata": {}, "outputs": [], @@ -93,7 +93,7 @@ }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 7, "id": "e3d8cf33-1f39-4ef9-b92c-2dfd43cf4dd3", "metadata": {}, "outputs": [], @@ -119,7 +119,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "id": "9f2f3102-d15c-470a-b38c-f8084c9535ec", "metadata": {}, "outputs": [], @@ -137,7 +137,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 9, "id": "e125f49c-257b-4a24-bc81-83fe345d1dcf", "metadata": {}, "outputs": [], @@ -147,7 +147,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 10, "id": "6c1f5af7-f5e9-41d9-a849-bab0ebc7dd9f", "metadata": {}, "outputs": [ @@ -157,7 +157,7 @@ "[]" ] }, - "execution_count": 9, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -168,7 +168,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 11, "id": "e0afb76d-d1b7-4b42-925f-fb117d58025e", "metadata": {}, "outputs": [ @@ -178,7 +178,7 @@ "{}" ] }, - "execution_count": 10, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -189,7 +189,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 12, "id": "6a5c3235-9c6b-481f-b316-db7420d1ad43", "metadata": {}, "outputs": [], @@ -199,7 +199,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 13, "id": "4ade8d6a-6ce2-4f3a-b43d-71e1f87125bf", "metadata": {}, "outputs": [ @@ -209,7 +209,7 @@ "{'n': 10}" ] }, - "execution_count": 12, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -220,7 +220,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 14, "id": "da69a4cc-409a-4f51-b329-06a69ce8e7f5", "metadata": { "tags": [] @@ -232,7 +232,7 @@ "(ReturnStatus(Code.DONE, None), FunctionOutput(result=144))" ] }, - "execution_count": 13, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -246,7 +246,7 @@ "id": "e4c8370f-fa93-44b8-a5d5-6fbdc59e3f4b", "metadata": {}, "source": [ - "## We can use an executor to distribute the task to any compute resource" + "## We can use an submitter to distribute the task to any compute resource" ] }, { @@ -259,7 +259,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 15, "id": "9bf053ed-14a1-4d05-80df-d5e135f2722f", "metadata": { "tags": [] @@ -271,7 +271,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 16, "id": "ab2584f3-4c66-4573-b3ab-265af626f5a5", "metadata": { "tags": [] @@ -283,7 +283,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 17, "id": "9b995df8-09a5-45a0-b03e-ffa2706db25c", "metadata": { "tags": [] @@ -295,7 +295,7 @@ "ReturnStatus(Code.DONE, None)" ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -306,7 +306,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "b7ee90e1-7d99-46eb-bc69-138b986e6ebd", "metadata": { "tags": [] @@ -318,7 +318,7 @@ "144" ] }, - "execution_count": 17, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -337,7 +337,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "1e1b986e-9e00-41f2-86c2-945ff7818580", "metadata": {}, "outputs": [], @@ -347,7 +347,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "0b612150-f654-4995-8910-e46e766fdce2", "metadata": {}, "outputs": [], @@ -357,7 +357,7 @@ }, { "cell_type": "code", - "execution_count": 72, + "execution_count": 21, "id": "307d5526-2fbf-4816-99c5-e88838651c6b", "metadata": {}, "outputs": [], @@ -367,19 +367,36 @@ }, { "cell_type": "code", - "execution_count": 73, + "execution_count": 22, "id": "b334ac7e-35ae-4160-b6cf-96fa8672975a", "metadata": { "tags": [] }, - "outputs": [], + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "0.6462167522086014\n", + "0.6984648768967977\n", + "0.12127274357538753\n", + "0.6670163936298297\n", + "0.08017897838344545\n", + "0.47558206565092753\n", + "0.30382670021828084\n", + "0.8284873228775844\n", + "0.13385661026735263\n", + "0.7361704177844037\n" + ] + } + ], "source": [ "exe.run()" ] }, { "cell_type": "code", - "execution_count": 74, + "execution_count": 23, "id": "0d2f427a-21e1-449e-a8cc-c2296bff6c10", "metadata": {}, "outputs": [ @@ -389,7 +406,7 @@ "" ] }, - "execution_count": 74, + "execution_count": 23, "metadata": {}, "output_type": "execute_result" } @@ -400,7 +417,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "a9631d5e-d46a-419c-a929-68ddd77487bb", "metadata": {}, "outputs": [], @@ -410,7 +427,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "408ffab0-70a1-4d08-9007-4d9f0513935d", "metadata": {}, "outputs": [ @@ -420,7 +437,7 @@ "927372692193078999176" ] }, - "execution_count": 24, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } @@ -439,7 +456,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "ef72a65d-9020-46f6-b9f2-6cc57d7d016b", "metadata": {}, "outputs": [], @@ -449,7 +466,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "id": "18607afd-8c43-4c88-8b40-5f758b1afab8", "metadata": {}, "outputs": [], @@ -459,7 +476,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "id": "fbfddc7e-7cc3-4d67-ae9e-49428d31a0e5", "metadata": {}, "outputs": [], @@ -469,7 +486,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "id": "71a470dd-f25a-484b-9fbf-c758968ffb83", "metadata": { "tags": [] @@ -481,7 +498,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "id": "0c5bf27b-31da-48ce-9344-4b24638f237a", "metadata": {}, "outputs": [ @@ -491,7 +508,7 @@ "" ] }, - "execution_count": 29, + "execution_count": 30, "metadata": {}, "output_type": "execute_result" } @@ -502,7 +519,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "id": "9765f4fe-262d-43fd-a122-a0ed1f97bc29", "metadata": {}, "outputs": [], @@ -512,7 +529,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "id": "21f5ae38-f3e7-4f79-a38e-ef2531d537a1", "metadata": {}, "outputs": [ @@ -522,7 +539,7 @@ "927372692193078999176" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -536,12 +553,12 @@ "id": "85ec26e2-db1f-4858-a3ab-b7955e85e572", "metadata": {}, "source": [ - "# Executors handle single Tasks and lists of them on the same footing" + "# Submitters handle single Tasks and lists of them on the same footing" ] }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "id": "e2fed9f1-590b-4ab5-9922-a126444e6169", "metadata": {}, "outputs": [], @@ -551,7 +568,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "id": "fdfc8943-8c0b-4bc6-98f0-71a64b3fae27", "metadata": {}, "outputs": [], @@ -565,12 +582,12 @@ "id": "cdb9c07d-a153-4e0c-926e-96702b64cbd3", "metadata": {}, "source": [ - "## With the basic executor" + "## With the basic submitter" ] }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "id": "dd709cfa-775f-41c1-a015-7e0647ec3d27", "metadata": { "scrolled": true, @@ -584,7 +601,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "id": "0ac1b35a-b130-4330-bf20-a1222bdc6103", "metadata": {}, "outputs": [ @@ -603,7 +620,7 @@ " FunctionOutput(result=377))" ] }, - "execution_count": 35, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -614,7 +631,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "id": "1ef8d9d6-e5dc-4db1-9e20-7181321f07ce", "metadata": {}, "outputs": [ @@ -624,7 +641,7 @@ "8" ] }, - "execution_count": 36, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } @@ -638,12 +655,12 @@ "id": "4106ad2f-ece3-41d6-bed1-b340e434bec1", "metadata": {}, "source": [ - "## With the process executor" + "## With the process submitter" ] }, { "cell_type": "code", - "execution_count": 75, + "execution_count": 38, "id": "257425c5-ae8d-4041-b26d-2a22b1c710ac", "metadata": {}, "outputs": [], @@ -653,7 +670,7 @@ }, { "cell_type": "code", - "execution_count": 76, + "execution_count": 39, "id": "5e74535f-1079-49eb-a8e6-d80f3f832fe4", "metadata": {}, "outputs": [], @@ -663,7 +680,7 @@ }, { "cell_type": "code", - "execution_count": 77, + "execution_count": 40, "id": "19e5d3e8-6779-4c36-a636-2d8cd549e99c", "metadata": {}, "outputs": [], @@ -673,7 +690,7 @@ }, { "cell_type": "code", - "execution_count": 78, + "execution_count": 41, "id": "66feb98b-3f99-4bfb-9bb5-cccaf26d009b", "metadata": {}, "outputs": [ @@ -692,7 +709,7 @@ " ReturnStatus(Code.DONE, None)]" ] }, - "execution_count": 78, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -703,7 +720,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 42, "id": "fbb40611-9f53-479e-854c-82c8c99a8070", "metadata": {}, "outputs": [ @@ -722,7 +739,7 @@ " FunctionOutput(result=377)]" ] }, - "execution_count": 41, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -733,7 +750,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 43, "id": "250f9c2d-5c71-4ddb-a94e-fd42f42cbeff", "metadata": {}, "outputs": [ @@ -743,7 +760,7 @@ "55" ] }, - "execution_count": 42, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -762,7 +779,7 @@ }, { "cell_type": "code", - "execution_count": 43, + "execution_count": 44, "id": "3dba0814-6a50-41f9-a78f-040014fdc140", "metadata": {}, "outputs": [], @@ -772,7 +789,7 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 45, "id": "52aae339-ebad-4621-b2e0-c55d4fea3d1b", "metadata": {}, "outputs": [], @@ -782,7 +799,7 @@ }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 46, "id": "e10f7ee9-98db-48c7-affd-465c2011f7b1", "metadata": {}, "outputs": [], @@ -792,7 +809,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 47, "id": "b7e58b55-b4f5-4e2a-aef5-f4e080e4d50c", "metadata": {}, "outputs": [], @@ -803,17 +820,17 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 48, "id": "b4b2212a-64df-4284-834d-8836c9a59b70", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "SeriesInput(tasks=[, ], connections=[])" + "SeriesInput(tasks=[, ], connections=[])" ] }, - "execution_count": 47, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -824,7 +841,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 49, "id": "af337125-c4fe-497d-9374-b2d9301abe08", "metadata": {}, "outputs": [], @@ -834,7 +851,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 50, "id": "810a17bb-9f5d-4c50-9665-fa2f93070d60", "metadata": {}, "outputs": [], @@ -844,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 51, "id": "4af47287-ab42-4cb4-8e65-c6efb7982ab4", "metadata": {}, "outputs": [ @@ -854,7 +871,7 @@ "ReturnStatus(Code.DONE, None)" ] }, - "execution_count": 50, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -865,7 +882,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 52, "id": "705637d8-8da7-4429-ae6f-5401fc15cc9e", "metadata": {}, "outputs": [ @@ -875,7 +892,7 @@ "12.0" ] }, - "execution_count": 51, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -902,7 +919,7 @@ }, { "cell_type": "code", - "execution_count": 52, + "execution_count": 53, "id": "b9807c98-6df8-450f-a8dd-1a53cb4ded35", "metadata": {}, "outputs": [], @@ -912,7 +929,7 @@ }, { "cell_type": "code", - "execution_count": 53, + "execution_count": 54, "id": "ac2b9aa8-c118-4a1a-bf8b-96d6853b9be6", "metadata": {}, "outputs": [], @@ -922,7 +939,7 @@ }, { "cell_type": "code", - "execution_count": 54, + "execution_count": 55, "id": "ef092015-5756-409a-bd1a-a31793c0b2b8", "metadata": {}, "outputs": [], @@ -932,7 +949,7 @@ }, { "cell_type": "code", - "execution_count": 55, + "execution_count": 56, "id": "10b67618-f56e-4348-9fdc-35514d0e83a4", "metadata": { "tags": [] @@ -942,25 +959,25 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.25206094698683046\n", - "0.7580366794891185\n", - "0.3684721838966667\n", - "0.6114443141823555\n", - "0.701768145318245\n", - "0.1082013931806125\n", - "0.1991682408970753\n", - "0.2954001242249057\n", - "0.602000592148809\n", - "0.13324613153490172\n" + "0.2616773507280348\n", + "0.3829418984781273\n", + "0.8402625807147815\n", + "0.28444166112879854\n", + "0.46477440231109135\n", + "0.7002116029378159\n", + "0.37573681851360785\n", + "0.6058215119563566\n", + "0.6638045445609476\n", + "0.8240371035581302\n" ] }, { "data": { "text/plain": [ - "(ReturnStatus(Code.DONE, None), FunctionOutput(result=0.7176369370748094))" + "(ReturnStatus(Code.DONE, None), FunctionOutput(result=0.16264329999693483))" ] }, - "execution_count": 55, + "execution_count": 56, "metadata": {}, "output_type": "execute_result" } @@ -971,27 +988,10 @@ }, { "cell_type": "code", - "execution_count": 59, + "execution_count": 57, "id": "855bb36d-6e9b-4a87-b4d0-95c358c0ce99", "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "0.8015059839851431\n", - "0.5016843345204535\n", - "0.1366176125775127\n", - "0.8682887572803999\n", - "0.35995686077477174\n", - "0.20630244622625882\n", - "0.024072735251068123\n", - "0.1047725596732394\n", - "0.8964585655685834\n", - "0.6529667772087503\n" - ] - } - ], + "outputs": [], "source": [ "exe = thread.submit([l])\n", "exe.run()\n", @@ -1000,7 +1000,7 @@ }, { "cell_type": "code", - "execution_count": 60, + "execution_count": 58, "id": "a0db86f9-d974-44d5-893b-9c3a0a1c3ecb", "metadata": { "tags": [] @@ -1009,10 +1009,10 @@ { "data": { "text/plain": [ - "0.20599900230508372" + "0.5438776154590454" ] }, - "execution_count": 60, + "execution_count": 58, "metadata": {}, "output_type": "execute_result" } @@ -1031,7 +1031,7 @@ }, { "cell_type": "code", - "execution_count": 61, + "execution_count": 59, "id": "6c251bfa-e8cf-4e1a-990d-451ebb53f713", "metadata": {}, "outputs": [], @@ -1041,7 +1041,7 @@ }, { "cell_type": "code", - "execution_count": 62, + "execution_count": 60, "id": "563c7fe1-b96f-463c-8903-50f054c831f6", "metadata": {}, "outputs": [], @@ -1051,7 +1051,7 @@ }, { "cell_type": "code", - "execution_count": 63, + "execution_count": 61, "id": "10130bfd-636f-4771-b30b-4648a8822f04", "metadata": {}, "outputs": [], @@ -1064,7 +1064,7 @@ }, { "cell_type": "code", - "execution_count": 67, + "execution_count": 62, "id": "e65a16c1-40b4-4aa6-b382-c38405edd41e", "metadata": { "tags": [] @@ -1074,23 +1074,16 @@ "name": "stdout", "output_type": "stream", "text": [ - "0.2309565676155162\n", - "0.7973850614628536\n", - "0.1566921745270966\n", - "0.4129120332177768\n", - "0.8722993665925096\n", - "0.7014044109954554\n", - "0.5356448112961381\n", - "0.3716950282432553\n" + "0.8766892186939631\n" ] }, { "data": { "text/plain": [ - "(ReturnStatus(Code.DONE, None), FunctionOutput(result=0.10941147936096285))" + "(ReturnStatus(Code.DONE, None), FunctionOutput(result=0.13200442905218202))" ] }, - "execution_count": 67, + "execution_count": 62, "metadata": {}, "output_type": "execute_result" } @@ -1106,7 +1099,7 @@ "source": [ "# Implementation Examples\n", "\n", - "For a much too simplified example, let's write a task that simply waits `n` times `time` seconds, where each of the `time` waits is a separate, independent task itself. In tinybase speak such a construct is a `TaskGenerator`, because it internally generates a sequence of atomic tasks that can be scheduled by an executor in whatever order. From a user's perspective however, a task generator behaves exactly like a task (and it implements the same internal interface).\n", + "For a much too simplified example, let's write a task that simply waits `n` times `time` seconds, where each of the `time` waits is a separate, independent task itself. In tinybase speak such a construct is a `TaskGenerator`, because it internally generates a sequence of atomic tasks that can be scheduled by an submitter in whatever order. From a user's perspective however, a task generator behaves exactly like a task (and it implements the same internal interface).\n", "\n", "To write such a class, we need to\n", "\n", @@ -1119,7 +1112,7 @@ }, { "cell_type": "code", - "execution_count": 68, + "execution_count": 63, "id": "8ead2987-116c-4bba-a09a-4b28a71660f1", "metadata": { "tags": [] @@ -1145,9 +1138,9 @@ " return WaitInput()\n", " def __iter__(self):\n", " # the main computation in a generator is defined in its __iter__ method.\n", - " # executors will iterate over the the results yielded here and inject back the results\n", + " # submitters will iterate over the the results yielded here and inject back the results\n", " # in each iteration the generator can dynamically return new tasks depending on the\n", - " # results that came back from an executor.\n", + " # results that came back from an submitter.\n", "\n", " # in our case we just have `n` independent waiting tasks, so we create them in a loop\n", " # and yield them in one iteration; then discard their (anyway empty) outut and return\n", @@ -1174,7 +1167,7 @@ }, { "cell_type": "code", - "execution_count": 69, + "execution_count": 64, "id": "c4170017-0825-4e2c-87b2-ea4ddc14499e", "metadata": { "tags": [] @@ -1184,8 +1177,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 2.22 ms, sys: 1.08 ms, total: 3.3 ms\n", - "Wall time: 20 s\n" + "CPU times: user 46.5 ms, sys: 30.3 ms, total: 76.8 ms\n", + "Wall time: 20.1 s\n" ] }, { @@ -1194,7 +1187,7 @@ "(ReturnStatus(Code.DONE, None), WaitOutput())" ] }, - "execution_count": 69, + "execution_count": 64, "metadata": {}, "output_type": "execute_result" } @@ -1221,13 +1214,13 @@ "id": "b8a8ffc0-98da-46d4-99f5-42eae115b0db", "metadata": {}, "source": [ - "If we run with the process executor, but only give one core, we expect the run time\n", + "If we run with the process submitter, but only give one core, we expect the run time\n", "to stay the same." ] }, { "cell_type": "code", - "execution_count": 82, + "execution_count": 65, "id": "dc30851f-ed76-4bde-979f-9b42286b1645", "metadata": { "tags": [] @@ -1237,7 +1230,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 11.2 ms, sys: 19.4 ms, total: 30.6 ms\n", + "CPU times: user 58.1 ms, sys: 75.8 ms, total: 134 ms\n", "Wall time: 20.1 s\n" ] } @@ -1260,7 +1253,7 @@ }, { "cell_type": "code", - "execution_count": 83, + "execution_count": 66, "id": "16c26a68-7fe1-4639-b5ac-593518b37d38", "metadata": { "tags": [] @@ -1270,8 +1263,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 4.68 ms, sys: 6.71 ms, total: 11.4 ms\n", - "Wall time: 6.01 s\n" + "CPU times: user 8.44 ms, sys: 17.2 ms, total: 25.6 ms\n", + "Wall time: 6.07 s\n" ] } ], @@ -1293,7 +1286,7 @@ }, { "cell_type": "code", - "execution_count": 81, + "execution_count": 67, "id": "2bf18743-4760-4491-968c-49a7968ef6cf", "metadata": { "tags": [] @@ -1303,8 +1296,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 7.92 ms, sys: 1.47 ms, total: 9.39 ms\n", - "Wall time: 6.01 s\n" + "CPU times: user 0 ns, sys: 25.9 ms, total: 25.9 ms\n", + "Wall time: 4.08 s\n" ] } ], @@ -1332,7 +1325,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.11.7" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/notebooks/tinybase/Lammps.ipynb b/notebooks/tinybase/Lammps.ipynb index 510090b53..5dfdd8722 100644 --- a/notebooks/tinybase/Lammps.ipynb +++ b/notebooks/tinybase/Lammps.ipynb @@ -16,30 +16,10 @@ " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" ] }, - { - "data": { - "text/html": [ - "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/html": [
-       "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "ec92c068940744a38d1e3978182d3b57",
+       "model_id": "49e565b4cb784276848f55d7ada29e56",
        "version_major": 2,
        "version_minor": 0
       },
@@ -105,19 +85,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 19,
    "id": "64c9b3d4-e6e1-4e21-86fc-318940c4c8e8",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "lmp = LammpsStaticTask()"
+    "lmp = LammpsStaticTask(capture_exceptions=False)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 20,
    "id": "df4de500-24f5-4160-933d-57cf3d0f15a6",
    "metadata": {
     "tags": []
@@ -129,7 +109,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 21,
    "id": "4e5c69d6-fee8-4166-8e06-ba8a2e58e707",
    "metadata": {
     "tags": []
@@ -149,7 +129,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 22,
    "id": "1056c4b6-603c-4603-8021-a89c64f84255",
    "metadata": {
     "scrolled": true,
@@ -166,7 +146,7 @@
        " '2003--Mendelev-M-I--Fe-2--LAMMPS--ipr3']"
       ]
      },
-     "execution_count": 8,
+     "execution_count": 22,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -177,7 +157,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 23,
    "id": "a6af7f64-5435-40b1-b44c-960528fc0cc5",
    "metadata": {
     "tags": []
@@ -189,7 +169,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 27,
    "id": "8a699e68-ad89-4d52-bdff-3b86d9624a4b",
    "metadata": {
     "tags": []
@@ -201,7 +181,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 28,
    "id": "8b837b3d-7bd0-4930-817b-d497e8ae1ead",
    "metadata": {
     "tags": []
@@ -213,7 +193,7 @@
        "ReturnStatus(Code.DONE, None)"
       ]
      },
-     "execution_count": 11,
+     "execution_count": 28,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -232,7 +212,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 29,
    "id": "c4793e9e-b7f1-476f-807c-c313718ed49b",
    "metadata": {
     "tags": []
@@ -244,7 +224,7 @@
        "-69.0339463780543"
       ]
      },
-     "execution_count": 12,
+     "execution_count": 29,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -255,7 +235,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 30,
    "id": "afe5c4a1-08ae-4e3a-bb0a-f501dacf4be4",
    "metadata": {
     "tags": []
@@ -267,7 +247,7 @@
        "0.0"
       ]
      },
-     "execution_count": 13,
+     "execution_count": 30,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -278,7 +258,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 31,
    "id": "6b48188a-b84c-482a-9add-26d61a4e65f2",
    "metadata": {
     "tags": []
@@ -305,7 +285,7 @@
        "       [ 0.05420023,  0.10650667, -0.14882155]])"
       ]
      },
-     "execution_count": 14,
+     "execution_count": 31,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -326,19 +306,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 34,
    "id": "cc50f529-e3bc-4f36-af63-f496f6c1405f",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "from pyiron_contrib.tinybase.executor import ProcessExecutor, BackgroundExecutor"
+    "from pyiron_contrib.tinybase.executor import FuturesSubmitter\n",
+    "from concurrent.futures import ProcessPoolExecutor"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 33,
    "id": "1fb9a556-d882-4b21-99fa-0fd30023d3f4",
    "metadata": {
     "tags": []
@@ -350,7 +331,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 36,
    "id": "cab52837-17eb-4f33-8182-cb5e917d02ec",
    "metadata": {
     "tags": []
@@ -362,7 +343,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 37,
    "id": "c95da0c4-fbdb-48d7-8086-f890f82c7725",
    "metadata": {
     "tags": []
@@ -376,7 +357,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 38,
    "id": "edb93bf2-9e70-4717-9929-101a3101599b",
    "metadata": {
     "tags": []
@@ -388,7 +369,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 39,
    "id": "9eab17d8-380a-4199-88b0-50910b5e5296",
    "metadata": {
     "tags": []
@@ -398,14 +379,14 @@
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "CPU times: user 105 ms, sys: 96 ms, total: 201 ms\n",
-      "Wall time: 5.49 s\n"
+      "CPU times: user 256 ms, sys: 634 ms, total: 890 ms\n",
+      "Wall time: 8.49 s\n"
      ]
     }
    ],
    "source": [
     "%%time\n",
-    "exe = ProcessExecutor(max_processes=4).submit([m])\n",
+    "exe = FuturesSubmitter(ProcessPoolExecutor(max_workers=4)).submit([m])\n",
     "exe.run()\n",
     "exe.wait()\n",
     "ret = exe.status[0]\n",
@@ -414,33 +395,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
-   "id": "02659463-8be4-4f76-b67c-3986eff09dd0",
-   "metadata": {
-    "tags": []
-   },
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "CPU times: user 6.28 s, sys: 9.44 s, total: 15.7 s\n",
-      "Wall time: 13.8 s\n"
-     ]
-    }
-   ],
-   "source": [
-    "%%time\n",
-    "exe = BackgroundExecutor(max_threads=5).submit([m])\n",
-    "exe.run()\n",
-    "exe.wait()\n",
-    "ret = exe.status[0]\n",
-    "output = exe.output[0]"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 41,
    "id": "44ffaf29-f35c-451f-a3fd-9f342035569b",
    "metadata": {
     "tags": []
@@ -448,7 +403,7 @@
    "outputs": [
     {
      "data": {
-      "image/png": "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Umtrq372s59p2LBhCg8P1/Dhw/XQQw/J4/GYjuYT1q5dq/nz58vlcslms2n58uVdXrcsSw8++KBcLpfCw8M1e/Zsbdu2zUxYH3Gyc9bS0qL77rtPEydO1KBBg+RyuXTLLbeouLjYXGDDTvU7drTvfOc7stlseuKJJ/otn6/pzvnasWOHLr/8cjmdTkVGRurss89Wfn5+/4f1Eac6Z7W1tfrud7+rlJQUhYeHa+zYsVq6dOlpHTOgi8jhw4c1c+ZMhYSEaMWKFdq+fbt+85vfKDo62nQ0n/SrX/1KTz/9tJ566int2LFDjz76qH7961/r97//veloPqGurk5ZWVl66qmnjvv6o48+qscff1xPPfWUPvvsMyUmJuqiiy7qvKdSIDrZOauvr1d2drbuv/9+ZWdn65VXXtHu3bt1+eWXG0jqG071O9Zh+fLl+uSTT+RyufopmW861fnKzc3VrFmzNGbMGK1evVqbN2/W/fffr7CwsH5O6jtOdc4WLFigt99+Wy+++KJ27NihBQsW6Hvf+55ee+213h/UCmD33XefNWvWLNMx/Mall15q3X777V2eu/LKK62bbrrJUCLfJcl69dVXO7/3eDxWYmKi9cgjj3Q+19jYaDmdTuvpp582kND3fPmcHc+nn35qSbIOHDjQP6F82InOV2FhoZWcnGxt3brVSk9Pt37729/2ezZfdLzzdd111/Hvr5M43jkbP3689dBDD3V5bsqUKdbPfvazXh8noK+IvP7665o2bZquueYaxcfHa/LkyfrjH/9oOpbPmjVrlt577z3t3r1bkrR582atW7dOl1xyieFkvi8vL0+lpaWaM2dO53MOh0Pnn3++1q9fbzCZf6murpbNZuOq5Ql4PB7dfPPNWrhwocaPH286jk/zeDx66623NHr0aF188cWKj4/X9OnTTzrchfbPgddff11FRUWyLEurVq3S7t27dfHFF/f6ZwZ0Edm3b5+WLl2qUaNG6Z133tGdd96p73//+3rhhRdMR/NJ9913n2644QaNGTNGISEhmjx5su655x7dcMMNpqP5vNLSUklSQkJCl+cTEhI6X8PJNTY26sc//rFuvPFGblJ2Ar/61a8UHBys73//+6aj+LyysjLV1tbqkUce0dy5c7Vy5Up9/etf15VXXqk1a9aYjueznnzySY0bN04pKSkKDQ3V3LlztWTJEs2aNavXP9On777rbR6PR9OmTdPDDz8sSZo8ebK2bdumpUuX6pZbbjGczvf84x//0Isvvqj/+7//0/jx45WTk6N77rlHLpdLt956q+l4fsFms3X53rKsY57DsVpaWnT99dfL4/FoyZIlpuP4pI0bN+p3v/udsrOz+Z3qho5J9ldccYUWLFggSZo0aZLWr1+vp59+Wueff77JeD7rySef1Mcff6zXX39d6enpWrt2re6++24lJSXpwgsv7NXPDOgikpSUpHHjxnV5buzYsVq2bJmhRL5t4cKF+vGPf6zrr79ekjRx4kQdOHBAixcvpoicQmJioqT2KyNJSUmdz5eVlR1zlQRdtbS06Nprr1VeXp7ef/99roacwAcffKCysjKlpaV1PtfW1qYf/vCHeuKJJ7R//35z4XxQXFycgoODj/sZsG7dOkOpfFtDQ4N+8pOf6NVXX9Wll14qScrMzFROTo4ee+yxXheRgB6amTlzpnbt2tXlud27dys9Pd1QIt9WX18vu73rr0xQUBDLd7th2LBhSkxM1Lvvvtv5XHNzs9asWaMZM2YYTObbOkrInj179O9//1uxsbGmI/msm2++WVu2bFFOTk7nw+VyaeHChXrnnXdMx/M5oaGhOvPMM/kM6IGWlha1tLT0+edAQF8RWbBggWbMmKGHH35Y1157rT799FM988wzeuaZZ0xH80nz58/XL3/5S6WlpWn8+PHatGmTHn/8cd1+++2mo/mE2tpa7d27t/P7vLw85eTkKCYmRmlpabrnnnv08MMPa9SoURo1apQefvhhRURE6MYbbzSY2qyTnTOXy6Wrr75a2dnZevPNN9XW1tY5nyYmJkahoaGmYhtzqt+xLxe1kJAQJSYm6owzzujvqD7hVOdr4cKFuu6663Teeefpggsu0Ntvv6033nhDq1evNhfasFOds/PPP18LFy5UeHi40tPTtWbNGr3wwgt6/PHHe3/QXq+3GSDeeOMNa8KECZbD4bDGjBljPfPMM6Yj+Sy322394Ac/sNLS0qywsDBr+PDh1k9/+lOrqanJdDSfsGrVKkvSMY9bb73Vsqz2JbwPPPCAlZiYaDkcDuu8886zPv/8c7OhDTvZOcvLyzvua5KsVatWmY5uxKl+x74s0Jfvdud8/elPf7JGjhxphYWFWVlZWdby5cvNBfYBpzpnJSUl1m233Wa5XC4rLCzMOuOMM6zf/OY3lsfj6fUxbZZlWb2vMQAAAL0X0HNEAACAWRQRAABgDEUEAAAYQxEBAADGUEQAAIAxFBEAAGAMRQQAABhDEQEAAMZQRAAAgDEUEQAAYAxFBAAAGEMRAQAAxvx/kPkRtNmxslQAAAAASUVORK5CYII=\n",
+      "image/png": "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lZWVpUceeURut9t0NK+wadMmLVu2TMnJybLZbFqzZk2v1y3L0sMPP6zk5GSFhoZq0aJF2rdvn5mwXuJc58zlcumBBx7QtGnTFB4eruTkZN15550qKSkxF9iw8/2Ofdw3vvEN2Ww2Pfnkk0OWz9v05XwdOHBA1157raKjoxUZGalLLrlEBQUFQx/WS5zvnDU0NOib3/ymUlNTFRoaqkmTJmnVqlUXdEy/LiInT57U/PnzFRQUpHXr1mn//v365S9/qZiYGNPRvNIvfvELPfvss3r66ad14MABPfbYY/qP//gP/eY3vzEdzSs0NjYqOztbTz/99Blff+yxx/TEE0/o6aef1kcffaTExERdeeWVPfdU8kfnOmdNTU3auXOnfvzjH2vnzp166aWXdPjwYV177bUGknqH8/2OdVuzZo0+/PBDJScnD1Ey73S+85WXl6cFCxZo4sSJevfdd5Wbm6sf//jHCgkJGeKk3uN852z58uV688039de//lUHDhzQ8uXL9S//8i965ZVXBn5Qy4898MAD1oIFC0zH8BlLly617r777l7P3XDDDdbtt99uKJH3kmS9/PLLPV+73W4rMTHR+vnPf97zXEtLixUdHW09++yzBhJ6n0+eszPZtm2bJck6ceLE0ITyYmc7X0VFRVZKSoq1d+9eKyMjw/rVr3415Nm80ZnO1y233MKfX+dwpnM2ZcoU65FHHun13KxZs6wf/ehHAz6OX18RWbt2rebMmaObb75Zo0aN0syZM/W73/3OdCyvtWDBAr3zzjs6fPiwJCk3N1fvv/++PvvZzxpO5v3y8/NVVlamq666quc5h8OhhQsXasuWLQaT+Za6ujrZbDauWp6F2+3WHXfcoRUrVmjKlCmm43g1t9ut119/XePHj9fVV1+tUaNGae7cuecc7kLn58DatWtVXFwsy7K0YcMGHT58WFdfffWAf6ZfF5Fjx45p1apVGjdunN566y3dc889+ta3vqXnn3/edDSv9MADD+gLX/iCJk6cqKCgIM2cOVP333+/vvCFL5iO5vXKysokSQkJCb2eT0hI6HkN59bS0qLvf//7uu2227hJ2Vn84he/UGBgoL71rW+ZjuL1Kioq1NDQoJ///OdavHix1q9fr+uvv1433HCDNm7caDqe13rqqac0efJkpaamKjg4WIsXL9YzzzyjBQsWDPhnevXddz3N7XZrzpw5evTRRyVJM2fO1L59+7Rq1SrdeeedhtN5n7/97W/661//qv/5n//RlClTlJOTo/vvv1/Jycn60pe+ZDqeT7DZbL2+tizrtOdwOpfLpVtvvVVut1vPPPOM6TheaceOHfr1r3+tnTt38jvVB92T7K+77jotX75ckjRjxgxt2bJFzz77rBYuXGgyntd66qmntHXrVq1du1YZGRnatGmT7rvvPiUlJekzn/nMgH6mXxeRpKQkTZ48uddzkyZN0urVqw0l8m4rVqzQ97//fd16662SpGnTpunEiRNauXIlReQ8EhMTJXVeGUlKSup5vqKi4rSrJOjN5XLp85//vPLz8/XPf/6TqyFn8d5776miokLp6ek9z3V0dOhf//Vf9eSTT+r48ePmwnmh+Ph4BQYGnvEz4P333zeUyrs1NzfrBz/4gV5++WUtXbpUkjR9+nTl5OTo8ccfH3AR8euhmfnz5+vQoUO9njt8+LAyMjIMJfJuTU1Nstt7/8oEBASwfLcPRo8ercTERL399ts9z7W1tWnjxo2aN2+ewWTerbuEHDlyRP/4xz8UFxdnOpLXuuOOO7R7927l5OT0PJKTk7VixQq99dZbpuN5neDgYF100UV8BvSDy+WSy+Ua9M8Bv74isnz5cs2bN0+PPvqoPv/5z2vbtm167rnn9Nxzz5mO5pWWLVumn/3sZ0pPT9eUKVO0a9cuPfHEE7r77rtNR/MKDQ0NOnr0aM/X+fn5ysnJUWxsrNLT03X//ffr0Ucf1bhx4zRu3Dg9+uijCgsL02233WYwtVnnOmfJycm66aabtHPnTr322mvq6OjomU8TGxur4OBgU7GNOd/v2CeLWlBQkBITEzVhwoShjuoVzne+VqxYoVtuuUWXXXaZLr/8cr355pt69dVX9e6775oLbdj5ztnChQu1YsUKhYaGKiMjQxs3btTzzz+vJ554YuAHHfB6m2Hi1VdftaZOnWo5HA5r4sSJ1nPPPWc6ktdyOp3Wt7/9bSs9Pd0KCQmxsrKyrB/+8IdWa2ur6WheYcOGDZak0x5f+tKXLMvqXML70EMPWYmJiZbD4bAuu+wya8+ePWZDG3auc5afn3/G1yRZGzZsMB3diPP9jn2Svy/f7cv5+sMf/mCNHTvWCgkJsbKzs601a9aYC+wFznfOSktLrbvuustKTk62QkJCrAkTJli//OUvLbfbPeBj2izLsgZeYwAAAAbOr+eIAAAAsygiAADAGIoIAAAwhiICAACMoYgAAABjKCIAAMAYiggAADCGIgIAAIyhiAAAAGMoIgAAwBiKCAAAMIYiAgAAjPn/2VwebF0ZIhYAAAAASUVORK5CYII=",
       "text/plain": [
        "
" ] @@ -463,17 +418,17 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 42, "id": "c6d3f82b-7acb-47f1-ab0c-c0380382e7a7", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "93594.71843533409" + "93594.71816845893" ] }, - "execution_count": 23, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -484,17 +439,17 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 43, "id": "f8911ebd-bcc6-4696-89f4-498c60aad544", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "93594.7184353341" + "93594.71816845887" ] }, - "execution_count": 24, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -505,17 +460,17 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 44, "id": "620c128d-fcd4-4842-8f49-cd6f7052b4c3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "Atoms(symbols='Fe8000', pbc=True, cell=[[-28.602047063948746, 28.602047063948746, 28.602047063948746], [28.602047063948746, -28.602047063948746, 28.602047063948746], [28.602047063948746, 28.602047063948746, -28.602047063948746]])" + "Atoms(symbols='Fe8000', pbc=True, cell=[[-28.602047036763544, 28.602047036763544, 28.602047036763544], [28.602047036763544, -28.602047036763544, 28.602047036763544], [28.602047036763544, 28.602047036763544, -28.602047036763544]])" ] }, - "execution_count": 25, + "execution_count": 44, "metadata": {}, "output_type": "execute_result" } @@ -541,7 +496,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.8" + "version": "3.11.7" } }, "nbformat": 4, diff --git a/notebooks/tinybase/TinyJob.ipynb b/notebooks/tinybase/TinyJob.ipynb index 0f95f825d..35c3ab509 100644 --- a/notebooks/tinybase/TinyJob.ipynb +++ b/notebooks/tinybase/TinyJob.ipynb @@ -20,12 +20,21 @@ "name": "stderr", "output_type": "stream", "text": [ - "/home/ponder/science/phd/dev/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", + "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "CPU times: user 1.48 s, sys: 980 ms, total: 2.46 s\n", + "Wall time: 1.47 s\n" + ] } ], "source": [ + "%%time\n", "from pyiron_contrib.tinybase.project import FilesystemProject, InMemoryProject, SingleHdfProject" ] }, @@ -105,7 +114,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "6eb89b4339644ff5a2e79ff8f8c3a94f", + "model_id": "71760bb018a94c31bbf2d9ee9add377e", "version_major": 2, "version_minor": 0 }, @@ -158,7 +167,7 @@ { "data": { "text/plain": [ - "" + "" ] }, "execution_count": 9, @@ -204,7 +213,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "09f052769a8d47b9a1d34e8e32f2f92e", + "model_id": "7ba2d6e222434c8e8f0dd80cf8edbb90", "version_major": 2, "version_minor": 0 }, @@ -287,49 +296,49 @@ "output_type": "stream", "text": [ " Step Time Energy fmax\n", - "LBFGS: 0 09:50:49 11.288146 189.5231\n", - "LBFGS: 1 09:50:49 1.168671 43.6957\n", - "LBFGS: 2 09:50:49 0.860403 38.6924\n", - "LBFGS: 3 09:50:49 0.362400 30.3554\n", - "LBFGS: 4 09:50:49 0.004806 24.0865\n", - "LBFGS: 5 09:50:49 -0.267437 19.0615\n", - "LBFGS: 6 09:50:49 -0.471646 15.0628\n", - "LBFGS: 7 09:50:49 -0.623506 11.8810\n", - "LBFGS: 8 09:50:49 -0.735237 9.3518\n", - "LBFGS: 9 09:50:49 -0.816458 7.3435\n", - "LBFGS: 10 09:50:49 -0.874705 5.7512\n", - "LBFGS: 11 09:50:49 -0.915849 4.4909\n", - "LBFGS: 12 09:50:49 -0.944435 3.4955\n", - "LBFGS: 13 09:50:49 -0.963943 2.7113\n", - "LBFGS: 14 09:50:49 -0.977006 2.0956\n", - "LBFGS: 15 09:50:49 -0.985585 1.6137\n", - "LBFGS: 16 09:50:49 -0.991109 1.2382\n", - "LBFGS: 17 09:50:49 -0.994598 0.9468\n", - "LBFGS: 18 09:50:49 -0.996763 0.7216\n", - "LBFGS: 19 09:50:49 -0.998083 0.5484\n", - "LBFGS: 20 09:50:49 -0.998876 0.4157\n", - "LBFGS: 21 09:50:49 -0.999347 0.3144\n", - "LBFGS: 22 09:50:49 -0.999623 0.2374\n", - "LBFGS: 23 09:50:49 -0.999784 0.1790\n", - "LBFGS: 24 09:50:49 -0.999877 0.1348\n", - "LBFGS: 25 09:50:49 -0.999930 0.1014\n", - "LBFGS: 26 09:50:49 -0.999960 0.0762\n", - "LBFGS: 27 09:50:49 -0.999977 0.0573\n", - "LBFGS: 28 09:50:49 -0.999987 0.0430\n", - "LBFGS: 29 09:50:49 -0.999993 0.0323\n", - "LBFGS: 30 09:50:49 -0.999996 0.0242\n", - "LBFGS: 31 09:50:49 -0.999998 0.0182\n", - "LBFGS: 32 09:50:49 -0.999999 0.0136\n", - "LBFGS: 33 09:50:49 -0.999999 0.0102\n", - "LBFGS: 34 09:50:49 -1.000000 0.0077\n", - "LBFGS: 35 09:50:49 -1.000000 0.0058\n", - "LBFGS: 36 09:50:49 -1.000000 0.0043\n", - "LBFGS: 37 09:50:49 -1.000000 0.0032\n", - "LBFGS: 38 09:50:49 -1.000000 0.0024\n", - "LBFGS: 39 09:50:49 -1.000000 0.0018\n", - "LBFGS: 40 09:50:49 -1.000000 0.0014\n", - "LBFGS: 41 09:50:49 -1.000000 0.0010\n", - "LBFGS: 42 09:50:49 -1.000000 0.0008\n" + "LBFGS: 0 18:00:52 11.288146 189.5231\n", + "LBFGS: 1 18:00:52 1.168671 43.6957\n", + "LBFGS: 2 18:00:52 0.860403 38.6924\n", + "LBFGS: 3 18:00:52 0.362400 30.3554\n", + "LBFGS: 4 18:00:52 0.004806 24.0865\n", + "LBFGS: 5 18:00:52 -0.267437 19.0615\n", + "LBFGS: 6 18:00:52 -0.471646 15.0628\n", + "LBFGS: 7 18:00:52 -0.623506 11.8810\n", + "LBFGS: 8 18:00:52 -0.735237 9.3518\n", + "LBFGS: 9 18:00:52 -0.816458 7.3435\n", + "LBFGS: 10 18:00:52 -0.874705 5.7512\n", + "LBFGS: 11 18:00:52 -0.915849 4.4909\n", + "LBFGS: 12 18:00:52 -0.944435 3.4955\n", + "LBFGS: 13 18:00:53 -0.963943 2.7113\n", + "LBFGS: 14 18:00:53 -0.977006 2.0956\n", + "LBFGS: 15 18:00:53 -0.985585 1.6137\n", + "LBFGS: 16 18:00:53 -0.991109 1.2382\n", + "LBFGS: 17 18:00:53 -0.994598 0.9468\n", + "LBFGS: 18 18:00:53 -0.996763 0.7216\n", + "LBFGS: 19 18:00:53 -0.998083 0.5484\n", + "LBFGS: 20 18:00:53 -0.998876 0.4157\n", + "LBFGS: 21 18:00:53 -0.999347 0.3144\n", + "LBFGS: 22 18:00:53 -0.999623 0.2374\n", + "LBFGS: 23 18:00:53 -0.999784 0.1790\n", + "LBFGS: 24 18:00:53 -0.999877 0.1348\n", + "LBFGS: 25 18:00:53 -0.999930 0.1014\n", + "LBFGS: 26 18:00:53 -0.999960 0.0762\n", + "LBFGS: 27 18:00:53 -0.999977 0.0573\n", + "LBFGS: 28 18:00:53 -0.999987 0.0430\n", + "LBFGS: 29 18:00:53 -0.999993 0.0323\n", + "LBFGS: 30 18:00:53 -0.999996 0.0242\n", + "LBFGS: 31 18:00:53 -0.999998 0.0182\n", + "LBFGS: 32 18:00:53 -0.999999 0.0136\n", + "LBFGS: 33 18:00:53 -0.999999 0.0102\n", + "LBFGS: 34 18:00:53 -1.000000 0.0077\n", + "LBFGS: 35 18:00:53 -1.000000 0.0058\n", + "LBFGS: 36 18:00:53 -1.000000 0.0043\n", + "LBFGS: 37 18:00:53 -1.000000 0.0032\n", + "LBFGS: 38 18:00:53 -1.000000 0.0024\n", + "LBFGS: 39 18:00:53 -1.000000 0.0018\n", + "LBFGS: 40 18:00:53 -1.000000 0.0014\n", + "LBFGS: 41 18:00:53 -1.000000 0.0010\n", + "LBFGS: 42 18:00:53 -1.000000 0.0008\n" ] } ], @@ -337,12 +346,36 @@ "j.run(\n", " submitter=pr.create.executor.process(4)\n", ")\n", - "j.wait()" + "j.wait()\n", + "#FIXME: small race condition, other cells below can fail if executed too quickly.\n", + "import time\n", + "time.sleep(1)" ] }, { "cell_type": "code", "execution_count": 16, + "id": "f05faf5d-7586-4a10-b6ad-1f1723196eb1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'finished'" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "j.status" + ] + }, + { + "cell_type": "code", + "execution_count": 17, "id": "7c16a615-0913-4880-9694-2c125285babc", "metadata": { "tags": [] @@ -419,7 +452,7 @@ "1 AseMinimizeTask " ] }, - "execution_count": 16, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -430,7 +463,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 18, "id": "59ea5510-b6ce-4317-90c3-4af77db3d59a", "metadata": { "tags": [] @@ -453,7 +486,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 19, "id": "3fb09d42-f800-46ee-9919-83180863e1ee", "metadata": { "tags": [] @@ -462,7 +495,7 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "31f516acb1274474912b5cce65d519db", + "model_id": "be766dcb9b574096a4f5eec1db05ac17", "version_major": 2, "version_minor": 0 }, @@ -488,7 +521,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 20, "id": "d32508b9-2854-4076-9109-08ede1b52dc2", "metadata": { "tags": [] @@ -501,7 +534,7 @@ " -1. ])" ] }, - "execution_count": 19, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -512,7 +545,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 21, "id": "db691097-72c6-45a4-89b1-6ec16018c8b8", "metadata": { "tags": [] @@ -535,14 +568,14 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 22, "id": "23ce6822-b38b-41f3-9269-109dbb152ecf", "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "c4fc225ea610406eba0b3c60a819f3dd", + "model_id": "ac4af2962e3743f59a4aa681042b0271", "version_major": 2, "version_minor": 0 }, @@ -568,7 +601,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 23, "id": "654ce992-b73f-42e3-a32e-2e0dafa7c952", "metadata": { "tags": [] @@ -580,7 +613,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 24, "id": "253237f0-b338-470c-bc54-3c7400a757b7", "metadata": {}, "outputs": [], @@ -591,7 +624,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 25, "id": "c801093b-499e-48a7-8444-77602ed88a96", "metadata": {}, "outputs": [], @@ -601,7 +634,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 26, "id": "1e30b36e-11e6-47d1-836e-cffea7b73cdd", "metadata": {}, "outputs": [], @@ -611,7 +644,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 27, "id": "18b5305a-8950-44af-bc2e-c9734b059713", "metadata": {}, "outputs": [ @@ -619,8 +652,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "CPU times: user 721 ms, sys: 309 ms, total: 1.03 s\n", - "Wall time: 4.99 s\n" + "CPU times: user 2.53 s, sys: 1.1 s, total: 3.64 s\n", + "Wall time: 35.1 s\n" ] } ], @@ -632,7 +665,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 28, "id": "836bb2ec-4295-4a3c-b976-7a35d04aad36", "metadata": {}, "outputs": [ @@ -671,7 +704,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 29, "id": "c178c3a3-f86c-4e80-a041-719ef2193b11", "metadata": {}, "outputs": [], @@ -681,7 +714,7 @@ }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 30, "id": "e4c1b466-1185-4664-8178-716068139f0c", "metadata": { "tags": [] @@ -703,7 +736,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 31, "id": "b41e37f5-45e2-49c7-af75-4457c7b9dec5", "metadata": {}, "outputs": [], @@ -724,7 +757,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 32, "id": "d5dc0078-ee70-45f3-8f0a-3dafa4b50ee4", "metadata": {}, "outputs": [ @@ -734,7 +767,7 @@ "{'groups': ['output', 'task'], 'nodes': ['MODULE', 'NAME', 'VERSION']}" ] }, - "execution_count": 31, + "execution_count": 32, "metadata": {}, "output_type": "execute_result" } @@ -745,7 +778,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 33, "id": "3cd9f120-9eb7-4f34-80cb-9477d492c4ae", "metadata": {}, "outputs": [ @@ -755,7 +788,7 @@ "{'groups': ['md_300', 'md_600', 'md_900'], 'nodes': []}" ] }, - "execution_count": 32, + "execution_count": 33, "metadata": {}, "output_type": "execute_result" } @@ -766,7 +799,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 34, "id": "d0621236-07c4-4843-99e0-4c460fc7fa89", "metadata": {}, "outputs": [ @@ -775,13 +808,13 @@ "output_type": "stream", "text": [ "total 1.9M\n", - "drwxr-xr-x 5 ponder ponder 4.0K 8. Jan 09:51 .\n", - "drwxr-xr-x 6 ponder ponder 4.0K 8. Jan 09:50 ..\n", - "drwxr-xr-x 3 ponder ponder 4.0K 8. Jan 09:50 md_300\n", - "drwxr-xr-x 3 ponder ponder 4.0K 8. Jan 09:50 md_600\n", - "drwxr-xr-x 3 ponder ponder 4.0K 8. Jan 09:51 md_900\n", - "-rw-r--r-- 1 ponder ponder 1.8M 8. Jan 09:51 project.h5\n", - "-rw-r--r-- 1 ponder ponder 20K 8. Jan 09:51 pyiron.db\n" + "drwxr-xr-x 5 poul poul 4.0K Jan 26 18:02 .\n", + "drwxr-xr-x 7 poul poul 4.0K Jan 26 18:02 ..\n", + "drwxr-xr-x 3 poul poul 4.0K Jan 26 18:01 md_300\n", + "drwxr-xr-x 3 poul poul 4.0K Jan 26 18:01 md_600\n", + "drwxr-xr-x 3 poul poul 4.0K Jan 26 18:02 md_900\n", + "-rw-r--r-- 1 poul poul 1.8M Jan 26 18:02 project.h5\n", + "-rw-r--r-- 1 poul poul 20K Jan 26 18:02 pyiron.db\n" ] } ], @@ -799,7 +832,7 @@ }, { "cell_type": "code", - "execution_count": 34, + "execution_count": 35, "id": "79a2bb61-0a5e-4a3a-b195-46d027738a0e", "metadata": {}, "outputs": [], @@ -809,7 +842,7 @@ }, { "cell_type": "code", - "execution_count": 35, + "execution_count": 36, "id": "b4e6e0c9-a2c6-40ab-884e-a46e16c37b04", "metadata": {}, "outputs": [ @@ -847,7 +880,7 @@ "Index: []" ] }, - "execution_count": 35, + "execution_count": 36, "metadata": {}, "output_type": "execute_result" } @@ -858,7 +891,7 @@ }, { "cell_type": "code", - "execution_count": 36, + "execution_count": 37, "id": "cef7c46f-551f-401e-96c2-214628e23967", "metadata": {}, "outputs": [ @@ -886,7 +919,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 38, "id": "e8a7ee30-d7a6-46fc-bf98-1b52c981470f", "metadata": {}, "outputs": [ @@ -947,7 +980,7 @@ "0 MurnaghanTask " ] }, - "execution_count": 37, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } @@ -958,7 +991,7 @@ }, { "cell_type": "code", - "execution_count": 38, + "execution_count": 39, "id": "30871447-3e20-46ee-a58e-853d4f4cb5d9", "metadata": {}, "outputs": [], @@ -976,7 +1009,7 @@ }, { "cell_type": "code", - "execution_count": 39, + "execution_count": 40, "id": "e63d43c1-341f-4ec0-b0cf-9cd5ead51926", "metadata": {}, "outputs": [ @@ -1051,7 +1084,7 @@ "1 AseMDTask " ] }, - "execution_count": 39, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } @@ -1070,17 +1103,17 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 41, "id": "80da39e2-76d1-42e6-977f-241d2683188d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "" + "" ] }, - "execution_count": 40, + "execution_count": 41, "metadata": {}, "output_type": "execute_result" } @@ -1099,7 +1132,7 @@ }, { "cell_type": "code", - "execution_count": 41, + "execution_count": 42, "id": "a567f96a-cbb3-4d2d-95d1-6dcecee7ddb8", "metadata": {}, "outputs": [ @@ -1188,7 +1221,7 @@ "2 AseMDTask " ] }, - "execution_count": 41, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -1214,7 +1247,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.11.0" + "version": "3.11.7" }, "widgets": { "application/vnd.jupyter.widget-state+json": { diff --git a/notebooks/tinybase/resources/lammps/bin/run_lammps_default.sh b/notebooks/tinybase/resources/lammps/bin/run_lammps_default.sh index 6fb8ec1c4..49c0d35eb 100755 --- a/notebooks/tinybase/resources/lammps/bin/run_lammps_default.sh +++ b/notebooks/tinybase/resources/lammps/bin/run_lammps_default.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -lmp_serial -in control.inp +lmp -in control.inp From 84f33e0bf3992d1e28549325a33bb0cbe63634a5 Mon Sep 17 00:00:00 2001 From: Marvin Poul Date: Fri, 26 Jan 2024 18:48:30 +0100 Subject: [PATCH 40/49] Correctly use new output interface in shell/lammps tasks --- pyiron_contrib/tinybase/lammps.py | 43 ++++++++++++++----------------- pyiron_contrib/tinybase/murn.py | 2 +- pyiron_contrib/tinybase/shell.py | 17 ++++++------ 3 files changed, 30 insertions(+), 32 deletions(-) diff --git a/pyiron_contrib/tinybase/lammps.py b/pyiron_contrib/tinybase/lammps.py index e7fe11305..741df2bb4 100644 --- a/pyiron_contrib/tinybase/lammps.py +++ b/pyiron_contrib/tinybase/lammps.py @@ -1,5 +1,4 @@ import os -from tempfile import TemporaryDirectory from pymatgen.io.lammps.outputs import ( parse_lammps_dumps, @@ -16,7 +15,7 @@ from pyiron_contrib.tinybase.container import ( AbstractInput, AbstractOutput, - StorageAttribute, + USER_REQUIRED, StructureInput, EnergyPotOutput, EnergyKinOutput, @@ -30,9 +29,8 @@ class LammpsInputInput(AbstractInput): - working_directory = StorageAttribute().type(str) - - calc_type = StorageAttribute() + working_directory: str = USER_REQUIRED + calc_type: str = USER_REQUIRED def calc_static(self): self.calc_type = "static" @@ -46,7 +44,7 @@ def check_ready(self): class LammpsInputOutput(AbstractOutput): - working_directory = StorageAttribute().type(str) + working_directory: str class LammpsInputTask(AbstractTask): @@ -64,10 +62,7 @@ class LammpsInputTask(AbstractTask): def _get_input(self): return LammpsInputInput() - def _get_output(self): - return LammpsInputOutput() - - def _execute(self, output): + def _execute(self): with open( os.path.join(self.input.working_directory, "structure.inp"), "w" ) as f: @@ -85,11 +80,13 @@ def _execute(self, output): control.calc_static() control.write_file(file_name="control.inp", cwd=self.input.working_directory) - output.working_directory = self.input.working_directory + return LammpsInputOutput( + working_directory = self.input.working_directory + ) class LammpsStaticParserInput(AbstractInput): - working_directory = StorageAttribute().type(str) + working_directory: str = USER_REQUIRED def check_ready(self): return self.working_directory is not None and super().check_ready() @@ -109,23 +106,23 @@ class LammpsStaticParserTask(AbstractTask): def _get_input(self): return LammpsStaticParserInput() - def _get_output(self): - return LammpsStaticOutput() - - def _execute(self, output): + def _execute(self): log = parse_lammps_log( os.path.join(self.input.working_directory, "log.lammps") )[-1] - output.energy_pot = energy_pot = log["PotEng"].iloc[-1] - output.energy_kin = log["TotEng"].iloc[-1] - energy_pot + energy_pot = log["PotEng"].iloc[-1] dump = list( parse_lammps_dumps(os.path.join(self.input.working_directory, "dump.out")) )[-1] - output.forces = dump.data[["fx", "fy", "fz"]].to_numpy() + return LammpsStaticOutput( + energy_pot=energy_pot, + energy_kin = log["TotEng"].iloc[-1] - energy_pot, + forces = dump.data[["fx", "fy", "fz"]].to_numpy() + ) class LammpsInput(StructureInput): - potential = StorageAttribute().type(str) + potential: str = USER_REQUIRED def list_potentials(self): """ @@ -159,18 +156,18 @@ def _execute(self): inp.input.calc_static() ret, out = inp.execute() if not ret.is_done(): - return ReturnStatus.aborted(f"Writing input failed: {ret.msg}") + return ReturnStatus.aborted(f"Writing input failed: {ret.msg}"), out lmp = ShellTask(capture_exceptions=self._capture_exceptions) lmp.input.command = ExecutablePathResolver("lammps", "lammps") lmp.input.working_directory = cwd ret, out = lmp.execute() if not ret.is_done(): - return ReturnStatus.aborted(f"Running lammps failed: {ret.msg}") + return ReturnStatus.aborted(f"Running lammps failed: {ret.msg}"), out psr = LammpsStaticParserTask(capture_exceptions=self._capture_exceptions) psr.input.working_directory = cwd ret, out = psr.execute() if not ret.is_done(): - return ReturnStatus.aborted(f"Parsing failed: {ret.msg}") + return ReturnStatus.aborted(f"Parsing failed: {ret.msg}"), out return out diff --git a/pyiron_contrib/tinybase/murn.py b/pyiron_contrib/tinybase/murn.py index 1a5db8b90..9859d3a28 100644 --- a/pyiron_contrib/tinybase/murn.py +++ b/pyiron_contrib/tinybase/murn.py @@ -64,7 +64,7 @@ def plot(self, per_atom=True): @property def equilibrium_volume(self): - inter = si.interp1d(self.volumes, self.energies) + inter = si.interp1d(self.volumes, self.energies, kind='cubic') return so.minimize_scalar( inter, bounds=(np.min(self.volumes), np.max(self.volumes)) ).x diff --git a/pyiron_contrib/tinybase/shell.py b/pyiron_contrib/tinybase/shell.py index fff94192f..68d0e8ac5 100644 --- a/pyiron_contrib/tinybase/shell.py +++ b/pyiron_contrib/tinybase/shell.py @@ -126,10 +126,7 @@ class ShellTask(AbstractTask): def _get_input(self): return ShellInput() - def _get_output(self): - return ShellOutput() - - def _execute(self, output): + def _execute(self): environ = dict(os.environ) environ.update({k: str(v) for k, v in self.input.environ.items()}) proc = subprocess.run( @@ -139,11 +136,15 @@ def _execute(self, output): encoding="utf8", env=environ, ) - output.stdout = proc.stdout - output.stderr = proc.stderr - output.returncode = proc.returncode + output = ShellOutput( + stdout = proc.stdout, + stderr = proc.stderr, + returncode = proc.returncode, + ) allowed_returncode = self.input.allowed_returncode if allowed_returncode is None: allowed_returncode = [0] if proc.returncode not in allowed_returncode: - return ReturnStatus("aborted", f"non-zero error code {proc.returncode}") + return ReturnStatus("aborted", f"non-zero error code {proc.returncode}"), output + else: + return output From 2468982b0834c271da80b0284a91a3c4812e135d Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Fri, 26 Jan 2024 18:52:31 +0000 Subject: [PATCH 41/49] [dependabot skip] Update env file --- docs/environment.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/environment.yml b/docs/environment.yml index c73865bdc..0b199e99f 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -2,7 +2,10 @@ channels: - conda-forge dependencies: - ipykernel +- myst-parser - nbsphinx +- sphinx-gallery +- sphinx-rtd-theme - ase =3.22.1 - coveralls - coverage From a6989f237bdbf7bf9214d3346582998d17ad36d3 Mon Sep 17 00:00:00 2001 From: Leimeroth Date: Mon, 29 Jan 2024 10:44:54 +0100 Subject: [PATCH 42/49] call super init --- pyiron_contrib/atomistics/atomicrex/function_factory.py | 1 + 1 file changed, 1 insertion(+) diff --git a/pyiron_contrib/atomistics/atomicrex/function_factory.py b/pyiron_contrib/atomistics/atomicrex/function_factory.py index 9a617ba61..d5e8927b8 100644 --- a/pyiron_contrib/atomistics/atomicrex/function_factory.py +++ b/pyiron_contrib/atomistics/atomicrex/function_factory.py @@ -1392,6 +1392,7 @@ def __init__( fitable=True, tag=None, ): + super().__init__() self.param = param self.start_val = start_val self.enabled = enabled From e88f7b6e4c1b629ccee8c24625e0bd4974ef4247 Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Mon, 29 Jan 2024 09:48:31 +0000 Subject: [PATCH 43/49] Format black --- .../atomistics/atomicrex/potential_factory.py | 6 +++--- .../atomistics/atomicrex/structure_list.py | 12 ++++++------ pyiron_contrib/atomistics/interactive/montecarlo.py | 6 +++--- pyiron_contrib/atomistics/lammps/drag.py | 6 +++--- pyiron_contrib/atomistics/meamfit/meamfit.py | 12 ++++++------ pyiron_contrib/atomistics/runner/storageclasses.py | 4 +--- pyiron_contrib/jobfactories/__init__.py | 2 +- pyiron_contrib/protocol/utils/pptree.py | 4 ++-- 8 files changed, 25 insertions(+), 27 deletions(-) diff --git a/pyiron_contrib/atomistics/atomicrex/potential_factory.py b/pyiron_contrib/atomistics/atomicrex/potential_factory.py index f22a9953c..641f44186 100644 --- a/pyiron_contrib/atomistics/atomicrex/potential_factory.py +++ b/pyiron_contrib/atomistics/atomicrex/potential_factory.py @@ -1210,9 +1210,9 @@ def read_eam_fs_file(filename): f.readline() elements[element]["F"] = np.fromfile(f, count=Nrho, sep=" ") for rho_element in elements: - elements[element][ - "rho_{}{}".format(element, rho_element) - ] = np.fromfile(f, count=Nr, sep=" ") + elements[element]["rho_{}{}".format(element, rho_element)] = ( + np.fromfile(f, count=Nr, sep=" ") + ) # V_ij = V_ji so it is written only once in the file => avoid attempts to read it twice # with a list of elements where it has been read diff --git a/pyiron_contrib/atomistics/atomicrex/structure_list.py b/pyiron_contrib/atomistics/atomicrex/structure_list.py index 0190c9436..729f5e34e 100644 --- a/pyiron_contrib/atomistics/atomicrex/structure_list.py +++ b/pyiron_contrib/atomistics/atomicrex/structure_list.py @@ -567,9 +567,9 @@ def add_training_data(self, container: TrainingContainer) -> None: atomic_forces_storage._per_chunk_arrays["tolerance"][ 0 : storage.num_chunks ] = 0.01 - atomic_forces_storage._per_element_arrays[ - "target_val" - ] = storage._per_element_arrays["forces"][0 : storage.num_elements] + atomic_forces_storage._per_element_arrays["target_val"] = ( + storage._per_element_arrays["forces"][0 : storage.num_elements] + ) if "atomic-energy" not in self.fit_properties: self.fit_properties["atomic-energy"] = FlattenedARScalarProperty( @@ -600,9 +600,9 @@ def _to_TrainingStorage(self, final: bool = False) -> TrainingStorage: * self._structures._per_chunk_arrays["length"] ) storage.add_array(name="forces", shape=(3,), per="element") - storage._per_element_arrays["forces"][ - 0 : storage.num_elements - ] = self.fit_properties["atomic-forces"][val_str] + storage._per_element_arrays["forces"][0 : storage.num_elements] = ( + self.fit_properties["atomic-forces"][val_str] + ) return storage def get_training_data(self) -> TrainingStorage: diff --git a/pyiron_contrib/atomistics/interactive/montecarlo.py b/pyiron_contrib/atomistics/interactive/montecarlo.py index 5557c7981..8ac3f5fad 100644 --- a/pyiron_contrib/atomistics/interactive/montecarlo.py +++ b/pyiron_contrib/atomistics/interactive/montecarlo.py @@ -297,9 +297,9 @@ def _store_output_in_hdf5( h5[ "energy_accepted_" + str(int(temperature)) + "_" + str(int(round_nr)) ] = np.array(energy_accepted_lst) - h5[ - "energy_total_" + str(int(temperature)) + "_" + str(int(round_nr)) - ] = np.array(energy_total_lst) + h5["energy_total_" + str(int(temperature)) + "_" + str(int(round_nr))] = ( + np.array(energy_total_lst) + ) @staticmethod def _monte_carlo_accept_step(temperature, e_step, e_prev): diff --git a/pyiron_contrib/atomistics/lammps/drag.py b/pyiron_contrib/atomistics/lammps/drag.py index 1741be581..9cd32d024 100644 --- a/pyiron_contrib/atomistics/lammps/drag.py +++ b/pyiron_contrib/atomistics/lammps/drag.py @@ -64,9 +64,9 @@ def setup_lmp_input(lmp, n_atoms=None, direction=None, fix_id=-1): lmp.input.control["group___free"] = "subtract all fixed" if direction is None: for ii, xx in enumerate(["x", "y", "z"]): - lmp.input.control[ - f"variable___f{xx}_free" - ] = f"equal f{xx}[{fix_id}]/{n_atoms}" + lmp.input.control[f"variable___f{xx}_free"] = ( + f"equal f{xx}[{fix_id}]/{n_atoms}" + ) lmp.input.control[f"variable___f{xx}_fixed"] = f"equal -f{xx}[{fix_id}]" else: direction = np.array(direction) / np.linalg.norm(direction) diff --git a/pyiron_contrib/atomistics/meamfit/meamfit.py b/pyiron_contrib/atomistics/meamfit/meamfit.py index 5841dc192..19e8113f5 100644 --- a/pyiron_contrib/atomistics/meamfit/meamfit.py +++ b/pyiron_contrib/atomistics/meamfit/meamfit.py @@ -310,16 +310,16 @@ def to_hdf(self, hdf=None, group_name=None): super(MeamFit, self).to_hdf(hdf=hdf, group_name=group_name) with self.project_hdf5.open("input") as hdf5_input: self.input.to_hdf(hdf5_input) - hdf5_input[ - "calculation" - ] = self._calculation_dataframe.reset_index().to_dict(orient="list") + hdf5_input["calculation"] = ( + self._calculation_dataframe.reset_index().to_dict(orient="list") + ) with self.project_hdf5.open("output") as hdf5_output: hdf5_output["performance"] = self._potential_performance_dataframe.to_dict( orient="list" ) - hdf5_output[ - "timings" - ] = self._potential_timings_dataframe.reset_index().to_dict(orient="list") + hdf5_output["timings"] = ( + self._potential_timings_dataframe.reset_index().to_dict(orient="list") + ) def from_hdf(self, hdf=None, group_name=None): super(MeamFit, self).from_hdf(hdf=hdf, group_name=group_name) diff --git a/pyiron_contrib/atomistics/runner/storageclasses.py b/pyiron_contrib/atomistics/runner/storageclasses.py index 2aa4ae4eb..ce56b22c6 100644 --- a/pyiron_contrib/atomistics/runner/storageclasses.py +++ b/pyiron_contrib/atomistics/runner/storageclasses.py @@ -214,9 +214,7 @@ def _to_hdf(self, hdf: ProjectHDFio) -> None: for prop in self.runnerase_properties: hdf[f"{prop}"] = self.__dict__[prop] - def _from_hdf( - self, hdf: ProjectHDFio, version: Optional[str] = None - ) -> Union[ + def _from_hdf(self, hdf: ProjectHDFio, version: Optional[str] = None) -> Union[ RunnerSplitTrainTest, RunnerWeights, RunnerScaling, diff --git a/pyiron_contrib/jobfactories/__init__.py b/pyiron_contrib/jobfactories/__init__.py index 6ce135bea..eccc6d110 100644 --- a/pyiron_contrib/jobfactories/__init__.py +++ b/pyiron_contrib/jobfactories/__init__.py @@ -313,7 +313,7 @@ def incar(self): def enable_nband_hack(self, nelec: Dict[str, int]): """ Set a per element NBANDS estimate. - + Structures far from (global) equilibrium may require more empty states than the default VASP provides. This allows to provide a mapping between elements and integers that give a "per element" NBAND that is summed over all atoms in a structure. diff --git a/pyiron_contrib/protocol/utils/pptree.py b/pyiron_contrib/protocol/utils/pptree.py index 93ea4ee55..b784c3cf7 100644 --- a/pyiron_contrib/protocol/utils/pptree.py +++ b/pyiron_contrib/protocol/utils/pptree.py @@ -55,8 +55,8 @@ def print_tree(current_node, indent="", last="downup", name="root", file=sys.std Returns: """ - children = ( - lambda node: [ + children = lambda node: ( + [ (k, v) if isinstance(v, dict) else ("%s: %s" % (k, v), None) for k, v in node.items() ] From 7439ac51e2c5654fb03276fc681a579efcdf8a9e Mon Sep 17 00:00:00 2001 From: Leimeroth Date: Mon, 29 Jan 2024 10:57:03 +0100 Subject: [PATCH 44/49] avoid name conflicts --- pyiron_contrib/atomistics/atomicrex/function_factory.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/pyiron_contrib/atomistics/atomicrex/function_factory.py b/pyiron_contrib/atomistics/atomicrex/function_factory.py index d5e8927b8..b96bc56e0 100644 --- a/pyiron_contrib/atomistics/atomicrex/function_factory.py +++ b/pyiron_contrib/atomistics/atomicrex/function_factory.py @@ -343,7 +343,7 @@ def copy_final_to_initial_params(self, filter_func=None): def lock_parameters(self, filter_func=None): for param in self.parameters.values(): - param.lock(filter_func=filter_func) + param.lock_value(filter_func=filter_func) def randomize_parameters(self, rng, filter_func=None): for param in self.parameters.values(): @@ -645,8 +645,8 @@ def copy_final_to_initial_params(self, filter_func=None): def lock_parameters(self, filter_func=None): super().lock_parameters(filter_func=filter_func) - self.derivative_left.lock(filter_func=filter_func) - self.derivative_right.lock(filter_func=filter_func) + self.derivative_left.lock_value(filter_func=filter_func) + self.derivative_right.lock_value(filter_func=filter_func) def set_max_values(self, constant=None, factor=None, filter_func=None): super().set_max_values(constant, factor, filter_func) @@ -1462,7 +1462,7 @@ def set_min_val(self, constant=None, factor=None, filter_func=None): if factor is not None: self.min_val = -abs(self.start_val) * factor - def lock(self, filter_func=None): + def lock_value(self, filter_func=None): if filter_func is not None: if not filter_func(self): return From 07135444f27187aee5a545c9e807fa91f28a5557 Mon Sep 17 00:00:00 2001 From: samwaseda Date: Wed, 31 Jan 2024 07:38:07 +0000 Subject: [PATCH 45/49] add longer explanation --- pyiron_contrib/atomistics/lammps/potentials.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/pyiron_contrib/atomistics/lammps/potentials.py b/pyiron_contrib/atomistics/lammps/potentials.py index 655c1c402..3f159ea92 100644 --- a/pyiron_contrib/atomistics/lammps/potentials.py +++ b/pyiron_contrib/atomistics/lammps/potentials.py @@ -496,7 +496,10 @@ def df(self): df = self._df_candidates.iloc[0] if len(self._df_candidates) > 1: warnings.warn( - f"Potential not uniquely specified - use default {df.Name}" + f"Potential not uniquely specified - use default {df.Name}\n" + "In order to choose a potential, call `list_potentials` or" + " `view_potentials` and redefine the library by setting the" + " argument `name`, i.e. `Library(name=potential_name)`." ) self._initialize_df( pair_style=self._get_pair_style(df.Config), From 42147d9e5f740590e74dc8d01a84a7d8f5cf803e Mon Sep 17 00:00:00 2001 From: pyiron-runner Date: Wed, 31 Jan 2024 07:53:59 +0000 Subject: [PATCH 46/49] [dependabot skip] Update env file --- docs/environment.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/environment.yml b/docs/environment.yml index eeddf4ad0..00c66ac6a 100644 --- a/docs/environment.yml +++ b/docs/environment.yml @@ -2,7 +2,10 @@ channels: - conda-forge dependencies: - ipykernel +- myst-parser - nbsphinx +- sphinx-gallery +- sphinx-rtd-theme - ase =3.22.1 - coveralls - coverage From 39995a3c0311907d774e9758d3cd938355a16644 Mon Sep 17 00:00:00 2001 From: liamhuber Date: Fri, 2 Feb 2024 11:05:10 -0800 Subject: [PATCH 47/49] Update shell notebook The `ShellTask` now requires working directory input, and I un-hardcoded the resource path. --- notebooks/tinybase/Shell.ipynb | 299 ++++++++++++++++++--------------- 1 file changed, 159 insertions(+), 140 deletions(-) diff --git a/notebooks/tinybase/Shell.ipynb b/notebooks/tinybase/Shell.ipynb index 933432b6a..3263acf7b 100644 --- a/notebooks/tinybase/Shell.ipynb +++ b/notebooks/tinybase/Shell.ipynb @@ -8,38 +8,10 @@ "tags": [] }, "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "/home/poul/pyiron/contrib/pyiron_contrib/__init__.py:9: UserWarning: pyiron module not found, importing Project from pyiron_base\n", - " warnings.warn(\"pyiron module not found, importing Project from pyiron_base\")\n" - ] - }, - { - "data": { - "text/html": [ - "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/html": [
-       "
\n"
-      ],
-      "text/plain": []
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "8ea7a18fdcfb4fdf82823e525cda825e",
+       "model_id": "d4e54a8ed92444e48502ea9c35497c00",
        "version_major": 2,
        "version_minor": 0
       },
@@ -50,9 +22,21 @@
     }
    ],
    "source": [
+    "from pathlib import Path\n",
+    "\n",
     "from pyiron_contrib.tinybase.shell import ShellTask"
    ]
   },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "id": "1a93a8dd-e50b-43be-afb7-738524b0c201",
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "cwd = Path.cwd()"
+   ]
+  },
   {
    "cell_type": "markdown",
    "id": "48015102-7d5f-4079-98b8-a1a23937b9da",
@@ -63,19 +47,39 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
-   "id": "f3ed1dd3-0a67-4177-9e3a-808fa93f1810",
-   "metadata": {
-    "tags": []
-   },
+   "execution_count": 3,
+   "id": "7a799973-df87-47d9-bdf6-81a3f0691184",
+   "metadata": {},
    "outputs": [],
    "source": [
-    "sh = ShellTask()"
+    "sh = ShellTask()\n",
+    "ret, out = sh.execute()"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": 4,
+   "id": "d4f4743a-3e7d-4d4c-a8d0-c47f03445e3c",
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "ReturnStatus(Code.ABORTED, Input not ready!)"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "ret"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
    "id": "561d682b-60ad-4420-9294-5dfc96af7c87",
    "metadata": {
     "tags": []
@@ -83,12 +87,13 @@
    "outputs": [],
    "source": [
     "sh.input.command = 'echo'\n",
-    "sh.input.arguments = ['foo']"
+    "sh.input.arguments = ['foo']\n",
+    "sh.input.working_directory = cwd"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": 6,
    "id": "aa580b7e-67b0-4afa-8ab9-8ae1aa4baf08",
    "metadata": {
     "tags": []
@@ -100,7 +105,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": 7,
    "id": "e87ee2a1-8851-4e65-b6fd-03ccaa496229",
    "metadata": {
     "tags": []
@@ -112,7 +117,7 @@
        "'foo\\n'"
       ]
      },
-     "execution_count": 5,
+     "execution_count": 7,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -123,7 +128,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": 8,
    "id": "0ec6cc97-dcdf-48d1-bd61-c0a79f47db24",
    "metadata": {
     "tags": []
@@ -135,7 +140,7 @@
        "''"
       ]
      },
-     "execution_count": 6,
+     "execution_count": 8,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -146,7 +151,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": 9,
    "id": "78f61663-b405-4979-8970-c6d1049998c0",
    "metadata": {
     "tags": []
@@ -158,7 +163,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": 10,
    "id": "a3e52d0a-43ff-4702-8447-f4a00c8d32bd",
    "metadata": {
     "tags": []
@@ -167,12 +172,12 @@
    "source": [
     "sh.input.command = 'pwd'\n",
     "sh.input.arguments = []\n",
-    "sh.input.working_directory = '/home/poul'"
+    "sh.input.working_directory = cwd"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": 11,
    "id": "932f18f3-6d39-49d5-b7ed-5a13e5421f1a",
    "metadata": {
     "tags": []
@@ -184,7 +189,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": 12,
    "id": "022a4387-5441-4181-86fa-60ae9baacaee",
    "metadata": {
     "tags": []
@@ -193,10 +198,10 @@
     {
      "data": {
       "text/plain": [
-       "'/home/poul\\n'"
+       "'/Users/huber/work/pyiron/pyiron_contrib/notebooks/tinybase\\n'"
       ]
      },
-     "execution_count": 10,
+     "execution_count": 12,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -207,7 +212,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 13,
    "id": "431b11c3-4054-412f-ae2f-0c71044e95e1",
    "metadata": {
     "tags": []
@@ -219,7 +224,7 @@
        "''"
       ]
      },
-     "execution_count": 11,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -238,7 +243,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 14,
    "id": "1d811404-5720-4194-9d09-a5e2acd1eff6",
    "metadata": {
     "tags": []
@@ -250,7 +255,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 15,
    "id": "281e6833-dacd-4622-b87f-8f25d2218a86",
    "metadata": {
     "tags": []
@@ -258,12 +263,13 @@
    "outputs": [],
    "source": [
     "sh.input.command = 'sh'\n",
-    "sh.input.arguments = ['-c', 'echo foo; echo bar 1>&2; exit 2']"
+    "sh.input.arguments = ['-c', 'echo foo; echo bar 1>&2; exit 2']\n",
+    "sh.input.working_directory = cwd"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 16,
    "id": "08ee6439-e617-4db1-a3a5-f7e0df73ac0a",
    "metadata": {
     "tags": []
@@ -275,7 +281,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
+   "execution_count": 17,
    "id": "f428a199-fb64-4b3b-9b65-f7f58e5e05b0",
    "metadata": {
     "tags": []
@@ -287,7 +293,7 @@
        "ReturnStatus(Code.ABORTED, non-zero error code 2)"
       ]
      },
-     "execution_count": 15,
+     "execution_count": 17,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -298,7 +304,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 16,
+   "execution_count": 18,
    "id": "1e5ed4a5-cb51-45ff-b541-830476630dac",
    "metadata": {
     "tags": []
@@ -310,7 +316,7 @@
        "2"
       ]
      },
-     "execution_count": 16,
+     "execution_count": 18,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -321,7 +327,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 17,
+   "execution_count": 19,
    "id": "75eafdd9-c25e-4a57-b040-6b460fd5d06d",
    "metadata": {
     "tags": []
@@ -333,7 +339,7 @@
        "'foo\\n'"
       ]
      },
-     "execution_count": 17,
+     "execution_count": 19,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -344,7 +350,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 18,
+   "execution_count": 20,
    "id": "07c7d569-3bf3-44c7-bfba-50ec28286b76",
    "metadata": {
     "tags": []
@@ -356,7 +362,7 @@
        "'bar\\n'"
       ]
      },
-     "execution_count": 18,
+     "execution_count": 20,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -366,16 +372,16 @@
    ]
   },
   {
-   "cell_type": "code",
-   "execution_count": null,
-   "id": "dd3d8a89-ec3d-4260-b53e-1d4d8df83a15",
+   "cell_type": "markdown",
+   "id": "58a5e95a-9156-4bd9-83ce-52a54718a297",
    "metadata": {},
-   "outputs": [],
-   "source": []
+   "source": [
+    "Now we'll explicitly allow return code 2"
+   ]
   },
   {
    "cell_type": "code",
-   "execution_count": 19,
+   "execution_count": 21,
    "id": "18c5432c-f6b1-49ca-a0ef-9f232102beb4",
    "metadata": {
     "tags": []
@@ -387,7 +393,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 20,
+   "execution_count": 22,
    "id": "22cb0952-2cd7-40b5-895c-58d41375903f",
    "metadata": {
     "tags": []
@@ -395,12 +401,13 @@
    "outputs": [],
    "source": [
     "sh.input.command = 'sh'\n",
-    "sh.input.arguments = ['-c', 'echo foo; echo bar 1>&2; exit 2']"
+    "sh.input.arguments = ['-c', 'echo foo; echo bar 1>&2; exit 2']\n",
+    "sh.input.working_directory = cwd"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 21,
+   "execution_count": 23,
    "id": "5df20abb-b0ba-428d-850e-fc6654a92afa",
    "metadata": {
     "tags": []
@@ -412,7 +419,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 22,
+   "execution_count": 24,
    "id": "b7bae225-5f1a-4f4b-a23d-9e0c84397b8c",
    "metadata": {
     "tags": []
@@ -424,7 +431,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 23,
+   "execution_count": 25,
    "id": "5419b35e-1bfd-49d2-88d0-b9e58841f7d2",
    "metadata": {
     "tags": []
@@ -436,7 +443,7 @@
        "ReturnStatus(Code.DONE, None)"
       ]
      },
-     "execution_count": 23,
+     "execution_count": 25,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -447,7 +454,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 24,
+   "execution_count": 26,
    "id": "5f5177ad-cd61-4fcc-96b9-d2ed701f828b",
    "metadata": {
     "tags": []
@@ -459,7 +466,7 @@
        "2"
       ]
      },
-     "execution_count": 24,
+     "execution_count": 26,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -470,7 +477,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 25,
+   "execution_count": 27,
    "id": "9dc082df-fa8e-4ab7-8116-9756e5fd5fe9",
    "metadata": {
     "tags": []
@@ -482,7 +489,7 @@
        "'foo\\n'"
       ]
      },
-     "execution_count": 25,
+     "execution_count": 27,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -493,7 +500,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 26,
+   "execution_count": 28,
    "id": "8b4d800f-e22b-43ae-8f55-2c06ebf30741",
    "metadata": {
     "tags": []
@@ -505,7 +512,7 @@
        "'bar\\n'"
       ]
      },
-     "execution_count": 26,
+     "execution_count": 28,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -524,7 +531,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 27,
+   "execution_count": 29,
    "id": "aade0746-588e-4775-94c3-3f2e1da2ed55",
    "metadata": {
     "tags": []
@@ -536,7 +543,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 28,
+   "execution_count": 30,
    "id": "cffaad98-6f8c-47a9-8584-fc038ba455bb",
    "metadata": {
     "tags": []
@@ -544,12 +551,13 @@
    "outputs": [],
    "source": [
     "sh.input.command = 'sh'\n",
-    "sh.input.arguments = ['-c', 'echo $FOO; echo $BAR 1>&2']"
+    "sh.input.arguments = ['-c', 'echo $FOO; echo $BAR 1>&2']\n",
+    "sh.input.working_directory = cwd"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 29,
+   "execution_count": 31,
    "id": "825f86fb-7055-401f-be3a-d52414129d4f",
    "metadata": {
     "tags": []
@@ -562,7 +570,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 30,
+   "execution_count": 32,
    "id": "12bbd896-5f26-4e33-b382-796b7d4312a7",
    "metadata": {
     "tags": []
@@ -574,7 +582,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 31,
+   "execution_count": 33,
    "id": "625735ee-df96-4627-91ca-1fe9d389431e",
    "metadata": {
     "tags": []
@@ -586,7 +594,7 @@
        "ReturnStatus(Code.DONE, None)"
       ]
      },
-     "execution_count": 31,
+     "execution_count": 33,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -597,7 +605,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 32,
+   "execution_count": 34,
    "id": "5eeb62b2-ce78-4864-8cf5-e168d6bf9eb7",
    "metadata": {
     "tags": []
@@ -609,7 +617,7 @@
        "0"
       ]
      },
-     "execution_count": 32,
+     "execution_count": 34,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -620,7 +628,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 33,
+   "execution_count": 35,
    "id": "d5bc1aa1-4579-45ce-ba47-20b731eec066",
    "metadata": {
     "tags": []
@@ -632,7 +640,7 @@
        "'42\\n'"
       ]
      },
-     "execution_count": 33,
+     "execution_count": 35,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -643,7 +651,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 34,
+   "execution_count": 36,
    "id": "53dcc8b0-a8c4-4410-8990-78997dd1f9e9",
    "metadata": {
     "tags": []
@@ -655,7 +663,7 @@
        "'ERROR!\\n'"
       ]
      },
-     "execution_count": 34,
+     "execution_count": 36,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -674,7 +682,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 35,
+   "execution_count": 37,
    "id": "9feaa502-d16a-4cac-bb36-e681c85a0a63",
    "metadata": {},
    "outputs": [],
@@ -684,19 +692,19 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 36,
+   "execution_count": 38,
    "id": "8c340f6c-c687-4461-9c33-f98b768773d6",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "state.settings.resource_paths.insert(0, '/home/runner/work/pyiron_contrib/pyiron_contrib/notebooks/tinybase/resources')"
+    "state.settings.resource_paths.insert(0, str(cwd / \"resources\"))"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 37,
+   "execution_count": 39,
    "id": "ab27d95c-3d7c-4710-9ff7-7de523086c6d",
    "metadata": {
     "tags": []
@@ -705,11 +713,11 @@
     {
      "data": {
       "text/plain": [
-       "['/home/poul/pyiron/contrib/notebooks/tinybase/resources',\n",
-       " '/home/poul/micromamba/envs/contrib/share/pyiron']"
+       "['/Users/huber/work/pyiron/pyiron_contrib/notebooks/tinybase/resources',\n",
+       " '/Users/huber/anaconda3/envs/pyiron_311/share/pyiron']"
       ]
      },
-     "execution_count": 37,
+     "execution_count": 39,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -720,7 +728,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 38,
+   "execution_count": 40,
    "id": "7e1bb029-a7b1-488c-8852-f0223c2e477a",
    "metadata": {
     "tags": []
@@ -732,7 +740,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 39,
+   "execution_count": 41,
    "id": "9e9b280d-917c-4c11-8eee-140312f3455e",
    "metadata": {
     "tags": []
@@ -741,11 +749,11 @@
     {
      "data": {
       "text/plain": [
-       "['/home/poul/pyiron/contrib/notebooks/tinybase/resources/test/bin/run_hello_1.2.3.sh',\n",
-       " '/home/poul/pyiron/contrib/notebooks/tinybase/resources/test/bin/run_hello_1.2.4.sh']"
+       "['/Users/huber/work/pyiron/pyiron_contrib/notebooks/tinybase/resources/test/bin/run_hello_1.2.3.sh',\n",
+       " '/Users/huber/work/pyiron/pyiron_contrib/notebooks/tinybase/resources/test/bin/run_hello_1.2.4.sh']"
       ]
      },
-     "execution_count": 39,
+     "execution_count": 41,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -756,7 +764,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 40,
+   "execution_count": 42,
    "id": "03822deb-ea98-4f07-93cf-b8af6028a856",
    "metadata": {
     "tags": []
@@ -768,7 +776,7 @@
        "['1.2.4', '1.2.3']"
       ]
      },
-     "execution_count": 40,
+     "execution_count": 42,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -779,7 +787,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 41,
+   "execution_count": 43,
    "id": "c22c772c-b7c5-4e9e-9ddf-74da2bba1f87",
    "metadata": {
     "tags": []
@@ -791,19 +799,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 42,
+   "execution_count": 44,
    "id": "37c7af44-b517-4f59-8e09-071e597d75cc",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "sh.input.command = res"
+    "sh.input.command = res\n",
+    "sh.input.working_directory = cwd"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 43,
+   "execution_count": 45,
    "id": "4fd337b7-9241-4afb-a90f-5e11990f4e41",
    "metadata": {
     "tags": []
@@ -815,7 +824,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 44,
+   "execution_count": 46,
    "id": "ce4eebc6-bad4-46d4-8598-8f706e1b25ba",
    "metadata": {
     "tags": []
@@ -827,7 +836,7 @@
        "ReturnStatus(Code.DONE, None)"
       ]
      },
-     "execution_count": 44,
+     "execution_count": 46,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -838,7 +847,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 45,
+   "execution_count": 47,
    "id": "ad6f0c64-79bc-4f5c-b86f-fee016a32df8",
    "metadata": {
     "tags": []
@@ -850,7 +859,7 @@
        "0"
       ]
      },
-     "execution_count": 45,
+     "execution_count": 47,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -861,7 +870,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 46,
+   "execution_count": 48,
    "id": "393c3bf1-a41f-45a9-911f-8d7bbaf7d102",
    "metadata": {
     "tags": []
@@ -873,7 +882,7 @@
        "'HelloWorld!\\n'"
       ]
      },
-     "execution_count": 46,
+     "execution_count": 48,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -884,7 +893,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 47,
+   "execution_count": 49,
    "id": "cdc3df94-c4c5-477b-833b-310c95436c56",
    "metadata": {
     "tags": []
@@ -896,7 +905,7 @@
        "''"
       ]
      },
-     "execution_count": 47,
+     "execution_count": 49,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -915,7 +924,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 48,
+   "execution_count": 50,
    "id": "626cd697-f96c-46b2-b7ca-88beab3c1ff7",
    "metadata": {
     "tags": []
@@ -927,19 +936,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 49,
+   "execution_count": 51,
    "id": "f2cfd062-3b0f-4a48-a52a-305a9ad643e9",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "sh.input.command = ExecutablePathResolver('test', 'hello', version='1.2.4')"
+    "sh.input.command = ExecutablePathResolver('test', 'hello', version='1.2.4')\n",
+    "sh.input.working_directory = cwd"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 50,
+   "execution_count": 52,
    "id": "573a508f-ead5-4177-85a6-19ed5b27b057",
    "metadata": {
     "tags": []
@@ -951,7 +961,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 51,
+   "execution_count": 53,
    "id": "4197e3fd-5e3e-47bb-b49d-bac18d587d6c",
    "metadata": {
     "tags": []
@@ -963,7 +973,7 @@
        "ReturnStatus(Code.DONE, None)"
       ]
      },
-     "execution_count": 51,
+     "execution_count": 53,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -974,7 +984,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 52,
+   "execution_count": 54,
    "id": "c6ebec7f-c8d7-41cf-8222-7b9829c38e19",
    "metadata": {
     "tags": []
@@ -986,7 +996,7 @@
        "0"
       ]
      },
-     "execution_count": 52,
+     "execution_count": 54,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -997,7 +1007,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 53,
+   "execution_count": 55,
    "id": "efd51d34-3dc0-4a34-9dde-8a11261c5a7a",
    "metadata": {
     "tags": []
@@ -1009,7 +1019,7 @@
        "'Hello World!\\n'"
       ]
      },
-     "execution_count": 53,
+     "execution_count": 55,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1028,7 +1038,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 54,
+   "execution_count": 56,
    "id": "8e015724-bbea-4463-a43e-2e0b84c1ca2d",
    "metadata": {
     "tags": []
@@ -1040,19 +1050,20 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 55,
+   "execution_count": 57,
    "id": "7b86e8ee-29c1-4a99-bb7e-0d9564cb8e3a",
    "metadata": {
     "tags": []
    },
    "outputs": [],
    "source": [
-    "sh.input.command = ExecutablePathResolver('test', 'hello')"
+    "sh.input.command = ExecutablePathResolver('test', 'hello')\n",
+    "sh.input.working_directory = cwd"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 56,
+   "execution_count": 58,
    "id": "6d1d8fdb-3ca8-4184-9b55-f82ed9719a37",
    "metadata": {
     "tags": []
@@ -1064,7 +1075,7 @@
        "['1.2.4', '1.2.3']"
       ]
      },
-     "execution_count": 56,
+     "execution_count": 58,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1075,7 +1086,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 57,
+   "execution_count": 59,
    "id": "b276fa87-513f-41b9-86fa-39c54dcbb71e",
    "metadata": {
     "tags": []
@@ -1087,7 +1098,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 58,
+   "execution_count": 60,
    "id": "3a85fcd5-d80f-4197-8e8a-1b32c4f78ba5",
    "metadata": {
     "tags": []
@@ -1099,7 +1110,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 59,
+   "execution_count": 61,
    "id": "03566ee2-7f64-48d6-9cc7-97be44bc41c8",
    "metadata": {
     "tags": []
@@ -1111,7 +1122,7 @@
        "'Hello World!\\n'"
       ]
      },
-     "execution_count": 59,
+     "execution_count": 61,
      "metadata": {},
      "output_type": "execute_result"
     }
@@ -1119,6 +1130,14 @@
    "source": [
     "out.stdout"
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "aa926850-e673-4590-a29c-8bdc4682f7b7",
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
@@ -1137,7 +1156,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.10.8"
+   "version": "3.11.7"
   }
  },
  "nbformat": 4,

From 4d1de6f136db9f12b080215fc4b85afec552aae5 Mon Sep 17 00:00:00 2001
From: pyiron-runner 
Date: Fri, 2 Feb 2024 19:07:22 +0000
Subject: [PATCH 48/49] Format black

---
 .../atomistics/atomicrex/potential_factory.py        |  6 +++---
 .../atomistics/atomicrex/structure_list.py           | 12 ++++++------
 pyiron_contrib/atomistics/interactive/montecarlo.py  |  6 +++---
 pyiron_contrib/atomistics/lammps/drag.py             |  6 +++---
 pyiron_contrib/atomistics/meamfit/meamfit.py         | 12 ++++++------
 pyiron_contrib/atomistics/runner/storageclasses.py   |  4 +---
 pyiron_contrib/protocol/utils/pptree.py              |  4 ++--
 pyiron_contrib/tinybase/lammps.py                    | 10 ++++------
 pyiron_contrib/tinybase/murn.py                      |  2 +-
 pyiron_contrib/tinybase/shell.py                     | 11 +++++++----
 10 files changed, 36 insertions(+), 37 deletions(-)

diff --git a/pyiron_contrib/atomistics/atomicrex/potential_factory.py b/pyiron_contrib/atomistics/atomicrex/potential_factory.py
index f22a9953c..641f44186 100644
--- a/pyiron_contrib/atomistics/atomicrex/potential_factory.py
+++ b/pyiron_contrib/atomistics/atomicrex/potential_factory.py
@@ -1210,9 +1210,9 @@ def read_eam_fs_file(filename):
             f.readline()
             elements[element]["F"] = np.fromfile(f, count=Nrho, sep=" ")
             for rho_element in elements:
-                elements[element][
-                    "rho_{}{}".format(element, rho_element)
-                ] = np.fromfile(f, count=Nr, sep=" ")
+                elements[element]["rho_{}{}".format(element, rho_element)] = (
+                    np.fromfile(f, count=Nr, sep=" ")
+                )
 
         # V_ij = V_ji so it is written only once in the file => avoid attempts to read it twice
         # with a list of elements where it has been read
diff --git a/pyiron_contrib/atomistics/atomicrex/structure_list.py b/pyiron_contrib/atomistics/atomicrex/structure_list.py
index 0190c9436..729f5e34e 100644
--- a/pyiron_contrib/atomistics/atomicrex/structure_list.py
+++ b/pyiron_contrib/atomistics/atomicrex/structure_list.py
@@ -567,9 +567,9 @@ def add_training_data(self, container: TrainingContainer) -> None:
         atomic_forces_storage._per_chunk_arrays["tolerance"][
             0 : storage.num_chunks
         ] = 0.01
-        atomic_forces_storage._per_element_arrays[
-            "target_val"
-        ] = storage._per_element_arrays["forces"][0 : storage.num_elements]
+        atomic_forces_storage._per_element_arrays["target_val"] = (
+            storage._per_element_arrays["forces"][0 : storage.num_elements]
+        )
 
         if "atomic-energy" not in self.fit_properties:
             self.fit_properties["atomic-energy"] = FlattenedARScalarProperty(
@@ -600,9 +600,9 @@ def _to_TrainingStorage(self, final: bool = False) -> TrainingStorage:
             * self._structures._per_chunk_arrays["length"]
         )
         storage.add_array(name="forces", shape=(3,), per="element")
-        storage._per_element_arrays["forces"][
-            0 : storage.num_elements
-        ] = self.fit_properties["atomic-forces"][val_str]
+        storage._per_element_arrays["forces"][0 : storage.num_elements] = (
+            self.fit_properties["atomic-forces"][val_str]
+        )
         return storage
 
     def get_training_data(self) -> TrainingStorage:
diff --git a/pyiron_contrib/atomistics/interactive/montecarlo.py b/pyiron_contrib/atomistics/interactive/montecarlo.py
index 5557c7981..8ac3f5fad 100644
--- a/pyiron_contrib/atomistics/interactive/montecarlo.py
+++ b/pyiron_contrib/atomistics/interactive/montecarlo.py
@@ -297,9 +297,9 @@ def _store_output_in_hdf5(
             h5[
                 "energy_accepted_" + str(int(temperature)) + "_" + str(int(round_nr))
             ] = np.array(energy_accepted_lst)
-            h5[
-                "energy_total_" + str(int(temperature)) + "_" + str(int(round_nr))
-            ] = np.array(energy_total_lst)
+            h5["energy_total_" + str(int(temperature)) + "_" + str(int(round_nr))] = (
+                np.array(energy_total_lst)
+            )
 
     @staticmethod
     def _monte_carlo_accept_step(temperature, e_step, e_prev):
diff --git a/pyiron_contrib/atomistics/lammps/drag.py b/pyiron_contrib/atomistics/lammps/drag.py
index 1741be581..9cd32d024 100644
--- a/pyiron_contrib/atomistics/lammps/drag.py
+++ b/pyiron_contrib/atomistics/lammps/drag.py
@@ -64,9 +64,9 @@ def setup_lmp_input(lmp, n_atoms=None, direction=None, fix_id=-1):
     lmp.input.control["group___free"] = "subtract all fixed"
     if direction is None:
         for ii, xx in enumerate(["x", "y", "z"]):
-            lmp.input.control[
-                f"variable___f{xx}_free"
-            ] = f"equal f{xx}[{fix_id}]/{n_atoms}"
+            lmp.input.control[f"variable___f{xx}_free"] = (
+                f"equal f{xx}[{fix_id}]/{n_atoms}"
+            )
             lmp.input.control[f"variable___f{xx}_fixed"] = f"equal -f{xx}[{fix_id}]"
     else:
         direction = np.array(direction) / np.linalg.norm(direction)
diff --git a/pyiron_contrib/atomistics/meamfit/meamfit.py b/pyiron_contrib/atomistics/meamfit/meamfit.py
index 5841dc192..19e8113f5 100644
--- a/pyiron_contrib/atomistics/meamfit/meamfit.py
+++ b/pyiron_contrib/atomistics/meamfit/meamfit.py
@@ -310,16 +310,16 @@ def to_hdf(self, hdf=None, group_name=None):
         super(MeamFit, self).to_hdf(hdf=hdf, group_name=group_name)
         with self.project_hdf5.open("input") as hdf5_input:
             self.input.to_hdf(hdf5_input)
-            hdf5_input[
-                "calculation"
-            ] = self._calculation_dataframe.reset_index().to_dict(orient="list")
+            hdf5_input["calculation"] = (
+                self._calculation_dataframe.reset_index().to_dict(orient="list")
+            )
         with self.project_hdf5.open("output") as hdf5_output:
             hdf5_output["performance"] = self._potential_performance_dataframe.to_dict(
                 orient="list"
             )
-            hdf5_output[
-                "timings"
-            ] = self._potential_timings_dataframe.reset_index().to_dict(orient="list")
+            hdf5_output["timings"] = (
+                self._potential_timings_dataframe.reset_index().to_dict(orient="list")
+            )
 
     def from_hdf(self, hdf=None, group_name=None):
         super(MeamFit, self).from_hdf(hdf=hdf, group_name=group_name)
diff --git a/pyiron_contrib/atomistics/runner/storageclasses.py b/pyiron_contrib/atomistics/runner/storageclasses.py
index 2aa4ae4eb..ce56b22c6 100644
--- a/pyiron_contrib/atomistics/runner/storageclasses.py
+++ b/pyiron_contrib/atomistics/runner/storageclasses.py
@@ -214,9 +214,7 @@ def _to_hdf(self, hdf: ProjectHDFio) -> None:
         for prop in self.runnerase_properties:
             hdf[f"{prop}"] = self.__dict__[prop]
 
-    def _from_hdf(
-        self, hdf: ProjectHDFio, version: Optional[str] = None
-    ) -> Union[
+    def _from_hdf(self, hdf: ProjectHDFio, version: Optional[str] = None) -> Union[
         RunnerSplitTrainTest,
         RunnerWeights,
         RunnerScaling,
diff --git a/pyiron_contrib/protocol/utils/pptree.py b/pyiron_contrib/protocol/utils/pptree.py
index 93ea4ee55..b784c3cf7 100644
--- a/pyiron_contrib/protocol/utils/pptree.py
+++ b/pyiron_contrib/protocol/utils/pptree.py
@@ -55,8 +55,8 @@ def print_tree(current_node, indent="", last="downup", name="root", file=sys.std
     Returns:
 
     """
-    children = (
-        lambda node: [
+    children = lambda node: (
+        [
             (k, v) if isinstance(v, dict) else ("%s: %s" % (k, v), None)
             for k, v in node.items()
         ]
diff --git a/pyiron_contrib/tinybase/lammps.py b/pyiron_contrib/tinybase/lammps.py
index 741df2bb4..82d80e22e 100644
--- a/pyiron_contrib/tinybase/lammps.py
+++ b/pyiron_contrib/tinybase/lammps.py
@@ -80,9 +80,7 @@ def _execute(self):
         control.calc_static()
         control.write_file(file_name="control.inp", cwd=self.input.working_directory)
 
-        return LammpsInputOutput(
-                working_directory = self.input.working_directory
-        )
+        return LammpsInputOutput(working_directory=self.input.working_directory)
 
 
 class LammpsStaticParserInput(AbstractInput):
@@ -115,9 +113,9 @@ def _execute(self):
             parse_lammps_dumps(os.path.join(self.input.working_directory, "dump.out"))
         )[-1]
         return LammpsStaticOutput(
-                energy_pot=energy_pot,
-                energy_kin = log["TotEng"].iloc[-1] - energy_pot,
-                forces = dump.data[["fx", "fy", "fz"]].to_numpy()
+            energy_pot=energy_pot,
+            energy_kin=log["TotEng"].iloc[-1] - energy_pot,
+            forces=dump.data[["fx", "fy", "fz"]].to_numpy(),
         )
 
 
diff --git a/pyiron_contrib/tinybase/murn.py b/pyiron_contrib/tinybase/murn.py
index 9859d3a28..48366b199 100644
--- a/pyiron_contrib/tinybase/murn.py
+++ b/pyiron_contrib/tinybase/murn.py
@@ -64,7 +64,7 @@ def plot(self, per_atom=True):
 
     @property
     def equilibrium_volume(self):
-        inter = si.interp1d(self.volumes, self.energies, kind='cubic')
+        inter = si.interp1d(self.volumes, self.energies, kind="cubic")
         return so.minimize_scalar(
             inter, bounds=(np.min(self.volumes), np.max(self.volumes))
         ).x
diff --git a/pyiron_contrib/tinybase/shell.py b/pyiron_contrib/tinybase/shell.py
index 68d0e8ac5..c400f50f6 100644
--- a/pyiron_contrib/tinybase/shell.py
+++ b/pyiron_contrib/tinybase/shell.py
@@ -137,14 +137,17 @@ def _execute(self):
             env=environ,
         )
         output = ShellOutput(
-            stdout = proc.stdout,
-            stderr = proc.stderr,
-            returncode = proc.returncode,
+            stdout=proc.stdout,
+            stderr=proc.stderr,
+            returncode=proc.returncode,
         )
         allowed_returncode = self.input.allowed_returncode
         if allowed_returncode is None:
             allowed_returncode = [0]
         if proc.returncode not in allowed_returncode:
-            return ReturnStatus("aborted", f"non-zero error code {proc.returncode}"), output
+            return (
+                ReturnStatus("aborted", f"non-zero error code {proc.returncode}"),
+                output,
+            )
         else:
             return output

From 90827cfa673bfbca52f8225fffd1afa98a59c683 Mon Sep 17 00:00:00 2001
From: liamhuber 
Date: Fri, 2 Feb 2024 11:54:54 -0800
Subject: [PATCH 49/49] Try to navigate to the right place from papermill

---
 notebooks/tinybase/Shell.ipynb | 34 ++++++++++++++++++++--------------
 1 file changed, 20 insertions(+), 14 deletions(-)

diff --git a/notebooks/tinybase/Shell.ipynb b/notebooks/tinybase/Shell.ipynb
index 3263acf7b..fff46ef87 100644
--- a/notebooks/tinybase/Shell.ipynb
+++ b/notebooks/tinybase/Shell.ipynb
@@ -11,7 +11,7 @@
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "d4e54a8ed92444e48502ea9c35497c00",
+       "model_id": "214e14a0e17d41a9a4ddcf202ac556cc",
        "version_major": 2,
        "version_minor": 0
       },
@@ -22,7 +22,7 @@
     }
    ],
    "source": [
-    "from pathlib import Path\n",
+    "from pathlib import Path \n",
     "\n",
     "from pyiron_contrib.tinybase.shell import ShellTask"
    ]
@@ -34,7 +34,13 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "cwd = Path.cwd()"
+    "cwd = Path.cwd()\n",
+    "if cwd.name == \"tinybase\":\n",
+    "    # Then the notebook was started locally\n",
+    "    notebook_dir = cwd\n",
+    "else:\n",
+    "    # We are probably executing from papermill on the CI\n",
+    "    notebook_dir = cwd / \"notebooks\" / \"tinybase\""
    ]
   },
   {
@@ -88,7 +94,7 @@
    "source": [
     "sh.input.command = 'echo'\n",
     "sh.input.arguments = ['foo']\n",
-    "sh.input.working_directory = cwd"
+    "sh.input.working_directory = notebook_dir"
    ]
   },
   {
@@ -172,7 +178,7 @@
    "source": [
     "sh.input.command = 'pwd'\n",
     "sh.input.arguments = []\n",
-    "sh.input.working_directory = cwd"
+    "sh.input.working_directory = notebook_dir"
    ]
   },
   {
@@ -264,7 +270,7 @@
    "source": [
     "sh.input.command = 'sh'\n",
     "sh.input.arguments = ['-c', 'echo foo; echo bar 1>&2; exit 2']\n",
-    "sh.input.working_directory = cwd"
+    "sh.input.working_directory = notebook_dir"
    ]
   },
   {
@@ -402,7 +408,7 @@
    "source": [
     "sh.input.command = 'sh'\n",
     "sh.input.arguments = ['-c', 'echo foo; echo bar 1>&2; exit 2']\n",
-    "sh.input.working_directory = cwd"
+    "sh.input.working_directory = notebook_dir"
    ]
   },
   {
@@ -552,7 +558,7 @@
    "source": [
     "sh.input.command = 'sh'\n",
     "sh.input.arguments = ['-c', 'echo $FOO; echo $BAR 1>&2']\n",
-    "sh.input.working_directory = cwd"
+    "sh.input.working_directory = notebook_dir"
    ]
   },
   {
@@ -699,7 +705,7 @@
    },
    "outputs": [],
    "source": [
-    "state.settings.resource_paths.insert(0, str(cwd / \"resources\"))"
+    "state.settings.resource_paths.insert(0, str(notebook_dir / \"resources\"))"
    ]
   },
   {
@@ -773,7 +779,7 @@
     {
      "data": {
       "text/plain": [
-       "['1.2.4', '1.2.3']"
+       "['1.2.3', '1.2.4']"
       ]
      },
      "execution_count": 42,
@@ -807,7 +813,7 @@
    "outputs": [],
    "source": [
     "sh.input.command = res\n",
-    "sh.input.working_directory = cwd"
+    "sh.input.working_directory = notebook_dir"
    ]
   },
   {
@@ -944,7 +950,7 @@
    "outputs": [],
    "source": [
     "sh.input.command = ExecutablePathResolver('test', 'hello', version='1.2.4')\n",
-    "sh.input.working_directory = cwd"
+    "sh.input.working_directory = notebook_dir"
    ]
   },
   {
@@ -1058,7 +1064,7 @@
    "outputs": [],
    "source": [
     "sh.input.command = ExecutablePathResolver('test', 'hello')\n",
-    "sh.input.working_directory = cwd"
+    "sh.input.working_directory = notebook_dir"
    ]
   },
   {
@@ -1072,7 +1078,7 @@
     {
      "data": {
       "text/plain": [
-       "['1.2.4', '1.2.3']"
+       "['1.2.3', '1.2.4']"
       ]
      },
      "execution_count": 58,