From 88d6401002dd804526e0edbb2164f02ea89a292d Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 14 Jul 2023 13:51:45 +0100
Subject: [PATCH 001/210] Updt. Readme & add architecture diagrams

---
 README.md                |   26 +
 assets/BayOpt_Arch.pdf   |  Bin 0 -> 85508 bytes
 assets/BayesOpt_Arch.svg | 1731 ++++++++++++++++++++++++++++++++++++++
 assets/PyBOP_Arch.pdf    |  Bin 0 -> 110377 bytes
 assets/PyBOP_Arch.svg    |   74 ++
 5 files changed, 1831 insertions(+)
 create mode 100644 assets/BayOpt_Arch.pdf
 create mode 100644 assets/BayesOpt_Arch.svg
 create mode 100644 assets/PyBOP_Arch.pdf
 create mode 100644 assets/PyBOP_Arch.svg

diff --git a/README.md b/README.md
index 2f0a61069..3d7a2d4f7 100644
--- a/README.md
+++ b/README.md
@@ -1,2 +1,28 @@
 # PyBOP - A *Py*thon toolbox for *B*attery *O*ptimisation and *P*arameterisation
 
+PyBOP aims to be a modular library for the parameterisation and optimisation of battery models, with a particular focus on classes built around [PyBaMM](https://github.com/pybamm-team/PyBaMM) models. The figure below gives the current conceptual idea of PyBOP's structure. This will likely evolve as development progresses.
+
+<p align="center">
+    <img src="assets/PyBOP_Arch.svg" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
+</p>
+
+The living software specification of PyBOP can be found here; however, an overview is introduced below.
+
+- Provide both frequentist and bayesian parameterisation and optimisation methods to battery modellers
+- Provide workflows and examples for parameter fitting and grouping
+- Create diagnostics for end-users to convey parameter and optimisation fidelity
+
+**Community and values**
+
+PyBOP aims to foster a broad consortium of developers and users, building on and
+learning from the success of the PyBaMM community. Our values are:
+
+-   Open-Source (code and ideas should be shared)
+
+-   Inclusivity and fairness (those who want to contribute may do so,
+    and their input is appropriately recognised)
+
+-   Inter-operability (aiming for modularity to enable maximum impact
+    and inclusivity)
+
+-   User-friendliness (putting user requirements first, thinking about user- assistance & workflows)
\ No newline at end of file
diff --git a/assets/BayOpt_Arch.pdf b/assets/BayOpt_Arch.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..5332b82b2e7ce3e923a2a2f1fc1bd261389f9d56
GIT binary patch
literal 85508
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

literal 0
HcmV?d00001

diff --git a/assets/BayesOpt_Arch.svg b/assets/BayesOpt_Arch.svg
new file mode 100644
index 000000000..e9340ab6d
--- /dev/null
+++ b/assets/BayesOpt_Arch.svg
@@ -0,0 +1,1731 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="602pt"
+   height="291pt"
+   viewBox="0 0 602 291"
+   version="1.2"
+   id="svg1079"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs536">
+    <g
+       id="g482">
+      <symbol
+         overflow="visible"
+         id="glyph0-0">
+        <path
+           style="stroke:none"
+           d="M 1.625,0 V -8.109375 H 8.109375 V 0 Z M 1.828125,-0.203125 H 7.90625 V -7.90625 H 1.828125 Z m 0,0"
+           id="path362" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-1">
+        <path
+           style="stroke:none"
+           d="m 1.0625,0 v -9.296875 h 6.265625 v 1.09375 H 2.296875 V -5.3125 H 6.65625 v 1.09375 H 2.296875 V 0 Z m 0,0"
+           id="path365" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-2">
+        <path
+           style="stroke:none"
+           d="m 0.4375,-3.359375 c 0,-1.25 0.34375,-2.175781 1.03125,-2.78125 0.582031,-0.5 1.289062,-0.75 2.125,-0.75 0.925781,0 1.679688,0.308594 2.265625,0.921875 0.582031,0.605469 0.875,1.4375 0.875,2.5 0,0.875 -0.132813,1.5625 -0.390625,2.0625 C 6.082031,-0.914062 5.703125,-0.53125 5.203125,-0.25 4.710938,0.0195312 4.175781,0.15625 3.59375,0.15625 2.644531,0.15625 1.878906,-0.144531 1.296875,-0.75 0.722656,-1.351562 0.4375,-2.222656 0.4375,-3.359375 Z m 1.171875,0 c 0,0.855469 0.1875,1.5 0.5625,1.9375 0.375,0.429687 0.847656,0.640625 1.421875,0.640625 0.5625,0 1.03125,-0.210938 1.40625,-0.640625 0.375,-0.4375 0.5625,-1.097656 0.5625,-1.984375 C 5.5625,-4.238281 5.375,-4.867188 5,-5.296875 4.625,-5.722656 4.15625,-5.9375 3.59375,-5.9375 c -0.574219,0 -1.046875,0.214844 -1.421875,0.640625 -0.375,0.429687 -0.5625,1.074219 -0.5625,1.9375 z m 0,0"
+           id="path368" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-3">
+        <path
+           style="stroke:none"
+           d="M 0.84375,0 V -6.734375 H 1.875 V -5.71875 C 2.132812,-6.1875 2.375,-6.5 2.59375,-6.65625 2.8125,-6.8125 3.054688,-6.890625 3.328125,-6.890625 c 0.382813,0 0.773437,0.125 1.171875,0.375 l -0.390625,1.0625 c -0.28125,-0.164063 -0.5625,-0.25 -0.84375,-0.25 -0.25,0 -0.476563,0.078125 -0.671875,0.234375 -0.199219,0.148438 -0.339844,0.351562 -0.421875,0.609375 -0.125,0.40625 -0.1875,0.851563 -0.1875,1.328125 V 0 Z m 0,0"
+           id="path371" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-4">
+        <path
+           style="stroke:none"
+           d="m 2.09375,0 -2.0625,-6.734375 h 1.1875 l 1.0625,3.890625 0.40625,1.4375 c 0.019531,-0.070312 0.132812,-0.535156 0.34375,-1.390625 l 1.078125,-3.9375 H 5.28125 l 1.015625,3.90625 0.328125,1.28125 0.390625,-1.296875 1.15625,-3.890625 H 9.28125 L 7.171875,0 h -1.1875 L 4.90625,-4.03125 4.65625,-5.1875 3.296875,0 Z m 0,0"
+           id="path374" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-5">
+        <path
+           style="stroke:none"
+           d="M 5.25,-0.828125 C 4.820312,-0.472656 4.410156,-0.21875 4.015625,-0.0625 3.628906,0.0820312 3.210938,0.15625 2.765625,0.15625 2.023438,0.15625 1.457031,-0.0234375 1.0625,-0.390625 0.664062,-0.753906 0.46875,-1.21875 0.46875,-1.78125 c 0,-0.320312 0.070312,-0.617188 0.21875,-0.890625 0.15625,-0.28125 0.351562,-0.5 0.59375,-0.65625 0.238281,-0.164063 0.515625,-0.289063 0.828125,-0.375 0.21875,-0.0625 0.554687,-0.117187 1.015625,-0.171875 0.914062,-0.113281 1.59375,-0.242188 2.03125,-0.390625 0,-0.15625 0,-0.257813 0,-0.3125 0,-0.457031 -0.105469,-0.78125 -0.3125,-0.96875 C 4.550781,-5.804688 4.113281,-5.9375 3.53125,-5.9375 c -0.53125,0 -0.929688,0.09375 -1.1875,0.28125 -0.25,0.1875 -0.4375,0.523438 -0.5625,1 L 0.671875,-4.8125 c 0.09375,-0.476562 0.253906,-0.863281 0.484375,-1.15625 0.238281,-0.289062 0.578125,-0.515625 1.015625,-0.671875 0.4375,-0.164063 0.945313,-0.25 1.53125,-0.25 0.570313,0 1.035156,0.070313 1.390625,0.203125 0.363281,0.136719 0.628906,0.308594 0.796875,0.515625 0.175781,0.210937 0.296875,0.46875 0.359375,0.78125 0.039062,0.1875 0.0625,0.539063 0.0625,1.046875 v 1.515625 c 0,1.0625 0.019531,1.734375 0.0625,2.015625 C 6.425781,-0.53125 6.523438,-0.257812 6.671875,0 h -1.1875 C 5.359375,-0.238281 5.28125,-0.515625 5.25,-0.828125 Z M 5.15625,-3.375 c -0.417969,0.167969 -1.039062,0.308594 -1.859375,0.421875 -0.46875,0.074219 -0.804687,0.152344 -1,0.234375 -0.199219,0.085938 -0.351563,0.210938 -0.453125,0.375 -0.105469,0.15625 -0.15625,0.335938 -0.15625,0.53125 0,0.3125 0.113281,0.574219 0.34375,0.78125 0.226562,0.199219 0.566406,0.296875 1.015625,0.296875 0.4375,0 0.828125,-0.09375 1.171875,-0.28125 0.34375,-0.195313 0.59375,-0.460937 0.75,-0.796875 0.125,-0.257812 0.1875,-0.640625 0.1875,-1.140625 z m 0,0"
+           id="path377" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-6">
+        <path
+           style="stroke:none"
+           d="m 5.21875,0 v -0.84375 c -0.429688,0.667969 -1.054688,1 -1.875,1 -0.542969,0 -1.039062,-0.1484375 -1.484375,-0.4375 C 1.410156,-0.582031 1.0625,-1 0.8125,-1.53125 c -0.25,-0.53125 -0.375,-1.140625 -0.375,-1.828125 0,-0.675781 0.109375,-1.285156 0.328125,-1.828125 0.226563,-0.550781 0.566406,-0.972656 1.015625,-1.265625 0.445312,-0.289063 0.953125,-0.4375 1.515625,-0.4375 0.40625,0 0.765625,0.089844 1.078125,0.265625 0.3125,0.167969 0.566406,0.390625 0.765625,0.671875 v -3.34375 H 6.28125 V 0 Z M 1.609375,-3.359375 c 0,0.867187 0.179687,1.511719 0.546875,1.9375 0.363281,0.429687 0.796875,0.640625 1.296875,0.640625 0.5,0 0.921875,-0.203125 1.265625,-0.609375 C 5.070312,-1.804688 5.25,-2.429688 5.25,-3.265625 5.25,-4.179688 5.066406,-4.851562 4.703125,-5.28125 4.347656,-5.71875 3.910156,-5.9375 3.390625,-5.9375 c -0.5,0 -0.921875,0.210938 -1.265625,0.625 -0.34375,0.40625 -0.515625,1.058594 -0.515625,1.953125 z m 0,0"
+           id="path380" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-7">
+        <path
+           style="stroke:none"
+           d=""
+           id="path383" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-8">
+        <path
+           style="stroke:none"
+           d="M 0.96875,0 V -9.296875 H 2.8125 l 2.203125,6.578125 c 0.195313,0.617188 0.34375,1.074219 0.4375,1.375 0.113281,-0.332031 0.28125,-0.828125 0.5,-1.484375 l 2.21875,-6.46875 h 1.65625 V 0 h -1.1875 V -7.78125 L 5.953125,0 H 4.84375 L 2.15625,-7.90625 V 0 Z m 0,0"
+           id="path386" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-9">
+        <path
+           style="stroke:none"
+           d="m 5.46875,-2.171875 1.171875,0.15625 c -0.1875,0.6875 -0.53125,1.226563 -1.03125,1.609375 -0.5,0.375 -1.140625,0.5625 -1.921875,0.5625 C 2.695312,0.15625 1.910156,-0.144531 1.328125,-0.75 0.753906,-1.363281 0.46875,-2.21875 0.46875,-3.3125 c 0,-1.132812 0.289062,-2.015625 0.875,-2.640625 0.582031,-0.625 1.34375,-0.9375 2.28125,-0.9375 0.894531,0 1.628906,0.308594 2.203125,0.921875 0.570313,0.617188 0.859375,1.480469 0.859375,2.59375 0,0.0625 -0.00781,0.164062 -0.015625,0.296875 H 1.65625 c 0.039062,0.742187 0.25,1.308594 0.625,1.703125 0.375,0.398438 0.84375,0.59375 1.40625,0.59375 0.414062,0 0.769531,-0.109375 1.0625,-0.328125 0.300781,-0.226563 0.539062,-0.582031 0.71875,-1.0625 z m -3.75,-1.84375 H 5.484375 C 5.429688,-4.578125 5.285156,-5 5.046875,-5.28125 4.679688,-5.726562 4.210938,-5.953125 3.640625,-5.953125 c -0.53125,0 -0.976563,0.179687 -1.328125,0.53125 -0.355469,0.355469 -0.554688,0.824219 -0.59375,1.40625 z m 0,0"
+           id="path389" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-10">
+        <path
+           style="stroke:none"
+           d="M 0.828125,0 V -9.296875 H 1.96875 V 0 Z m 0,0"
+           id="path392" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-11">
+        <path
+           style="stroke:none"
+           d="M 0.578125,-2.984375 1.75,-3.09375 c 0.050781,0.46875 0.175781,0.855469 0.375,1.15625 0.195312,0.292969 0.507812,0.53125 0.9375,0.71875 0.425781,0.1875 0.898438,0.28125 1.421875,0.28125 0.46875,0 0.878906,-0.066406 1.234375,-0.203125 0.363281,-0.144531 0.632812,-0.335937 0.8125,-0.578125 0.175781,-0.25 0.265625,-0.515625 0.265625,-0.796875 0,-0.289063 -0.085937,-0.546875 -0.25,-0.765625 C 6.378906,-3.5 6.097656,-3.679688 5.703125,-3.828125 5.453125,-3.929688 4.898438,-4.082031 4.046875,-4.28125 3.191406,-4.488281 2.59375,-4.6875 2.25,-4.875 1.8125,-5.101562 1.484375,-5.390625 1.265625,-5.734375 1.046875,-6.078125 0.9375,-6.460938 0.9375,-6.890625 c 0,-0.46875 0.128906,-0.90625 0.390625,-1.3125 C 1.597656,-8.609375 1.988281,-8.914062 2.5,-9.125 c 0.507812,-0.21875 1.078125,-0.328125 1.703125,-0.328125 0.695313,0 1.304687,0.117187 1.828125,0.34375 0.53125,0.21875 0.9375,0.542969 1.21875,0.96875 0.28125,0.429687 0.429688,0.917969 0.453125,1.46875 L 6.53125,-6.59375 C 6.457031,-7.175781 6.238281,-7.617188 5.875,-7.921875 5.507812,-8.222656 4.972656,-8.375 4.265625,-8.375 c -0.75,0 -1.296875,0.140625 -1.640625,0.421875 -0.335938,0.273437 -0.5,0.601563 -0.5,0.984375 0,0.335938 0.117188,0.605469 0.359375,0.8125 0.238281,0.21875 0.859375,0.445312 1.859375,0.671875 1,0.230469 1.679688,0.429687 2.046875,0.59375 0.539063,0.25 0.941406,0.570313 1.203125,0.953125 0.257812,0.375 0.390625,0.8125 0.390625,1.3125 0,0.492188 -0.148437,0.953125 -0.4375,1.390625 -0.28125,0.4375 -0.6875,0.78125 -1.21875,1.03125 -0.523437,0.2382812 -1.117187,0.359375 -1.78125,0.359375 -0.84375,0 -1.554687,-0.1210938 -2.125,-0.359375 C 1.859375,-0.453125 1.414062,-0.820312 1.09375,-1.3125 0.769531,-1.800781 0.597656,-2.359375 0.578125,-2.984375 Z m 0,0"
+           id="path395" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-12">
+        <path
+           style="stroke:none"
+           d="M 5.265625,0 V -0.984375 C 4.742188,-0.222656 4.03125,0.15625 3.125,0.15625 2.726562,0.15625 2.359375,0.0820312 2.015625,-0.0625 1.671875,-0.21875 1.414062,-0.410156 1.25,-0.640625 1.082031,-0.878906 0.96875,-1.164062 0.90625,-1.5 0.851562,-1.71875 0.828125,-2.070312 0.828125,-2.5625 V -6.734375 H 1.96875 V -3 c 0,0.59375 0.023438,0.996094 0.078125,1.203125 0.070313,0.304687 0.222656,0.542969 0.453125,0.71875 0.226562,0.167969 0.515625,0.25 0.859375,0.25 0.34375,0 0.664063,-0.085937 0.96875,-0.265625 0.300781,-0.175781 0.507813,-0.414062 0.625,-0.71875 0.125,-0.300781 0.1875,-0.738281 0.1875,-1.3125 v -3.609375 h 1.15625 V 0 Z m 0,0"
+           id="path398" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-13">
+        <path
+           style="stroke:none"
+           d="M 0.640625,0.5625 1.75,0.71875 c 0.050781,0.34375 0.179688,0.59375 0.390625,0.75 0.28125,0.207031 0.664063,0.3125 1.15625,0.3125 0.53125,0 0.9375,-0.105469 1.21875,-0.3125 C 4.804688,1.257812 5.003906,0.960938 5.109375,0.578125 5.171875,0.347656 5.195312,-0.132812 5.1875,-0.875 4.6875,-0.289062 4.066406,0 3.328125,0 2.398438,0 1.679688,-0.332031 1.171875,-1 c -0.5,-0.664062 -0.75,-1.46875 -0.75,-2.40625 0,-0.644531 0.113281,-1.238281 0.34375,-1.78125 0.226563,-0.539062 0.5625,-0.957031 1,-1.25 0.445313,-0.300781 0.96875,-0.453125 1.5625,-0.453125 0.800781,0 1.457031,0.324219 1.96875,0.96875 v -0.8125 h 1.0625 V -0.90625 C 6.359375,0.132812 6.25,0.875 6.03125,1.3125 5.820312,1.75 5.484375,2.09375 5.015625,2.34375 4.554688,2.601562 3.988281,2.734375 3.3125,2.734375 2.507812,2.734375 1.859375,2.550781 1.359375,2.1875 0.867188,1.820312 0.628906,1.28125 0.640625,0.5625 Z M 1.59375,-3.484375 c 0,0.886719 0.171875,1.53125 0.515625,1.9375 0.351563,0.40625 0.796875,0.609375 1.328125,0.609375 0.519531,0 0.957031,-0.203125 1.3125,-0.609375 0.351562,-0.40625 0.53125,-1.039063 0.53125,-1.90625 0,-0.820313 -0.183594,-1.441406 -0.546875,-1.859375 -0.367187,-0.414062 -0.804687,-0.625 -1.3125,-0.625 -0.511719,0 -0.945313,0.210938 -1.296875,0.625 -0.355469,0.40625 -0.53125,1.015625 -0.53125,1.828125 z m 0,0"
+           id="path401" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-14">
+        <path
+           style="stroke:none"
+           d="m 3.34375,-1.015625 0.171875,1 C 3.191406,0.0546875 2.90625,0.09375 2.65625,0.09375 2.238281,0.09375 1.914062,0.03125 1.6875,-0.09375 1.457031,-0.226562 1.296875,-0.398438 1.203125,-0.609375 1.109375,-0.828125 1.0625,-1.28125 1.0625,-1.96875 v -3.875 H 0.234375 V -6.734375 H 1.0625 V -8.40625 l 1.140625,-0.671875 v 2.34375 H 3.34375 V -5.84375 H 2.203125 v 3.9375 c 0,0.324219 0.019531,0.53125 0.0625,0.625 0.039063,0.09375 0.101563,0.171875 0.1875,0.234375 0.09375,0.054687 0.222656,0.078125 0.390625,0.078125 0.125,0 0.289062,-0.015625 0.5,-0.046875 z m 0,0"
+           id="path404" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-15">
+        <path
+           style="stroke:none"
+           d="m -0.015625,0 3.5625,-9.296875 H 4.875 L 8.671875,0 H 7.28125 L 6.1875,-2.8125 H 2.3125 L 1.28125,0 Z M 2.65625,-3.8125 H 5.8125 L 4.84375,-6.390625 C 4.550781,-7.171875 4.332031,-7.8125 4.1875,-8.3125 c -0.125,0.59375 -0.292969,1.183594 -0.5,1.765625 z m 0,0"
+           id="path407" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-16">
+        <path
+           style="stroke:none"
+           d="m 5.25,-2.46875 1.125,0.140625 C 6.25,-1.546875 5.929688,-0.9375 5.421875,-0.5 4.921875,-0.0625 4.300781,0.15625 3.5625,0.15625 2.644531,0.15625 1.90625,-0.144531 1.34375,-0.75 0.78125,-1.351562 0.5,-2.21875 0.5,-3.34375 0.5,-4.070312 0.617188,-4.707031 0.859375,-5.25 c 0.25,-0.539062 0.617187,-0.945312 1.109375,-1.21875 0.488281,-0.28125 1.023438,-0.421875 1.609375,-0.421875 0.726563,0 1.320313,0.1875 1.78125,0.5625 0.46875,0.367187 0.769531,0.890625 0.90625,1.578125 L 5.15625,-4.578125 C 5.050781,-5.035156 4.863281,-5.378906 4.59375,-5.609375 4.320312,-5.835938 4,-5.953125 3.625,-5.953125 c -0.574219,0 -1.042969,0.210937 -1.40625,0.625 C 1.863281,-4.910156 1.6875,-4.257812 1.6875,-3.375 c 0,0.90625 0.171875,1.570312 0.515625,1.984375 C 2.546875,-0.984375 3,-0.78125 3.5625,-0.78125 c 0.445312,0 0.816406,-0.132812 1.109375,-0.40625 C 4.972656,-1.46875 5.164062,-1.894531 5.25,-2.46875 Z m 0,0"
+           id="path410" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-17">
+        <path
+           style="stroke:none"
+           d="M 5.140625,2.578125 V -0.71875 c -0.179687,0.25 -0.429687,0.460938 -0.75,0.625 -0.3125,0.1640625 -0.648437,0.25 -1,0.25 -0.804687,0 -1.496094,-0.316406 -2.078125,-0.953125 C 0.738281,-1.441406 0.453125,-2.320312 0.453125,-3.4375 c 0,-0.664062 0.113281,-1.269531 0.34375,-1.8125 0.238281,-0.539062 0.582031,-0.945312 1.03125,-1.21875 0.445313,-0.28125 0.9375,-0.421875 1.46875,-0.421875 0.832031,0 1.488281,0.355469 1.96875,1.0625 v -0.90625 h 1.03125 v 9.3125 z M 1.625,-3.390625 c 0,0.875 0.179688,1.53125 0.546875,1.96875 0.363281,0.429687 0.800781,0.640625 1.3125,0.640625 0.476563,0 0.894531,-0.203125 1.25,-0.609375 0.351563,-0.414063 0.53125,-1.046875 0.53125,-1.890625 0,-0.894531 -0.1875,-1.566406 -0.5625,-2.015625 -0.367187,-0.457031 -0.796875,-0.6875 -1.296875,-0.6875 -0.5,0 -0.921875,0.214844 -1.265625,0.640625 C 1.796875,-4.925781 1.625,-4.273438 1.625,-3.390625 Z m 0,0"
+           id="path413" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-18">
+        <path
+           style="stroke:none"
+           d="m 0.859375,-7.984375 v -1.3125 H 2 v 1.3125 z M 0.859375,0 V -6.734375 H 2 V 0 Z m 0,0"
+           id="path416" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-19">
+        <path
+           style="stroke:none"
+           d="m 0.40625,-2.015625 1.125,-0.171875 c 0.0625,0.449219 0.234375,0.796875 0.515625,1.046875 0.289063,0.242187 0.695313,0.359375 1.21875,0.359375 0.53125,0 0.921875,-0.101562 1.171875,-0.3125 0.25,-0.21875 0.375,-0.472656 0.375,-0.765625 0,-0.257813 -0.109375,-0.460937 -0.328125,-0.609375 C 4.328125,-2.570312 3.9375,-2.703125 3.3125,-2.859375 2.476562,-3.066406 1.898438,-3.25 1.578125,-3.40625 1.253906,-3.5625 1.007812,-3.773438 0.84375,-4.046875 c -0.167969,-0.269531 -0.25,-0.566406 -0.25,-0.890625 0,-0.300781 0.066406,-0.578125 0.203125,-0.828125 0.132813,-0.257813 0.320313,-0.476563 0.5625,-0.65625 0.175781,-0.125 0.414063,-0.234375 0.71875,-0.328125 0.3125,-0.09375 0.640625,-0.140625 0.984375,-0.140625 0.53125,0 0.992188,0.078125 1.390625,0.234375 0.40625,0.15625 0.703125,0.367188 0.890625,0.625 0.1875,0.25 0.316406,0.59375 0.390625,1.03125 L 4.625,-4.84375 C 4.570312,-5.1875 4.421875,-5.457031 4.171875,-5.65625 3.929688,-5.851562 3.59375,-5.953125 3.15625,-5.953125 c -0.53125,0 -0.914062,0.089844 -1.140625,0.265625 -0.21875,0.179688 -0.328125,0.382812 -0.328125,0.609375 0,0.148437 0.046875,0.28125 0.140625,0.40625 0.09375,0.117187 0.238281,0.214844 0.4375,0.296875 0.113281,0.042969 0.453125,0.140625 1.015625,0.296875 0.800781,0.210937 1.363281,0.386719 1.6875,0.53125 0.320312,0.136719 0.570312,0.335937 0.75,0.59375 0.175781,0.261719 0.265625,0.585937 0.265625,0.96875 0,0.386719 -0.109375,0.746094 -0.328125,1.078125 C 5.4375,-0.570312 5.113281,-0.3125 4.6875,-0.125 4.269531,0.0625 3.800781,0.15625 3.28125,0.15625 c -0.875,0 -1.542969,-0.1796875 -2,-0.546875 -0.460938,-0.363281 -0.75,-0.90625 -0.875,-1.625 z m 0,0"
+           id="path419" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-20">
+        <path
+           style="stroke:none"
+           d="m 0.859375,0 v -6.734375 h 1.03125 v 0.953125 c 0.488281,-0.738281 1.203125,-1.109375 2.140625,-1.109375 0.40625,0 0.773438,0.074219 1.109375,0.21875 0.34375,0.148437 0.597656,0.339844 0.765625,0.578125 0.164062,0.242188 0.285156,0.523438 0.359375,0.84375 0.039063,0.210938 0.0625,0.578125 0.0625,1.109375 V 0 H 5.1875 V -4.09375 C 5.1875,-4.5625 5.140625,-4.910156 5.046875,-5.140625 4.960938,-5.367188 4.804688,-5.550781 4.578125,-5.6875 4.347656,-5.820312 4.082031,-5.890625 3.78125,-5.890625 c -0.480469,0 -0.898438,0.15625 -1.25,0.46875 C 2.175781,-5.117188 2,-4.535156 2,-3.671875 V 0 Z m 0,0"
+           id="path422" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-21">
+        <path
+           style="stroke:none"
+           d="m 0.625,-4.53125 c 0,-1.539062 0.410156,-2.742188 1.234375,-3.609375 0.832031,-0.875 1.90625,-1.3125 3.21875,-1.3125 0.851563,0 1.625,0.203125 2.3125,0.609375 0.695313,0.40625 1.222656,0.980469 1.578125,1.71875 0.363281,0.730469 0.546875,1.558594 0.546875,2.484375 0,0.949219 -0.195313,1.796875 -0.578125,2.546875 -0.375,0.742188 -0.914062,1.304688 -1.609375,1.6875 -0.699219,0.375 -1.449219,0.5625 -2.25,0.5625 -0.875,0 -1.664063,-0.2070312 -2.359375,-0.625 C 2.03125,-0.894531 1.507812,-1.472656 1.15625,-2.203125 0.800781,-2.929688 0.625,-3.707031 0.625,-4.53125 Z M 1.890625,-4.5 c 0,1.117188 0.300781,1.996094 0.90625,2.640625 0.601563,0.648437 1.359375,0.96875 2.265625,0.96875 0.925781,0 1.6875,-0.320313 2.28125,-0.96875 C 7.945312,-2.515625 8.25,-3.441406 8.25,-4.640625 8.25,-5.398438 8.117188,-6.0625 7.859375,-6.625 c -0.25,-0.5625 -0.625,-1 -1.125,-1.3125 -0.492187,-0.3125 -1.042969,-0.46875 -1.65625,-0.46875 -0.867187,0 -1.617187,0.304688 -2.25,0.90625 -0.625,0.59375 -0.9375,1.59375 -0.9375,3 z m 0,0"
+           id="path425" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-22">
+        <path
+           style="stroke:none"
+           d="m 0.859375,2.578125 v -9.3125 h 1.03125 v 0.875 c 0.25,-0.34375 0.523437,-0.597656 0.828125,-0.765625 0.3125,-0.175781 0.6875,-0.265625 1.125,-0.265625 0.570312,0 1.078125,0.152344 1.515625,0.453125 0.445313,0.292969 0.78125,0.710938 1,1.25 0.226563,0.542969 0.34375,1.132812 0.34375,1.765625 0,0.6875 -0.125,1.308594 -0.375,1.859375 -0.25,0.554688 -0.609375,0.980469 -1.078125,1.28125 -0.46875,0.2890625 -0.964844,0.4375 -1.484375,0.4375 -0.375,0 -0.71875,-0.078125 -1.03125,-0.234375 C 2.429688,-0.242188 2.1875,-0.453125 2,-0.703125 v 3.28125 z m 1.03125,-5.90625 c 0,0.867187 0.171875,1.507813 0.515625,1.921875 0.351562,0.417969 0.78125,0.625 1.28125,0.625 0.507812,0 0.941406,-0.210938 1.296875,-0.640625 0.363281,-0.4375 0.546875,-1.101563 0.546875,-2 C 5.53125,-4.273438 5.351562,-4.914062 5,-5.34375 4.644531,-5.769531 4.222656,-5.984375 3.734375,-5.984375 c -0.480469,0 -0.90625,0.230469 -1.28125,0.6875 -0.375,0.449219 -0.5625,1.105469 -0.5625,1.96875 z m 0,0"
+           id="path428" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-23">
+        <path
+           style="stroke:none"
+           d="M 0.859375,0 V -6.734375 H 1.875 v 0.953125 c 0.207031,-0.332031 0.488281,-0.597656 0.84375,-0.796875 0.351562,-0.207031 0.753906,-0.3125 1.203125,-0.3125 0.5,0 0.90625,0.105469 1.21875,0.3125 0.320313,0.210937 0.546875,0.5 0.671875,0.875 0.539062,-0.789063 1.238281,-1.1875 2.09375,-1.1875 0.664062,0 1.175781,0.1875 1.53125,0.5625 0.363281,0.367187 0.546875,0.933594 0.546875,1.703125 V 0 H 8.84375 v -4.234375 c 0,-0.457031 -0.039062,-0.785156 -0.109375,-0.984375 -0.074219,-0.207031 -0.210937,-0.367188 -0.40625,-0.484375 -0.1875,-0.125 -0.417969,-0.1875 -0.6875,-0.1875 -0.46875,0 -0.859375,0.15625 -1.171875,0.46875 C 6.15625,-5.109375 6,-4.601562 6,-3.90625 V 0 H 4.859375 v -4.375 c 0,-0.507812 -0.09375,-0.890625 -0.28125,-1.140625 -0.1875,-0.25 -0.492187,-0.375 -0.90625,-0.375 -0.324219,0 -0.625,0.085937 -0.90625,0.25 -0.273437,0.167969 -0.46875,0.417969 -0.59375,0.75 C 2.054688,-4.566406 2,-4.101562 2,-3.5 V 0 Z m 0,0"
+           id="path431" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-24">
+        <path
+           style="stroke:none"
+           d="m 0,0.15625 2.6875,-9.609375 h 0.921875 l -2.6875,9.609375 z m 0,0"
+           id="path434" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-25">
+        <path
+           style="stroke:none"
+           d="M 0.40625,-2.796875 V -3.9375 h 3.515625 v 1.140625 z m 0,0"
+           id="path437" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-26">
+        <path
+           style="stroke:none"
+           d="m 1.90625,0 h -1.0625 v -9.296875 h 1.140625 v 3.3125 c 0.488281,-0.601563 1.101563,-0.90625 1.84375,-0.90625 0.414063,0 0.804687,0.085937 1.171875,0.25 0.375,0.167969 0.679688,0.402344 0.921875,0.703125 0.238281,0.304688 0.425781,0.667969 0.5625,1.09375 0.132813,0.429688 0.203125,0.886719 0.203125,1.375 0,1.15625 -0.289062,2.054688 -0.859375,2.6875 -0.5625,0.625 -1.246094,0.9375 -2.046875,0.9375 -0.792969,0 -1.417969,-0.332031 -1.875,-1 z M 1.890625,-3.421875 c 0,0.8125 0.109375,1.398437 0.328125,1.75 0.363281,0.59375 0.851562,0.890625 1.46875,0.890625 0.5,0 0.925781,-0.210938 1.28125,-0.640625 0.363281,-0.4375 0.546875,-1.085937 0.546875,-1.953125 0,-0.875 -0.179687,-1.519531 -0.53125,-1.9375 -0.34375,-0.425781 -0.761719,-0.640625 -1.25,-0.640625 -0.5,0 -0.933594,0.21875 -1.296875,0.65625 -0.367188,0.4375 -0.546875,1.0625 -0.546875,1.875 z m 0,0"
+           id="path440" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-27">
+        <path
+           style="stroke:none"
+           d="m 1.171875,0 v -1.296875 h 1.3125 V 0 Z m 0,0"
+           id="path443" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-28">
+        <path
+           style="stroke:none"
+           d="M 0.8125,2.59375 0.671875,1.515625 C 0.921875,1.585938 1.140625,1.625 1.328125,1.625 1.585938,1.625 1.789062,1.582031 1.9375,1.5 2.09375,1.414062 2.21875,1.296875 2.3125,1.140625 2.382812,1.023438 2.5,0.742188 2.65625,0.296875 2.675781,0.234375 2.710938,0.140625 2.765625,0.015625 l -2.5625,-6.75 H 1.4375 l 1.40625,3.90625 c 0.175781,0.492187 0.335938,1.007813 0.484375,1.546875 0.132813,-0.519531 0.289063,-1.03125 0.46875,-1.53125 l 1.4375,-3.921875 H 6.375 L 3.8125,0.109375 C 3.539062,0.847656 3.328125,1.359375 3.171875,1.640625 2.972656,2.015625 2.738281,2.289062 2.46875,2.46875 2.207031,2.644531 1.898438,2.734375 1.546875,2.734375 1.328125,2.734375 1.082031,2.6875 0.8125,2.59375 Z m 0,0"
+           id="path446" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph0-29">
+        <path
+           style="stroke:none"
+           d="M 0.859375,0 V -9.296875 H 2 v 3.34375 c 0.53125,-0.625 1.203125,-0.9375 2.015625,-0.9375 0.5,0 0.929687,0.101563 1.296875,0.296875 0.363281,0.199219 0.625,0.476562 0.78125,0.828125 0.164062,0.34375 0.25,0.84375 0.25,1.5 V 0 H 5.203125 v -4.265625 c 0,-0.570313 -0.125,-0.988281 -0.375,-1.25 -0.25,-0.257813 -0.601563,-0.390625 -1.046875,-0.390625 -0.34375,0 -0.667969,0.089844 -0.96875,0.265625 -0.292969,0.179687 -0.5,0.417969 -0.625,0.71875 C 2.0625,-4.617188 2,-4.207031 2,-3.6875 V 0 Z m 0,0"
+           id="path449" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-0">
+        <path
+           style="stroke:none"
+           d="M 1.484375,0 V -7.4375 H 7.4375 V 0 Z m 0.1875,-0.1875 H 7.25 V -7.25 H 1.671875 Z m 0,0"
+           id="path452" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-1">
+        <path
+           style="stroke:none"
+           d="m 0.921875,0 v -8.515625 h 3.21875 c 0.5625,0 0.992187,0.027344 1.296875,0.078125 0.414062,0.0625 0.765625,0.195312 1.046875,0.390625 0.28125,0.199219 0.503906,0.476563 0.671875,0.828125 0.175781,0.355469 0.265625,0.742188 0.265625,1.15625 0,0.730469 -0.230469,1.34375 -0.6875,1.84375 -0.460937,0.5 -1.292969,0.75 -2.5,0.75 h -2.1875 V 0 Z m 1.125,-4.46875 H 4.25 c 0.726562,0 1.242188,-0.132812 1.546875,-0.40625 0.3125,-0.269531 0.46875,-0.648438 0.46875,-1.140625 0,-0.363281 -0.09375,-0.671875 -0.28125,-0.921875 -0.179687,-0.25 -0.414063,-0.414062 -0.703125,-0.5 -0.1875,-0.050781 -0.542969,-0.078125 -1.0625,-0.078125 H 2.046875 Z m 0,0"
+           id="path455" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-2">
+        <path
+           style="stroke:none"
+           d="M 0.765625,0 V -6.171875 H 1.71875 v 0.9375 C 1.957031,-5.671875 2.175781,-5.957031 2.375,-6.09375 2.582031,-6.238281 2.804688,-6.3125 3.046875,-6.3125 c 0.351563,0 0.710937,0.117188 1.078125,0.34375 L 3.765625,-5 C 3.515625,-5.15625 3.257812,-5.234375 3,-5.234375 c -0.230469,0 -0.4375,0.074219 -0.625,0.21875 -0.179688,0.136719 -0.304688,0.324219 -0.375,0.5625 -0.125,0.375 -0.1875,0.78125 -0.1875,1.21875 V 0 Z m 0,0"
+           id="path458" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-3">
+        <path
+           style="stroke:none"
+           d="M 0.796875,-7.3125 V -8.515625 H 1.84375 V -7.3125 Z m 0,7.3125 V -6.171875 H 1.84375 V 0 Z m 0,0"
+           id="path461" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-4">
+        <path
+           style="stroke:none"
+           d="m 0.390625,-3.09375 c 0,-1.132812 0.316406,-1.976562 0.953125,-2.53125 0.53125,-0.457031 1.179688,-0.6875 1.953125,-0.6875 0.84375,0 1.535156,0.28125 2.078125,0.84375 0.539062,0.554688 0.8125,1.320312 0.8125,2.296875 0,0.792969 -0.121094,1.417969 -0.359375,1.875 -0.242187,0.460937 -0.589844,0.8125 -1.046875,1.0625 -0.460938,0.25 -0.953125,0.375 -1.484375,0.375 C 2.429688,0.140625 1.726562,-0.132812 1.1875,-0.6875 0.65625,-1.238281 0.390625,-2.039062 0.390625,-3.09375 Z m 1.078125,0 c 0,0.792969 0.171875,1.386719 0.515625,1.78125 0.34375,0.398438 0.78125,0.59375 1.3125,0.59375 0.507813,0 0.9375,-0.195312 1.28125,-0.59375 0.351563,-0.394531 0.53125,-1 0.53125,-1.8125 0,-0.757812 -0.179687,-1.335938 -0.53125,-1.734375 -0.34375,-0.394531 -0.773437,-0.59375 -1.28125,-0.59375 -0.53125,0 -0.96875,0.199219 -1.3125,0.59375 C 1.640625,-4.460938 1.46875,-3.875 1.46875,-3.09375 Z m 0,0"
+           id="path464" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-5">
+        <path
+           style="stroke:none"
+           d="M 0.359375,-1.84375 1.40625,-2 c 0.050781,0.40625 0.207031,0.726562 0.46875,0.953125 0.269531,0.21875 0.644531,0.328125 1.125,0.328125 0.476562,0 0.832031,-0.097656 1.0625,-0.296875 0.238281,-0.195313 0.359375,-0.425781 0.359375,-0.6875 0,-0.238281 -0.105469,-0.425781 -0.3125,-0.5625 -0.148437,-0.09375 -0.5,-0.207031 -1.0625,-0.34375 -0.773437,-0.195313 -1.308594,-0.363281 -1.609375,-0.5 -0.292969,-0.144531 -0.515625,-0.34375 -0.671875,-0.59375 -0.148437,-0.25 -0.21875,-0.523437 -0.21875,-0.828125 0,-0.28125 0.0625,-0.535156 0.1875,-0.765625 0.125,-0.238281 0.296875,-0.4375 0.515625,-0.59375 0.15625,-0.113281 0.375,-0.210937 0.65625,-0.296875 0.28125,-0.082031 0.582031,-0.125 0.90625,-0.125 0.488281,0 0.914062,0.074219 1.28125,0.21875 0.363281,0.136719 0.628906,0.324219 0.796875,0.5625 0.175781,0.230469 0.300781,0.546875 0.375,0.953125 L 4.234375,-4.4375 c -0.042969,-0.320312 -0.179687,-0.570312 -0.40625,-0.75 -0.21875,-0.175781 -0.53125,-0.265625 -0.9375,-0.265625 -0.480469,0 -0.824219,0.085937 -1.03125,0.25 -0.210937,0.15625 -0.3125,0.339844 -0.3125,0.546875 0,0.136719 0.046875,0.257812 0.140625,0.359375 0.082031,0.117187 0.210938,0.210937 0.390625,0.28125 C 2.179688,-3.972656 2.488281,-3.882812 3,-3.75 c 0.738281,0.199219 1.253906,0.367188 1.546875,0.5 0.300781,0.125 0.535156,0.308594 0.703125,0.546875 0.164062,0.242187 0.25,0.539063 0.25,0.890625 0,0.34375 -0.105469,0.671875 -0.3125,0.984375 -0.199219,0.3125 -0.492188,0.554687 -0.875,0.71875 -0.386719,0.1640625 -0.824219,0.25 -1.3125,0.25 -0.804688,0 -1.414062,-0.1640625 -1.828125,-0.5 -0.417969,-0.332031 -0.6875,-0.828125 -0.8125,-1.484375 z m 0,0"
+           id="path467" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-6">
+        <path
+           style="stroke:none"
+           d="m 0.953125,0 v -8.515625 h 1.125 v 3.5 h 4.4375 v -3.5 h 1.125 V 0 h -1.125 v -4.015625 h -4.4375 V 0 Z m 0,0"
+           id="path470" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-7">
+        <path
+           style="stroke:none"
+           d="M 0.734375,2.375 0.625,1.390625 c 0.226562,0.0625 0.425781,0.09375 0.59375,0.09375 0.226562,0 0.410156,-0.042969 0.546875,-0.125 C 1.910156,1.285156 2.03125,1.179688 2.125,1.046875 2.1875,0.941406 2.289062,0.679688 2.4375,0.265625 2.457031,0.210938 2.488281,0.128906 2.53125,0.015625 l -2.34375,-6.1875 h 1.125 l 1.296875,3.578125 c 0.164063,0.449219 0.3125,0.921875 0.4375,1.421875 0.125,-0.476563 0.269531,-0.945313 0.4375,-1.40625 l 1.3125,-3.59375 H 5.84375 L 3.5,0.109375 C 3.25,0.785156 3.050781,1.25 2.90625,1.5 2.726562,1.84375 2.515625,2.09375 2.265625,2.25 2.023438,2.414062 1.738281,2.5 1.40625,2.5 1.207031,2.5 0.984375,2.457031 0.734375,2.375 Z m 0,0"
+           id="path473" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-8">
+        <path
+           style="stroke:none"
+           d="m 0.78125,2.359375 v -8.53125 H 1.734375 V -5.375 C 1.960938,-5.6875 2.21875,-5.921875 2.5,-6.078125 2.78125,-6.234375 3.125,-6.3125 3.53125,-6.3125 c 0.519531,0 0.984375,0.136719 1.390625,0.40625 0.40625,0.273438 0.707031,0.65625 0.90625,1.15625 0.207031,0.492188 0.3125,1.027344 0.3125,1.609375 0,0.636719 -0.117187,1.210937 -0.34375,1.71875 -0.21875,0.5 -0.546875,0.886719 -0.984375,1.15625 -0.429688,0.26953125 -0.882812,0.40625 -1.359375,0.40625 -0.34375,0 -0.65625,-0.0742188 -0.9375,-0.21875 -0.28125,-0.144531 -0.511719,-0.332031 -0.6875,-0.5625 v 3 z m 0.953125,-5.40625 c 0,0.792969 0.160156,1.382813 0.484375,1.765625 0.320312,0.375 0.710938,0.5625 1.171875,0.5625 0.457031,0 0.851563,-0.195312 1.1875,-0.59375 0.332031,-0.394531 0.5,-1.003906 0.5,-1.828125 0,-0.78125 -0.164063,-1.367187 -0.484375,-1.765625 C 4.269531,-5.300781 3.882812,-5.5 3.4375,-5.5 2.988281,-5.5 2.59375,-5.289062 2.25,-4.875 1.90625,-4.457031 1.734375,-3.847656 1.734375,-3.046875 Z m 0,0"
+           id="path476" />
+      </symbol>
+      <symbol
+         overflow="visible"
+         id="glyph1-9">
+        <path
+           style="stroke:none"
+           d="m 5.015625,-1.984375 1.078125,0.125 C 5.925781,-1.222656 5.609375,-0.726562 5.140625,-0.375 4.679688,-0.03125 4.09375,0.140625 3.375,0.140625 2.46875,0.140625 1.75,-0.132812 1.21875,-0.6875 0.695312,-1.25 0.4375,-2.03125 0.4375,-3.03125 c 0,-1.039062 0.265625,-1.847656 0.796875,-2.421875 C 1.773438,-6.023438 2.46875,-6.3125 3.3125,-6.3125 c 0.832031,0 1.507812,0.28125 2.03125,0.84375 0.519531,0.5625 0.78125,1.355469 0.78125,2.375 0,0.0625 0,0.15625 0,0.28125 H 1.515625 C 1.554688,-2.132812 1.75,-1.613281 2.09375,-1.25 c 0.34375,0.355469 0.773438,0.53125 1.296875,0.53125 0.375,0 0.695313,-0.097656 0.96875,-0.296875 0.269531,-0.207031 0.488281,-0.53125 0.65625,-0.96875 z M 1.578125,-3.6875 h 3.4375 C 4.972656,-4.195312 4.84375,-4.582031 4.625,-4.84375 4.289062,-5.25 3.859375,-5.453125 3.328125,-5.453125 c -0.480469,0 -0.886719,0.164063 -1.21875,0.484375 -0.324219,0.324219 -0.5,0.75 -0.53125,1.28125 z m 0,0"
+           id="path479" />
+      </symbol>
+    </g>
+    <clipPath
+       id="clip1">
+      <path
+         d="M 0,0 H 601.94141 V 290.05078 H 0 Z m 0,0"
+         id="path484" />
+    </clipPath>
+    <clipPath
+       id="clip2">
+      <path
+         d="m 258,257 h 59 v 31.96875 h -59 z m 0,0"
+         id="path487" />
+    </clipPath>
+    <clipPath
+       id="clip3">
+      <path
+         d="m 314,257 h 59 v 31.96875 h -59 z m 0,0"
+         id="path490" />
+    </clipPath>
+    <clipPath
+       id="clip4">
+      <path
+         d="m 529,162 h 72.94141 v 43 H 529 Z m 0,0"
+         id="path493" />
+    </clipPath>
+    <clipPath
+       id="clip5">
+      <path
+         d="m 529,202 h 72.94141 v 43 H 529 Z m 0,0"
+         id="path496" />
+    </clipPath>
+    <image
+       id="image69049"
+       width="60"
+       height="56"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA4CAAAAACEBsS4AAAAAmJLR0QA/4ePzL8AAAPgSURBVEiJvZddTJZlGMf/PLwvsgQlCHMaI4xyBYMUSxdNLeHgreY8ybXqoI/ZScVWzQOnba2I6qBlWm2uxlbJUrdoszkB5wFhZc0Q7AuFEA1F4iOSZXz/Ongenve+X94vOug6uv//6/o99/3cz/3xvtL/GDVXvs/7r2zeNDzpq0C0krS8mR6iwtc5Uo6vnDn57O2nx7q6R7/ZHA3ul/RnzHE5VcN4Ub/A8NdvDkqSRiEkSVq7NTeSzWkEht5YX1QH7A/71fBTmST9CqWSFn0I51Nt9qZu4GyhpNQ2YJufaAUmXw1KxyFXqrwAUGD3+wvQer07TuCiP/B9ALSVaD8TKZmu6kgx2YzvgJEVnhrA+CrBbacBJna9w4WKHoD+l7NMNq0JYMusbAIOGOl76sbdiZwBTj6eZr/wboDPfPk20G+NbMnOiwCMf7JGEVE+DYwu9/VOgGKrpPA9AE7cF8mmdwDsCBsvAFSFdUroyMzsEvj52UwLfgtgMCNsPAdQN6syqjoB2o9wqRZg9IOicOmaKYBdxtO2AzR74sEh3C9dy7BCvVgPVgvAyGIDfgWg00yfWS01wAItrgVgmZfcAMCb5nvsA7jsiQaYrE6T1A43SwpdgqsLveQxAG4z4UaAc55YWfd5mSTpDyiXpNz3v3jAy60F4FtrBs+ZPc9GcAYe8ZW7n92J+tgsSy+QpOEIeGmKtMxXjiSVPCRJkwfNsuKAJA1GwFmSwp/YkaQnJEkt1hFxp6LBnZdFva8CkpytkqQvrbJVkqSBCHjsjrs7frecje6au8UyWwF4TfHCkeRO39nfTD+jRJLUGxeWFBwEYK9lbnJHsypRz5XuQXzM8sslSdd+jAsHpE1u6+mHTf9eSdIPU4ngdW4r2iF/Mi4rR8HVsbMJ4IBK0yVJL7aZds26ZGDvxGBqkWWeirJT5objvXL7VdPNchfngbn1EbB7QH5luZWpkjRzKCHsXnYtlutehM19CWDJvQeWm1ZKHwDPJGQzAbC3nnuwTOTEQPxwbpAknbHMRyVJnw4l7PkuAHabVuoVgOlbE7JOtiSpy/QqbpSkQ51RyiPgcUmSdTo8JUnUJGSlIgDM9V0wBXA4CVZLAMg3nD0A02XJwKnTAMbPouy/58xg7BgAyA7r1wG6F8YGzPgaYKkv8/8BqEiO1Q6Alb48CFCbJKtigPtn1UaArqx4gBXngZe8dm4v0Lcibr0Ve4DjbtNpAv4qTZ5V4RhMZEtS8CNgbMM8WKkaaAxIuc3ASGherAL1wKl3j14D2hPvpYgI7p10r6aB56P+bYgV3o/Lwsduzx/paTg6Ma9O/wXNplI0oH+TPgAAAABJRU5ErkJggg==" />
+    <mask
+       id="mask0">
+      <use
+         xlink:href="#image69049"
+         id="use500" />
+    </mask>
+    <image
+       id="image69048"
+       width="60"
+       height="56"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA4CAIAAAAuDwwzAAAABmJLR0QA/wD/AP+gvaeTAAAAIUlEQVRoge3BMQEAAADCoPVPbQlPoAAAAAAAAAAAAICXASeYAAHo8ixnAAAAAElFTkSuQmCC" />
+    <image
+       id="image69055"
+       width="434"
+       height="84"
+       xlink:href="data:image/png;base64,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" />
+    <mask
+       id="mask1">
+      <use
+         xlink:href="#image69055"
+         id="use505" />
+    </mask>
+    <image
+       id="image69054"
+       width="434"
+       height="84"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAbIAAABUCAIAAABoeyVgAAAABmJLR0QA/wD/AP+gvaeTAAAAgUlEQVR4nO3BMQEAAADCoPVPbQdvoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB+A6ubAAGkC+bNAAAAAElFTkSuQmCC" />
+    <image
+       id="image69061"
+       width="262"
+       height="74"
+       xlink:href="data:image/png;base64,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" />
+    <mask
+       id="mask2">
+      <use
+         xlink:href="#image69061"
+         id="use510" />
+    </mask>
+    <image
+       id="image69060"
+       width="262"
+       height="74"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAQYAAABKCAIAAADWum3IAAAABmJLR0QA/wD/AP+gvaeTAAAAT0lEQVR4nO3BAQ0AAADCoPdPbQ43oAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+DXjfgABR7xffwAAAABJRU5ErkJggg==" />
+    <image
+       id="image69067"
+       width="34"
+       height="48"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAwCAAAAABRMveOAAAAAmJLR0QA/4ePzL8AAAKqSURBVDiNfZRdaJZlGMd/7/sWuhlbSrXQGTRTNyfOycKjcIGxGIZH0ZkHebKW4Ece6BACP0AUFF3RwaAIsaycjfW5DA3RyBkK+XEiKKvEcN/q2trXz4Pn2Z77fSZdR/f1v3/Pdf2f637uJwcAufLVuV7+J0o++Vft+eLplF62eUdVtKofUP9TrzybR6x9qCOVAK+NOLFvUe5T9caTIfK36iZg4aD9dUC96lsBUanqO2RpKaKxA5gN8GqArAHgEqzTrwFoUv0uQE6oDuSg0wclALSpngqQu6rfAHoUgKJh1QMJUa7qNsjCBwCsnw3we4LUAvAL4OVI6VB9OCdlpT8LuBOA+ROqH6ettAPcnw/AdlVfSVvZChDP8w/VW5kEaVC1OhGqVN2dnkpfNhH2qro4baUtEG6o/hYIkZUtAFGligqAcLTJVOJoUrUibaU3sP+z6s2AiKxE55sFeGI1QHjKS59P+mQBqp4C+HWGlbMJUg7AxTTSezVBSgC6u9LIORPkOYA/Z1iJ+kTIOEB3gLxO4jZCbgNMJsSs9wB6rgXIreluUTQvDKxEMXdIHX1mKm3UqUuWxOH4SwbI7ZmIkOV5yIJudfQNgLJzEeC9TB7Cih517PzBfacntF3Vr0hF2WeT8dODG9ap+u7UVlJtUU3lstK+v858O/RRA0DZ7XSZILpUL02n2ZnEqhcAvgyluhOdJ+uD/Jjqg/CH9b7qZM10Xjqavi/V46rumhZaVLuLEyJblwMgNyXUbgTG3hwMqhyPplEbpwU3Vd/O89+q6k9xlcznqvvzX3GbOnwkbp05otqaOp2Ven1WvC5uU/2hMJ8gc1q/XwJQ0Nilju9M1QDmnNexC4eaf+xRPfPyDAAo/nAoPuTh9rWP2c8AzFv/0ouF/9y53jH0uBKPAOB/qpReYq3OAAAAAElFTkSuQmCC" />
+    <mask
+       id="mask3">
+      <use
+         xlink:href="#image69067"
+         id="use515" />
+    </mask>
+    <image
+       id="image69066"
+       width="34"
+       height="48"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACIAAAAwCAIAAAD7Oz8FAAAABmJLR0QA/wD/AP+gvaeTAAAAHElEQVRYhe3BgQAAAADDoPlTX+EAVQEAAAAArwETUAABpThf7wAAAABJRU5ErkJggg==" />
+    <clipPath
+       id="clip6">
+      <path
+         d="m 372.42187,208.87891 h 23.82032 v 23.8125 h -23.82032 z m 0,0"
+         id="path519" />
+    </clipPath>
+    <image
+       id="image69073"
+       width="752"
+       height="752"
+       xlink:href="data:image/png;base64,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" />
+    <mask
+       id="mask4">
+      <use
+         xlink:href="#image69073"
+         id="use523" />
+    </mask>
+    <image
+       id="image69072"
+       width="752"
+       height="752"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvAAAALwCAIAAAB+xNYtAAAABmJLR0QA/wD/AP+gvaeTAAAGhElEQVR4nO3BMQEAAADCoPVPbQ0PoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODHAOdnAAEk0J4tAAAAAElFTkSuQmCC" />
+    <clipPath
+       id="clip7">
+      <path
+         d="m 55.214844,208.87891 h 28.148437 v 27.77343 H 55.214844 Z m 0,0"
+         id="path527" />
+    </clipPath>
+    <image
+       id="image69079"
+       width="752"
+       height="752"
+       xlink:href="data:image/png;base64,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" />
+    <mask
+       id="mask5">
+      <use
+         xlink:href="#image69079"
+         id="use531" />
+    </mask>
+    <image
+       id="image69078"
+       width="752"
+       height="752"
+       xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAvAAAALwCAIAAAB+xNYtAAAABmJLR0QA/wD/AP+gvaeTAAAGhElEQVR4nO3BMQEAAADCoPVPbQ0PoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAODHAOdnAAEk0J4tAAAAAElFTkSuQmCC" />
+    <image
+       id="image69083"
+       width="267"
+       height="189"
+       xlink:href="data:image/png;base64,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" />
+  </defs>
+  <g
+     id="surface69043">
+    <rect
+       x="0"
+       y="0"
+       width="602"
+       height="291"
+       style="fill:#ffffff;fill-opacity:1;stroke:none"
+       id="rect538" />
+    <g
+       clip-path="url(#clip1)"
+       clip-rule="nonzero"
+       id="g542">
+      <path
+         style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+         d="M 0,0 H 601.94141 V 290.05078 H 0 Z m 0,0"
+         id="path540" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 187.99928,188.00165 h 31.63243"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path544" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 244.00391,204.01172 -7.58204,3.78515 1.89844,-3.78515 -1.89844,-3.78906 z m 0,0"
+       id="path546" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 224.88153,188.00165 -6.99976,3.49739 1.74994,-3.49739 -1.74994,-3.50099 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path548" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 95.269531,204.01172 v 3.24609 H 94.1875 v -3.24609 z m 0,6.49219 V 213.75 H 94.1875 v -3.24609 z m 0,6.49218 v 3.2461 H 94.1875 v -3.2461 z m 0,6.4961 v 3.24609 H 94.1875 v -3.24609 z m 0,6.49218 v 3.2461 H 94.1875 v -3.2461 z m 0,6.49219 v 3.25 H 94.1875 v -3.25 z m 0,6.4961 v 3.24609 H 94.1875 v -3.24609 z m 0,6.49218 v 3.2461 H 94.1875 v -3.2461 z m 0,6.4961 v 1.08203 H 94.730469 V 256.5 h 2.164062 v 1.08203 H 94.1875 v -1.62109 z M 100.14453,256.5 h 3.2461 v 1.08203 h -3.2461 z m 6.49219,0 h 3.25 v 1.08203 h -3.25 z m 6.49609,0 h 3.25 v 1.08203 h -3.25 z m 6.4961,0 h 3.25 v 1.08203 h -3.25 z m 6.49609,0 h 3.25 v 1.08203 h -3.25 z m 6.49609,0 h 3.25 v 1.08203 h -3.25 z m 6.4961,0 h 3.25 v 1.08203 h -3.25 z m 6.49609,0 h 3.24609 v 1.08203 h -3.24609 z m 6.49609,0 h 3.2461 v 1.08203 h -3.2461 z m 6.4961,0 h 3.24609 v 1.08203 h -3.24609 z m 6.49609,0 h 3.2461 v 1.08203 h -3.2461 z m 6.4961,0 h 3.24609 v 1.08203 h -3.24609 z m 6.49609,0 h 3.24609 v 1.08203 h -3.24609 z m 6.49219,0 h 3.25 v 1.08203 h -3.25 z m 6.49609,0 h 3.25 v 1.08203 h -3.25 z m 6.49609,0 h 3.25 v 1.08203 h -3.25 z m 6.4961,0 h 3.25 v 1.08203 h -3.25 z m 6.49609,0 h 3.25 v 1.08203 h -3.25 z m 6.4961,0 h 3.24609 v 1.08203 h -3.24609 z m 6.49609,0 h 3.24609 v 1.08203 h -3.24609 z m 6.49609,0 h 3.2461 v 1.08203 h -3.2461 z m 6.4961,0 h 2.16406 v 0.54297 h -0.54297 v -1.08203 h 1.08594 v 1.62109 h -2.70703 z m 1.62109,-3.78906 v -3.2461 h 1.08594 v 3.2461 z m 0,-6.49219 v -3.24609 h 1.08594 v 3.24609 z m 0,-6.49219 v -3.25 h 1.08594 v 3.25 z m 0,-6.49609 v -3.2461 h 1.08594 v 3.2461 z m 0,-6.49219 v -3.24609 h 1.08594 v 3.24609 z m 0,-6.49609 v -3.2461 h 1.08594 v 3.2461 z m 0,0"
+       id="path550" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 219.99974,194.11938 3.49988,7.00199 -3.49988,-1.7505 -3.49988,1.7505 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path552" />
+    <path
+       style="fill:#fff0cc;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 116.70703,181.28125 h 80.54688 c 0.44921,0 0.89062,0.043 1.33203,0.13281 0.4375,0.0859 0.86328,0.21485 1.27734,0.38672 0.41406,0.17188 0.80859,0.38281 1.17969,0.62891 0.375,0.25 0.71875,0.53125 1.03515,0.84765 0.31641,0.31641 0.59766,0.66407 0.84766,1.03516 0.25,0.37109 0.45703,0.76562 0.62891,1.17969 0.17187,0.41406 0.30078,0.83984 0.39062,1.27734 0.0859,0.44141 0.12891,0.88281 0.12891,1.33203 v 31.81641 c 0,0.44922 -0.043,0.89062 -0.12891,1.33203 -0.0898,0.4375 -0.21875,0.86328 -0.39062,1.27734 -0.17188,0.41407 -0.37891,0.8086 -0.62891,1.17969 -0.25,0.37109 -0.53125,0.71875 -0.84766,1.03516 -0.3164,0.3164 -0.66015,0.59765 -1.03515,0.84765 -0.3711,0.2461 -0.76563,0.45703 -1.17969,0.62891 -0.41406,0.17187 -0.83984,0.30078 -1.27734,0.38672 -0.44141,0.0898 -0.88282,0.13281 -1.33203,0.13281 h -80.54688 c -0.44922,0 -0.89062,-0.043 -1.33203,-0.13281 -0.4375,-0.0859 -0.86328,-0.21485 -1.27734,-0.38672 -0.41407,-0.17188 -0.8086,-0.38281 -1.17969,-0.62891 -0.37109,-0.25 -0.71875,-0.53125 -1.03516,-0.84765 -0.3164,-0.31641 -0.59765,-0.66407 -0.84765,-1.03516 -0.2461,-0.37109 -0.45703,-0.76562 -0.62891,-1.17969 -0.17187,-0.41406 -0.30078,-0.83984 -0.38672,-1.27734 -0.0898,-0.44141 -0.13281,-0.88281 -0.13281,-1.33203 v -31.81641 c 0,-0.44922 0.043,-0.89062 0.13281,-1.33203 0.0859,-0.4375 0.21485,-0.86328 0.38672,-1.27734 0.17188,-0.41407 0.38281,-0.8086 0.62891,-1.17969 0.25,-0.37109 0.53125,-0.71875 0.84765,-1.03516 0.31641,-0.3164 0.66407,-0.59765 1.03516,-0.84765 0.37109,-0.2461 0.76562,-0.45703 1.17969,-0.62891 0.41406,-0.17187 0.83984,-0.30078 1.27734,-0.38672 0.44141,-0.0898 0.88281,-0.13281 1.33203,-0.13281 z m 0,0"
+       id="path554" />
+    <path
+       style="fill:none;stroke:#d4b554;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="m 107.29995,166.99928 h 74.39954 c 0.41494,0 0.82265,0.0397 1.23037,0.12272 0.40411,0.0794 0.7974,0.19851 1.17986,0.35732 0.38246,0.1588 0.74688,0.3537 1.08965,0.58109 0.34638,0.23099 0.6639,0.49086 0.95616,0.78321 0.29225,0.29235 0.55204,0.61358 0.78296,0.95646 0.23092,0.34288 0.42215,0.70742 0.58091,1.09 0.15875,0.38258 0.27782,0.77599 0.36081,1.18023 0.0794,0.40785 0.11907,0.8157 0.11907,1.23077 v 29.39754 c 0,0.41507 -0.0397,0.82292 -0.11907,1.23077 -0.083,0.40423 -0.20206,0.79765 -0.36081,1.18023 -0.15876,0.38258 -0.34999,0.74712 -0.58091,1.09 -0.23092,0.34288 -0.49071,0.66411 -0.78296,0.95646 -0.29226,0.29235 -0.60978,0.55222 -0.95616,0.78321 -0.34277,0.22738 -0.70719,0.42229 -1.08965,0.58109 -0.38246,0.15881 -0.77575,0.27792 -1.17986,0.35732 -0.40772,0.083 -0.81543,0.12272 -1.23037,0.12272 h -74.39954 c -0.41493,0 -0.82265,-0.0397 -1.23037,-0.12272 -0.40411,-0.0794 -0.79739,-0.19851 -1.17985,-0.35732 -0.38247,-0.1588 -0.74689,-0.35371 -1.08966,-0.58109 -0.34277,-0.23099 -0.66389,-0.49086 -0.95615,-0.78321 -0.29226,-0.29235 -0.55204,-0.61358 -0.78296,-0.95646 -0.22732,-0.34288 -0.42216,-0.70742 -0.58091,-1.09 -0.15876,-0.38258 -0.27783,-0.776 -0.36082,-1.18023 -0.0794,-0.40785 -0.11906,-0.8157 -0.11906,-1.23077 v -29.39754 c 0,-0.41507 0.0397,-0.82292 0.11906,-1.23077 0.083,-0.40424 0.20206,-0.79765 0.36082,-1.18023 0.15875,-0.38258 0.35359,-0.74712 0.58091,-1.09 0.23092,-0.34288 0.4907,-0.66411 0.78296,-0.95646 0.29226,-0.29235 0.61338,-0.55222 0.95615,-0.78321 0.34277,-0.22739 0.70719,-0.42229 1.08966,-0.58109 0.38246,-0.15881 0.77574,-0.27792 1.17985,-0.35732 0.40772,-0.083 0.81544,-0.12272 1.23037,-0.12272 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path556" />
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g560">
+      <use
+         xlink:href="#glyph0-1"
+         x="113.11753"
+         y="207.79796"
+         id="use558" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g564">
+      <use
+         xlink:href="#glyph0-2"
+         x="121.05274"
+         y="207.79796"
+         id="use562" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g570">
+      <use
+         xlink:href="#glyph0-3"
+         x="128.27863"
+         y="207.79796"
+         id="use566" />
+      <use
+         xlink:href="#glyph0-4"
+         x="132.6048"
+         y="207.79796"
+         id="use568" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g574">
+      <use
+         xlink:href="#glyph0-5"
+         x="141.98726"
+         y="207.79796"
+         id="use572" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g580">
+      <use
+         xlink:href="#glyph0-3"
+         x="149.21315"
+         y="207.79796"
+         id="use576" />
+      <use
+         xlink:href="#glyph0-6"
+         x="153.53932"
+         y="207.79796"
+         id="use578" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g584">
+      <use
+         xlink:href="#glyph0-7"
+         x="160.7652"
+         y="207.79796"
+         id="use582" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g590">
+      <use
+         xlink:href="#glyph0-8"
+         x="164.37424"
+         y="207.79796"
+         id="use586" />
+      <use
+         xlink:href="#glyph0-2"
+         x="175.19617"
+         y="207.79796"
+         id="use588" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g594">
+      <use
+         xlink:href="#glyph0-6"
+         x="182.42204"
+         y="207.79796"
+         id="use592" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g598">
+      <use
+         xlink:href="#glyph0-9"
+         x="189.64793"
+         y="207.79796"
+         id="use596" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g602">
+      <use
+         xlink:href="#glyph0-10"
+         x="196.87381"
+         y="207.79796"
+         id="use600" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 333.99845,188.00165 h 38.6322"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path604" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 377.88047,188.00165 -6.99977,3.49739 1.74995,-3.49739 -1.74995,-3.50099 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path606" />
+    <path
+       style="fill:none;stroke:#fff0cc;stroke-width:0.5;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 248.6699,168.46826 v 0 m 0,0 v 0 m -0.25979,6.39202 c 0.71081,-3.73199 5.83073,-3.9702 5.89929,-6.78904 m -5.89929,6.78904 c 1.23038,-2.73944 3.22928,-3.51182 5.89929,-6.78904 m -5.50961,12.43756 c 0.58091,-7.50008 4.36944,-5.91921 11.15993,-12.82737 m -11.15993,12.82737 c 4.25037,-2.05729 5.6395,-6.59054 11.15993,-12.82737 m -11.41971,19.2194 c 6.68946,-6.52197 14.76084,-9.91107 16.39893,-18.86208 m -16.39893,18.86208 c 6.05082,-5.30925 10.93983,-9.62955 16.39893,-18.86208 m -16.65872,25.26132 c 5.43023,-4.89057 14.16911,-15.49101 21.64875,-24.90039 m -21.64875,24.90039 c 6.75802,-6.28014 11.62899,-12.75879 21.64875,-24.90039 m -21.24825,30.54169 c 8.24096,-10.28283 13.19853,-15.31055 26.88775,-30.94232 m -26.88775,30.94232 c 9.47855,-8.65143 17.16025,-19.43234 26.88775,-30.94232 m -26.49807,36.59083 c 6.85905,-7.22938 11.13828,-12.95008 31.48811,-36.2299 m -31.48811,36.2299 c 10.60067,-16.71816 24.23939,-29.17016 31.48811,-36.2299 m -29.77786,40.35891 c 9.6806,-9.96881 19.79779,-25.75939 35.42097,-40.74871 m -35.42097,40.74871 c 13.10832,-14.37935 24.92854,-28.70817 35.42097,-40.74871 m -30.44175,41.10964 c 13.68922,-14.18806 25.32903,-29.92089 35.43178,-40.74872 m -35.43178,40.74872 c 12.36143,-14.80885 23.78115,-30.27099 35.43178,-40.74872 m -29.78146,40.35892 c 11.03004,-8.56842 23.95073,-27.75894 35.42096,-40.75955 m -35.42096,40.75955 c 11.13828,-15.58846 23.81002,-28.05851 35.42096,-40.75955 m -30.44175,41.12048 c 12.04032,-11.86008 22.02039,-23.81039 35.43179,-40.75955 m -35.43179,40.75955 c 13.60985,-15.81224 25.89191,-29.32175 35.43179,-40.75955 m -29.78146,40.35892 c 10.16048,-10.06988 22.1611,-18.62025 35.42096,-40.74872 m -35.42096,40.74872 c 5.56012,-10.56074 15.38865,-17.99946 35.42096,-40.74872 m -30.44175,41.10965 c 6.40081,-10.18177 24.48113,-27.41967 35.43179,-40.75233 m -35.43179,40.75233 c 10.52129,-12.83098 22.04203,-24.95092 35.43179,-40.75233 m -29.78147,40.36252 c 7.58067,-12.56027 20.10087,-20.30217 34.7715,-40.00159 m -34.7715,40.00159 c 8.98063,-9.01236 17.319,-17.77207 34.7715,-40.00159 m -29.79228,40.35891 c 6.00031,-11.79872 13.25264,-16.68929 35.43178,-40.75954 m -35.43178,40.75954 c 8.54043,-13.24965 18.4303,-20.76055 35.43178,-40.75954 m -30.44175,41.12047 c 9.66256,-8.31938 19.64263,-23.38089 35.43179,-40.75955 m -35.43179,40.75955 c 12.6104,-13.05836 22.94046,-29.71877 35.43179,-40.75955 m -29.78868,40.35892 c 10.0378,-8.46736 24.5569,-24.14966 34.11843,-39.24004 m -34.11843,39.24004 c 7.80798,-9.10981 12.97843,-16.8481 34.11843,-39.24004 m -29.12839,39.60097 c 12.39751,-9.20005 20.15859,-20.96989 30.83864,-35.46835 m -30.83864,35.46835 c 10.6584,-15.98909 24.03011,-26.54983 30.83864,-35.46835 m -25.19914,35.07855 c 3.71997,-7.83935 17.51023,-15.98909 25.58882,-29.43003 m -25.58882,29.43003 c 9.88987,-7.78882 17.95042,-18.75019 25.58882,-29.43003 m -20.59879,29.79095 c 3.92925,-8.9907 5.50961,-12.78044 20.339,-23.40254 m -20.339,23.40254 c 3.46019,-6.86123 9.55793,-12.15965 20.339,-23.40254 m -14.6995,23.00191 c 0.53761,-5.42113 2.74939,-3.99907 14.43972,-16.59905 m -14.43972,16.59905 c 4.7483,-5.29119 11.19962,-12.02971 14.43972,-16.59905 m -9.44968,16.95998 c 0.53039,-3.27 7.8585,-7.31239 9.18989,-10.56074 m -9.18989,10.56074 c 3.86069,-3.57318 4.12048,-7.5109 9.18989,-10.56074 m -4.86014,11.67962 c 2.89011,-1.12971 3.6406,-3.01014 5.24982,-6.04193 m -5.24982,6.04193 c 1.46129,-1.69997 3.3303,-2.85133 5.24982,-6.04193"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path608" />
+    <path
+       style="fill:none;stroke:#d4b554;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 253.29912,166.99928 c 24.97184,2.03924 44.56035,3.87997 74.39954,0 m -74.39954,0 c 15.15052,-2.5301 30.62216,0.36093 74.39954,0 m 0,0 c 0.63142,-1.32821 7.82242,4.60183 6.29979,6.3018 m -6.29979,-6.3018 c 2.90094,1.33182 8.06055,-1.15857 6.29979,6.3018 m 0,0 c -2.98753,10.45968 -3.89678,22.44969 0,29.39754 m 0,-29.39754 c 1.09326,6.43894 1.59118,15.76892 0,29.39754 m 0,0 c -3.76688,6.48226 -2.59785,9.38051 -6.29979,6.3018 m 6.29979,-6.3018 c 1.56232,3.22309 1.952,5.63047 -6.29979,6.3018 m 0,0 c -16.99787,-5.16127 -34.17977,-3.95216 -74.39954,0 m 74.39954,0 c -20.40755,1.0503 -39.877,-1.68192 -74.39954,0 m 0,0 c -2.33806,-3.1906 -2.65918,1.15857 -6.29978,-6.3018 m 6.29978,6.3018 c -4.52819,4.28782 -6.18071,2.41821 -6.29978,-6.3018 m 0,0 c 3.22205,-8.38795 -0.79018,-14.52011 0,-29.39754 m 0,29.39754 c -0.49071,-12.13799 -1.9087,-23.64797 0,-29.39754 m 0,0 c -0.7108,-7.96928 0.6206,-5.35978 6.29978,-6.3018 m -6.29978,6.3018 c -3.4205,-5.51137 -1.64892,-3.04262 6.29978,-6.3018"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path610" />
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g616">
+      <use
+         xlink:href="#glyph0-11"
+         x="285.96548"
+         y="200.22198"
+         id="use612" />
+      <use
+         xlink:href="#glyph0-12"
+         x="294.63083"
+         y="200.22198"
+         id="use614" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g624">
+      <use
+         xlink:href="#glyph0-3"
+         x="301.85669"
+         y="200.22198"
+         id="use618" />
+      <use
+         xlink:href="#glyph0-3"
+         x="306.18286"
+         y="200.22198"
+         id="use620" />
+      <use
+         xlink:href="#glyph0-2"
+         x="310.50903"
+         y="200.22198"
+         id="use622" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g628">
+      <use
+         xlink:href="#glyph0-13"
+         x="317.73492"
+         y="200.22198"
+         id="use626" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g632">
+      <use
+         xlink:href="#glyph0-5"
+         x="324.96082"
+         y="200.22198"
+         id="use630" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g636">
+      <use
+         xlink:href="#glyph0-14"
+         x="332.18668"
+         y="200.22198"
+         id="use634" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g640">
+      <use
+         xlink:href="#glyph0-9"
+         x="335.79572"
+         y="200.22198"
+         id="use638" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g646">
+      <use
+         xlink:href="#glyph0-8"
+         x="296.80862"
+         y="216.45621"
+         id="use642" />
+      <use
+         xlink:href="#glyph0-2"
+         x="307.63055"
+         y="216.45621"
+         id="use644" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g650">
+      <use
+         xlink:href="#glyph0-6"
+         x="314.85645"
+         y="216.45621"
+         id="use648" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g654">
+      <use
+         xlink:href="#glyph0-9"
+         x="322.08231"
+         y="216.45621"
+         id="use652" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g658">
+      <use
+         xlink:href="#glyph0-10"
+         x="329.3082"
+         y="216.45621"
+         id="use656" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 253.9991,83.00062 v 0.999769 H 144.49972 v 76.628521"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path660" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 144.49972,165.88041 -3.49988,-7.002 3.49988,1.7505 3.49988,-1.7505 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path662" />
+    <path
+       style="fill:#e1d4e6;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 419.94922,181.28125 h 76 c 0.59765,0 1.1914,0.0586 1.77734,0.17578 0.58594,0.11719 1.15235,0.28906 1.70313,0.51563 0.55468,0.23046 1.07812,0.51171 1.57422,0.83984 0.49609,0.33203 0.95703,0.71094 1.3789,1.13281 0.42188,0.42188 0.79688,0.87891 1.12891,1.37891 0.33203,0.49609 0.61328,1.01953 0.83984,1.57031 0.23047,0.55078 0.40235,1.12109 0.51953,1.70313 0.11719,0.58593 0.17188,1.17968 0.17188,1.77734 v 27.27344 c 0,0.59375 -0.0547,1.1875 -0.17188,1.77343 -0.11718,0.58204 -0.28906,1.15235 -0.51953,1.70313 -0.22656,0.55078 -0.50781,1.07422 -0.83984,1.57422 -0.33203,0.49609 -0.70703,0.95312 -1.12891,1.375 -0.42187,0.42187 -0.88281,0.80078 -1.3789,1.13281 -0.4961,0.33203 -1.01954,0.60938 -1.57422,0.83984 -0.55078,0.22657 -1.11719,0.39844 -1.70313,0.51563 -0.58594,0.11719 -1.17969,0.17578 -1.77734,0.17578 h -76 c -0.59766,0 -1.1875,-0.0586 -1.77344,-0.17578 -0.58594,-0.11719 -1.15234,-0.28906 -1.70703,-0.51563 -0.55078,-0.23046 -1.07422,-0.50781 -1.57031,-0.83984 -0.4961,-0.33203 -0.95703,-0.71094 -1.37891,-1.13281 -0.42187,-0.42188 -0.79687,-0.87891 -1.12891,-1.375 -0.33203,-0.5 -0.61328,-1.02344 -0.84375,-1.57422 -0.22656,-0.55078 -0.39843,-1.12109 -0.51562,-1.70313 -0.11719,-0.58593 -0.17578,-1.17968 -0.17578,-1.77343 V 190.375 c 0,-0.59766 0.0586,-1.19141 0.17578,-1.77734 0.11719,-0.58204 0.28906,-1.15235 0.51562,-1.70313 0.23047,-0.55078 0.51172,-1.07422 0.84375,-1.57031 0.33204,-0.5 0.70704,-0.95703 1.12891,-1.37891 0.42188,-0.42187 0.88281,-0.80078 1.37891,-1.13281 0.49609,-0.32813 1.01953,-0.60938 1.57031,-0.83984 0.55469,-0.22657 1.12109,-0.39844 1.70703,-0.51563 0.58594,-0.11719 1.17578,-0.17578 1.77344,-0.17578 z m 0,0"
+       id="path664" />
+    <path
+       style="fill:none;stroke:#9473a6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="m 387.3987,166.99928 h 70.19968 c 0.55204,0 1.10048,0.0541 1.6417,0.16242 0.54122,0.10828 1.0644,0.26709 1.57314,0.47642 0.51236,0.21295 0.99584,0.47282 1.45408,0.776 0.45823,0.30679 0.88399,0.65689 1.27366,1.04669 0.38968,0.3898 0.73606,0.81208 1.04275,1.27407 0.30669,0.45838 0.56648,0.94202 0.77575,1.45093 0.21288,0.50891 0.37164,1.03586 0.47988,1.57364 0.10824,0.5414 0.16237,1.09001 0.16237,1.64222 v 25.19996 c 0,0.54861 -0.0541,1.09722 -0.16237,1.63861 -0.10824,0.53779 -0.267,1.06474 -0.47988,1.57365 -0.20927,0.50891 -0.46906,0.99255 -0.77575,1.45454 -0.30669,0.45838 -0.65307,0.88066 -1.04275,1.27046 -0.38967,0.3898 -0.81543,0.7399 -1.27366,1.04669 -0.45824,0.30679 -0.94172,0.56305 -1.45408,0.776 -0.50874,0.20933 -1.03192,0.36814 -1.57314,0.47642 -0.54122,0.10828 -1.08966,0.16242 -1.6417,0.16242 H 387.3987 c -0.55204,0 -1.09687,-0.0541 -1.63809,-0.16242 -0.54122,-0.10828 -1.0644,-0.26709 -1.57675,-0.47642 -0.50874,-0.21295 -0.99223,-0.46921 -1.45047,-0.776 -0.45823,-0.30679 -0.88399,-0.65689 -1.27366,-1.04669 -0.38968,-0.3898 -0.73606,-0.81208 -1.04275,-1.27046 -0.30669,-0.46199 -0.56648,-0.94563 -0.77936,-1.45454 -0.20927,-0.50891 -0.36803,-1.03586 -0.47627,-1.57365 -0.10824,-0.54139 -0.16236,-1.09 -0.16236,-1.63861 v -25.19996 c 0,-0.55221 0.0541,-1.10082 0.16236,-1.64222 0.10824,-0.53778 0.267,-1.06473 0.47627,-1.57364 0.21288,-0.50891 0.47267,-0.99255 0.77936,-1.45093 0.30669,-0.46199 0.65307,-0.88427 1.04275,-1.27407 0.38967,-0.3898 0.81543,-0.7399 1.27366,-1.04669 0.45824,-0.30318 0.94173,-0.56305 1.45047,-0.776 0.51235,-0.20933 1.03553,-0.36814 1.57675,-0.47642 0.54122,-0.10828 1.08605,-0.16242 1.63809,-0.16242 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path666" />
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g674">
+      <use
+         xlink:href="#glyph0-15"
+         x="425.99643"
+         y="200.22198"
+         id="use668" />
+      <use
+         xlink:href="#glyph0-16"
+         x="434.66177"
+         y="200.22198"
+         id="use670" />
+      <use
+         xlink:href="#glyph0-17"
+         x="441.15753"
+         y="200.22198"
+         id="use672" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g678">
+      <use
+         xlink:href="#glyph0-12"
+         x="448.38342"
+         y="200.22198"
+         id="use676" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g682">
+      <use
+         xlink:href="#glyph0-18"
+         x="455.60928"
+         y="200.22198"
+         id="use680" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g688">
+      <use
+         xlink:href="#glyph0-19"
+         x="458.496"
+         y="200.22198"
+         id="use684" />
+      <use
+         xlink:href="#glyph0-18"
+         x="464.99176"
+         y="200.22198"
+         id="use686" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g692">
+      <use
+         xlink:href="#glyph0-14"
+         x="467.87848"
+         y="200.22198"
+         id="use690" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g696">
+      <use
+         xlink:href="#glyph0-18"
+         x="471.48752"
+         y="200.22198"
+         id="use694" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g700">
+      <use
+         xlink:href="#glyph0-2"
+         x="474.37424"
+         y="200.22198"
+         id="use698" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g704">
+      <use
+         xlink:href="#glyph0-20"
+         x="481.60013"
+         y="200.22198"
+         id="use702" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g708">
+      <use
+         xlink:href="#glyph0-1"
+         x="432.49219"
+         y="216.45621"
+         id="use706" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g712">
+      <use
+         xlink:href="#glyph0-12"
+         x="440.42743"
+         y="216.45621"
+         id="use710" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g716">
+      <use
+         xlink:href="#glyph0-20"
+         x="447.65329"
+         y="216.45621"
+         id="use714" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g722">
+      <use
+         xlink:href="#glyph0-16"
+         x="454.87918"
+         y="216.45621"
+         id="use718" />
+      <use
+         xlink:href="#glyph0-14"
+         x="461.37494"
+         y="216.45621"
+         id="use720" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g726">
+      <use
+         xlink:href="#glyph0-18"
+         x="464.98398"
+         y="216.45621"
+         id="use724" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g730">
+      <use
+         xlink:href="#glyph0-2"
+         x="467.8707"
+         y="216.45621"
+         id="use728" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g734">
+      <use
+         xlink:href="#glyph0-20"
+         x="475.09656"
+         y="216.45621"
+         id="use732" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 265.00027,242.99979 v -18.99922 h 25.0007 v -8.62978"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path736" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 290.00097,210.11929 3.49988,7.002 -3.49988,-1.7505 -3.49988,1.7505 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path738" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 268.24219,263.53516 h 38.39062 c 0.46875,0 0.92188,0.0898 1.35547,0.26953 0.43359,0.17968 0.81641,0.43359 1.14844,0.76562 0.33203,0.33203 0.58594,0.71485 0.76562,1.14844 0.17969,0.43359 0.26953,0.88672 0.26953,1.35547 v 16.49609 c 0,0.46875 -0.0898,0.91797 -0.26953,1.35156 -0.17968,0.4336 -0.43359,0.81641 -0.76562,1.14844 -0.33203,0.33203 -0.71485,0.58985 -1.14844,0.76953 -0.43359,0.17969 -0.88672,0.26563 -1.35547,0.26953 h -38.39062 c -0.46875,-0.004 -0.92188,-0.0898 -1.35547,-0.26953 -0.4336,-0.17968 -0.81641,-0.4375 -1.14844,-0.76953 -0.33203,-0.33203 -0.58594,-0.71484 -0.76562,-1.14844 -0.17969,-0.43359 -0.26954,-0.88281 -0.26954,-1.35156 v -16.49609 c 0,-0.46875 0.0899,-0.92188 0.26954,-1.35547 0.17968,-0.43359 0.43359,-0.81641 0.76562,-1.14844 0.33203,-0.33203 0.71484,-0.58594 1.14844,-0.76562 0.43359,-0.17969 0.88672,-0.26953 1.35547,-0.26953 z m 0,0"
+       id="path740" />
+    <g
+       clip-path="url(#clip2)"
+       clip-rule="nonzero"
+       id="g744">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+         d="m 247.26995,242.99979 h 35.46065 c 0.43298,0 0.85152,0.083 1.25202,0.24904 0.4005,0.16603 0.7541,0.40063 1.06079,0.70742 0.30669,0.30679 0.54122,0.6605 0.70719,1.06112 0.16598,0.40063 0.24896,0.81931 0.24896,1.25242 v 15.24197 c 0,0.43312 -0.083,0.84818 -0.24896,1.24881 -0.16597,0.40063 -0.4005,0.75434 -0.70719,1.06113 -0.30669,0.30679 -0.66029,0.545 -1.06079,0.71103 -0.4005,0.16602 -0.81904,0.24904 -1.25202,0.24904 h -35.46065 c -0.43298,0 -0.85152,-0.083 -1.25202,-0.24904 -0.4005,-0.16603 -0.7541,-0.40424 -1.06079,-0.71103 -0.30669,-0.30679 -0.54122,-0.6605 -0.70719,-1.06113 -0.16598,-0.40063 -0.24896,-0.81569 -0.24896,-1.24881 v -15.24197 c 0,-0.43311 0.083,-0.85179 0.24896,-1.25242 0.16597,-0.40062 0.4005,-0.75433 0.70719,-1.06112 0.30669,-0.30679 0.66029,-0.54139 1.06079,-0.70742 0.4005,-0.16603 0.81904,-0.24904 1.25202,-0.24904 z m 0,0"
+         transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+         id="path742" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g752">
+      <use
+         xlink:href="#glyph1-1"
+         x="271.33313"
+         y="279.22849"
+         id="use746" />
+      <use
+         xlink:href="#glyph1-2"
+         x="279.27637"
+         y="279.22849"
+         id="use748" />
+      <use
+         xlink:href="#glyph1-3"
+         x="283.24203"
+         y="279.22849"
+         id="use750" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g756">
+      <use
+         xlink:href="#glyph1-4"
+         x="285.88818"
+         y="279.22849"
+         id="use754" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g762">
+      <use
+         xlink:href="#glyph1-2"
+         x="292.5119"
+         y="279.22849"
+         id="use758" />
+      <use
+         xlink:href="#glyph1-5"
+         x="296.47757"
+         y="279.22849"
+         id="use760" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="M 422.49854,166.99928 V 83.00062 h -75.12838"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path764" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 342.12034,83.00062 6.99976,-3.500997 -1.74994,3.500997 1.74994,3.500997 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path766" />
+    <path
+       style="fill:#e1d4e6;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 282.34766,67.640625 h 80.54687 c 0.44922,0 0.89453,0.04687 1.33203,0.132813 0.4375,0.08594 0.86719,0.214843 1.28125,0.386718 0.41406,0.171875 0.80469,0.382813 1.17578,0.632813 0.375,0.246093 0.71875,0.53125 1.03516,0.847656 0.31641,0.316406 0.60156,0.660156 0.84766,1.03125 0.25,0.375 0.46093,0.765625 0.63281,1.179687 0.16797,0.414063 0.30078,0.839844 0.38672,1.277344 0.0859,0.441406 0.1289,0.882813 0.1289,1.332032 v 31.820312 c 0,0.44531 -0.043,0.89063 -0.1289,1.32813 -0.0859,0.4414 -0.21875,0.86718 -0.38672,1.28125 -0.17188,0.41406 -0.38281,0.80468 -0.63281,1.17578 -0.2461,0.375 -0.53125,0.71875 -0.84766,1.03515 -0.31641,0.31641 -0.66016,0.59766 -1.03516,0.84766 -0.37109,0.25 -0.76172,0.45703 -1.17578,0.62891 -0.41406,0.17187 -0.84375,0.30078 -1.28125,0.39062 -0.4375,0.0859 -0.88281,0.12891 -1.33203,0.12891 h -80.54687 c -0.44532,0 -0.89063,-0.043 -1.32813,-0.12891 -0.44141,-0.0898 -0.86719,-0.21875 -1.28125,-0.39062 -0.41406,-0.17188 -0.80469,-0.37891 -1.17969,-0.62891 -0.37109,-0.25 -0.71484,-0.53125 -1.03125,-0.84766 -0.3164,-0.3164 -0.60156,-0.66015 -0.85156,-1.03515 -0.24609,-0.3711 -0.45703,-0.76172 -0.62891,-1.17578 -0.17187,-0.41407 -0.30078,-0.83985 -0.38671,-1.28125 -0.0899,-0.4375 -0.13282,-0.88282 -0.13282,-1.32813 V 74.460938 c 0,-0.449219 0.043,-0.890626 0.13282,-1.332032 0.0859,-0.4375 0.21484,-0.863281 0.38671,-1.277344 0.17188,-0.414062 0.38282,-0.804687 0.62891,-1.179687 0.25,-0.371094 0.53516,-0.714844 0.85156,-1.03125 0.31641,-0.316406 0.66016,-0.601563 1.03125,-0.847656 0.375,-0.25 0.76563,-0.460938 1.17969,-0.632813 0.41406,-0.171875 0.83984,-0.300781 1.28125,-0.386718 0.4375,-0.08594 0.88281,-0.132813 1.32813,-0.132813 z m 0,0"
+       id="path768" />
+    <path
+       style="fill:none;stroke:#9473a6;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="m 260.29889,61.998247 h 74.39954 c 0.41493,0 0.82626,0.04331 1.23037,0.122716 0.40772,0.0794 0.801,0.19851 1.18346,0.357318 0.38246,0.158808 0.74328,0.353709 1.08605,0.584702 0.34638,0.227385 0.66389,0.490862 0.95615,0.783213 0.29226,0.292351 0.55565,0.609968 0.78296,0.952849 0.23092,0.34649 0.42576,0.707418 0.58452,1.090001 0.15515,0.382583 0.27783,0.775994 0.3572,1.180233 0.0794,0.407848 0.11907,0.815696 0.11907,1.230763 v 29.401156 c 0,0.411457 -0.0397,0.822914 -0.11907,1.227153 -0.0794,0.407848 -0.20205,0.801259 -0.3572,1.183839 -0.15876,0.38259 -0.3536,0.74351 -0.58452,1.08639 -0.22731,0.3465 -0.4907,0.66411 -0.78296,0.95646 -0.29226,0.29236 -0.60977,0.55222 -0.95615,0.78322 -0.34277,0.23099 -0.70359,0.42228 -1.08605,0.58109 -0.38246,0.15881 -0.77574,0.27791 -1.18346,0.36093 -0.40411,0.0794 -0.81544,0.1191 -1.23037,0.1191 h -74.39954 c -0.41133,0 -0.82266,-0.0397 -1.22676,-0.1191 -0.40772,-0.083 -0.80101,-0.20212 -1.18347,-0.36093 -0.38246,-0.15881 -0.74327,-0.3501 -1.08965,-0.58109 -0.34278,-0.231 -0.66029,-0.49086 -0.95255,-0.78322 -0.29226,-0.29235 -0.55565,-0.60996 -0.78296,-0.95646 -0.23092,-0.34288 -0.42576,-0.7038 -0.58452,-1.08639 -0.15876,-0.38258 -0.27782,-0.775991 -0.3572,-1.183839 -0.083,-0.404239 -0.12268,-0.815696 -0.12268,-1.227153 V 68.300042 c 0,-0.415067 0.0397,-0.822915 0.12268,-1.230763 0.0794,-0.404239 0.19844,-0.79765 0.3572,-1.180233 0.15876,-0.382583 0.3536,-0.743511 0.58452,-1.090001 0.22731,-0.342881 0.4907,-0.660498 0.78296,-0.952849 0.29226,-0.292351 0.60977,-0.555828 0.95255,-0.783213 0.34638,-0.230993 0.70719,-0.425894 1.08965,-0.584702 0.38246,-0.158808 0.77575,-0.277914 1.18347,-0.357318 0.4041,-0.0794 0.81543,-0.122716 1.22676,-0.122716 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path770" />
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g774">
+      <use
+         xlink:href="#glyph0-21"
+         x="294.28818"
+         y="94.158447"
+         id="use772" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g778">
+      <use
+         xlink:href="#glyph0-22"
+         x="304.39297"
+         y="94.158447"
+         id="use776" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g782">
+      <use
+         xlink:href="#glyph0-14"
+         x="311.61884"
+         y="94.158447"
+         id="use780" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g786">
+      <use
+         xlink:href="#glyph0-18"
+         x="315.22787"
+         y="94.158447"
+         id="use784" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g792">
+      <use
+         xlink:href="#glyph0-23"
+         x="318.11459"
+         y="94.158447"
+         id="use788" />
+      <use
+         xlink:href="#glyph0-18"
+         x="328.93652"
+         y="94.158447"
+         id="use790" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g798">
+      <use
+         xlink:href="#glyph0-19"
+         x="331.82324"
+         y="94.158447"
+         id="use794" />
+      <use
+         xlink:href="#glyph0-9"
+         x="338.319"
+         y="94.158447"
+         id="use796" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g802">
+      <use
+         xlink:href="#glyph0-3"
+         x="345.54489"
+         y="94.158447"
+         id="use800" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 317.00057,242.99979 v -18.99922 h -26.9996"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path804" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 366.46875,274.79297 h 1.08203 v 1.08203 h -1.08203 z m 3.24609,0 h 1.08594 v 1.08203 h -1.08594 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.2461,0 h 1.08593 v 1.08203 h -1.08593 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.24609,0 h 1.08203 v 1.08203 h -1.08203 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.24609,0 h 1.08204 v 1.08203 h -1.08204 z m 3.25,0 h 1.08204 v 1.08203 h -1.08204 z m 3.2461,0 h 1.08203 v 1.08203 h -1.08203 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.24609,0 h 1.08203 v 1.08203 h -1.08203 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.2461,0 h 1.08203 v 1.08203 h -1.08203 z m 3.24609,0 h 1.08594 v 1.08203 h -1.08594 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.24609,0 h 1.08203 v 1.08203 h -1.08203 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.2461,0 h 1.08203 v 1.08203 h -1.08203 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.24609,0 h 1.08203 v 1.08203 h -1.08203 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.24609,0 h 1.08204 v 1.08203 h -1.08204 z m 3.25,0 h 1.08204 v 1.08203 h -1.08204 z m 3.2461,0 H 445.5 v 1.08203 h -1.08203 z m 3.24609,0 H 448.75 v 1.08203 h -1.08594 z m 3.25,0 h 1.08203 v 1.08203 h -1.08203 z m 3.2461,0 h 1.08203 v 1.08203 h -1.08203 z m 3.25,0 h 0.53906 v 0.53906 h -0.53906 v -0.53906 h 1.08203 v 1.08203 h -1.08203 z m 0,-2.16797 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.24609 v -1.08204 h 1.08203 v 1.08204 z m 0,-3.2461 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.24609 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.2461 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.25 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.24609 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.24609 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.2461 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.24609 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.25 v -1.08203 h 1.08203 v 1.08203 z m 0,-3.24609 v -1.08204 h 1.08203 v 1.08204 z m 0,-3.2461 v -0.0312 h 1.08203 v 0.0312 z m 0,0"
+       id="path806" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 422.49854,210.11929 3.49988,7.002 -3.49988,-1.7505 -3.49988,1.7505 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path808" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 324.53906,263.53516 h 38.39063 c 0.46875,0 0.92187,0.0898 1.35547,0.26953 0.43359,0.17968 0.8164,0.43359 1.14843,0.76562 0.33203,0.33203 0.58594,0.71485 0.76563,1.14844 0.17969,0.43359 0.26953,0.88672 0.26953,1.35547 v 16.49609 c 0,0.46875 -0.0898,0.91797 -0.26953,1.35156 -0.17969,0.4336 -0.4336,0.81641 -0.76563,1.14844 -0.33203,0.33203 -0.71484,0.58985 -1.14843,0.76953 -0.4336,0.17969 -0.88672,0.26563 -1.35547,0.26953 h -38.39063 c -0.46875,-0.004 -0.92187,-0.0898 -1.35547,-0.26953 -0.43359,-0.17968 -0.8164,-0.4375 -1.14843,-0.76953 -0.33204,-0.33203 -0.58594,-0.71484 -0.76563,-1.14844 C 321.08984,284.48828 321,284.03906 321,283.57031 v -16.49609 c 0,-0.46875 0.0898,-0.92188 0.26953,-1.35547 0.17969,-0.43359 0.43359,-0.81641 0.76563,-1.14844 0.33203,-0.33203 0.71484,-0.58594 1.14843,-0.76562 0.4336,-0.17969 0.88672,-0.26953 1.35547,-0.26953 z m 0,0"
+       id="path810" />
+    <g
+       clip-path="url(#clip3)"
+       clip-rule="nonzero"
+       id="g814">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+         d="m 299.27025,242.99979 h 35.46065 c 0.43297,0 0.85152,0.083 1.25202,0.24904 0.4005,0.16603 0.7541,0.40063 1.06079,0.70742 0.30669,0.30679 0.54122,0.6605 0.70719,1.06112 0.16597,0.40063 0.24896,0.81931 0.24896,1.25242 v 15.24197 c 0,0.43312 -0.083,0.84818 -0.24896,1.24881 -0.16597,0.40063 -0.4005,0.75434 -0.70719,1.06113 -0.30669,0.30679 -0.66029,0.545 -1.06079,0.71103 -0.4005,0.16602 -0.81905,0.24904 -1.25202,0.24904 h -35.46065 c -0.43298,0 -0.85152,-0.083 -1.25202,-0.24904 -0.40051,-0.16603 -0.7541,-0.40424 -1.06079,-0.71103 -0.30669,-0.30679 -0.54122,-0.6605 -0.70719,-1.06113 -0.16598,-0.40063 -0.24897,-0.81569 -0.24897,-1.24881 v -15.24197 c 0,-0.43311 0.083,-0.85179 0.24897,-1.25242 0.16597,-0.40062 0.4005,-0.75433 0.70719,-1.06112 0.30669,-0.30679 0.66028,-0.54139 1.06079,-0.70742 0.4005,-0.16603 0.81904,-0.24904 1.25202,-0.24904 z m 0,0"
+         transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+         id="path812" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g818">
+      <use
+         xlink:href="#glyph1-6"
+         x="324.33105"
+         y="279.22849"
+         id="use816" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g824">
+      <use
+         xlink:href="#glyph1-7"
+         x="332.93164"
+         y="279.22849"
+         id="use820" />
+      <use
+         xlink:href="#glyph1-8"
+         x="338.88608"
+         y="279.22849"
+         id="use822" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g828">
+      <use
+         xlink:href="#glyph1-9"
+         x="345.5098"
+         y="279.22849"
+         id="use826" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g834">
+      <use
+         xlink:href="#glyph1-2"
+         x="352.13351"
+         y="279.22849"
+         id="use830" />
+      <use
+         xlink:href="#glyph1-5"
+         x="356.09918"
+         y="279.22849"
+         id="use832" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g838">
+      <use
+         xlink:href="#glyph0-13"
+         x="389.52548"
+         y="30.303867"
+         id="use836" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g844">
+      <use
+         xlink:href="#glyph0-3"
+         x="396.75134"
+         y="30.303867"
+         id="use840" />
+      <use
+         xlink:href="#glyph0-5"
+         x="401.07755"
+         y="30.303867"
+         id="use842" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g848">
+      <use
+         xlink:href="#glyph0-6"
+         x="408.30341"
+         y="30.303867"
+         id="use846" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g852">
+      <use
+         xlink:href="#glyph0-18"
+         x="415.5293"
+         y="30.303867"
+         id="use850" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g856">
+      <use
+         xlink:href="#glyph0-9"
+         x="418.41602"
+         y="30.303867"
+         id="use854" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g860">
+      <use
+         xlink:href="#glyph0-20"
+         x="425.64188"
+         y="30.303867"
+         id="use858" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g864">
+      <use
+         xlink:href="#glyph0-14"
+         x="432.86777"
+         y="30.303867"
+         id="use862" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g868">
+      <use
+         xlink:href="#glyph0-7"
+         x="436.47681"
+         y="30.303867"
+         id="use866" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g872">
+      <use
+         xlink:href="#glyph0-24"
+         x="440.08585"
+         y="30.303867"
+         id="use870" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g876">
+      <use
+         xlink:href="#glyph0-7"
+         x="443.69489"
+         y="30.303867"
+         id="use874" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g880">
+      <use
+         xlink:href="#glyph0-20"
+         x="447.30392"
+         y="30.303867"
+         id="use878" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g884">
+      <use
+         xlink:href="#glyph0-2"
+         x="454.52982"
+         y="30.303867"
+         id="use882" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g888">
+      <use
+         xlink:href="#glyph0-20"
+         x="461.75568"
+         y="30.303867"
+         id="use886" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g892">
+      <use
+         xlink:href="#glyph0-25"
+         x="468.98157"
+         y="30.303867"
+         id="use890" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g896">
+      <use
+         xlink:href="#glyph0-13"
+         x="384.83975"
+         y="46.538082"
+         id="use894" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g902">
+      <use
+         xlink:href="#glyph0-3"
+         x="392.06564"
+         y="46.538082"
+         id="use898" />
+      <use
+         xlink:href="#glyph0-5"
+         x="396.39182"
+         y="46.538082"
+         id="use900" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g906">
+      <use
+         xlink:href="#glyph0-6"
+         x="403.61771"
+         y="46.538082"
+         id="use904" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g910">
+      <use
+         xlink:href="#glyph0-18"
+         x="410.84357"
+         y="46.538082"
+         id="use908" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g914">
+      <use
+         xlink:href="#glyph0-9"
+         x="413.73029"
+         y="46.538082"
+         id="use912" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g918">
+      <use
+         xlink:href="#glyph0-20"
+         x="420.95618"
+         y="46.538082"
+         id="use916" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g922">
+      <use
+         xlink:href="#glyph0-14"
+         x="428.18204"
+         y="46.538082"
+         id="use920" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g926">
+      <use
+         xlink:href="#glyph0-7"
+         x="431.79108"
+         y="46.538082"
+         id="use924" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g930">
+      <use
+         xlink:href="#glyph0-26"
+         x="435.40012"
+         y="46.538082"
+         id="use928" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g934">
+      <use
+         xlink:href="#glyph0-5"
+         x="442.62601"
+         y="46.538082"
+         id="use932" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g940">
+      <use
+         xlink:href="#glyph0-19"
+         x="449.8519"
+         y="46.538082"
+         id="use936" />
+      <use
+         xlink:href="#glyph0-9"
+         x="456.34766"
+         y="46.538082"
+         id="use938" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g944">
+      <use
+         xlink:href="#glyph0-6"
+         x="463.57352"
+         y="46.538082"
+         id="use942" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g948">
+      <use
+         xlink:href="#glyph0-27"
+         x="470.79941"
+         y="46.538082"
+         id="use946" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g952">
+      <use
+         xlink:href="#glyph0-27"
+         x="474.40845"
+         y="46.538082"
+         id="use950" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 349.2103,63.340898 21.78947,-15.33942"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path954" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 344.90942,66.358252 3.70915,-6.886497 0.59173,3.869143 3.43855,1.847949 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path956" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 494.00076,166.99928 h -9.00228 v 21.00237 h -12.62843"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path958" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 467.12022,188.00165 6.99977,-3.50099 -1.74994,3.50099 1.74994,3.49739 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path960" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 539.90625,168.29297 h 55.86328 c 0.60156,0 1.18359,0.11719 1.73828,0.34765 0.5586,0.23047 1.05078,0.5586 1.47656,0.98438 0.42579,0.42578 0.75391,0.91797 0.98438,1.47656 0.23047,0.55469 0.34766,1.13672 0.34766,1.73828 v 21.21485 c 0,0.60156 -0.11719,1.17968 -0.34766,1.73828 -0.23047,0.55469 -0.55859,1.04687 -0.98438,1.47265 -0.42578,0.42579 -0.91796,0.75782 -1.47656,0.98829 -0.55469,0.23046 -1.13672,0.34375 -1.73828,0.34375 h -55.86328 c -0.60547,0 -1.18359,-0.11329 -1.74219,-0.34375 -0.55469,-0.23047 -1.04687,-0.5625 -1.47265,-0.98829 -0.42579,-0.42578 -0.75782,-0.91796 -0.98829,-1.47265 -0.23046,-0.5586 -0.34375,-1.13672 -0.34375,-1.73828 v -21.21485 c 0,-0.60156 0.11329,-1.18359 0.34375,-1.73828 0.23047,-0.55859 0.5625,-1.05078 0.98829,-1.47656 0.42578,-0.42578 0.91796,-0.75391 1.47265,-0.98438 0.5586,-0.23046 1.13672,-0.34765 1.74219,-0.34765 z m 0,0"
+       id="path962" />
+    <g
+       clip-path="url(#clip4)"
+       clip-rule="nonzero"
+       id="g966">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+         d="m 498.20061,154.99844 h 51.5998 c 0.55565,0 1.09326,0.10828 1.60561,0.32123 0.51597,0.21294 0.97059,0.51612 1.36388,0.90953 0.39328,0.39342 0.69637,0.84818 0.90924,1.36431 0.21288,0.51252 0.32113,1.0503 0.32113,1.60613 v 19.60197 c 0,0.55583 -0.10825,1.09 -0.32113,1.60613 -0.21287,0.51252 -0.51596,0.96728 -0.90924,1.3607 -0.39329,0.39702 -0.84791,0.7002 -1.36388,0.91314 -0.51235,0.21295 -1.04996,0.31762 -1.60561,0.31762 h -51.5998 c -0.55926,0 -1.09326,-0.10467 -1.60922,-0.31762 -0.51235,-0.21294 -0.96698,-0.51612 -1.36026,-0.91314 -0.39329,-0.39342 -0.69998,-0.84818 -0.91286,-1.3607 -0.21288,-0.51613 -0.31751,-1.0503 -0.31751,-1.60613 v -19.60197 c 0,-0.55583 0.10463,-1.09361 0.31751,-1.60613 0.21288,-0.51613 0.51957,-0.97089 0.91286,-1.36431 0.39328,-0.39341 0.84791,-0.69659 1.36026,-0.90953 0.51596,-0.21295 1.04996,-0.32123 1.60922,-0.32123 z m 0,0"
+         transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+         id="path964" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g972">
+      <use
+         xlink:href="#glyph0-15"
+         x="539.48608"
+         y="187.23462"
+         id="use968" />
+      <use
+         xlink:href="#glyph0-20"
+         x="548.15143"
+         y="187.23462"
+         id="use970" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g976">
+      <use
+         xlink:href="#glyph0-5"
+         x="555.37726"
+         y="187.23462"
+         id="use974" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g980">
+      <use
+         xlink:href="#glyph0-10"
+         x="562.60315"
+         y="187.23462"
+         id="use978" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g986">
+      <use
+         xlink:href="#glyph0-28"
+         x="565.48987"
+         y="187.23462"
+         id="use982" />
+      <use
+         xlink:href="#glyph0-14"
+         x="571.98566"
+         y="187.23462"
+         id="use984" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g990">
+      <use
+         xlink:href="#glyph0-18"
+         x="575.59467"
+         y="187.23462"
+         id="use988" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g996">
+      <use
+         xlink:href="#glyph0-16"
+         x="578.48138"
+         y="187.23462"
+         id="use992" />
+      <use
+         xlink:href="#glyph0-5"
+         x="584.97717"
+         y="187.23462"
+         id="use994" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1000">
+      <use
+         xlink:href="#glyph0-10"
+         x="592.203"
+         y="187.23462"
+         id="use998" />
+    </g>
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 494.00076,206.00111 h -9.00228 v -17.99946 h -12.62843"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path1002" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 467.12022,188.00165 6.99977,-3.50099 -1.74994,3.50099 1.74994,3.49739 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path1004" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+       d="m 539.90625,208.33984 h 55.86328 c 0.60156,0 1.18359,0.11328 1.73828,0.34375 0.5586,0.23047 1.05078,0.5586 1.47656,0.98828 0.42579,0.42579 0.75391,0.91797 0.98438,1.47266 0.23047,0.55859 0.34766,1.13672 0.34766,1.73828 v 21.21485 c 0,0.60156 -0.11719,1.18359 -0.34766,1.73828 -0.23047,0.55859 -0.55859,1.05078 -0.98438,1.47656 -0.42578,0.42578 -0.91796,0.75391 -1.47656,0.98437 -0.55469,0.23047 -1.13672,0.34766 -1.73828,0.34766 h -55.86328 c -0.60547,0 -1.18359,-0.11719 -1.74219,-0.34766 -0.55469,-0.23046 -1.04687,-0.55859 -1.47265,-0.98437 -0.42579,-0.42578 -0.75782,-0.91797 -0.98829,-1.47656 -0.23046,-0.55469 -0.34375,-1.13672 -0.34375,-1.73828 v -21.21485 c 0,-0.60156 0.11329,-1.17969 0.34375,-1.73828 0.23047,-0.55469 0.5625,-1.04687 0.98829,-1.47266 0.42578,-0.42968 0.91796,-0.75781 1.47265,-0.98828 0.5586,-0.23047 1.13672,-0.34375 1.74219,-0.34375 z m 0,0"
+       id="path1006" />
+    <g
+       clip-path="url(#clip5)"
+       clip-rule="nonzero"
+       id="g1010">
+      <path
+         style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+         d="m 498.20061,192.00073 h 51.5998 c 0.55565,0 1.09326,0.10467 1.60561,0.31762 0.51597,0.21294 0.97059,0.51973 1.36388,0.91314 0.39328,0.39341 0.69637,0.84818 0.90924,1.3607 0.21288,0.51613 0.32113,1.0503 0.32113,1.60613 v 19.60197 c 0,0.55583 -0.10825,1.09361 -0.32113,1.60613 -0.21287,0.51613 -0.51596,0.97089 -0.90924,1.36431 -0.39329,0.39341 -0.84791,0.69659 -1.36388,0.90953 -0.51235,0.21295 -1.04996,0.32123 -1.60561,0.32123 h -51.5998 c -0.55926,0 -1.09326,-0.10828 -1.60922,-0.32123 -0.51235,-0.21294 -0.96698,-0.51612 -1.36026,-0.90953 -0.39329,-0.39342 -0.69998,-0.84818 -0.91286,-1.36431 -0.21288,-0.51252 -0.31751,-1.0503 -0.31751,-1.60613 v -19.60197 c 0,-0.55583 0.10463,-1.09 0.31751,-1.60613 0.21288,-0.51252 0.51957,-0.96729 0.91286,-1.3607 0.39328,-0.39341 0.84791,-0.7002 1.36026,-0.91314 0.51596,-0.21295 1.04996,-0.31762 1.60922,-0.31762 z m 0,0"
+         transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+         id="path1008" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1016">
+      <use
+         xlink:href="#glyph0-11"
+         x="537.3208"
+         y="227.27901"
+         id="use1012" />
+      <use
+         xlink:href="#glyph0-14"
+         x="545.98615"
+         y="227.27901"
+         id="use1014" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1020">
+      <use
+         xlink:href="#glyph0-2"
+         x="549.59521"
+         y="227.27901"
+         id="use1018" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1026">
+      <use
+         xlink:href="#glyph0-16"
+         x="556.82111"
+         y="227.27901"
+         id="use1022" />
+      <use
+         xlink:href="#glyph0-29"
+         x="563.31683"
+         y="227.27901"
+         id="use1024" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1030">
+      <use
+         xlink:href="#glyph0-5"
+         x="570.54272"
+         y="227.27901"
+         id="use1028" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1036">
+      <use
+         xlink:href="#glyph0-19"
+         x="577.76862"
+         y="227.27901"
+         id="use1032" />
+      <use
+         xlink:href="#glyph0-14"
+         x="584.26434"
+         y="227.27901"
+         id="use1034" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1040">
+      <use
+         xlink:href="#glyph0-18"
+         x="587.87341"
+         y="227.27901"
+         id="use1038" />
+    </g>
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1044">
+      <use
+         xlink:href="#glyph0-16"
+         x="590.76013"
+         y="227.27901"
+         id="use1042" />
+    </g>
+    <use
+       xlink:href="#image69048"
+       mask="url(#mask0)"
+       transform="matrix(0.233306,0,0,0.23327,207.8642,69.26597)"
+       id="use1046" />
+    <use
+       xlink:href="#image69054"
+       mask="url(#mask1)"
+       transform="matrix(0.224508,0,0,0.224573,1.082626,169.91806)"
+       id="use1048" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="M 37.998694,188.00165 H 94.628217"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path1050" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 99.881647,188.00165 -7.00337,3.49739 1.74994,-3.49739 -1.74994,-3.50099 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path1052" />
+    <use
+       xlink:href="#image69060"
+       mask="url(#mask2)"
+       transform="matrix(0.171443,0,0,0.17141,215.4425,180.24303)"
+       id="use1054" />
+    <use
+       xlink:href="#image69066"
+       mask="url(#mask3)"
+       transform="matrix(0.203152,0,0,0.202928,224.1035,241.34859)"
+       id="use1056" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="M 225.0006,188.00165 H 245.00044 226.9995 240.631"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path1058" />
+    <path
+       style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1"
+       d="m 245.88082,188.00165 -6.99976,3.49739 1.74994,-3.49739 -1.74994,-3.50099 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path1060" />
+    <path
+       style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1"
+       d="m 225.0006,188.00165 c 0,0.6605 -0.12628,1.29934 -0.38246,1.91292 -0.25257,0.60997 -0.61338,1.15136 -1.08244,1.62056 -0.46906,0.46921 -1.01027,0.83014 -1.62366,1.08279 -0.60977,0.25626 -1.24841,0.38258 -1.9123,0.38258 -0.6639,0 -1.29893,-0.12632 -1.91231,-0.38258 -0.61338,-0.25265 -1.1546,-0.61358 -1.62365,-1.08279 -0.46906,-0.4692 -0.82987,-1.01059 -1.08244,-1.62056 -0.25618,-0.61358 -0.38246,-1.25242 -0.38246,-1.91292 0,-0.6641 0.12628,-1.30294 0.38246,-1.91652 0.25257,-0.60997 0.61338,-1.15136 1.08244,-1.62057 0.46905,-0.4692 1.01027,-0.83013 1.62365,-1.08278 0.61338,-0.25626 1.24841,-0.38258 1.91231,-0.38258 0.66389,0 1.30253,0.12632 1.9123,0.38258 0.61339,0.25265 1.1546,0.61358 1.62366,1.08278 0.46906,0.46921 0.82987,1.0106 1.08244,1.62057 0.25618,0.61358 0.38246,1.25242 0.38246,1.91652 z m 0,0"
+       transform="matrix(1.082626,0,0,1.082281,0.541313,0.5411)"
+       id="path1062" />
+    <g
+       style="fill:#000000;fill-opacity:1"
+       id="g1066">
+      <use
+         xlink:href="#glyph0-25"
+         x="236.01247"
+         y="207.79796"
+         id="use1064" />
+    </g>
+    <g
+       clip-path="url(#clip6)"
+       clip-rule="nonzero"
+       id="g1070">
+      <use
+         xlink:href="#image69072"
+         mask="url(#mask4)"
+         transform="matrix(0.0949987,0,0,0.0949684,348.6126,185.07715)"
+         id="use1068" />
+    </g>
+    <g
+       clip-path="url(#clip7)"
+       clip-rule="nonzero"
+       id="g1074">
+      <use
+         xlink:href="#image69078"
+         mask="url(#mask5)"
+         transform="matrix(0.0733945,0,0,0.0733756,42.14981,194.71589)"
+         id="use1072" />
+    </g>
+    <use
+       xlink:href="#image69083"
+       transform="matrix(0.120265,0,0,0.120253,413.563,93.07611)"
+       id="use1076" />
+  </g>
+</svg>
diff --git a/assets/PyBOP_Arch.pdf b/assets/PyBOP_Arch.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..17d36a9c67f8979280494d3c38c8a9700bbfabb5
GIT binary patch
literal 110377
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
Wvi%uTUS24aR}`CxNl{A)`~Lve0B%SC

literal 0
HcmV?d00001

diff --git a/assets/PyBOP_Arch.svg b/assets/PyBOP_Arch.svg
new file mode 100644
index 000000000..49a7c78c8
--- /dev/null
+++ b/assets/PyBOP_Arch.svg
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   version="1.1"
+   id="svg2"
+   width="754.66669"
+   height="318.66666"
+   viewBox="0 0 754.66669 318.66666"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg">
+  <defs
+     id="defs6">
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath20">
+      <path
+         d="M 0,0 H 566 V 239 H 0 Z"
+         id="path18" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath30">
+      <path
+         d="M 0.5,239 H 566 V -2.384186e-6 H 0.5 Z"
+         id="path28" />
+    </clipPath>
+    <clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath36">
+      <path
+         d="m 0.5,-0.5 h 566 V 239 H 0.5 Z"
+         id="path34" />
+    </clipPath>
+  </defs>
+  <g
+     id="g10"
+     transform="matrix(1.3333333,0,0,-1.3333333,0,318.66667)">
+    <g
+       id="g14">
+      <g
+         id="g16"
+         clip-path="url(#clipPath20)">
+        <path
+           d="M 0,239 H 566 V 0 H 0 Z"
+           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
+           id="path22" />
+      </g>
+    </g>
+    <g
+       id="g24">
+      <g
+         id="g26"
+         clip-path="url(#clipPath30)">
+        <g
+           id="g32"
+           clip-path="url(#clipPath36)">
+          <g
+             id="g38"
+             transform="matrix(565.5,0,0,239,0.5,-2.384186e-6)">
+            <image
+               width="1"
+               height="1"
+               preserveAspectRatio="none"
+               transform="matrix(1,0,0,-1,0,1)"
+               xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABf4AAAKICAYAAAAhJevmAAAABHNCSVQICAgIfAhkiAAAIABJREFUeJzs3Xd4VGXax/HvtEwq6QmQ0HsRRIqAgK6ouIu9rV3UfcWCsoIVyyqKsHYQBdfVtaywKnZAlN4hAgGktwAJEJKQQnqZOe8fkwwJk0ZNJvw+e+0lOeU595yZyUzuc5/7MRmGYSAiIiIiIiINitPp5J577sbHx85H//oIs8Vc1yGJiIiIyFliresARERERERE5PRyGgavvPIKX3/9DSUlJbRs2YoXXni+rsMSERERkbNEiX8REREREZEGxOl08vLLL/PGG2/w2muv4XA4GDt2LHa7D0899VRdhyciIiIiZ4ES/yIiIiIiIg2Ew+HgtXHjmDx5MpPee4+/3X8/AMHBwTzxxBMYGIx6fBQ2m62OIxURERGRM0mJfxERERERkQaisLCQHTt38umnn3L11Ve7lw8fPpzIyEh+/ukncnNzCQkJqcMoRURERORMM2lyXxERERERkYbD6XRiNlc+kW9160RERESk4VDiX0RERERERERERESkAVGrHxERERERkQYoMTGRdevWYTab6d27N40bN67rkERERETkLFHiX0REREREpAEpKipi0qRJfPDBB7Rt24aiomJSU1P5/PPP6dmzZ12HJyIiIiJngVr9iIiIiIiINCCPP/44EydOZMKECYwcOZLcvFz69+uPv78/S5YsITAwsK5DFBEREZEzTLM6iYiIiIiINACGYTD+tfG8++67/O1vf+Opp57CbrcTFhrGoIsHER8fz5rff6/rMEVERETkLFDiX0REREREpAFYtGgRr7z6Cs2bNeOZZ5+psC46KhqAuDgl/kVERETOBUr8i4iIiIiIeLnc3Fxefull8vPzGXbvvbRu1brC+rIOr9u2b6uL8ERERETkLFPiX0RERERExMv9/PPPLFm6hKCgIO644w6P9enp6QDk5OSc7dBEREREpA4o8S8iIiIiIuLFcnNyeeuttzAMg6uuuor27dpVWO90OtmfuB8AHx+fughRRERERM4yJf5FRERERES82Lz581i7di0mk4mbb7oZTKYK648ePcq+vfsACA0NrYsQRUREROQsU+JfRERERETEi82ePRvDMGjSuDH9+vX1WJ+amsq+vXsBiIqKOsvRiYiIiEhdsNZ1ACIiIiIi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HA6ysjLJyjpKdnY2eXl55OTmkpebS25uLpmZme7l+fn55OflkZef7/65qKiI4uISSkqKKSkuprikhIKCAjp06MD//ve/MxZ3cHDwGRtbpD5Q4l9ERESknnn66adp2aoVwx94gJiYGI/1BmCqIiOVk5PDtGnTWLJkCe+///4ZjlREpAEqbemvvL+IiEt+QT7Jh5I5ePAghw8fZteuXSQkJHD48GEOp6SQkZ5OTk4OOTk55OXlUVh4eiZXLioqOi3jiJyrlPgXERERqUf8/f254YYbuP766/n0P//hgQce4N577630AkD5iv+cnBy++eYbJk2axPr163lv0nuqYhIRORllrX7qNgoRkTpx4MABEhIS2LNnD5s2bWLjhg3s3rOHtLQ0MjMzK93Hx8eH0LBQoqOjCQkNJSgwkMDAQIKDgwkJCSEkOIRGIcH42u3YbDasVis2mw82mxUfm49rmc1autyGzWrF5uOj77Iip0iJfxEREZF6ZujQofzpkktYuGgRL7zwAv/617/4v/97gPvuv4+mTZq4q1D9/PzIzc3l66++ZtJ7roQ/QJcuXRh277A6i19EpEFQ5l9EGrjcvFx2bN/B1q1biYuLY/XqVezevYfU1NQK24WFhdO8eXP69O5N4yZNaNmyJS1btiQ2NpaIiAgCAwMJCAggwD8A/wB/bDZbHT0iESlPiX8RERGResZmszF69GgWL1mC0+kkMTGRF198gX//+98MG3YPRUVFmEwmPvroI7755hvWrVtXYf/HHnuMwMDAOopeRMTLlSX81etHxOvoel3NUlJSWLlyJTNnzmTJ4sXs3beXoqJi9/qOnToxaNDFdO7cic6dO9OufTuiIqMIDQ3V98uzpKSkBKfTic1mq3ZOr/rO6XBS4ijBYrFgsVjqOpwzzjAMSoqLwWSqNxe/lPgXERERqYeuGDKEQRcPYtHCRe5l+/fvY+zYse6fn332WY/9unbtyu233342QhQRERERL1BUVMTy5cuZNm0av/zyCwcOHHCv69atG7169mLAwAH07t2bZs2aqcVOHcrIyOD2229n3969vDtxIldccQUA999/P2vWrOGWW27hueeeq+Moa2fca+OYNn0aFw8axNSpH9Z1OGfcmt9/555hw4iIiGDa9OnEVtKq9WxT4l9ERESkHrLZbIwe9QRLFruq/mvr0UcfVTWWiMipMKnY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M4e5c+cyYMAAbDYbq1atIjY2lrCwMO68806ys7PzJEPVqlWZPn063t7eOe68+qNq1arlyfmLKhX+RURERERERERExHQpKSm88847fPDBBwD069ePkSNHUrx4cZOTFXw9e/Zkzpw5bN68mX379lG7dm1Pm59mzZpRoUKFGxqV/1cEBATQqlWrPDm2XJsK/yIiIiIiIiIiImKq3bt3ExUVxYoVKyhZsiTvvfceffv2NTtWodG6dWvKly/P8ePHWb58OWFhYfzyyy8A3H///Xl6bsMwyMrKwsvLK0/PIzmpKZaIiIiIiIiIiIiY5j//+Q/t27dnxYoVtG7dmqVLl6ron8tKlSpF69atAViwYAE//vgjp0+fpmTJkrRr187ccJInVPgXERERERERERGRWy4uLo4BAwbwr3/9i7Nnz/LCCy+wePFi6tevb3a0QqlXr14AbN68mbfffhuA5s2bU7FixRs+xl+ZANhqtWq0vwnU6kdERERERERERERuqY0bNxIVFcXGjRspV64cY8eOzfOWM0Vdy5YtqVSpEjExMcTHxwMXe//fjB07drB8+fJrTtJrs9m4/fbbCQwM9CxLSEjghx9+wMvL67qT+7rdbho1akRoaOhNZZKrU+FfREREREREREREbgnDMJgyZQovv/wySUlJdOrUiXHjxlGjRg2zoxV6oaGhtGvXjpiYGOBi+58/tvm5VJj/Y4H+0uNp06bx6aefXvX4hmHg7e3N6tWradKkiWefmJgYunbtisViuW4+wzCYN28e9957700/N7mSWv2IiIiIiIiIiIhInjt16hT/+te/GDBgAOnp6bzxxhssWLBARf9cZrPZ8Pb2xtvbG6s1Z/m3V69ennXt2rWjXLlynnUWiwUfHx/P+kusViu+vr54e3vj5eWFzWa76pfdbsdut3vOefmxHA7HNfe79OVwOP704oDcOI34FxEREREREbnFsrKyWLJkCW3btqVYsWI51v3666+EhYVRvXp1k9LdGitXrqRixYpUrlw5x/KDBw9y8uRJ2rZta1IyEckLq1ev5plnnuH333+natWqjB8/ns6dO5sdq1CqX78+Bw8eBLiibU7Hjh05dOgQhmEQFBSUY11gYCCLFy/G6XTmeG2qWbMme/bsuW6bnkssFgslS5YEYMqUKYwZM+amsqvNT+5R4V9ERERERETkFktISOD5558n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9+706NGDPn360LhxY4oXL56vRnlL3klLS+P48eMsW7aMadOmceDAAby8vHj77bfp16+f2fGuoMK/iIiIiIiIiAmcTudVl2dnZ+NyuXIse/XVV5k/fz47d+7Ex8eHmTNnmj6h7yVlypRhxowZLFq0iL1793LXXXcxatQoSpQocd39nE4nbrf7iuWGYVzx/Dt06ECHDh1yNbdIUbVhwwYiIyP57bffqFChAmPHjuW+++4zO1a+FhERwfz583nllVf49NNPiY6OJjo6mmLFiuHj42P6BVi5NbKzs0lOTiYrKwuAGjVqMGLECHr06GFysqtT4V9ERERERETkFgsKCuKVV16hfPnyV6x7+OGHr1ju7e1Nr169blW8m1a5cmWioqJuap/HH3+c2rVrX7G8Y8eOVKxYMbeiich/GYbBpEmTGDp0KMnJyXTu3Jlx48Z5WojJ9QUFBTFx4kT69OnDV199xcaNGzl69ChJSUlXvYgphY+3tzelSpWiXr16dOjQgccee+xPL3KbyWJcukdOREREREyXmZnJoUOHrloIgYujTFq3bs369etZu3YtzZs3v+p2J0+exGq1Urp06byMKyIiUqDExMRQuXJlKlWqxIEDB9SeQ4qMkydPMmTIEL766iu8vLwYNmwYQ4cOxeFwmB2twMrIyCA1NfWad29J4WO1WvHy8iI4ONjsKDdEI/5FRERE8hGHw8G0adM4ffo0L7zwAk2aNLmp/WNjY/nkk09YunQpc+bMyQlhOY0AACAASURBVKOUIiIiIlJQ/Pzzz0RGRrJr1y6qV6/O+PHj6dSpk9mxCjwfHx98fHzMjiFyTVazA4iIiIjI/1itVp588kmio6Np06YNjz76KJs2bfrT/WJjYxk5ciTNmjXj9ddf5+6779ZofxEREZEiLCsri/fee4+7776bXbt20atXL5YvX66iv0gRocK/iIiISD5Tp04dnnzySTIyMpgxYwZt2rThscceY9OmTdjtdqzWi2/hvL29OXv2LCNHjqRp06a88sorHDt2jIiICPr372/ysxARERERs8TExPDAAw8wdOhQvLy8GDVqFDNnzqRcuXJmRxORW0StfkRERETyoaioKGbMmEFycjIZGRl8+eWXfPPNN/Ts2ZO4uDisVisff/wxq1atIiYmJse+/fv3z9eTTImIiIhI3lm4cCEDBw7k8OHDNGjQgAkTJtCyZUuzY4nILabJfUVERETyqQEDBjB58uSb2iciIoLffvtNhX8REZGr0OS+UpilpaUxcuRIhg8fDkDfvn358MMP9b5QpIhSqx8RERGRfCoqKopixYrd1D5PP/20PtyJiIiIFDG7d++mW7duDB8+nLCwMD755BM+++wzvS8UKcJU+BcRERHJp2rVqkWfPn1uePuIiAieeOKJPEwkIiIiIvnNrFmz6NChAytWrKBZs2b8+OOPek8oIir8i4iIiORnNzPqX6P9RURERIqO+Ph4nnvuOR566CFOnz7Nc889x5IlS2jUqJHZ0UQkH9DkviIiIiL52KVR/3/W61+j/UVERESKjs2bN/PMM8+wYcMGypYty+jRo3nwwQfNjlXkZGZm4na70RSqRYPVasVms+FwOMyOckNU+BcRERHJ56Kiovjqq69ISkq65jb9+/fXaH8RERGRImDq1Km8/PLLxMfH07FjR8aPH0/NmjXNjlVknDt3ju+//56FCxeyZ88eEhMTcblcZseSW8DX15fQ0FDatGlD9+7dadeundmRrsti6JKUiIiISL73zDPPMGnSpKuui4iI4LffflPhX0RE5E/ExMRQuXJlKlWqxIEDB7DZbGZHErlhZ86cYciQIXzxxRfY7XaGDBnCa6+9hre3t9nRigSn08nUqVMZM2YMhw8fBsBiseBwOLBYLCank1vB5XKRnZ0NXPzed+vWjVdffZUmTZqYnOzqNOJfREREpACIjIxkxowZVx31r97+IiIiIoXbL7/8QmRkJNu3b6dKlSqMGzeOrl27mh2ryDh//jzPPvssM2fOBKBly5Y88MADtGnThrCwsALT+kX+npSUFA4ePMjChQuZM2cOCxYsYM2aNYwbN45HH33U7HhX0Ih/ERERkQJiwIABV/T612h/ERGRG6cR/1LQuFwuxo4dy2uvvUZ6ejr33nsvY8eOJSIiwuxoRUZKSgp9+vRhwYIFlChRghEjRvDvf/8bLy8vs6OJiQ4cOMCwYcP45ptvcDgcfPnll/lung2r2QFERERE5MZERUVRrFixHMs02l9ERESkcDp69CgPPfQQgwYNwmKx8N577xEdHa2i/y32zjvvsGDBAsLDw5k/fz79+vVT0V+oVq0as2bNYtCgQTidTs8dOfmJCv8iIiIiBUStWrXo06eP53FERARPPPGEiYlEREREJC/8+OOP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W2cUlytXToZh6Pjx4/r77781cuRIpaen67PPPpOdnZ1cXV119epVXbt2zfrfN94BMmPGDPXv31+SbjmeJI0YMSJHnmvr1q01dOhQxcbGau/evbJYLLKzs9OVK1d08eJF/fbbb1q9erWio6MlXV/OxdbWVhcuXNDJkyfl6uqqtLQ01a9fX/Hx8UpOTlZ4eLhatWqV6TypqakKCwvT+fPnVbduXZUvX17S9U1VW7durbNnz0qSKlWqJFtbWx0/flw7duxQp06ddPbsWb3zzjuSrt8hdPbsWZ0/f14ffPCBoqKi5ODgoCpVqujKlSs6c+aM9u3bZ/0eK1myZI68bsjava45n56erjNnzujy5cv66KOPFB0dLVdXV1WuXFnHjx9XTEyMhg8frrCwMB04cED29vaqWLGiYmJiFBMTowULFsjT01OTJ0+WjY2NkpKSdPToUVksFnXp0kXR0dHy9fVViRIlFBUVpTNnzujHH39UVFSUwsPDrXnPnTunkydPytfX17oPQXJysqKiomRra6uuXbvq8OHDkq4voeXg4KC4uDgdO3ZMtra2unbtmvU5LVmyREFBQUpISJCjo6OqVasmwzB08OBBHTx4UL169VKJEiWsS/UtWLBA3bp1U1pamtzc3FS5cmXZ29vr9OnTOnnypCZPnqz4+HjNmjWLTXwBAACQa/ibJwCYKKsNetPS0nTw4EG9++671iVrGjdufFNdXFyc6tWrpzVr1mjbtm3aunWrhgwZIjs7O8XExGjRokWSpOeff966MfCSJUusGwlnWLlypa5duyZHR0d17NhRkjR16lQlJCSoTp062rhxozZs2KCtW7fqt99+U9WqVZWamqpx48ZZl/fJaGTcuDTI8ePHNXjwYKWmpqpixYpavny5tm/fru3bt2vevHlyc3PT5cuXrUuwrFu3TuvXr5eTk5NCQkK0bds2bdiwQVu2bLFerPjpp5904MCBTPlXr16t5ORkNWzYUMWLF7/pdTpw4IDmzp2r4ODgW/4zb948Xb16VdL15ubRo0clSZUrV75pWaP7YWNjo5YtW8rW1lY7duy46TkcPHhQO3fulCS1a9fuvpYnws0qVKgg6fqFlX///VfS9c/XhAkTZBiGGjZsqE2bNmnjxo3atGmTNm3apOeee06StHDhQl27dk1Vq1bV5s2bNXDgQEnXNxD9/fffFR4eLhcX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IiIiIiIiIiIiInqGsPBPRERERERERERERPQMYeGfiIiIiIiIiIiIiOgZwsI/EREREREREREREdEzhIV/IiIiIiIiIiIiIqJnCAv/RERERERERERERETPEBb+iYiIiIiIiIiIiIieISz8ExERERERERERERE9Q1j4JyIiIiIiIiIiIiJ6hrDwT0RERERERERERET0DGHhn4joIWQyGQBACGHhTIieXDw+6GnXsA83fOabA78/iIiIiIjIUlj4JyJ6CI1GAwAoKyuzcCZEHVNRUQGj0Qi1Wg2lUtnheAqFAo6Ojqirq+PxQU+98vJymEwmqNVqWFlZdTieQqGAg4MDampqeHzQU6+kpAS1tbXQaDRQKBSWToeIiIiI2oCFfyKih3B2dgYA3Lhxw8KZEHXMnTt3UFlZCa1WC2tr6w7HUygU0vFRWFjY4XhElnT79m1UV1dDq9WiS5cuHY6nVCrh7OwMk8nE44OeeoWFhairq4NOpzPLiTEiIiIi6nws/BMRPYS3tzcA4OTJkxbOhKhjMjIyUFVVBb1eDzs7uw7Hk8lk6NOnDwAeH/T0u3jxIurq6uDh4QGVStXheEqlEl5eXhBC4PTp02bIkMhyTp06BaD+byJe8U9ERET0dGDhn4joIcLCwiCTyXDs2DGYTCZLp0P0yI4cOQIACA0NNUurHwAIDw8HACQlJbGPOT3VEhMTAfz/Z35HyWQy6fg4evRoh+MRWVLDPvzCCy9YOBMiIiIiaisW/omIHiIwMBCurq44c+aMVDgletrk5ORg7969kMvlGDVqlNnihoSEwMnJCWlpaTh+/LjZ4hI9TpcuXcI///lPqFQqREREmC1uWFgYbG1tceTIEZw9e9ZscYkep/T0dCQnJ8PBwQEhISGWToeIiIiI2oiFfyKih3B2dsb06dNRV1eHVatW8ap/eiqtX78et2/fxqhRoxAYGGi2uD169MDUqVNhMpkQHR2N+/fvmy020ePy+eefo6ysDC+//DL69u1rtrheXl547bXXUFlZiejoaLPFJXpchBCIjo6G0WjElClT0LNnT0unRERERERtpPj4448/tnQSRERPOj8/P8TFxeH8+fOoq6vDiBEjLJ0SUZvt2rULK1asgFKpxPbt29GjRw+zxvfz88OePXtw7tw5qFQqhIaGmjU+UWfatm0boqKi4ODggB07dkCn05kttkwmg4+PD77++mucO3cOTk5OCAoKMlt8os62evVqxMbGQqfTYfv27XB0dLR0SkRERETURiz8ExG1gb29Pby9vfGPf/wDqampcHR0xNChQy2dFtFDJSQkYPr06aioqMCnn36KSZMmmX0MjUYDvV6PuLg4pKSkwMXFBYMGDTL7OETmtn//frzzzjswGo1Yu3YtxowZY/YxtFotunfvjvj4eCQnJ8PT0xP9+vUz+zhE5vbVV19h4cKFAIA//elPMBgMFs6IiIiIiNqDhX8iojbq3bs3rK2tkZCQgMOHD6O0tBRDhw6FtbW1pVMjaqK2thZffvkl3nrrLZSWluJ3v/sdVq9eDbm8c7r8+fn5oa6uDseOHcO///1vmEwmBAYGQqVSdcp4RB1hNBqxefNmzJkzB1VVVZg5cyY+/vhjs0zq25wBAwagvLwcaWlpOHDgAORyOQICAsw2yTaROTW0pvr973+PmpoaLFu2DPPnz7d0WkRERETUTiz8ExG1Q1BQEOzs7JCSkoLvvvsOhw8fhr29PXQ6Hezt7S2dHhHKy8uRmpqKefPmYePGjTCZTJg2bRpiYmI6/SSVwWCATCZDamoqUlNTkZiYCEdHR+h0Otja2nbq2ERtUVJSgqNHj2L27Nn44osvUFtbizlz5uDzzz9Hly5dOnXs8PBwVFdXIy0tDUlJSUhJSUHXrl3h7OwMGxubTh2bqC3u3LmDb775BjNmzMDOnTshhMDy5cvx4YcfQqFQWDo9IiIiImonmRBCWDoJIqKnzZ49e7B48WL873//AwB4eHggJCQEAQEBcHd3h5OTk4UzpOdJRUUF8vPzcfHiRaSkpCAjIwMA4OjoiMWLF2Px4sWPtWjz1VdfYdmyZbh+/TqA+rtlDAYDBg0aBHd3d2g0mseWC1F5eTny8vJw/vx5pKWl4ccffwRQ34JnxYoVWLBgwWPNZ+vWrfjoo49w69YtAIC3tzcMBgMGDhyIHj16wMHB4bHmQ8+30tJS5OXl4ezZszh+/DiuXLkCAOjevTuioqIwffp0C2dIRERERI+KhX8iokdUUFCAL774Art27ZL+o0z0JPj5z3+O0aNH491330Xfvn0tkkNubi5iY2Oxd+9eZGdnWyQHoub06NED48aNw/z589GnTx+L5JCdnY2YmBjExcVJJ5CJngQeHh6IjIzE7Nmz0bNnT0unQ0REREQdwMI/EVEHFRUV4fjx49iwYQOuXr2KoqIi3Lt3z9Jp0XPEysoK3bp1g4uLC9555x2MHj0a7u7ulk4LAHDr1i0kJydj8+bNyM7ORlFREYxGo6XToudIly5doNVq4ebmhlmzZiEiIgKurq6WTgsAUFhYiCNHjiAmJga5ubkoLi7m8UGPlUqlglarRc+ePTFv3jy88MIL0Ol0lk6LiIiIiMzg/wAq4SfRnuqw2AAAAABJRU5ErkJggg=="
+               id="image40" />
+          </g>
+        </g>
+      </g>
+    </g>
+  </g>
+</svg>

From 0f7356aad7409cbccdaa73c02adf3f6a4dc1e33b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 14 Jul 2023 16:03:26 +0100
Subject: [PATCH 002/210] Updt. Readme

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 3d7a2d4f7..a6d6db661 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# PyBOP - A *Py*thon toolbox for *B*attery *O*ptimisation and *P*arameterisation
+# PyBOP - A *Py*thon package for *B*attery *O*ptimisation and *P*arameterisation
 
 PyBOP aims to be a modular library for the parameterisation and optimisation of battery models, with a particular focus on classes built around [PyBaMM](https://github.com/pybamm-team/PyBaMM) models. The figure below gives the current conceptual idea of PyBOP's structure. This will likely evolve as development progresses.
 

From 9399c3a0b6b571ce2777105f97bca27cdc2c2786 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 17 Jul 2023 10:42:53 +0100
Subject: [PATCH 003/210] Add editable architecture file (fixes #11)

---
 assets/PyBOP-Architecture.drawio | 154 +++++++++++++++++++++++++++++++
 1 file changed, 154 insertions(+)
 create mode 100644 assets/PyBOP-Architecture.drawio

diff --git a/assets/PyBOP-Architecture.drawio b/assets/PyBOP-Architecture.drawio
new file mode 100644
index 000000000..a376dedbd
--- /dev/null
+++ b/assets/PyBOP-Architecture.drawio
@@ -0,0 +1,154 @@
+<mxfile host="app.diagrams.net" modified="2023-07-17T09:39:50.258Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/116.0" etag="R1Rc19VzA4c5cRQsho2y" version="21.6.2" type="device">
+  <diagram name="Page-1" id="KMmnkO2Ysz7c5i8QPpm3">
+    <mxGraphModel dx="1363" dy="423" grid="1" gridSize="1" guides="0" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
+      <root>
+        <mxCell id="0" />
+        <mxCell id="1" parent="0" />
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-1" target="hdwB_MQwIhiL4xS-3u5l-3" edge="1">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-1" value="Forward Model" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#fff2cc;strokeColor=#d6b656;" parent="1" vertex="1">
+          <mxGeometry x="272" y="681" width="120" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;exitX=0.5;exitY=0;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-2" target="hdwB_MQwIhiL4xS-3u5l-6" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="462" y="651" as="targetPoint" />
+            <Array as="points">
+              <mxPoint x="565" y="566" />
+              <mxPoint x="332" y="566" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-2" value="Optimiser" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
+          <mxGeometry x="505" y="586" width="120" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-8" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.583;exitY=0;exitDx=0;exitDy=0;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitPerimeter=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-3" target="hdwB_MQwIhiL4xS-3u5l-2" edge="1">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-3" value="Cost Function" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#e1d5e7;strokeColor=#9673a6;" parent="1" vertex="1">
+          <mxGeometry x="505" y="681" width="120" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-6" target="hdwB_MQwIhiL4xS-3u5l-1" edge="1">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-6" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
+          <mxGeometry x="297" y="606" width="70" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-11" target="hdwB_MQwIhiL4xS-3u5l-6" edge="1">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-11" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+          <mxGeometry x="193" y="611" width="70" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-91" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-13" target="hdwB_MQwIhiL4xS-3u5l-1" edge="1">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-92" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;exitX=1;exitY=0.5;exitDx=0;exitDy=0;dashed=1;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-13" target="hdwB_MQwIhiL4xS-3u5l-3" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <Array as="points">
+              <mxPoint x="236" y="711" />
+              <mxPoint x="236" y="779" />
+              <mxPoint x="565" y="779" />
+            </Array>
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-13" value="Data" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;flipH=1;" parent="1" vertex="1">
+          <mxGeometry x="111" y="686" width="100" height="50" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-20" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAACIAAABCEAYAAABiI9jbAAAKqGlDQ1BJQ0MgUHJvZmlsZQAASImVlwdQU+kWgP9700NCS4h0Qm/SWwApIbTQpYOohCRAKCEGgogdWVyBtSAighVdEFFwVYosNkSxLQKKXRdkEVHWxYINlXeBIbj75r0378ycOd899/znP+ef+8+cCwBZniMSpcHyAKQLs8ShPh706JhYOm4YQEANEAAJQBxupogZEhIAEJm1f5f3d5BoRG6ZTeX69/f/VRR4/EwuAFAIwgm8TG46wqcQfcEVibMAQO1H/LrLs0RT3IEwVYwUiPC9KU6a4dEpTphmNJiOCQ9lIUwFAE/icMRJAJDoiJ+ezU1C8pDcEbYU8gRChEUIu6anZ/AQPo6wERKD+EhT+RkJ3+VJ+lvOBGlODidJyjO9TAveU5ApSuOs+D+P439Leppkdg8DREnJYt9QxCoiZ3YvNcNfysKEoOBZFvCm46c5WeIbMcvcTFbsLPM4nv7StWlBAbOcKPBmS/NkscNnmZ/pFTbL4oxQ6V6JYhZzljniuX0lqRFSfzKfLc2fmxweNcvZgsigWc5MDfOfi2FJ/WJJqLR+vtDHY25fb2nv6Znf9StgS9dmJYf7SnvnzNXPFzLncmZGS2vj8T295mIipPGiLA/pXqK0EGk8P81H6s/MDpOuzUI+yLm1IdIzTOH4hcwyYIEMkIaoGNBBAPLkCUAWPydrqhFWhmiFWJCUnEVnIjeMT2cLuebz6daW1jYATN3Xmc/hLW36HkK0a3O+vIMAuLhOTk62zfn8hwA4OQYA8fGczwg5I9leAK6UciXi7Bnf9F3CACKQA1SgAjSBLjACZsAa2ANn4A68gB8IBuEgBiwBXJAM0pHKl4NVYD0oAEVgK9gBKsA+cBAcBsfACdAM2sAFcBlcB92gDzwE/WAIvARj4D2YgCAIB5EhCqQCaUH6kClkDTEgV8gLCoBCoRgoHkqChJAEWgVtgIqgEqgCOgDVQr9Ap6EL0FWoB7oPDUAj0BvoM4yCSTAV1oANYAuYATNhfzgcXgwnwcvgXDgf3gyXw1XwUbgJvgBfh/vgfvglPI4CKBkUDaWNMkMxUCxUMCoWlYgSo9agClFlqCpUPaoV1Ym6hepHjaI+obFoCpqONkM7o33REWguehl6DboYXYE+jG5Cd6BvoQfQY+hvGDJGHWOKccKwMdGYJMxyTAGmDFONacRcwvRhhjDvsVgsDWuIdcD6YmOwKdiV2GLsHmwD9jy2BzuIHcfhcCo4U5wLLhjHwWXhCnC7cEdx53C9uCHcR7wMXgtvjffGx+KF+Dx8Gf4I/iy+Fz+MnyDIE/QJToRgAo+wgrCFcIjQSrhJGCJMEBWIhkQXYjgxhbieWE6sJ14iPiK+lZGR0ZFxlFkoI5BZJ1Muc1zmisyAzCeSIsmExCLFkSSkzaQa0nnSfdJbMplsQHYnx5KzyJvJteSL5Cfkj7IUWXNZtixPdq1spWyTbK/sKzmCnL4cU26JXK5cmdxJuZtyo/IEeQN5ljxHfo18pfxp+bvy4woUBSuFYIV0hWKFIwpXFZ4r4hQNFL0UeYr5igcVLyoOUlAUXQqLwqVsoByiXKIMUbFUQyqbmkItoh6jdlHHlBSVbJUilXKUKpXOKPXTUDQDGpuWRttCO0G7Q/s8T2Mecx5/3qZ59fN6531QVlN2V+YrFyo3KPcpf1ahq3ippKpsU2lWeayKVjVRXai6XHWv6iXVUTWqmrMaV61Q7YTaA3VY3UQ9VH2l+kH1G+rjGpoaPhoijV0aFzVGNWma7popmqWaZzVHtCharloCrVKtc1ov6Ep0Jj2NXk7voI9pq2v7aku0D2h3aU/oGOpE6OTpNOg81iXqMnQTdUt123XH9LT0AvVW6dXpPdAn6DP0k/V36nfqfzAwNIgy2GjQbPDcUNmQbZhrWGf4yIhs5Ga0zKjK6LYx1phhnGq8x7jbBDaxM0k2qTS5aQqb2psKTPeY9szHzHecL5xfNf+uGcmMaZZtVmc2YE4zDzDPM282f2WhZxFrsc2i0+KbpZ1lmuUhy4dWilZ+VnlWrVZvrE2sudaV1rdtyDbeNmttWmxe25ra8m332t6zo9gF2m20a7f7au9gL7avtx9x0HOId9jtcJdBZYQwihlXHDGOHo5rHdscPznZO2U5nXD6y9nMOdX5iPPzBYYL+AsOLRh00XHhuBxw6Xelu8a77nftd9N247hVuT1113XnuVe7DzONmSnMo8xXHpYeYo9Gjw8sJ9Zq1nlPlKePZ6Fnl5eiV4RXhdcTbx3vJO867zEfO5+VPud9Mb7+vtt877I12Fx2LXvMz8FvtV+HP8k/zL/C/2mASYA4oDUQDvQL3B74KEg/SBjUHAyC2cHbgx+HGIYsC/l1IXZhyMLKhc9CrUJXhXaGUcKWhh0Jex/uEb4l/GGEUYQkoj1SLjIusjbyQ5RnVElUf7RF9Oro6zGqMYKYllhcbGRsdez4Iq9FOxYNxdnFFcTdWWy4OGfx1SWqS9KWnFkqt5Sz9GQ8Jj4q/kj8F04wp4oznsBO2J0wxmVxd3Jf8tx5pbwRvgu/hD+c6JJYkvg8ySVpe9JIsltyWfKogCWoELxO8U3Zl/IhNTi1JnUyLSqtIR2fHp9+WqgoTBV2ZGhm5GT0iExFBaL+ZU7LdiwbE/uLqzOhzMWZLVlUZDC6ITGS/CAZyHbNrsz+uDxy+ckchRxhzo0VJis2rRjO9c79eSV6JXdl+yrtVetXDaxmrj6wBlqTsKZ9re7a/LVD63zWHV5PXJ+6/rc8y7ySvHcboja05mvkr8sf/MHnh7oC2QJxwd2Nzhv3/Yj+UfBj1yabTbs2fSvkFV4rsiwqK/pSzC2+9pPVT+U/TW5O3Ny1xX7L3q3YrcKtd7a5bTtcolCSWzK4PXB7Uym9tLD03Y6lO66W2Zbt20ncKdnZXx5Q3rJLb9fWXV8qkiv6Kj0qG3ar7960+8Me3p7eve576/dp7Cva93m/YP+9Az4HmqoMqsoOYg9mH3x2KPJQ58+Mn2urVauLqr/WCGv6D4ce7qh1qK09on5kSx1cJ6kbORp3tPuY57GWerP6Aw20hqLj4Ljk+Itf4n+5c8L/RPtJxsn6U/qndjdSGguboKYVTWPNyc39LTEtPaf9Tre3Orc2/mr+a02bdlvlGaUzW84Sz+afnTyXe278vOj86IWkC4PtS9sfXoy+eLtjYUfXJf9LVy57X77Yyew8d8XlSttVp6unrzGuNV+3v950w+5G4292vzV22Xc13XS42dLt2N3as6DnbK9b74Vbnrcu32bfvt4X1NdzJ+LOvbtxd/vv8e49v592//WD7AcTD9c9wjwqfCz/uOyJ+pOq341/b+i37z8z4Dlw42nY04eD3MGXf2T+8WUo/xn5Wdmw1nDtc+vnbSPeI90vFr0Yeil6OTFa8KfCn7tfGb069Zf7XzfGoseGXotfT74pfqvytuad7bv28ZDxJ+/T3098KPyo8vHwJ8anzs9Rn4cnln/BfSn/avy19Zv/t0eT6ZOTIo6YMz0KoBCFExMBeFMDADkGAEo3Mj8smpmnpwWa+QeYJvCfeGbmnhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABdxlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFTAAAAJCgAgAEAAAAAQAAACKgAwAEAAAAAQAAAEIAAAAAQVNDSUkAAABBQUFFM25qYWJWTk5iQnRGRkg2ejQ3Wkoyc1NicEQ5cCtyY2xEcVNVbHFRTk5LVDh4R21hTnJSeGY5YU9uY1N1CkdhL0g5amJyWGJNN205YTFJczBCRllUZ3dLblFBNUJFQ0lxQUFpb1ZRaW9JMFFDcVVBUkpCRWdJVU9IUUMrTEEKQmFFS2lWbmJLZ1YxUnF0OTc4MjhlZC83NXB0VXdkQWQxdG01aENUc1c3WjhSVjBzTUVsdFI3Zk0wUUN4dFp3dQp2SENBV1lWWXdFcWRwQnB6bWdDZGZUVXArMFBxSVZxazZXQjEwemMxdFdIYnNoaEhGK1d0SzFlMTMzMVB4N1o3CnQ5KzNZK2Y5RCt4OXVHL2c4VVBIam8rTm55QTBjekpmWUc0a1lMcUdzVmpmNEpkYkE5R1F1bk9DRnAweDhhOFcKR1Fsb0JuR2NDNDFOemF2WHJGM1hzcDVMSEhNZlg4YVg4eFc4aHRmeXVnc2JObTdhdkVYWmVsY2JYOGxYOFFidQo1NDI4bFcvZ20vaG1yc1JTeEtHR2J0S0laaG1XSGM1YmFScGhPak5vckdCVGtrOFpOSkVuV1ZQUDZCcGhvdDF3Cm1qQXEya29SYlNKclc2NlozdWNsamptV2EyczBURSt6TnFpT3hjNHUvNjdkM1pHUWV2eEFmenlrbGplcUJhTFIKd1U1RlRKQVJyMTk0Y0UvUFEyT1ZOa3lTcDdHS1NaMW9OV0dtcHpjV1VvK1UrNVY5Qy81SEhuMXNWQkRnTUZzMwpzMXcrS2c0STlwZDVIbllaRVhqVjhzcHNjSitYVjNFVzkvc0hEeHdjdXVVTE1FRW1ySlRMcU1PYitIcmVuSlFYCjRtbExjL1BVWkdVRTQxMmRCWllvRVp2cG1rR242dUt1UXdYMkNaS2w0OEwwc0RxSlVwbTFLYVZkUk5KS3hyTEYKWnpLbEhMMDlvMFR5amxQTXA4VE9QR0U1NS85clh2Qk9hK011eS9Ra1NycFpFRWhOclZJbzR4b0tzeFJXTEZBbApyZHVDRjZNb0RLTFp1c0NxYURsaUU0MEpkZFo1d2prY09qbzl6RmRQSCtGcmVNdElTQjBVQUpmVWNNUS9FbzJOCkNsL1Z6MUJCVEdiUUlGbEgrQ0hSV0Z0ZlIrVUtaWm12NWV0R2hpMlRhSlpnT3A2b25qQVQ3eFZ1OGduQjVJQ3UKZWNJZ2RuRW02UVZUV2xKdXVvM2dkSVh6bVhUdkhlTnRmZjJWV2d0WmYwNzNOTTUwZ1NCNGRlNlh0MzIvWHVFYgp4WkVUaGlnN0lJUTNNOUhycWNyYzNUM1lwWWdKdk42NzJ5Y1BEdkV0M2kxRzR6bkNTc1Vwa1RONUtpazMzeExGCnZ5Qm5KNU85VUFPTjBBb0IyQWE3WUE4TXdXRTRCaXFjZ2lsNENwNkRjL0F5dkFGdndsdndEcndMNzhNbHVBd2YKd2tkd0ZUNkhMK0VhZkFYejhEVXN3Qko4QzkvRGRiZ0J2OEVmY0JQVm9nYWtvTzJvRysxRlFSUkNFUlJGbytnRQowcEdOenFBcGRCWTlnNTVINTlCTDZEeDZCYjJIUGtBZm96azBqMzVBUDZLZjBYWHBzblJGK2tUNlZQcE1tcE8rCmtPYWw3NlNmcEJ2Uzc5S2YwbC9TVGVsdjdNTzFXTWJOdUFXMzR3NjhBL2ZqL1hnTWF6aUhDN2lJUzVqanAvR3oKK0FYOElqNlBwL0VzZmcyL2ppL2lTL2hhaFdBSlZSL21hZmpQd1BQL0FManprOHM9WVa4nQAAAAlwSFlzAAAWJQAAFiUBSVIk8AAACNtpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+MTwvdGlmZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0PC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xNDQ8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MzQ8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5BQUFFM25qYWJWTk5iQnRGRkg2ejQ3Wkoyc1NicEQ5cCtyY2xEcVNVbHFRTk5LVDh4R21hTnJSeGY5YU9uY1N1JiN4QTtHYS9IOWpiclhiTTdtOWExSXMwQkZZVGd3S25RQTVCRUNJcUFBaW9WUWlvSTBRQ3FVQVJKQkVnSVVPSFFDK0xBJiN4QTtCYUVLaVZuYktnVjFScXQ5NzgyOGVkLzc1cHRVd2RBZDF0bTVoQ1RzVzdaOFJWMHNNRWx0UjdmTTBRQ3h0Wnd1JiN4QTt2SENBV1lWWXdFcWRwQnB6bWdDZGZUVXArMFBxSVZxazZXQjEwemMxdFdIYnNoaEhGK1d0SzFlMTMzMVB4N1o3JiN4QTt0OSszWStmOUQreDl1Ry9nOFVQSGpvK05ueUEwY3pKZllHNGtZTHFHc1ZqZjRKZGJBOUdRdW5PQ0ZwMHg4YThXJiN4QTtHUWxvQm5HY0M0MU56YXZYckYzWHNwNUxISE1mWDhhWDh4VzhodGZ5dWdzYk5tN2F2RVhaZWxjYlg4bFg4UWJ1JiN4QTs1NDI4bFcvZ20vaG1yc1JTeEtHR2J0S0laaG1XSGM1YmFScGhPak5vckdCVGtrOFpOSkVuV1ZQUDZCcGhvdDF3JiN4QTttakFxMmtvUmJTSnJXNjZaM3VjbGpqbVdhMnMwVEUrek5xaU94YzR1LzY3ZDNaR1FldnhBZnp5a2xqZXFCYUxSJiN4QTt3VTVGVEpBUnIxOTRjRS9QUTJPVk5reVNwN0dLU1oxb05XR21wemNXVW8rVSs1VjlDLzVISG4xc1ZCRGdNRnMzJiN4QTtzMXcrS2c0STlwZDVIbllaRVhqVjhzcHNjSitYVjNFVzkvc0hEeHdjdXVVTE1FRW1ySlRMcU1PYitIcmVuSlFYJiN4QTs0bWxMYy9QVVpHVUU0MTJkQlpZb0VadnBta0duNnVLdVF3WDJDWktsNDhMMHNEcUpVcG0xS2FWZFJOSkt4ckxGJiN4QTtaektsSEwwOW8wVHlqbFBNcDhUT1BHRTU1LzlyWHZCT2ErTXV5L1FrU3JwWkVFaE5yVklvNHhvS3N4UldMRkFsJiN4QTtyZHVDRjZNb0RLTFp1c0NxYURsaUU0MEpkZFo1d2prY09qbzl6RmRQSCtGcmVNdElTQjBVQUpmVWNNUS9FbzJOJiN4QTtDbC9WejFCQlRHYlFJRmxIK0NIUldGdGZSK1VLWlptdjVldEdoaTJUYUpaZ09wNm9uakFUN3hWdThnbkI1SUN1JiN4QTtlY0lnZG5FbTZRVlRXbEp1dW8zZ2RJWHptWFR2SGVOdGZmMlZXZ3RaZjA3M05NNTBnU0I0ZGU2WHQzMi9YdUViJiN4QTt4WkVUaGlnN0lJUTNNOUhycWNyYzNUM1lwWWdKdk42NzJ5Y1BEdkV0M2kxRzR6bkNTc1Vwa1RONUtpazMzeExGJiN4QTt2eUJuSjVPOVVBT04wQW9CMkFhN1lBOE13V0U0QmlxY2dpbDRDcDZEYy9BeXZBRnZ3bHZ3RHJ3TDc4TWx1QXdmJiN4QTt3a2R3RlQ2SEwrRWFmQVh6OERVc3dCSjhDOS9EZGJnQnY4RWZjQlBWb2dha29PMm9HKzFGUVJSQ0VSUkZvK2dFJiN4QTswcEdOenFBcGRCWTlnNTVINTlCTDZEeDZCYjJIUGtBZm96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;" parent="1" vertex="1">
+          <mxGeometry x="462" y="716" width="6.7" height="13" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-23" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABeBlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFUAAAAJCgAgAEAAAAAQAAACKgAwAEAAAAAQAAAEYAAAAAQVNDSUkAAABBQUFFNDNqYWJWTmJiQnRGRkwyems3Wkoyc1NicEk4MGZXMkpBeW1seFdrRERTNlBPRTNUaGpadTA3VVRKN0ZyCnh1dXh2ZlY2MSt5TzA3cFdwUGxBQlNINDRLdlFEeUNKRUJRaFhpb1ZJQUZDTklBUUN1QkVnSVFBVlh6MEIvR0IKa0JDcWtKaTFyVkpRWjdUYWUrL01uWHZ1bVRPSnZLRTd6T2RiUmhLdVc3RnlWV1BFTzAxdFI3Zk1DUyt4dFl3dQp2SkNYV2ZtSTEwcWNvaHB6V2dHZGV6RXVlNExxRVZxa3lVQnQwemYxRFNIYnNoaEhiOGpiVjYvcHV2Mk83aDEzCjdyeHIxKzY3NzlsL2YvL2d3MGRHVDB4T25TUTBkU3FYWjRXdzF5d1l4bEpUczBmdThJNEgxZDFaV25RbXhiOVcKWk15ckdjUnhMcmEwdHExZHQzNUQrMFl1Y2N6citBcStrcS9pOWJ5Qk4xN2N0SG5MMW0zSzl0czYrV3EraGpkegpEMi9oSFh3VDM4SzNjaVdTSUE0MWRKT0dOY3V3N0ZET1N0SXcwNWxCSTNtYmtsekNvTEVjU1p0NlN0Y0lFKzJHCmtvUlIwVmFDYU5tMGJSWE01QUUzY2RLeENyWkdRL1FNNjRUYVdQTDFlUGJzN1EwSDFST0hCcUpCdGJKUnpST04KRHZrVU1VRkd2S2w4Nzc2Kyt5YXJiWmdrUnlOVmt6cmp0WVM1UG44a3FCNnI5Q3ZYbFQwUFBQalFoQ0RBWWJadQpwcmw4WEJ3UUdLandQRkpnUk9CVkt5dnpnUU51WHRWWk91Z1pPblI0K0lZdndBU1lzQklGUmgzZXlqZnl0cmhjCmppWXRyWkNqSnFzZ21Pcng1Vm1zUkd5bWF3YWRhWXdXSENxd1owbWFUZ25UeGVyRVNoWFdacFF1RVVrcUtjc1cKbjhtVVN2VG1qQkxKT1U0eGx4QTdjNFJsblArdnVjRmJyVTBWV0tvdlZ0TE52RUJxYXRWQ3FZS2hNRXRoeFR4Vgprcm90ZURHS3dpQ2FyUXVzaXBZaE50R1lVR2VqSzV5andlT3pJM3p0N0RHK2pyZVBCZFVoQVhCWkRZVTlZK09SCkNlR3IrbGtxaUVrTkdTVHRDRDhvR3V2czc2NWVvU3p6OVh6RDJJaGxFczBTVEVkanRSUG1vbjdoeGg4UlRBN3EKbWlzTVloZm40bTR3b2NYbDFwc0lUbFk1bjB2NmJ4bnY3QitvMWlxblBSbmQxVGpUQllMQWxZVmZsSUUvUnZsbQpjV1RXRUdVSGhmRG1zbjVYVmViZTNxRWVSVXpnVGU3ZFBucDRtRzl6YnpFYXpSQldpcklNWldSR0pFNmZqc3R0Ck41VHhMOUw1NmJnZjZxRUZPc0FMTzJBUDdJTmhPQXFqb01KcG1JSEg0Q2s0RDgvREsvQXF2QWF2dzV2d05seUMKeS9BdXZBOVg0RlA0SEw2QUwyRVJ2b1l5TE1PMzhEMWNoV3Z3Sy93TzExRURha1lLMm9sNjBYNFVRRUVVUnVObwpBcDFFT3JMUldUU0R6cUVuME5Qb1BIb09YVUF2b0xmUU8raER0SUFXMFEvb1IvUXp1aXBkbGo2UVBwSStsajZSCkZxVFBwRVhwTytrbjZacjBtL1NuOUpkMFhmb2IxK0VHTE9NMjNJNjdjRGZlaFFmd1FUeUpOWnpCZVZ6RUpjengKNC9oSi9BeCtGbC9BczNnZXY0UmZ4cGZ3ZS9pcktzc1NxcjNPTS9DZmdaZitBWHNVbFRRPcxmgcUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAjfaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+QUFBRTQzamFiVk5iYkJ0RkZMMnprN1pKMnNTYnBJODBmVzJKQXltbHhXa0REUzZQT0UzVGhqWnUwN1VUSjdGciYjeEE7eHV1eHZmVjYxK3lPMDdwV3BQbEFCU0g0NEt2UUR5Q0pFQlFoWGlvVklBRkNOSUFRQ3VCRWdJUUFWWHowQi9HQiYjeEE7a0JDcWtKaTFyVkpRWjdUYWUrL01uWHZ1bVRPSnZLRTd6T2RiUmhLdVc3RnlWV1BFTzAxdFI3Zk1DUyt4dFl3dSYjeEE7dkpDWFdmbUkxMHFjb2hweldnR2RlekV1ZTRMcUVWcWt5VUJ0MHpmMURTSGJzaGhIYjhqYlY2L3B1djJPN2gxMyYjeEE7N3J4cjErNjc3OWwvZi8vZ3cwZEdUMHhPblNRMGRTcVhaNFd3MXl3WXhsSlRzMGZ1OEk0SDFkMVpXblFteGI5VyYjeEE7Wk15ckdjUnhMcmEwdHExZHQzNUQrMFl1Y2N6citBcStrcS9pOWJ5Qk4xN2N0SG5MMW0zSzl0czYrV3EraGpkeiYjeEE7RDIvaEhYd1QzOEszY2lXU0lBNDFkSk9HTmN1dzdGRE9TdEl3MDVsQkkzbWJrbHpDb0xFY1NadDZTdGNJRSsyRyYjeEE7a29SUjBWYUNhTm0wYlJYTTVBRTNjZEt4Q3JaR1EvUU02NFRhV1BMMWVQYnM3UTBIMVJPSEJxSkJ0YkpSelJPTiYjeEE7RHZrVU1VRkd2S2w4Nzc2Kyt5YXJiWmdrUnlOVmt6cmp0WVM1UG44a3FCNnI5Q3ZYbFQwUFBQalFoQ0RBWWJadSYjeEE7cHJsOFhCd1FHS2p3UEZKZ1JPQlZLeXZ6Z1FOdVh0VlpPdWdaT25SNCtJWXZ3QVNZc0JJRlJoM2V5amZ5dHJoYyYjeEE7amlZdHJaQ2pKcXNnbU9yeDVWbXNSR3ltYXdhZGFZd1dIQ3F3WjBtYVRnblR4ZXJFU2hYV1pwUXVFVWtxS2NzVyYjeEE7bjhtVVN2VG1qQkxKT1U0eGx4QTdjNFJsblArdnVjRmJyVTBWV0tvdlZ0TE52RUJxYXRWQ3FZS2hNRXRoeFR4ViYjeEE7a3JvdGVER0t3aUNhclF1c2lwWWhOdEdZVUdlaks1eWp3ZU96STN6dDdERytqcmVQQmRVaEFYQlpEWVU5WStPUiYjeEE7Q2VHcitsa3FpRWtOR1NUdENEOG9HdXZzNzY1ZW9Teno5WHpEMklobEVzMFNURWRqdFJQbW9uN2h4aDhSVEE3cSYjeEE7bWlzTVloZm40bTR3b2NYbDFwc0lUbFk1bjB2NmJ4bnY3QitvMWlxblBSbmQxVGpUQllMQWxZVmZsSUUvUnZsbSYjeEE7Y1dUV0VHVUhoZkRtc241WFZlYmUzcUVlUlV6Z1RlN2RQbnA0bUc5emJ6RWF6UkJXaXJJTVpXUkdKRTZmanN0dCYjeEE7TjVUeEw5TDU2YmdmNnFFRk9zQUxPMkFQN0lOaE9BcWpvTUpwbUlISDRDazREOC9ESy9BcXZBYXZ3NXZ3Tmx5QyYjeEE7eS9BdXZBOVg0RlA0SEw2QUwyRVJ2b1l5TE1PMzhEMWNoV3Z3Sy93TzExRURha1lLMm9sNjBYNFVRRUVVUnVObyYjeEE7QXAxRU9yTFJXVFNEenFFbjBOUG9QSG9PWFVBdm9M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;" parent="1" vertex="1">
+          <mxGeometry x="462" y="546" width="7" height="14.42" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-30" value="Physics/ECM" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="185" y="829" width="90" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-31" value="Empirical" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="385" y="829" width="90" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-32" value="Data-Driven" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="285" y="829" width="90" height="40" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-34" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-30" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="212" y="801" as="sourcePoint" />
+            <mxPoint x="271" y="738" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-35" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-31" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="482" y="849.62" as="sourcePoint" />
+            <mxPoint x="393" y="736" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-40" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="47" y="699" as="sourcePoint" />
+            <mxPoint x="110" y="699" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-41" value="Excitation" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;flipH=1;" parent="1" vertex="1">
+          <mxGeometry x="39" y="674" width="60" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-43" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABdRlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFRAAAAJCgAgAEAAAAAQAAACagAwAEAAAAAQAAACIAAAAAQVNDSUkAAABBQUFFMkhqYWJWTmRiQlJWRkQ1MzdnSnRvZDFweTA4cGY0UGRhaEhCTFZTcGl6L2RVZ29WdWxCbXQ5MytMT3ZkCjJidmJvYk16Njh5ZHdySnBjaDhNR0tNUFBxRThxRzFqdE1iVW55Z3hKbXFNQlluUlJ0dEdUWXdhbm5neFB2aGkKRERIeHp1NEcwVEEza3pubjNIUHUrYzUzdjBubERkMWh3ZUFLa3JCdjFlbzFOZkhBSkxVZDNUS0hBOFRXeG5YaApSUVBNeXNjRFZ1b00xWmpUQU9qQ2EwblpIMUdQMFFKTmh5dEozMVZWUjIzTFloeTlJKzljdTY3MTN2dmFkdDIvCis0RTlleDk4Nk9DalhUMVBIaHM0TlRKNm10RE1tVnlldWJHQTZSckdjbTJkWDI0T0RFWFV2Uk8wNEl5SWI2WEoKWUVBemlPUE0xVGMwcnQrd2NWUFRaaTV4ekgxOEZWL04xL0FxWHMxcjVyWnMzYlo5aDdMem5oYStscS9qZGR6UAo2M2t6MzhLMzhlMWNpYWVJUXczZHBESE5NaXc3bXJQU05NWjBadEI0M3FZa2x6Sm9Ja2V5cHA3Uk5jTEV1TkUwCllWU01sU0xhUk5hMlhETjl5Q3NjY1N6WDFtaVVubU10VUhtV2crMytmZnM3WWhIMTFKSHVzWWhhU2xUelJLTzkKUVVVc2tCR3ZYWHI0UU9jakkrVXhUSktqOGJKSm5hRkt3VXhuS0I1UlQ1VG1sWDFML3NjZWYySllFT0F3V3plegpYRDRwRGdoM2wzanVkeGtSZU5YU3ptejRrRmRYZHBZUCszdVBITzI3N1Fzd1lTYXNsTXVvd3h2NFp0NllsSmZHCjBwYm01cWpKU2doRzI0TjVsaWdTbSttYVFhZHF4bHlIQ3V3VEpFdEhoZWxoZFJMRkVtdFRTcXVJcEpXTVpZdlgKWkVvcGVtZEZrZVFjcDVCTGljd2NZZVBPLy9lODROMzJSbDJXNlV3VWRUTXZrSnBhdVZIR05SUm1LYXlRcDBwYQp0d1V2UmtFWVJMTjFnVlhSeG9sTk5DYlVXZU1KNTNqazVIUS9Yejk5Z20vZ1RZTVJ0VmNBWEZHak1mL2dVSHhZCitLcCtuZ3BpTXIwR3lUckNqNGpCV3JyYXlsY295M3dqM3pUWWI1bEVzd1RUWTRuS0NUTmpJZUVtbnhKTTl1aWEKSnd4aUYyYVNYakNsSmVXR093aE9sem1mU1lmdUdtL3A2aTczV3NyNngzVlA0MHdYQ01JTDEzekJiK1puK1ZaeAo1SVFoMnZZSTRjMU1oRHhWbWZzN2V0c1ZzWURYZW5mNzlORSt2c083eFFGWFpFK2VUY3FOdCtYd0w3elp5V1FJCnFxQWVtaUVBdTJBZkhJQStPQTREb01KWm1JSm40SG00QksvQW0vQVd2QTN6OEM2OER4L0FGZmdJUG9ZRnVBYlgKNFN2NEdoYmhXMWlDRmZnZWZvUWJjQk4rZ3ovZ0ZxcEdkVWhCdTFFSE9vakNLSUppYUFnTm85TklSelk2ajZiUQpCZlFzZWdGZFFpK2p5K2hWOUI3NkVIMktycUpGOUJQNkdmMktia2hYcEUra3o2VFBwUytrcTlLWDBxTDBnL1NMCmRGUDZYZnBUK2t1NkpmMk5mYmdheTdnUk4rRlczSWIzNEc1OEdJOWdEWS9qUEM3Z0l1YjRJbjRPdjRoZndwZngKTko3RnIrTTM4QnlleHd0bGFpVlUrU1hQd1g4ZWZQMGYzWnVRT0E9PRrZ8zAAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAjTaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+QUFBRTJIamFiVk5kYkJSVkZENTM3Z0p0b2QxcHkwOHBmNFBkYWhIQkxWU3Bpei9kVWdvVnVsQm10OTMrTE92ZCYjeEE7MmJ2Ym9iTXo2OHlkd3JKcGNoOE1HS01QUHFFOHFHMWp0TWJVbnlneEptcU1CWW5SUnR0R1RZd2Fubmd4UHZoaSYjeEE7RERIeHp1NEcwVEEza3pubjNIUHUrYzUzdjBubERkMWh3ZUFLa3JCdjFlbzFOZkhBSkxVZDNUS0hBOFRXeG5YaCYjeEE7UlFQTXlzY0RWdW9NMVpqVEFPakNhMG5aSDFHUDBRSk5oeXRKMzFWVlIyM0xZaHk5SSs5Y3U2NzEzdnZhZHQyLyYjeEE7KzRFOWV4OTg2T0NqWFQxUEhoczROVEo2bXRETW1WeWV1YkdBNlJyR2NtMmRYMjRPREVYVXZSTzA0SXlJYjZYSiYjeEE7WUVBemlPUE0xVGMwcnQrd2NWUFRaaTV4ekgxOEZWL04xL0FxWHMxcjVyWnMzYlo5aDdMem5oYStscS9qZGR6UCYjeEE7NjNrejM4SzM4ZTFjaWFlSVF3M2RwREhOTWl3N21yUFNOTVowWnRCNDNxWWtsekpvSWtleXBwN1JOY0xFdU5FMCYjeEE7WVZTTWxTTGFSTmEyWEROOXlDc2NjU3pYMW1pVW5tTXRVSG1XZyszK2ZmczdZaEgxMUpIdXNZaGFTbFR6UktPOSYjeEE7UVVVc2tCR3ZYWHI0UU9jakkrVXhUSktqOGJKSm5hRkt3VXhuS0I1UlQ1VG1sWDFML3NjZWYySllFT0F3V3pleiYjeEE7WEQ0cERnaDNsM2p1ZHhrUmVOWFN6bXo0a0ZkWGRwWVArM3VQSE8yNzdRc3dZU2FzbE11b3d4djRadDZZbEpmRyYjeEE7MHBibTVxakpTZ2hHMjRONWxpZ1NtK21hUWFkcXhseUhDdXdUSkV0SGhlbGhkUkxGRW10VFNxdUlwSldNWll2WCYjeEE7WkVvcGVtZEZrZVFjcDVCTGljd2NZZVBPLy9lODROMzJSbDJXNlV3VWRUTXZrSnBhdVZIR05SUm1LYXlRcDBwYSYjeEE7dHdVdlJrRVlSTE4xZ1ZYUnhvbE5OQ2JVV2VNSjUzams1SFEvWHo5OWdtL2dUWU1SdFZjQVhGR2pNZi9nVUh4WSYjeEE7K0twK25ncGlNcjBHeVRyQ2o0akJXcnJheWxjb3kzd2ozelRZYjVsRXN3VFRZNG5LQ1ROakllRW1ueEpNOXVpYSYjeEE7Snd4aUYyYVNYakNsSmVXR093aE9sem1mU1lmdUdtL3A2aTczV3NyNngzVlA0MHdYQ01JTDEzekJiK1puK1ZaeCYjeEE7NUlRaDJ2WUk0YzFNaER4Vm1mczdldHNWc1lEWGVuZjc5TkUrdnNPN3hRRlhaRStlVGNxTnQrWHdMN3paeVdRSSYjeEE7cXFBZW1pRUF1MkFmSElBK09BNERvTUpabUlKbjRIbTRCSy9BbS9BV3ZBM3o4QzY4RHgvQUZmZ0lQb1lGdUFiWCYjeEE7NFN2NEdoYmhXMWlDRmZnZWZvUWJjQk4rZ3ovZ0ZxcEdkVWhCdTFFSE9vakNLSUppYUFnTm85TklSelk2ajZiUSYjeEE7QmZRc2VnRmRRaStqeStoVjlCNzZFSDJLcnFKRjlCUDZHZjJLYmtoWHBF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;" parent="1" vertex="1">
+          <mxGeometry x="234" y="696" width="7.85" height="7.02" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-78" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="47" y="725" as="sourcePoint" />
+            <mxPoint x="110" y="725" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-79" value="Design Space" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
+          <mxGeometry x="20" y="700" width="86" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-81" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABehlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFWAAAAJCgAgAEAAAAAQAAAQagAwAEAAAAAQAAAEoAAAAAQVNDSUkAAABBQUFFNjNqYWJWTmRiQlJWRkQ1M2JpbHRvZDFweTA4cGY0UGRhaXNXMjFLbEZuKzZwUlFxZFBtWjNYYmI3ckxlCm5iMjdPK3pzekRwenQ3QnNtOXdIZzhiSUEwOG9EMnJiR01VWS82TEVHSDlDQkRScUdtMGJJU0ZxZU9MRitPQ0wKTWNURU83c2JSTVBjVE9hY2MrODU1enZmL1NhV05YU0hkWFl1SXdsWHJLaGNXUlB5VGxIYjBTMXozRXRzTGFVTApMK0JsVmpia3RXTEhxY2FjQmtDblg0L0tIcjk2Z09acDNGYys5R05WZGNDMkxNYlJlL0syVmF0YjczK2dyZjNCCjdROTE3SGo0a2QyUDl3OCtmZURJMFluSlk0UW1qbWV5TEJmMG1qbkRXS3F0ODhqTjNqRy91aU5OODg2RStKYWIKakhvMWd6ak9oZnFHeGpWcjE2MXYyc0Fsam5rRlg4RXIrVXBleGF0NXpZV05telp2MmFwc3U2K0ZyK0tyZVIzMwo4SHJlekRmeXpYd0xWMEl4NGxCRE4ybFFzd3pMRG1Tc09BMHluUmswbExVcHljUU1Hc21RcEtrbmRJMHdNVzRnClRoZ1ZZOFdJbGs3YVZzNk03M0VUSnh3cloyczBRRSt5RmlnL1M1MWRudTZkUFVHL2VuVGZRTml2RmcrcVdhTFIKb1U1RkxKQVJyMTE4ZEZmdll4T2xNVXlTb2FHU1NaMnhjc0pjYjEvSXJ4NHF6aXRYTEhxZWVQS3BjVUdBdzJ6ZApUSEw1c0NqZ0d5anlQSkpqUk9CVml6dnp2ajF1WHNsWjJ1c1oycmQvK0k0dndQaVlzR0k1UmgzZXdEZnd4cWk4CkdJNWJXaTVEVFZaRU1OblZtV1dSQXJHWnJobDBwaWFjYzZqQW5pWkpPaWxNRjZzVEtSUlptMUZhUlNTdUpDeGIKdkNaVGl0RzdNd29rNHpqNVRFeWN6QkNXY3Y2LzV3YnZ0VGVaWTRuZVNFRTNzd0twcVpVYUpYS0d3aXlGNWJOVQppZXUyNE1YSUM0Tm90aTZ3S2xxSzJFUmpRcDAxcm5BTytnL1BqdkExczRmNFd0NDA2bGVIQk1CbE5SRDBqSTZGCnhvV3Y2cWVvSUNZeFpKQ2tJM3kvR0t5bHY2MTBoYkxNMS9IMW95T1dTVFJMTUIyT2xDdk1oZnVFRzMxR01EbW8KYTY0d2lKMmZpN3JCbUJhVkcrNGlPRjdpZkM3ZWQ4OTRTLzlBcWRkaTBwUFNYWTB6WFNEd1hiNWEyUjYvL2gzZgpKRXFtRGRGMlVBaHZMdDNucXNyYzJUUFVwWWdGdk5hOTIyZjNEL090cFZ0c21KNVd3aW5DQ3ZrWnBVUEpUMDlICnUwV0JxUk5SdWZHT1F2NUZQRDhWN1lNcXFJZG04RUk3ZE1NdUdJYURjQVJVT0FFejhCeThCT2ZnVlhnTDNvWjMKNEYxNEh6NkVqK0FpZkFLZndtVzRDdC9BdC9BOUxNQVBzQWpMOEJOY2g1dHdDMzZEUCtBMnFrWjFTRUhiVVEvYQpqWHpJajRKb0RJMmpZMGhITmpxRlp0QnA5QUk2Zzg2aFY5QjU5QnI2QUgyTXZrQlgwQUs2Z1g1R3Y2S2Iwa1hwCmMrbEw2WkwwbFhSRitscGFrSzVKdjBpM3BOK2xQNlcvcE52UzM3Z0NWMk1aTitJbTNJcmJjQWNld0h2eEJOWncKQ21keEhoY3d4OC9qRi9GWi9ESStqMmZ4UEg0RHY0ay93NWZ3dFJMYkVpci9wU2ZoUHcrKzhROGt4WmEwZJJWPgAAAAlwSFlzAAAWJQAAFiUBSVIk8AAACOhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+MTwvdGlmZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0PC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xNDQ8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjYyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+QUFBRTYzamFiVk5kYkJSVkZENTNiaWx0b2QxcHkwOHBmNFBkYWlzVzIxS2xGbis2cFJRcWRQbVozWGJiN3JMZSYjeEE7bmIyN08renN6RHB6dDdCc205d0hnOGJJQTA4b0QycmJHTVVZLzZMRUdIOUNCRFJxR20wYklTRnFlT0xGK09DTCYjeEE7TWNURU83c2JSTVBjVE9hY2MrODU1enZmL1NhV05YU0hkWFl1SXdsWHJLaGNXUlB5VGxIYjBTMXozRXRzTGFVTCYjeEE7TCtCbFZqYmt0V0xIcWNhY0JrQ25YNC9LSHI5NmdPWnAzRmMrOUdOVmRjQzJMTWJSZS9LMlZhdGI3MytncmYzQiYjeEE7N1E5MTdIajRrZDJQOXc4K2ZlREkwWW5KWTRRbWptZXlMQmYwbWpuRFdLcXQ4OGpOM2pHL3VpTk44ODZFK0phYiYjeEE7akhvMWd6ak9oZnFHeGpWcjE2MXYyc0Fsam5rRlg4RXIrVXBleGF0NXpZV05telp2MmFwc3U2K0ZyK0tyZVIzMyYjeEE7OEhyZXpEZnl6WHdMVjBJeDRsQkROMmxRc3d6TERtU3NPQTB5blJrMGxMVXB5Y1FNR3NtUXBLa25kSTB3TVc0ZyYjeEE7VGhnVlk4V0lsazdhVnM2TTczRVRKeHdyWjJzMFFFK3lGaWcvUzUxZG51NmRQVUcvZW5UZlFOaXZGZytxV2FMUiYjeEE7b1U1RkxKQVJyMTE4ZEZmdll4T2xNVXlTb2FHU1NaMnhjc0pjYjEvSXJ4NHF6aXRYTEhxZWVQS3BjVUdBdzJ6ZCYjeEE7VEhMNXNDamdHeWp5UEpKalJPQlZpenZ6dmoxdVhzbFoydXNaMnJkLytJNHZ3UGlZc0dJNVJoM2V3RGZ3eHFpOCYjeEE7R0k1YldpNURUVlpFTU5uVm1XV1JBckdacmhsMHBpYWNjNmpBbmlaSk9pbE1GNnNUS1JSWm0xRmFSU1N1SkN4YiYjeEE7dkNaVGl0RzdNd29rNHpqNVRFeWN6QkNXY3Y2LzV3YnZ0VGVaWTRuZVNFRTNzd0twcVpVYUpYS0d3aXlGNWJOVSYjeEE7aWV1MjRNWElDNE5vdGk2d0tscUsyRVJqUXAwMXJuQU8rZy9QanZBMXM0ZjRXdDQwNmxlSEJNQmxOUkQwakk2RiYjeEE7eG9XdjZxZW9JQ1l4WkpDa0kzeS9HS3lsdjYxMGhiTE0xL0gxb3lPV1NUUkxNQjJPbEN2TWhmdUVHMzFHTURtbyYjeEE7YTY0d2lKMmZpN3JCbUJhVkcrNGlPRjdpZkM3ZWQ4OTRTLzlBcWRkaTBwUFNYWTB6WFNEd1hiNWEyUjYvL2gzZiYjeEE7SkVxbURkRjJVQWh2THQzbnFzcmMyVFBVcFlnRnZOYTkyMmYzRC9PdHBWdHNtSjVXd2luQ0N2a1pwVVBKVDA5SCYjeEE7dTBXQnFSTlJ1ZkdPUXY1RlBEOFY3WU1xcUlkbThFSTdkTU11R0lhRGNBUlVPQUV6OEJ5OEJPZmdWWGdMM29aMyYjeEE7NEYxNEh6NkVqK0FpZkFLZndtVzRDdC9BdC9BOUxNQVBzQWpMOEJOY2g1dHdDMzZEUCtBMnFrWjFTRUhiVVEvYSYjeEE7alh6SWo0Sm9ESTJqWTBoSE5qcUZadEJwOUFJNmc4NmhWOUI1OUJyNkFIMk12a0JYMEFLNmdYNUd2NktiMGtYcCYjeEE7YytsTDZaTDBsWFJGK2xwYWtLNUp2MGkzcE4rbFA2Vy9wTnZTMzdnQ1YyTVpOK0ltM0lyYmNBY2V3SHZ4Qk5adyYjeEE7Q21keEhoY3d4OC9qRi9GWi9ESStqMmZ4UEg0RHY0ay93NWZ3dFJMYkVpci9wU2ZoUHcrKzhROGt4WmEwPC9leGlmOlVzZXJDb21tZW50PgogICAgICAgICA8ZXhpZjpQaXhlbFlEaW1lbnNpb24+NzQ8L2V4aWY6UGl4ZWxZRGltZW5zaW9uPgogICAgICA8L3JkZjpEZXNjcmlwdGlvbj4KICAgPC9yZGY6UkRGPgo8L3g6eG1wbWV0YT4Kr2v84wAAEtNJREFUeAHtnXuUFMUVh0eRCIi8RCQq0ijCiiYggkKMoTESiEJ4JD7jYyCJGsk5QHLUcIyykpOIjxxBNHrUsEPU+DyiURDksSOcKI8YwCj4ZBuVKBEJRFAQcEPOvZfd7u3qrp7pma6Z+e0fc7vuvVV1+6upntrq6upUCn8gAAIgAAIgAAIgEEKgGdlbtSI5+jySVVUkN9SR3LePZFKfpseXFBfUCwIgAAKmEjD9um16fKa2a+q2KRRafb1b3lBtRsimx2cGJUQBAiAAAuYQMP26bXp85rSkRHIwHfS0ReGWPbu600mlTI8vKS6oFwRAAARMJWD6ddv0+MxrVx4wdFBE1sFSGIqsNj2+IuNAdSAAAiBgPAHTr9umx2deA/OAwbzAEFEQgdMHkPUkXmsS5AsbCIAACIAACORPAAOG/BkWsYQhNlX20iskl75A8pQ+JPEJAiAAAiAAAoUhgAFDYbjGXOrZNhX4bC3JFiRSHS06WDyHJGYcGAwECIAACIBAzAQwYIgZaLzFDbKpvOd4oNBSUXwniwyLecahB25VKEhBDQIgAAIgkBsBDBhy41bgXGfZVMFcHijwNhmhtX7dIpclPHA4gdOhGeEAAiAAAiAAAoEEMGAIxFNs47d4MeM8HigcpgjgoQwZ5mf9HY6xSL+Ey7E47e8NLQiAAAiAAAiEEcCAIYxQUexn8EDhBV7M2NpTaz2nJ99MB5ePJTn8HJIPZEh6P4+zSCMDhy7Hej2QBgEQAAEQAAEdAhgw6FAqmE9/Higs4IFCG09NX3L6Mh4gTKt2O8iW3VeyfQoPKNxeqVQ3izRLlpE8GgMHAoFPEAABEAABTQIYMGiCitetLz8G+eKjVG5bT/HbOT1sMB08kmFFiJhaTQ7jeACx1+Pf3SKFDBw6d/Y4IAkCIAACIAACvgQwYPDFUihlHx4oLOTHINtZ7po+cCj97VNJ1mZJRv2syVCOEaNJ7vAU0NMixWKe2Tiyo8cBSRAAARAAARBwEcCAwYWj0In5PFDwbrm91qGaB5xF8vU18UQy/xkqx+YByGbHXW4vi9I1T7r1SIEACIAACICAmwAGDG4eBU7dMcNdwcIspc/qTfJfH7rtcaVe5QHIQL7F8bZDJe/iCmbeHFdNKAcEQAAEQKA8CRxSnqdl6lndMZ0iW7ac5D9eJblnT3EirnOonoH9SR7FtyLWv1mc+lELCIAACIBAqRLAgCGRllvBA4ZEKt9f6dYtVLPIpOJAvSAAAiAAAqVCALckSqWlECcIgAAIgAAIJEgAA4YE4aNqEAABEAABECgVAhgwlEpLIU4QAAEQAAEQSJAABgwJwkfVIAACIAACIFAqBLDoMdaWataMiutxIsnj+TXT7/FTCG+9Rfp6eTlErLWjMBAAgWIQQD8vBmXUYR4BDBjyapOjOlP2abeQvDBNsiWJJp+fOqRanCV51SSS27aRLPbn8RbVOGIUyZbtSL7wDMm1a0jiEwQqmQD6eSW3Ps69CYFl/Bpk+c9X5POsb5KhyArT4juXf2C38UyB8PLK3SH21cy32Fszn2NTA+5QxLeL9SfzDEmRmxvVgYARBNDP82sG067b3rMxPT5vvMmnsYYhUhsMscn9ad7iuS3n/orl76vpoHs3kq14BufPGUp7P/vYpHlpFcnmzb0ehUlnaqjcwxTFH8r6wcMUDlCDQBkTQD8v48bFqeVBAAMGLXhd+HXQT/GMgPygbnMo+7m85fINvMXye6yX108//mxwNSdZZB9zXrBfvlaZMTiG6wsrb1+YA+wgUEYE0M/LqDFxKgUggAGDFtQHHiK3Nh7va3iAsCDrMXiSLTxpVXLwSJUlHv2giDMGq5bHUy9KAYFSIIB+XgqthBiTI4ABQyD74bxWYajtdnsmQ+lHWbqtTVNVfZrq/DRdLD9tfLrv8Euuwkrczg6r+VZJmD/sIFDKBNDPS7n1EHvxCGDAEMj6pglu8w5OXj3ZrQ9LnT4ozIPsux09v1y9Btl6OZdlyU9uqejlghcIlCYB9PPSbDdEXWwCGDD4Eh84gNT9bbe5JkPpzR+79apUG76H4Z2hUPm/66gs+emrqih/Z0uvnNqQNRd6pcALBMwmgH5udvsgOtMIYMDg2yJjr/JVp+6+1V+v0o4cQ5YWKgeP/u9rPYqYkvawaAVls9H84Q0CpUgA/bwUWw0xJ0cAGze52B/MA6iRtkudWp2l9Nu8Y6Pbqk5deoXa1tiykxNzFzXWxndsa65dkKc+1rwWX90oCQRMI4B+Ti2Cfm7aN9Mdj+woOnQE6b/Hi+JPsyjdiWV7Sqa2snQcOqgTyf+IzplP+nci/o5Rrv9/YsDQwGL/UVUPSkpDiPHJl+RITx7Nj2HKBklhuZ7IkMdOWSQRliGiXXvtgkMFfyUbS0SsB+4gUAoE0M+pldDPzfy2yq2yex+l+HpbenEeyW49Ff7T7iQHearvrhmUnv8sSdl4kFJ+nxgwuKh8xj/Yu1n7JcvZD7rcQhOX/IhcdO/41MwOLTInB6xdyAkbMpU5AfTzMm/gEju99u0o4Nv5B31cmtIHec5DZoAXZcmwie2dWfaz6eAEixUeIeUNs8kgUm5BX3A+6T/Z4snoTZq+RWax4zuUd2bKdefF1+qIsIzYVHID+x0kLeltmDzTV0/Ui0PiO1Xz8c88wypadumIL9ZSlZuY9xf1lIaMxmEnc/uQOc6oKVpTFqQi9POCYD1QaLGv2wcq1jxIOj657i+opYDlOixSrlcXp8neQnMx3BEdyf9B7p9SXph8n/u1asBBpe7/TBrcgUAUB6bHJ2H35h/csIYR+9QpkrMw8jHNL8xW/qLIvd3CRFP8UkePojqFN2S8PL6qp/IO9+5oVvymLmqN6Od6uE2/bicd3+Rq4ui9Li2sJX1c7xi6NE3lqd4d5K1/Df8etGxF+Ro+defMG3LgKIDA+bwoJcDFZXrocVcy9oTu2oWlDlVdbvc0N30cO1IU2IjAZ3z8xeeNlBVwiH5eAY1cwFPsP4AK9/7D+I5D+h/wKwJCbw1oxvhwhhyvm6SXQdZM3Hit1x9rGLxE8kqPSetlX5Elv9xXqwbXE3XtQpYXvQSXWnrWlcsp5iGDSX6TZ4DatCu9czEhYlkLu9mhaJYx3717TYiueDGgnxePdTnWdOFQOivvz+/cDOllxi7ugfj9d1P54yeQ7GWRVH1emSbLVN5OYNcu9kx6akYVsOhNj++kKorUO7WjSl83Uc6sMDLq2oU+/ENamGhQKgiUBwH082jtaPp1O6n4XuZbDqrfB7lFfFqBrssXjKJ2VNXv1Y9h/1QKtySi9QCF9+iLFAaF+rn5CkNMat19F7Y6VOHatTFVjGJAoIwJoJ+XceMW4dRkkW1fO7iy9hbZr+OZgGDv6NaVa6Ll6dlH/DFgEBJ5ybMH6WWXrZ/Xv6nnn6uX9tqFLNUgI8pc60M+EKgEAujnldDKhTvHI3mjBH4IL7SiY61Ql5wcNm6kbLpLj6yuUg0GDEIiJ3kI34Q6w9bLPjer55erV0++NaL7zogsZhZyRY18FUQA/byCGruAp/rhh1T4JkevEvkHU89b30v+QdylGUfDAAcDBn3KPp69TyFlax+bn+rlAi8utAf41arW1WbVNlhAAASIAPo5vglxErhjBpVWryj0U4cMt7Ofwi1ntezT0MHSK2IDz0hga2g9XkqvqgP3dpQuLsOKiPeOXJk1ErbmrRH5Qv4TMwwaVOFS6QTQzyv9GxDv+U+fTuW9zE8Zncn/6DkO6efOI/mlbDVMydg+e/E/uroFvu2Ip/e5DtFDahE4qp2WW+oTh/w2stTLFd3LtvXyLM2Sn0xN6eWCFwhUJgH088ps90KftTz2LbLQ9Un5P7xCjoLlHjYvWyR+uCUhJHKSndrqZXvf0fPL1Svq2oVazCzkihr5KpAA+nkFNnoZnnIH3jL6p2m9k3ssQ36beO0FHqvU46b00t2v5hNlCfEYhg2LVo68bCRaLniDQGUSQD+vzHYvt7OeOJ7O6LCQE5OXL07jDZsa3DHD0MAih6O6A4tBgjPLDnnBXtGt8lzvrzSf193iUB2vY4YhOmzkqFgC6OcV2/RlceLy7pPrq/VO55eTyG9dk8f/MWDQI6jw2uAoDB51J086ruTM+6ikLpZeiVi7oMcJXiDQmAD6eWMaOC4VAvJ2y0fmUMRfCwk8kyGHP/KizKbuGDA0ZRJBs4afegjbAKO3TYV25HtIEarwdb1mIql/lvY1K5VYu6BEAwMIKAmgnyvRwGAgAXltduZeCu5kKzjIGRmyjxsX7Ic1DGF8Quz/2UYO91cHOzZn8+WXBvuprM2akeW3U0jOvFPlGazH2oVgPrCCgB8B9HM/KtCZSmDaTRTZhengCH/Ntx4mjiU/7afmknoJR/DpNFhNj++YYynWT+rc4KUBRH5ZT/YRoxrOLejoeIusS2tJSjlR5b85Lhl5BtUJGwiAgD8B9HN/Liqt6ddt0+NTcVXpb5lCFtXvwx7+/bkirSohTI99GMIIadnlsZPvjib3JXzP6AjLnV1mGp5m+4os2V9hKft0nG6T/myW3jtHz2XJPoLtlFJ/vpQlm3yR1J6wgAAIqAign6vIQJ8kgdt4oHBttX8U8pLBi3km4cWsv5+21vSRlunxeUHLzMBfasjyFY/s5Ac7qtzO+S9PU3nDeYZCt5zxvObBGyfSIAACuRNAPw9mZ/p12/T4gummUn/ggYLqd2BNHZXQzQorSdeOGQZdUpH8ZFX1JTyiu/Fmyt6vD8mTe5PsZZGUt5JtpWTqA4cOljxL8vlFJHfuIHlvDUndz3nP6HrCDwRAQJcA+rkuKfjFSWA6X/8npP1LfSJD+rG878LnYavy/YtRa00faZken5psYSwbeeSoGlmKflVtYepHqSAAAoUnUOr93PTrtunxyTdM1p7N5IGCXN9Fygz2DdWSIz958xTKP59/P87jGW08JZEf16Ln7sszFMdZelU/wTMUet7wAgEQMIEA+rkJrZB8DDJQuGcWxfKLtDumLzh5Aa+d+121255rSp6uGGpTCYN4RhwDhohEBeBjNZRxJY/AnuL0uQdGYhEL1nSfNEHPke9cpDIP6/nDCwRAoIEA+nkDCxwVn4AMFO7jgcLP0+4YNjuUtgeSfCqmW85t2lB5PSyS8rluoxyxNH1qJun4plQTKJkCUkmZGurHryv1YM45eSw/timPZarqF/3UKTlXhYwgULEE0M/jbfqkr9thZ2NafDJQeID/AZXrucj1dXRGlhV2ZrnZR/M/vFKfyNO9v2emgfOeblLxncq3APbWU0QCMEz+ptp7BvmlVV8gbxyyD0TbdvnVh9wgUEkE0M8L09pJXbd1z8aU+A7m5+ZnKQYKsg9P+wJd11u3JmKLa0l6f1cO55mHVApPSQR+t4byiIs3Wgz0bWyM6t84b+Nj26bUT9IkVZ/y3vLzx5LH9m0qT+hBAAS8BNDPvUSQLgYBGSjU/Ilqk8fmvXV3tUizfLXXopc+iN3kd0n2Azqc9W0tOhA/Vh94Wu+z/4oGAwYh4Su/0dVXHaqUjZJCHRUOLVuRQWYWvA3pzXY1DxSw9bOXDNIgEE4A/TycETziIyBb/c9+kMr8cTq47OOsYHuhrG843pK9Wwh67RWebhHx/BdmKcOyZREzsrvcw5p1Dym6W8Hl3FpN9lmZYD9YQQAE1ATQz9VsYImfwCzNgUL8NUcrcV3W648Bg5eIK/23ta5kk8Qu1tyVoYPz+fGWffuauAYqZKAwnVfFXpQOdE89nSH75KnBfrCCAAiEE0A/D2cEj/wJHNmRylDdesi/hnhLaPJ0BNYwBANekvW3r3NI37eK5O7d/n5hWlmcOHsOeY60g3PMz5L9Mt7BSxanBOeCFQRAIIgA+nkQHdjiIrB3L5Uk7wz6WlwFF6icdW8qCjZltagivFRS8cl//gsVq0fnsb4HDxxU8Yte1iZcM5E0YTu5ydMZk6vJX+KR8iBBAATyJyD9Cv08f5aNS0jqut04hqBj0+MLij0ZGxY9BnKX/+BHjSC3Bc+RPNMm+X2WQ9ZTemWW5AqWzS1Kn8iyH0vvWyzJq+GzNkvH108muWp5gw1HIAAC8RJAP4+XJ0orcwKmj7RMiU9uIdxTQ1+InfUk5YITVX7B+f/KMxXn2GX+RcPpgUAJEEA/j6eRTLluq87G9PhUcSenxwxDJPayv8F4fozxxmsp+8jhJLt3JdnNItmK5ccOpTdtJPnGGpILFpGUt1BSCp8gAAJJEkA/T5I+6jaXAA8YZOMfb6B7HK8mmbSp8W3dQjxqMslwQa0gAAKFJ4B+nhtjU6/bcjamxydxmiP5scqPHP+QPvJXF137keNfpSnx+UcHLQiAAAhULoGPHP9zN+W6bXp8/vQM0Mr7ruvqKJh3Wdq2AcHtD8H0+MyghChAAARAwBwCpl+3TY/PnJaUSP4HyiARXCXX284AAAAASUVORK5CYII=;" parent="1" vertex="1">
+          <mxGeometry x="518" y="660" width="41.49" height="11.72" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-82" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABdxlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFTAAAAJCgAgAEAAAAAQAAADygAwAEAAAAAQAAADgAAAAAQVNDSUkAAABBQUFFMzNqYWJWTk5iQnRGRkg2ems2Wkoyc1NicEQ5cCtyY2xEcVF0TFVrYmFIRDVpZE0wYldqai9xeWRPSWtUCk0xNlA3YTNYdTJaM25OYTFJczBCdFFqQkFYRW85QURFRVlJaUJBWFJDaUVCUXJRRkZSVEFpUUFKQWVxcEY4U0IKQzBJVkVyTzJWUXJxakZiNzNwdDU4NzczelRleHJLRTdyTHQ3Q1VtNFpsbnQ4b2F3ZDRiYWptNlo0MTVpYXlsZAplRUV2czdKaHJ4VTdRVFhtdEFBNjgxcFU5Z1RVUXpSUDQvN3FwdS9xNm9PMlpUR08zcFczckZqWmVlOTlYVnUzCmJiOS94ODRISHR6N1NQL2dFNGVPSForWW5DWTBjU0tUWmJtUTE4d1p4bUpqazBkdTk0NEYxSjFwbW5jbXhMOWEKWk5TckdjUnhMalMzdEs1YXZXWnQyem91Y2N4citESmV5NWZ6T2w3UEd5NnMzN0J4MDJabHl6MGRmQVZmeVp1NApoemZ6ZHI2ZWIrU2J1QktPRVljYXVrbERtbVZZZGpCanhXbUk2Y3lnNGF4TlNTWm0wS2tNU1pwNlF0Y0lFKzBHCjQ0UlIwVmFNYU9ta2JlWE0rRDQzY2NLeGNyWkdnL1FVNjREcVdPenU4ZXphM1JzS3FNY1BERVFDYW5tam1pVWEKSGVwV3hBUVo4Y2JTUTN2NkhwNm90R0dTREExWFRPcU1WUk9LZmI1d1FEMVM3bGV1S1hrZWZlenhjVUdBdzJ6ZApUSEw1cURqQVAxRG1lU1RIaU1DcmxsZm0vZnZjdklxenVOOHpkT0RnOEcxZmdQRXpZY1Z5akRxOGhhL2pyVkc1CkZJbGJXaTVEVFZaR01OblRuV1ZUQldJelhUUG9iRU1rNTFDQlBVMlNkRktZTGxabnFsQm1iVmJwRkpHNGtyQnMKOFpsTUtVZnZ6Q2lRak9Qa016R3hNME5ZeXZuL21odTgyOXBramlYNnBncTZtUlZJVGExU0tKRXpGR1lwTEorbApTbHkzQlM5R1hoaEVzM1dCVmRGU3hDWWFFK3BzY0lWek9IQjBib1N2bWp2Q1YvTzIwWUE2SkFBdXFjR1FaM1FzClBDNThWVDlOQlRHSklZTWtIZUVIUkdNZC9WMlZLNVJsdm9hdkhSMnhUS0paZ3VuSVZQV0VZc1FuM09pVGdzbEIKWFhPRlFleDhNZW9HWTFwVWJybUQ0SGlGODJMY2Q5ZDRSLzlBcFZZcDZVbnByc2FaTGhENHIxeXJUYjU0UGM0MwppQ1BUaGlnN0tJUlhUUHRjVlptN2U0ZDZGREdCTjdwMys5VEJZYjdadmNWd2hLVW9JOVBiUk5MTXlhamNlbHNWCi82S2NuNG42b0E2YW9SMjhzQlYyd1I0WWhzTndERlE0Q2JQd05Ed0g1K0FWZUJQZWdyZmhIYmdJNzhNSGNCaysKaEkvZ0NseURMK0U2ZkEwTDhDMlVZQW0raHgvaEJ0eUUzK0FQdUlYcVVSTlMwSGJVaS9ZaVB3cWdFQnBENDJnYQo2Y2hHcDlFc09vT2VRYytqYytobGRCNjlpdDVEbDlBbjZDcGFRRCtobjlHdjZJWjBXZnBZK2xUNlRQcGN1aXA5CklTMUlQMGkvU0RlbDM2VS9wYitrVzlMZnVBYlhZeG0zNGpiY2lidndEanlBOStNSnJPRVV6dUk4TG1DT3orSm4KOFF2NEpYd2V6K0Y1L0RwK0ExL0VsL0JYRllZbFZIMlpwK0EvQTMvekQzcVhrcnc9NsYx2QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAACNtpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+MTwvdGlmZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0PC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xNDQ8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NjA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5BQUFFMzNqYWJWTk5iQnRGRkg2ems2Wkoyc1NicEQ5cCtyY2xEcVF0TFVrYmFIRDVpZE0wYldqai9xeWRPSWtUJiN4QTtNMTZQN2EzWHUyWjNuTmExSXMwQnRRakJBWEVvOUFERUVZSWlCQVhSQ2lFQlFyUUZGUlRBaVFBSkFlcXBGOFNCJiN4QTtDMElWRXJPMlZRcnFqRmI3M3B0NTg3NzN6VGV4cktFN3JMdDdDVW00WmxudDhvYXdkNGJham02WjQxNWlheWxkJiN4QTtlRUV2czdKaHJ4VTdRVFhtdEFBNjgxcFU5Z1RVUXpSUDQvN3FwdS9xNm9PMlpUR08zcFczckZqWmVlOTlYVnUzJiN4QTtiYjkveDg0SEh0ejdTUC9nRTRlT0haK1luQ1kwY1NLVFpibVExOHdaeG1KamswZHU5NDRGMUoxcG1uY214TDlhJiN4QTtaTlNyR2NSeExqUzN0SzVhdldadDJ6b3VjY3hyK0RKZXk1ZnpPbDdQR3k2czM3QngwMlpseXowZGZBVmZ5WnU0JiN4QTtoemZ6ZHI2ZWIrU2J1QktPRVljYXVrbERtbVZZZGpCanhXbUk2Y3lnNGF4TlNTWm0wS2tNU1pwNlF0Y0lFKzBHJiN4QTs0NFJSMFZhTWFPbWtiZVhNK0Q0M2NjS3hjclpHZy9RVTY0RHFXT3p1OGV6YTNSc0txTWNQREVRQ2FubWptaVVhJiN4QTtIZXBXeEFRWjhjYlNRM3Y2SHA2b3RHR1NEQTFYVE9xTVZST0tmYjV3UUQxUzdsZXVLWGtlZmV6eGNVR0F3MnpkJiN4QTtUSEw1cURqQVAxRG1lU1RIaU1DcmxsZm0vZnZjdklxenVOOHpkT0RnOEcxZmdQRXpZY1Z5akRxOGhhL2pyVkc1JiN4QTtGSWxiV2k1RFRWWkdNTm5UbldWVEJXSXpYVFBvYkVNazUxQ0JQVTJTZEZLWUxsWm5xbEJtYlZicEZKRzRrckJzJiN4QTs4WmxNS1VmdnpDaVFqT1BrTXpHeE0wTll5dm4vbWh1ODI5cGtqaVg2cGdxNm1SVklUYTFTS0pFekZHWXBMSitsJiN4QTtTbHkzQlM5R1hoaEVzM1dCVmRGU3hDWWFFK3BzY0lWek9IQjBib1N2bWp2Q1YvTzIwWUE2SkFBdXFjR1FaM1FzJiN4QTtQQzU4VlQ5TkJUR0pJWU1rSGVFSFJHTWQvVjJWSzVSbHZvYXZIUjJ4VEtKWmd1bklWUFdFWXNRbjNPaVRnc2xCJiN4QTtYWE9GUWV4OE1lb0dZMXBVYnJtRDRIaUY4MkxjZDlkNFIvOUFwVllwNlVucHJzYVpMaEQ0cjF5clRiNTRQYzQzJiN4QTtpQ1BUaGlnN0tJUlhUUHRjVlptN2U0ZDZGREdCTjdwMys5VEJZYjdadmNWd2hLVW9JOVBiUk5MTXlhamNlbHNWJiN4QTsvNktjbjRuNm9BNmFvUjI4c0JWMndSNFloc053REZRNENiUHdORHdINStBVmVCUGVncmZoSGJnSTc4TUhjQmsrJiN4QTtoSS9nQ2x5REwrRTZmQTBMOEMyVVlBbStoeC9oQnR5RTMrQVB1SVhxVVJOUzBIYlVpL1lpUHdxZ0VCcEQ0MmdhJiN4QTs2Y2hHcDlFc09vT2VRYytqYytobGRCNjlpdDVEbDlBbjZD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;" parent="1" vertex="1">
+          <mxGeometry x="328" y="619" width="12.93" height="12.07" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-86" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABeRlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFVAAAAJCgAgAEAAAAAQAAAHSgAwAEAAAAAQAAAEAAAAAAQVNDSUkAAABBQUFFNjNqYWJWTnJiQlJWRkQ1M2JxRVBhSGZhOGlqbE5kaXRGaERjUXBXNitPaVdzbENoeTJOMnU5dDJ5M3AzCjl1N3VzTE16Njh6ZHdySnBjbjhZTUFaLytBc2hSRzBib3hqakswcU04UkVpb0RHbTBXMGpKa1FOdi9oai9PRWYKWTRpSmR4OUJOTXpOWk00NTk1NXp2dlBkYitJNVEzZVl4N09JSkZ5M1pHbDlVOFE5UlcxSHQ4d3hON0cxdEM2OApvSnRadVlqYmloK25HblBhQUoxK1BTYTdBdW9CV3FBSlgrM1FEdzJOUWR1eUdFZnZ5WnVXTGU5KzhLR2V6VnUyClByeHQreU9QN241aVlPaVpBMGVPams4Y0l6UjVQSnRqK1pEYnpCdkdRbk9MUys1MGh3UHE5Z3d0T09QaVcyc3kKNnRZTTRqaVhXdHZhVjZ4Y3RicGpEWmM0NW5WOENWL0s2M2tEYitSTmw5YXVXNzlobzdMcGdTNitqQy9uTGR6RgpXM2tuWDh2WDh3MWNpY1NKUXczZHBDSE5NaXc3bUxVU05NUjBadEJJenFZa0d6Zm9aSmFrVEQycGE0U0pjWU1KCndxZ1lLMDYwVE1xMjhtWmlUemx4M0xIeXRrYUQ5Q1RyZ3RxejRPbDE3ZGpaRndxb1IvY05SZ05xNWFDYUl4cjEKZXhTeFFFYTh1ZlRZcnY3SHg2dGptQ1JMSTFXVE91RmF3bXkvTnhKUUQxWG1sZXRLcmllZmVucE1FT0F3V3pkVApYRDRzQ3ZnR0t6eVA1QmtSZU5YS3pweHZUem12Nml6c2RmbjM3UisrNndzd1BpYXNlSjVSaDdmeE5idzlKcGVpCkNVdkxaNm5KS2dnbWVqMDVObGtrTnRNMWcwNDNSZk1PRmRnekpFVW5oRm5HNmt3V0s2eE5LOTBpa2xDU2xpMWUKa3ltVjZMMFpSWkoxbkVJMkxrNW1DVXM3Lzk4ckIrKzNONUZueWY3Sm9tN21CRkpUcXpaSzVnMkZXUW9yNUtpUwowRzNCaTFFUUJ0RnNYV0JWdERTeGljYUVPcHZLd2prWU9Ed3p3bGZNSE9JcmVjZG9RUFVMZ0l0cU1PUWFEVWZHCmhLL3FwNmdnSnVrM1NNb1Jma0FNMWpYUVU3MUNXZWFyK09yUkVjc2ttaVdZams3V0tzeEd2Y0tOUFN1WUhOSzEKc2pDSVhaaU5sWU54TFNhMzNVTndvc3I1Yk1KNzMzalh3R0MxVnlubFN1dGxqVE5kSVBCZHZWNS85bUo0QzE4bgpTbVlNMFhaSUNHODI0eTJyeXR6WjUrOVZ4QUxlWEw3YjUvWVA4NDNWVzJ5THNqUmxKQlpsUW9xQ09KMU5pd0pUCkoySnkrMTJGL0l0NGJpcm1oUVpvaFU1d3cyYllBYnRnR0E3Q0VWRGhCRXpEODNBV3pzR3I4QmE4RGUvQXUvQSsKZkFnZndXWDRCRDZGcTNBZHZvRnY0VHVZaCsraEJJdndJL3dFdCtBMi9BWi93QjNVaUZxUWdyYWlQclFiK1ZBQQpoVkFZamFGalNFYzJPb1dtMFduMEFub0puVVBuMFFYMEd2b0FmWXkrUU5mUVBMcUpma2Evb2x2U1plbHo2VXZwCml2U1ZkRTM2V3BxWGJraS9TTGVsMzZVL3BiK2tPOUxmdUE0M1lobTM0dzdjalh2d05qeUk5K0p4ck9FMHp1RUMKTG1LT3orQVg4Y3Y0Rlh3QnorQTUvQVorRTMrR3IrQWJWYllsVlB0TFQ4Si9Ibnp6SDZnbGx6cz11ijupAAAACXBIWXMAABYlAAAWJQFJUiTwAAAI5GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj4xPC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xNDQ8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjE0NDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4yPC90aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xMTY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5BQUFFNjNqYWJWTnJiQlJWRkQ1M2JxRVBhSGZhOGlqbE5kaXRGaERjUXBXNitPaVdzbENoeTJOMnU5dDJ5M3AzJiN4QTs5dTd1c0xNejY4emR3ckpwY244WU1BWi8rQXNoUkcwYm94ampLMHFNOFJFaW9ER20wVzBqSmtRTnYvaGovT0VmJiN4QTtZNGlKZHg5Qk5Nek5aTTQ1OTU1enZ2UGRiK0k1UTNlWXg3T0lKRnkzWkdsOVU4UTlSVzFIdDh3eE43RzF0QzY4JiN4QTtvSnRadVlqYmloK25HblBhQUoxK1BTYTdBdW9CV3FBSlgrM1FEdzJOUWR1eUdFZnZ5WnVXTGU5KzhLR2V6VnUyJiN4QTtQcnh0K3lPUDduNWlZT2laQTBlT2prOGNJelI1UEp0aitaRGJ6QnZHUW5PTFMrNTBod1BxOWd3dE9PUGlXMnN5JiN4QTs2dFlNNGppWFd0dmFWNnhjdGJwakRaYzQ1blY4Q1YvSzYza0RiK1JObDlhdVc3OWhvN0xwZ1M2K2pDL25MZHpGJiN4QTtXM2tuWDh2WDh3MWNpY1NKUXczZHBDSE5NaXc3bUxVU05NUjBadEJJenFZa0d6Zm9aSmFrVEQycGE0U0pjWU1KJiN4QTt3cWdZSzA2MFRNcTI4bVppVHpseDNMSHl0a2FEOUNUcmd0cXo0T2wxN2RqWkZ3cW9SL2NOUmdOcTVhQ2FJeHIxJiN4QTtleFN4UUVhOHVmVFlydjdIeDZ0am1DUkxJMVdUT3VGYXdteS9OeEpRRDFYbWxldEtyaWVmZW5wTUVPQXdXemRUJiN4QTtYRDRzQ3ZnR0t6eVA1QmtSZU5YS3pweHZUem12Nml6c2RmbjM3UisrNndzd1BpYXNlSjVSaDdmeE5idzlKcGVpJiN4QTtDVXZMWjZuSktnZ21lajA1Tmxra050TTFnMDQzUmZNT0ZkZ3pKRVVuaEZuRzZrd1dLNnhOSzkwaWtsQ1NsaTFlJiN4QTtreW1WNkwwWlJaSjFuRUkyTGs1bUNVczcvOThyQisrM041Rm55ZjdKb203bUJGSlRxelpLNWcyRldRb3I1S2lTJiN4QTswRzNCaTFFUUJ0RnNYV0JWdERTeGljYUVPcHZLd2prWU9Ed3p3bGZNSE9JcmVjZG9RUFVMZ0l0cU1PUWFEVWZHJiN4QTtoSy9xcDZnZ0p1azNTTW9SZmtBTTFqWFFVNzFDV2VhcitPclJFY3NrbWlXWWprN1dLc3hHdmNLTlBTdVlITksxJiN4QTtzakNJWFppTmxZTnhMU2EzM1VOd29zcjViTUo3MzNqWHdHQzFWeW5sU3V0bGpUTmRJUEJkdlY1LzltSjRDMThuJiN4QTtTbVlNMFhaSUNHODI0eTJyeXR6WjUrOVZ4QUxlWEw3YjUvWVA4NDNWVzJ5THNqUmxKQlpsUW9xQ09KMU5pd0pUJiN4QTtKMkp5KzEyRi9JdDRiaXJtaFFab2hVNXd3MmJZQWJ0Z0dBN0NFVkRoQkV6RDgzQVd6c0dyOEJhOERlL0F1L0ErJiN4QTtmQWdmd1dYNEJENkZxM0Fkdm9GdjRUdVloKytoQkl2d0kvd0V0K0EyL0FaL3dCM1VpRnFRZ3JhaVByUWIrVkFBJiN4QTtoVkFZamFGalNFYzJPb1dtMFduMEFub0pu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;" parent="1" vertex="1">
+          <mxGeometry x="216" y="619.1" width="24.82" height="13.7" as="geometry" />
+        </mxCell>
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-89" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABdRlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFRAAAAJCgAgAEAAAAAQAAACKgAwAEAAAAAQAAADAAAAAAQVNDSUkAAABBQUFFMkhqYWJWTmRiQlJWRkQ1M2JvRzIwTzYwNWFlVXY4RnV0WWpnRnFyVTRrKzNsSVVLWFNpejIyNzNoL1h1CjdOM3QwTm1aZGVadVlXbWEzQWNEeHNpRFR3Z1BhTnNZclRINEV5WEdSSTJ4SURHbTBXMmpKa1lOVDd3WUgzd3gKaHBoNFozZURhSmlieVp4ejdqbjNmT2U3MzZUeWh1NHduMjhaU2JobXhjcFY5Ukh2SkxVZDNUTEh2TVRXeG5YaApoYnpNeWtlOFZ1b1UxWmpURE9qYzYwblpFMVNQMENKTis2dEozOVhXaFd6TFloeTlLMjlmdmFiandZYzZkenk4Cjg1RmR1eDk5YlArVGZRUFBIaGsrRVkyZEpEUnpLcGRuaGJEWExCakdVa09qUjI3empnYlYzUk8wNkVURnQ5cGsKeEtzWnhISG1tNXBiMXE1YnY2RjFJNWM0NWpWOEJWL0pWL0ZhWHNmcjV6ZHQzckoxbTdMOWdYYSttcS9oamR6RAptM2diMzhTMzhLMWNpYVNJUXczZHBHSE5NaXc3bExQU05NeDBadEJJM3FZa2x6Sm9Ja2V5cHA3Uk5jTEV1S0UwCllWU01sU0xhUk5hMkNtYjZnRnNZZGF5Q3JkRVFQY1Bhb2ZvcytibzhlL1oyaDRQcWlVUDk4YUJhVGxUelJLTUIKbnlJV3lJZzNsQjdmMS9ORXRES0dTWEkwVWpHcE0xb3RtTzNwalFUVlkrVjU1WnFTNTZtbm54a1RCRGpNMXMwcwpsNCtMQS96OVpaNkhDb3dJdkdwNVo4NS93SzJyT0VzSFBZRkRod2Z2K2dLTW53a3JWV0RVNGMxOEkyOUp5cVY0CjJ0SUtPV3F5TW9KWWx5L1BFbFBFWnJwbTBPbjZlTUdoQXZzRXlkS1lNRjJzVG1LcXpOcTAwaUVpYVNWajJlSTEKbVZLTzNsc3hSWEtPVTh5bFJHYU9zSEhuLzN0dThINTdzUUxMOUNTbWRETXZrSnBhcFZHbVlDak1VbGd4VDVXMApiZ3RlaktJd2lHYnJBcXVpalJPYmFFeW9zOTRWenRIZzhaa2h2bmJtR0YvSFcwZUNha0FBWEZaRFljL0lhR1JNCitLcCtsZ3BpTWdHRFpCM2hCOFZnN1gyZGxTdVVaYjZlYnhnWnNreWlXWUxwZUtKNndteThWN2pKNXdTVEE3cm0KQ29QWXhkbWtHMHhwU2JuNUhvTFRGYzVuMDczM2piZjM5VmQ2bGJLZWNkM1ZPTk1GQXYvQ0RjLzVDOTRZM3l5TwpuREJFMndFaHZObUpYbGRWNXQ3dVFKY2lGdkFHOTI2ZlB6ekl0N20zT0Z3VTJaT25rM0xMWFRuOEMyOXVNdGtMCnRkQUViZUNGSGJBSDlzRWdISVZoVU9FMFRNTUw4REpjaEN2d0Zyd043OEJWZUE4K2dBL2hHbndNbjhBQzNJQ2IKOERWOEE0dndMWlJnR2I2SEgrRVczSWJmNEErNGcrcFFJMUxRVHRTTjlpTS9DcUl3R2tWajZDVFNrWTNPb21sMApEcjJJTHFDTDZCSzZqRjVENzZPUDBHZm9PbHBFUDZHZjBhL29sblJOK2xUNlhQcEMrbEs2TG4wbExVby9TTDlJCnQ2WGZwVCtsdjZRNzB0KzRCdGRoR2JmZ1Z0eUJPL0V1M0k4UDRpalc4RGpPNHlLZXdoeWZ4eS9oVi9DcitES2UKd1hQNERmd21uc2RYOFVLRldnbFZmOGt6OEo4SDMvd0g4SE9QakE9PS1PM0UAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAjTaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+QUFBRTJIamFiVk5kYkJSVkZENTNib0cyME82MDVhZVV2OEZ1dFlqZ0ZxclU0ayszbElVS1hTaXoyMjczaC9YdSYjeEE7N04zdDBObVpkZVp1WVdtYTNBY0R4c2lEVHdnUGFOc1lyVEg0RXlYR1JJMnhJREdtMFcyakprWU5UN3dZSDN3eCYjeEE7aHBoNFozZURhSmlieVp4ejdqbjNmT2U3MzZUeWh1NHduMjhaU2JobXhjcFY5Ukh2SkxVZDNUTEh2TVRXeG5YaCYjeEE7aGJ6TXlrZThWdW9VMVpqVERPamM2MG5aRTFTUDBDSk4rNnRKMzlYV2hXekxZaHk5SzI5ZnZhYmp3WWM2ZHp5OCYjeEE7ODVGZHV4OTliUCtUZlFQUEhoaytFWTJkSkRSektwZG5oYkRYTEJqR1VrT2pSMjd6amdiVjNSTzA2RVRGdDlwayYjeEE7eEtzWnhISG1tNXBiMXE1YnY2RjFJNWM0NWpWOEJWL0pWL0ZhWHNmcjV6ZHQzckoxbTdMOWdYYSttcS9oamR6RCYjeEE7bTNnYjM4UzM4SzFjaWFTSVF3M2RwR0hOTWl3N2xMUFNOTXgwWnRCSTNxWWtsekpvSWtleXBwN1JOY0xFdUtFMCYjeEE7WVZTTWxTTGFSTmEyQ21iNmdGc1lkYXlDcmRFUVBjUGFvZm9zK2JvOGUvWjJoNFBxaVVQOThhQmFUbFR6UktNQiYjeEE7bnlJV3lJZzNsQjdmMS9ORXRES0dTWEkwVWpHcE0xb3RtTzNwalFUVlkrVjU1WnFTNTZtbm54a1RCRGpNMXMwcyYjeEE7bDQrTEEvejlaWjZIQ293SXZHcDVaODUvd0syck9Fc0hQWUZEaHdmditnS01ud2tyVldEVTRjMThJMjlKeXFWNCYjeEE7MnRJS09XcXlNb0pZbHkvUEVsUEVacnBtME9uNmVNR2hBdnNFeWRLWU1GMnNUbUtxek5xMDBpRWlhU1ZqMmVJMSYjeEE7bVZLTzNsc3hSWEtPVTh5bFJHYU9zSEhuLzN0dThINTdzUUxMOUNTbWRETXZrSnBhcFZHbVlDak1VbGd4VDVXMCYjeEE7Ymd0ZWpLSXdpR2JyQXF1aWpST2JhRXlvczk0Vnp0SGc4Wmtodm5ibUdGL0hXMGVDYWtBQVhGWkRZYy9JYUdSTSYjeEE7K0twK2xncGlNZ0dEWkIzaEI4Vmc3WDJkbFN1VVpiNmVieGdac2t5aVdZTHBlS0o2d215OFY3ako1d1NUQTdybSYjeEE7Q29QWXhkbWtHMHhwU2JuNUhvTFRGYzVuMDczM2piZjM5VmQ2bGJLZWNkM1ZPTk1GQXYvQ0RjLzVDOTRZM3l5TyYjeEE7bkRCRTJ3RWh2Tm1KWGxkVjV0N3VRSmNpRnZBRzkyNmZQenpJdDdtM09Gd1UyWk9uazNMTFhUbjhDMjl1TXRrTCYjeEE7dGRBRWJlQ0ZIYkFIOXNFZ0hJVmhVT0UwVE1NTDhESmNoQ3Z3RnJ3Tjc4QlZlQTgrZ0EvaEdud01uOEFDM0lDYiYjeEE7OERWOEE0dndMWlJnR2I2SEgrRVczSWJmNEErNGcrcFFJMUxRVHRTTjlpTS9DcUl3R2tWajZDVFNrWTNPb21sMCYjeEE7RHIySUxxQ0w2Qks2akY1RDc2T1AwR2ZvT2xwRVA2R2YwYS9vbG5STits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;" parent="1" vertex="1">
+          <mxGeometry x="551" y="767" width="6.38" height="9" as="geometry" />
+        </mxCell>
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-1" value="MLE" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="699" y="641" width="70" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-2" value="PEM" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="699" y="677" width="70" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-4" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="696" y="646" as="sourcePoint" />
+            <mxPoint x="628" y="696" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-5" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="695" y="780" as="sourcePoint" />
+            <mxPoint x="628" y="728" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-6" value="MAP" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="699" y="714" width="70" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;curved=1;endArrow=none;endFill=0;" parent="1" source="BE7m5MwMy8wg7SoJYegb-7" target="hdwB_MQwIhiL4xS-3u5l-2" edge="1">
+          <mxGeometry relative="1" as="geometry" />
+        </mxCell>
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-7" value="gradient or non-gradient based.." style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
+          <mxGeometry x="682.5" y="567" width="103" height="60" as="geometry" />
+        </mxCell>
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-11" value="Design related" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+          <mxGeometry x="699" y="751" width="70" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="ilc09JGzDhpx_nHwKlJr-1" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://cdn.onlinewebfonts.com/svg/img_827.svg;flipV=1;" parent="1" vertex="1">
+          <mxGeometry x="437" y="632.8" width="20" height="20" as="geometry" />
+        </mxCell>
+      </root>
+    </mxGraphModel>
+  </diagram>
+</mxfile>

From a93e1f5f1d7016c59bf8f0214576aaf4cfab6c03 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 18 Jul 2023 14:48:25 +0100
Subject: [PATCH 004/210] Rename repo directory

---
 PyBOP/__init__.py                       |  0
 PyBOP/cost_functions/MLE.py             | 18 ----------------
 PyBOP/cost_functions/__init__.py        |  0
 PyBOP/models/base_model.py              | 25 ----------------------
 PyBOP/optimisation/base_optimisation.py | 28 -------------------------
 PyBOP/plotting/quick_plot.py            | 28 -------------------------
 PyBOP/simulation/base_simulation.py     | 26 -----------------------
 7 files changed, 125 deletions(-)
 delete mode 100644 PyBOP/__init__.py
 delete mode 100644 PyBOP/cost_functions/MLE.py
 delete mode 100644 PyBOP/cost_functions/__init__.py
 delete mode 100644 PyBOP/models/base_model.py
 delete mode 100644 PyBOP/optimisation/base_optimisation.py
 delete mode 100644 PyBOP/plotting/quick_plot.py
 delete mode 100644 PyBOP/simulation/base_simulation.py

diff --git a/PyBOP/__init__.py b/PyBOP/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/PyBOP/cost_functions/MLE.py b/PyBOP/cost_functions/MLE.py
deleted file mode 100644
index 48f8b48da..000000000
--- a/PyBOP/cost_functions/MLE.py
+++ /dev/null
@@ -1,18 +0,0 @@
-class CostFunction():
-    """
-    Base class for cost function definition.
-    """
-
-    def __init__():
-        """"
-
-        Init. 
-        
-        """
-
-    def MLE(self, x0, x_hat, theta):
-        """
-        
-        Function for Maximum Likelihood Estimation
-
-        """
diff --git a/PyBOP/cost_functions/__init__.py b/PyBOP/cost_functions/__init__.py
deleted file mode 100644
index e69de29bb..000000000
diff --git a/PyBOP/models/base_model.py b/PyBOP/models/base_model.py
deleted file mode 100644
index 46e314ce1..000000000
--- a/PyBOP/models/base_model.py
+++ /dev/null
@@ -1,25 +0,0 @@
-from pybamm.models.base_model import PyBaMMBaseModel
-import numpy as np
-
-class BaseModel(PyBaMMBaseModel):
-    """ 
-
-    This is a wrapper class for the PyBaMM Model class.
-    
-    """
-
-    def __init__(self):
-        """
-
-        Insert initialisation code as needed.
-
-        """
-
-        self.name = "Base Model"
-        
-
-    def update(self, k):
-        """
-        Updater
-        """
-        print(k)
\ No newline at end of file
diff --git a/PyBOP/optimisation/base_optimisation.py b/PyBOP/optimisation/base_optimisation.py
deleted file mode 100644
index a77348b2f..000000000
--- a/PyBOP/optimisation/base_optimisation.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import botorch
-import scipy
-import numpy 
-
-class BaseOptimisation():
-    """
-    
-    Base class for the optimisation methods.
-    
-    """
-
-    def __init__(self):
-
-        """
-
-        Initialise and name class.
-        
-        """
-        self.name = "Base Optimisation"
-
-
-
-    def NelderMead(self, fun, x0, options):
-        """
-        PRISM optimiser using Nelder-Mead.
-        """
-        res = scipy.optimize(fun, x0, method='nelder-mead', 
-        options={'xatol': 1e-8, 'disp': True})
\ No newline at end of file
diff --git a/PyBOP/plotting/quick_plot.py b/PyBOP/plotting/quick_plot.py
deleted file mode 100644
index f36fe2f31..000000000
--- a/PyBOP/plotting/quick_plot.py
+++ /dev/null
@@ -1,28 +0,0 @@
-import os
-import numpy
-import matplotlib
-
-class QuickPlot(item):
-    """
-    
-    Class to generate the quick plots associated with PRISM. 
-
-    Plots
-    --------------
-    Observability
-    if method == parameterisation 
-        
-        Comparison of fitting data with optimised forward model
-    
-    elseif method == optimisation
-        
-        Pareto front
-        Alternative solutions
-        Initial value compared to optimal 
-
-    """
-
-    def __init__(self):
-        self.name = "Quick Plot"
-
-
diff --git a/PyBOP/simulation/base_simulation.py b/PyBOP/simulation/base_simulation.py
deleted file mode 100644
index 0595b6577..000000000
--- a/PyBOP/simulation/base_simulation.py
+++ /dev/null
@@ -1,26 +0,0 @@
-import pybamm.simulation.Simulation as pybamm_simulation
-
-class BaseSimulation(pybamm_simulation):
-    """
-    
-    This class solves the optimisation / estimation problem. 
-
-    Parameters:
-    ================
-    pybamm_simulation: argument for PyBaMM simulation that will be updated.
-
-    """
-
-    def __init__(self):
-       """
-       Initialise and name class
-       """ 
-
-       self.name = "Base Simulation"
-
-    def Simulation(self, simulation, optimise, cost, data):
-        """
-        
-        
-
-        """
\ No newline at end of file

From 6795600404b2a73b15aecc7d8e4562192fc7ceff Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 18 Jul 2023 14:50:04 +0100
Subject: [PATCH 005/210] Repo rename / Add setup.py / Updt. __init__.py / base
 SPM class

---
 pybop/__init__.py                       | 37 +++++++++++++++++++++
 pybop/cost_functions/__init__.py        |  0
 pybop/cost_functions/mle.py             | 18 +++++++++++
 pybop/models/base_model.py              | 24 ++++++++++++++
 pybop/models/spm.py                     | 21 ++++++++++++
 pybop/optimisation/base_optimisation.py | 28 ++++++++++++++++
 pybop/plotting/quick_plot.py            | 28 ++++++++++++++++
 pybop/simulation/base_simulation.py     | 26 +++++++++++++++
 pybop/version.py                        |  1 +
 setup.py                                | 43 +++++++++++++++++++++++++
 10 files changed, 226 insertions(+)
 create mode 100644 pybop/__init__.py
 create mode 100644 pybop/cost_functions/__init__.py
 create mode 100644 pybop/cost_functions/mle.py
 create mode 100644 pybop/models/base_model.py
 create mode 100644 pybop/models/spm.py
 create mode 100644 pybop/optimisation/base_optimisation.py
 create mode 100644 pybop/plotting/quick_plot.py
 create mode 100644 pybop/simulation/base_simulation.py
 create mode 100644 pybop/version.py
 create mode 100644 setup.py

diff --git a/pybop/__init__.py b/pybop/__init__.py
new file mode 100644
index 000000000..b986ffeb0
--- /dev/null
+++ b/pybop/__init__.py
@@ -0,0 +1,37 @@
+#
+# Root of the pybop module.
+# Provides access to all shared functionality (models, solvers, etc.).
+#
+# The code in this file is adapted from pybamm
+# (see https://github.com/pybamm-team/pybamm)
+#
+
+import sys
+import os
+
+
+#
+# Version info
+#
+from pybop.version import __version__
+
+
+#
+# Constants
+#
+# Float format: a float can be converted to a 17 digit decimal and back without
+# loss of information
+FLOAT_FORMAT = "{: .17e}"
+# Absolute path to the PyBOP repo
+script_path = os.path.abspath(__file__)
+
+#
+# Model Classes
+#
+from .models.base_model import BaseModel
+from .models.spm import BaseSPM
+
+#
+# Remove any imported modules, so we don't expose them as part of pybop
+#
+del sys
\ No newline at end of file
diff --git a/pybop/cost_functions/__init__.py b/pybop/cost_functions/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/pybop/cost_functions/mle.py b/pybop/cost_functions/mle.py
new file mode 100644
index 000000000..48f8b48da
--- /dev/null
+++ b/pybop/cost_functions/mle.py
@@ -0,0 +1,18 @@
+class CostFunction():
+    """
+    Base class for cost function definition.
+    """
+
+    def __init__():
+        """"
+
+        Init. 
+        
+        """
+
+    def MLE(self, x0, x_hat, theta):
+        """
+        
+        Function for Maximum Likelihood Estimation
+
+        """
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
new file mode 100644
index 000000000..63f31ebda
--- /dev/null
+++ b/pybop/models/base_model.py
@@ -0,0 +1,24 @@
+from pybamm.models.base_model import BaseModel
+
+class BaseModel(BaseModel):
+    """ 
+
+    This is a wrapper class for the PyBaMM Model class.
+    
+    """
+
+    def __init__(self):
+        """
+
+        Insert initialisation code as needed.
+
+        """
+
+        self.name = "BaseModel"
+        
+
+    def update(self, k):
+        """
+        Updater
+        """
+        print(k)
\ No newline at end of file
diff --git a/pybop/models/spm.py b/pybop/models/spm.py
new file mode 100644
index 000000000..7d69c1a3f
--- /dev/null
+++ b/pybop/models/spm.py
@@ -0,0 +1,21 @@
+import pybop
+import pybamm
+from .base_model import BaseModel
+
+class BaseSPM():
+    """
+
+    Implements base SPM from PyBaMM
+
+    """
+
+    def __init__(self):
+        """
+
+        Insert initialisation code as needed.
+
+        """
+
+        self.name = "Base SPM"
+        self.model = pybamm.lithium_ion.SPM()
+        
\ No newline at end of file
diff --git a/pybop/optimisation/base_optimisation.py b/pybop/optimisation/base_optimisation.py
new file mode 100644
index 000000000..a77348b2f
--- /dev/null
+++ b/pybop/optimisation/base_optimisation.py
@@ -0,0 +1,28 @@
+import botorch
+import scipy
+import numpy 
+
+class BaseOptimisation():
+    """
+    
+    Base class for the optimisation methods.
+    
+    """
+
+    def __init__(self):
+
+        """
+
+        Initialise and name class.
+        
+        """
+        self.name = "Base Optimisation"
+
+
+
+    def NelderMead(self, fun, x0, options):
+        """
+        PRISM optimiser using Nelder-Mead.
+        """
+        res = scipy.optimize(fun, x0, method='nelder-mead', 
+        options={'xatol': 1e-8, 'disp': True})
\ No newline at end of file
diff --git a/pybop/plotting/quick_plot.py b/pybop/plotting/quick_plot.py
new file mode 100644
index 000000000..f36fe2f31
--- /dev/null
+++ b/pybop/plotting/quick_plot.py
@@ -0,0 +1,28 @@
+import os
+import numpy
+import matplotlib
+
+class QuickPlot(item):
+    """
+    
+    Class to generate the quick plots associated with PRISM. 
+
+    Plots
+    --------------
+    Observability
+    if method == parameterisation 
+        
+        Comparison of fitting data with optimised forward model
+    
+    elseif method == optimisation
+        
+        Pareto front
+        Alternative solutions
+        Initial value compared to optimal 
+
+    """
+
+    def __init__(self):
+        self.name = "Quick Plot"
+
+
diff --git a/pybop/simulation/base_simulation.py b/pybop/simulation/base_simulation.py
new file mode 100644
index 000000000..0595b6577
--- /dev/null
+++ b/pybop/simulation/base_simulation.py
@@ -0,0 +1,26 @@
+import pybamm.simulation.Simulation as pybamm_simulation
+
+class BaseSimulation(pybamm_simulation):
+    """
+    
+    This class solves the optimisation / estimation problem. 
+
+    Parameters:
+    ================
+    pybamm_simulation: argument for PyBaMM simulation that will be updated.
+
+    """
+
+    def __init__(self):
+       """
+       Initialise and name class
+       """ 
+
+       self.name = "Base Simulation"
+
+    def Simulation(self, simulation, optimise, cost, data):
+        """
+        
+        
+
+        """
\ No newline at end of file
diff --git a/pybop/version.py b/pybop/version.py
new file mode 100644
index 000000000..b3c06d488
--- /dev/null
+++ b/pybop/version.py
@@ -0,0 +1 @@
+__version__ = "0.0.1"
\ No newline at end of file
diff --git a/setup.py b/setup.py
new file mode 100644
index 000000000..d360d3035
--- /dev/null
+++ b/setup.py
@@ -0,0 +1,43 @@
+from distutils.core import setup
+import os
+from setuptools import find_packages
+
+# User-friendly description from README.md
+current_directory = os.path.dirname(os.path.abspath(__file__))
+try:
+    with open(os.path.join(current_directory, 'README.md'), encoding='utf-8') as f:
+        long_description = f.read()
+except Exception:
+    long_description = ''
+
+setup(
+	# Name of the package 
+	name='PyBOP',
+	# Packages to include into the distribution 
+	packages=find_packages('.'),
+	# Start with a small number and increase it with 
+	# every change you make https://semver.org 
+	version='0.0.1',
+	# Chose a license from here: https: // 
+	# help.github.com / articles / licensing - a - 
+	# repository. For example: MIT 
+	license='MIT',
+	# Short description of your library 
+	description='Python Battery Optimisation and Parameterisation',
+	# Long description of your library 
+	long_description=long_description,
+	long_description_content_type='text/markdown',
+	# Either the link to your github or to your website 
+	url='https://github.com/pybop-team/PyBOP',
+	# List of packages to install with this one 
+	install_requires=[
+        "pybamm>=23.1"
+        "numpy>=1.16",
+        "scipy>=1.3",
+        "pandas>=0.24",
+        "casadi>=3.6.0",
+	],
+	# https://pypi.org/classifiers/ 
+	classifiers=[],
+    python_requires=">=3.8,<3.12",
+)

From 5f9b136f0f40ac4ce7690f876ecc159edeed03e3 Mon Sep 17 00:00:00 2001
From: David Howey <david.howey@eng.ox.ac.uk>
Date: Wed, 19 Jul 2023 22:10:17 +0100
Subject: [PATCH 006/210] Update README.md

minor changes
---
 README.md | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index a6d6db661..da868b90f 100644
--- a/README.md
+++ b/README.md
@@ -6,18 +6,18 @@ PyBOP aims to be a modular library for the parameterisation and optimisation of
     <img src="assets/PyBOP_Arch.svg" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
 </p>
 
-The living software specification of PyBOP can be found here; however, an overview is introduced below.
+The living software specification of PyBOP can be found [here](https://github.com/pybop-team/software-spec); however, an overview is introduced below.
 
-- Provide both frequentist and bayesian parameterisation and optimisation methods to battery modellers
+- Provide design optimisation plus both frequentist and Bayesian parameterisation methods to battery modellers
 - Provide workflows and examples for parameter fitting and grouping
-- Create diagnostics for end-users to convey parameter and optimisation fidelity
+- Create diagnostics for end-users to understand parameter identifiability and optimisation fidelity
 
 **Community and values**
 
 PyBOP aims to foster a broad consortium of developers and users, building on and
 learning from the success of the PyBaMM community. Our values are:
 
--   Open-Source (code and ideas should be shared)
+-   Open-source (code and ideas should be shared)
 
 -   Inclusivity and fairness (those who want to contribute may do so,
     and their input is appropriately recognised)
@@ -25,4 +25,4 @@ learning from the success of the PyBaMM community. Our values are:
 -   Inter-operability (aiming for modularity to enable maximum impact
     and inclusivity)
 
--   User-friendliness (putting user requirements first, thinking about user- assistance & workflows)
\ No newline at end of file
+-   User-friendliness (putting user requirements first, thinking about user- assistance & workflows)

From 93bc3584e80151f9f2452cff4a7c5f3a36ba9295 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 20 Jul 2023 12:52:36 +0100
Subject: [PATCH 007/210] Add simulation class structure / Updt. SPM.py

---
 pybop/models/spm.py                 | 15 +++------------
 pybop/simulation.py                 | 25 +++++++++++++++++++++++++
 pybop/simulation/base_simulation.py | 26 --------------------------
 3 files changed, 28 insertions(+), 38 deletions(-)
 create mode 100644 pybop/simulation.py
 delete mode 100644 pybop/simulation/base_simulation.py

diff --git a/pybop/models/spm.py b/pybop/models/spm.py
index 7d69c1a3f..65abd2092 100644
--- a/pybop/models/spm.py
+++ b/pybop/models/spm.py
@@ -1,21 +1,12 @@
-import pybop
 import pybamm
 from .base_model import BaseModel
 
-class BaseSPM():
+class BaseSPM(pybamm.models.full_battery_models.lithium_ion.BasicSPM):
     """
 
-    Implements base SPM from PyBaMM
+    Inherites from the BasicSPM class in PyBaMM
 
     """
 
     def __init__(self):
-        """
-
-        Insert initialisation code as needed.
-
-        """
-
-        self.name = "Base SPM"
-        self.model = pybamm.lithium_ion.SPM()
-        
\ No newline at end of file
+        super().__init__()
diff --git a/pybop/simulation.py b/pybop/simulation.py
new file mode 100644
index 000000000..055e96e56
--- /dev/null
+++ b/pybop/simulation.py
@@ -0,0 +1,25 @@
+import pybamm
+
+class BaseSimulation(pybamm.simulation.Simulation):
+    """
+    
+    This class constructs the PyBOP simulation class
+
+    Parameters:
+    ================
+   
+
+    """
+
+    def __init__(self):
+       """
+       Initialise and name class
+       """ 
+       super()__init__()
+
+    def optimize(self):
+        """
+        
+        Optimize function for the give optimisation problem.
+
+        """
\ No newline at end of file
diff --git a/pybop/simulation/base_simulation.py b/pybop/simulation/base_simulation.py
deleted file mode 100644
index 0595b6577..000000000
--- a/pybop/simulation/base_simulation.py
+++ /dev/null
@@ -1,26 +0,0 @@
-import pybamm.simulation.Simulation as pybamm_simulation
-
-class BaseSimulation(pybamm_simulation):
-    """
-    
-    This class solves the optimisation / estimation problem. 
-
-    Parameters:
-    ================
-    pybamm_simulation: argument for PyBaMM simulation that will be updated.
-
-    """
-
-    def __init__(self):
-       """
-       Initialise and name class
-       """ 
-
-       self.name = "Base Simulation"
-
-    def Simulation(self, simulation, optimise, cost, data):
-        """
-        
-        
-
-        """
\ No newline at end of file

From f8371f0b79227205edc465e34ddbe0cd7f1d3324 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 20 Jul 2023 16:12:05 +0100
Subject: [PATCH 008/210] Simulation class to inherite Pybamm Simulation class

---
 pybop/__init__.py   |  5 +++++
 pybop/simulation.py | 12 +++++-------
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/pybop/__init__.py b/pybop/__init__.py
index b986ffeb0..5841d37d3 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -31,6 +31,11 @@
 from .models.base_model import BaseModel
 from .models.spm import BaseSPM
 
+# 
+# Simulation class
+#
+from .simulation import Simulation
+
 #
 # Remove any imported modules, so we don't expose them as part of pybop
 #
diff --git a/pybop/simulation.py b/pybop/simulation.py
index 055e96e56..0d0475fc0 100644
--- a/pybop/simulation.py
+++ b/pybop/simulation.py
@@ -1,9 +1,9 @@
 import pybamm
 
-class BaseSimulation(pybamm.simulation.Simulation):
+class Simulation(pybamm.simulation.Simulation):
     """
     
-    This class constructs the PyBOP simulation class
+    This class constructs the PyBOP Simulation class
 
     Parameters:
     ================
@@ -11,11 +11,9 @@ class BaseSimulation(pybamm.simulation.Simulation):
 
     """
 
-    def __init__(self):
-       """
-       Initialise and name class
-       """ 
-       super()__init__()
+    def __init__(self, *args):
+       super(Simulation, self).__init__(*args)
+
 
     def optimize(self):
         """

From aa2c5a9e5104cf50550cc1d3947a14dafb5f38d0 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 27 Jul 2023 17:12:16 +0100
Subject: [PATCH 009/210] Add to simulation.py & integrate pybamm methods

---
 pybop/cost_functions/rmse.py            |  11 +
 pybop/optimisation/base_optimisation.py |  21 +-
 pybop/plotting/quick_plot.py            |   4 +-
 pybop/simulation.py                     | 351 +++++++++++++++++++++++-
 4 files changed, 363 insertions(+), 24 deletions(-)
 create mode 100644 pybop/cost_functions/rmse.py

diff --git a/pybop/cost_functions/rmse.py b/pybop/cost_functions/rmse.py
new file mode 100644
index 000000000..4b52bf250
--- /dev/null
+++ b/pybop/cost_functions/rmse.py
@@ -0,0 +1,11 @@
+# Root Mean Square Cost Function
+
+import numpy as np
+import pybop
+
+def RMSE(x, y, grad, minV, params, model, experiment, observation):
+    yhat = minV * np.ones(len(y))
+    params.update({"Electrode height [m]": x[0], "Negative particle radius [m]": x[1], "Positive particle radius [m]": x[2]})
+    yhat_temp = pybop.simulation(model, experiment=experiment, parameter_values=params, observation=observation)
+    yhat[:len(yhat_temp)] = yhat_temp
+    return np.sqrt(sum((yhat - y)) ** 2)
\ No newline at end of file
diff --git a/pybop/optimisation/base_optimisation.py b/pybop/optimisation/base_optimisation.py
index a77348b2f..940e168fb 100644
--- a/pybop/optimisation/base_optimisation.py
+++ b/pybop/optimisation/base_optimisation.py
@@ -1,15 +1,13 @@
-import botorch
-import scipy
-import numpy 
+import pybop
 
-class BaseOptimisation():
+class BaseOptimisation:
     """
     
     Base class for the optimisation methods.
     
     """
 
-    def __init__(self):
+    def __init__(self, Simulation):
 
         """
 
@@ -17,12 +15,13 @@ def __init__(self):
         
         """
         self.name = "Base Optimisation"
+        self.Simulation = Simulation.copy()
 
 
 
-    def NelderMead(self, fun, x0, options):
-        """
-        PRISM optimiser using Nelder-Mead.
-        """
-        res = scipy.optimize(fun, x0, method='nelder-mead', 
-        options={'xatol': 1e-8, 'disp': True})
\ No newline at end of file
+    # def NelderMead(self, fun, x0, options):
+    #     """
+    #     PyBOP optimiser using Nelder-Mead.
+    #     """
+    #     res = scipy.optimize(fun, x0, method='nelder-mead', 
+    #     options={'xatol': 1e-8, 'disp': True})
\ No newline at end of file
diff --git a/pybop/plotting/quick_plot.py b/pybop/plotting/quick_plot.py
index f36fe2f31..3d83c8d3a 100644
--- a/pybop/plotting/quick_plot.py
+++ b/pybop/plotting/quick_plot.py
@@ -2,10 +2,10 @@
 import numpy
 import matplotlib
 
-class QuickPlot(item):
+class QuickPlot():
     """
     
-    Class to generate the quick plots associated with PRISM. 
+    Class to generate plots with standard variables and formatting. 
 
     Plots
     --------------
diff --git a/pybop/simulation.py b/pybop/simulation.py
index 055e96e56..ae9ecdacb 100644
--- a/pybop/simulation.py
+++ b/pybop/simulation.py
@@ -1,9 +1,32 @@
 import pybamm
+import numpy as np
+import pickle
+import sys
+from functools import lru_cache
+import warnings
 
-class BaseSimulation(pybamm.simulation.Simulation):
+
+def is_notebook():
+    try:
+        shell = get_ipython().__class__.__name__
+        if shell == "ZMQInteractiveShell":  # pragma: no cover
+            # Jupyter notebook or qtconsole
+            cfg = get_ipython().config
+            nb = len(cfg["InteractiveShell"].keys()) == 0
+            return nb
+        elif shell == "TerminalInteractiveShell":  # pragma: no cover
+            return False  # Terminal running IPython
+        elif shell == "Shell":  # pragma: no cover
+            return True  # Google Colab notebook
+        else:  # pragma: no cover
+            return False  # Other type (?)
+    except NameError:
+        return False  # Probably standard Python interpreter
+    
+class Simulation:
     """
     
-    This class constructs the PyBOP simulation class
+    This class constructs the PyBOP simulation class. It was built off the PyBaMM simulation class.
 
     Parameters:
     ================
@@ -11,15 +34,321 @@ class BaseSimulation(pybamm.simulation.Simulation):
 
     """
 
-    def __init__(self):
-       """
-       Initialise and name class
-       """ 
-       super()__init__()
+    def __init__(
+        self,
+        model,
+        measured_expirement=None,
+        geometry=None,
+        initial_parameter_values=None,
+        submesh_types=None,
+        var_pts=None,
+        spatial_methods=None,
+        solver=None,
+        output_variables=None,
+        C_rate=None,
+    ):
+        self.initial_parameters = initial_parameter_values or model.default_parameter_values
+        
+        # Check to see that current is provided as a drive_cycle
+        current = self._parameter_values.get("Current function [A]")
+        if isinstance(current, pybamm.Interpolant):
+            self.operating_mode = "drive cycle"
+        elif isinstance(current, pybamm.Interpolant):
+            # This requires syncing the sampling frequency to ensure equivalent vector lengths
+            self.operating_mode = "without experiment"
+            if C_rate:
+                self.C_rate = C_rate
+                self._parameter_values.update(
+                    {
+                        "Current function [A]": self.C_rate
+                        * self._parameter_values["Nominal cell capacity [A.h]"]
+                    }
+                )
+        else:
+            raise TypeError(
+                "measured_experiment must be drive_cycle or C_rate with"
+                "matching sampling frequency between t_eval and measured data"
+            )
+        
+        self._unprocessed_model = model
+        self.model = model
+        self.geometry = geometry or self.model.default_geometry
+        self.submesh_types = submesh_types or self.model.default_submesh_types
+        self.var_pts = var_pts or self.model.default_var_pts
+        self.spatial_methods = spatial_methods or self.model.default_spatial_methods
+        self.solver = solver or self.model.default_solver
+        self.output_variables = output_variables
+
+        # Initialize empty built states
+        self._model_with_set_params = None
+        self._built_model = None
+        self._built_initial_soc = None
+        self.op_conds_to_built_models = None
+        self.op_conds_to_built_solvers = None
+        self._mesh = None
+        self._disc = None
+        self._solution = None
+        self.quick_plot = None
 
-    def optimize(self):
-        """
+        # ignore runtime warnings in notebooks
+        if is_notebook():  # pragma: no cover
+            import warnings
+
+            warnings.filterwarnings("ignore")
+
+        self.get_esoh_solver = lru_cache()(self._get_esoh_solver)
         
-        Optimize function for the give optimisation problem.
+    def set_parameters(self):
+        """
+        Setter for parameter values 
+
+        Inputs:
+        ============
+        param: The parameter object to set
+        """
+        if self.model_with_set_params:
+            return
+
+        self._model_with_set_params = self._parameter_values.process_model(
+            self._unprocessed_model, inplace=False
+        )
+        self._parameter_values.process_geometry(self.geometry)
+        self.model = self._model_with_set_params
+
+
+    def build(self, check_model=True, initial_soc=None):
+        """
+        A method to build the model into a system of matrices and vectors suitable for
+        performing numerical computations. If the model has already been built or
+        solved then this function will have no effect. This method will automatically set the parameters
+        if they have not already been set.
+
+        Parameters
+        ----------
+        check_model : bool, optional
+            If True, model checks are performed after discretisation (see
+            :meth:`pybamm.Discretisation.process_model`). Default is True.
+        initial_soc : float, optional
+            Initial State of Charge (SOC) for the simulation. Must be between 0 and 1.
+            If given, overwrites the initial concentrations provided in the parameter
+            set.
+        """
+        if initial_soc is not None:
+            self.set_initial_soc(initial_soc)
+
+        if self.built_model:
+            return
+        elif self.model.is_discretised:
+            self._model_with_set_params = self.model
+            self._built_model = self.model
+        else:
+            self.set_parameters()
+            self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
+            self._disc = pybamm.Discretisation(self._mesh, self._spatial_methods)
+            self._built_model = self._disc.process_model(
+                self._model_with_set_params, inplace=False, check_model=check_model
+            )
+            # rebuilt model so clear solver setup
+            self._solver._model_set_up = {}
+
+    def setup_for_parameterisation():
+        """
+        A method to setup self.model for the parameterisation experiment
+        """
+
+    def plot(self, output_variables=None, **kwargs):
+        """
+        A method to quickly plot the outputs of the simulation. Creates a
+        :class:`pybamm.QuickPlot` object (with keyword arguments 'kwargs') and
+        then calls :meth:`pybamm.QuickPlot.dynamic_plot`.
+
+        Parameters
+        ----------
+        output_variables: list, optional
+            A list of the variables to plot.
+        **kwargs
+            Additional keyword arguments passed to
+            :meth:`pybamm.QuickPlot.dynamic_plot`.
+            For a list of all possible keyword arguments see :class:`pybamm.QuickPlot`.
+        """
+
+        if self._solution is None:
+            raise ValueError(
+                "Model has not been solved, please solve the model before plotting."
+            )
+
+        if output_variables is None:
+            output_variables = self.output_variables
+
+        self.quick_plot = pybop.dynamic_plot(
+            self._solution, output_variables=output_variables, **kwargs
+        )
+
+        return self.quick_plot
+    
+    def create_gif(self, number_of_images=80, duration=0.1, output_filename="plot.gif"):
+        """
+        Create a gif of the parameterisation steps created by :meth:`pybamm.Simulation.plot`.
+
+        Parameters
+        ----------
+        number_of_images : int (optional)
+            Number of images/plots to be compiled for a GIF.
+        duration : float (optional)
+            Duration of visibility of a single image/plot in the created GIF.
+        output_filename : str (optional)
+            Name of the generated GIF file.
+
+        """
+        if self.quick_plot is None:
+            self.quick_plot = pybamm.QuickPlot(self._solution)
+
+        #create_git needs to be updated
+        self.quick_plot.create_gif(
+            number_of_images=number_of_images,
+            duration=duration,
+            output_filename=output_filename,
+        )
+    
+    def solve(
+        self,
+        t_eval=None,
+        solver=None,
+        check_model=True,
+        calc_esoh=True,
+        starting_solution=None,
+        initial_soc=None,
+        callbacks=None,
+        showprogress=False,
+        **kwargs,
+    ):
+        """
+        A method to solve the model for parameterisation. This method will automatically build
+        and set the model parameters if not already done so.
+
+        Parameters
+        ----------
+        t_eval : numeric type, optional
+            The times (in seconds) at which to compute the solution. Can be
+            provided as an array of times at which to return the solution, or as a
+            list `[t0, tf]` where `t0` is the initial time and `tf` is the final time.
+            If provided as a list the solution is returned at 100 points within the
+            interval `[t0, tf]`.
+
+            If None and the parameter "Current function [A]" is read from data
+            (i.e. drive cycle simulation) the model will be solved at the times
+            provided in the data.
+        solver : :class:`pybop.BaseSolver`, optional
+            The solver to use to solve the model. If None, Simulation.solver is used
+        check_model : bool, optional
+            If True, model checks are performed after discretisation (see
+            :meth:`pybamm.Discretisation.process_model`). Default is True.
+        calc_esoh : bool, optional
+            Whether to include eSOH variables in the summary variables. If `False`
+            then only summary variables that do not require the eSOH calculation
+            are calculated. Default is True.
+        starting_solution : :class:`pybamm.Solution`
+            The solution to start stepping from. If None (default), then self._solution
+            is used. Must be None if not using an experiment.
+        initial_soc : float, optional
+            Initial State of Charge (SOC) for the simulation. Must be between 0 and 1.
+            If given, overwrites the initial concentrations provided in the parameter
+            set.
+        callbacks : list of callbacks, optional
+            A list of callbacks to be called at each time step. Each callback must
+            implement all the methods defined in :class:`pybamm.callbacks.BaseCallback`.
+        showprogress : bool, optional
+            Whether to show a progress bar for cycling. If true, shows a progress bar
+            for cycles. Has no effect when not used with an experiment.
+            Default is False.
+        **kwargs
+            Additional key-word arguments passed to `solver.solve`.
+            See :meth:`pybamm.BaseSolver.solve`.
+        """
+        # Setup
+        if solver is None:
+            solver = self.solver
+
+        callbacks = pybamm.callbacks.setup_callbacks(callbacks)
+        logs = {}
+
+        self.build(check_model=check_model, initial_soc=initial_soc)
+
+        if self.operating_mode == "drive cycle":
+            # For drive cycles (current provided as data) we perform additional
+            # tests on t_eval (if provided) to ensure the returned solution
+            # captures the input.
+            time_data = self._parameter_values["Current function [A]"].x[0]
+            # If no t_eval is provided, we use the times provided in the data.
+            if t_eval is None:
+                pybamm.logger.info("Setting t_eval as specified by the data")
+                t_eval = time_data
+            # If t_eval is provided we first check if it contains all of the
+            # times in the data to within 10-12. If it doesn't, we then check
+            # that the largest gap in t_eval is smaller than the smallest gap in
+            # the time data (to ensure the resolution of t_eval is fine enough).
+            # We only raise a warning here as users may genuinely only want
+            # the solution returned at some specified points.
+            elif (
+                set(np.round(time_data, 12)).issubset(set(np.round(t_eval, 12)))
+            ) is False:
+                warnings.warn(
+                    """
+                    t_eval does not contain all of the time points in the data
+                    set. Note: passing t_eval = None automatically sets t_eval
+                    to be the points in the data.
+                    """,
+                    pybamm.SolverWarning,
+                )
+                dt_data_min = np.min(np.diff(time_data))
+                dt_eval_max = np.max(np.diff(t_eval))
+                if dt_eval_max > dt_data_min + sys.float_info.epsilon:
+                    warnings.warn(
+                        """
+                        The largest timestep in t_eval ({}) is larger than
+                        the smallest timestep in the data ({}). The returned
+                        solution may not have the correct resolution to accurately
+                        capture the input. Try refining t_eval. Alternatively,
+                        passing t_eval = None automatically sets t_eval to be the
+                        points in the data.
+                        """.format(
+                            dt_eval_max, dt_data_min
+                        ),
+                        pybamm.SolverWarning,
+                    )
+
+        self._solution = solver.solve(self.built_model, t_eval, **kwargs)
+
+        return self.solution
+    
+    def save(self, filename):
+        """Save simulation using pickle"""
+        if self.model.convert_to_format == "python":
+            # We currently cannot save models in the 'python' format
+            raise NotImplementedError(
+                """
+                Cannot save simulation if model format is python.
+                Set model.convert_to_format = 'casadi' instead.
+                """
+            )
+        # Clear solver problem (not pickle-able, will automatically be recomputed)
+        if (
+            isinstance(self._solver, pybamm.CasadiSolver)
+            and self._solver.integrator_specs != {}
+        ):
+            self._solver.integrator_specs = {}
+
+        if self.op_conds_to_built_solvers is not None:
+            for solver in self.op_conds_to_built_solvers.values():
+                if (
+                    isinstance(solver, pybamm.CasadiSolver)
+                    and solver.integrator_specs != {}
+                ):
+                    solver.integrator_specs = {}
+
+        with open(filename, "wb") as f:
+            pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
 
-        """
\ No newline at end of file
+    def load_sim(filename):
+        """Load a saved simulation"""
+        return pybamm.load(filename)
\ No newline at end of file

From f7acc48d9473791301ad2d0796a21271e107de81 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 28 Jul 2023 10:02:34 +0100
Subject: [PATCH 010/210] Simulation.py bugfix + initial test added

---
 pybop/simulation.py | 27 ++++++++++++++++++++++++---
 tests/Simulation.py | 15 +++++++++++++++
 2 files changed, 39 insertions(+), 3 deletions(-)
 create mode 100644 tests/Simulation.py

diff --git a/pybop/simulation.py b/pybop/simulation.py
index ae9ecdacb..c81f4f61b 100644
--- a/pybop/simulation.py
+++ b/pybop/simulation.py
@@ -37,7 +37,7 @@ class Simulation:
     def __init__(
         self,
         model,
-        measured_expirement=None,
+        measured_experiment=None,
         geometry=None,
         initial_parameter_values=None,
         submesh_types=None,
@@ -47,7 +47,7 @@ def __init__(
         output_variables=None,
         C_rate=None,
     ):
-        self.initial_parameters = initial_parameter_values or model.default_parameter_values
+        self.parameter_values = initial_parameter_values or model.default_parameter_values
         
         # Check to see that current is provided as a drive_cycle
         current = self._parameter_values.get("Current function [A]")
@@ -349,6 +349,27 @@ def save(self, filename):
         with open(filename, "wb") as f:
             pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
 
+    def _get_esoh_solver(self, calc_esoh):
+        if (
+            calc_esoh is False
+            or isinstance(self.model, pybamm.lead_acid.BaseModel)
+            or isinstance(self.model, pybamm.equivalent_circuit.Thevenin)
+            or self.model.options["working electrode"] != "both"
+        ):
+            return None
+
+        return pybamm.lithium_ion.ElectrodeSOHSolver(
+            self.parameter_values, self.model.param
+        )
+
     def load_sim(filename):
         """Load a saved simulation"""
-        return pybamm.load(filename)
\ No newline at end of file
+        return pybamm.load(filename)
+    
+    @property
+    def parameter_values(self):
+        return self._parameter_values
+
+    @parameter_values.setter
+    def parameter_values(self, parameter_values):
+        self._parameter_values = parameter_values.copy()
\ No newline at end of file
diff --git a/tests/Simulation.py b/tests/Simulation.py
new file mode 100644
index 000000000..01998fbc8
--- /dev/null
+++ b/tests/Simulation.py
@@ -0,0 +1,15 @@
+import pybop
+import pybamm
+import numpy as np
+
+# Form example measurement data
+measured_expirement = np.ones([2,30])
+current_interpolant = pybamm.Interpolant(measured_expirement[:, 0], measured_expirement[:, 1], pybamm.t)
+
+# Form model
+model = pybop.BaseSPM()
+param = model.default_parameter_values
+param["Current function [A]"] = current_interpolant
+
+# Form simulation
+sim = pybop.Simulation(model, initial_parameter_values=param)
\ No newline at end of file

From 93f8841b8e0c2065eb7a6f33a8bca51dfd618ae3 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 28 Jul 2023 11:22:40 +0100
Subject: [PATCH 011/210] Add properties to Simulation class, Updt. test

---
 pybop/simulation.py | 103 +++++++++++++++++++++++++++++++++++++-------
 tests/Simulation.py |  26 ++++++++---
 2 files changed, 108 insertions(+), 21 deletions(-)

diff --git a/pybop/simulation.py b/pybop/simulation.py
index c81f4f61b..c261cecd3 100644
--- a/pybop/simulation.py
+++ b/pybop/simulation.py
@@ -1,5 +1,6 @@
 import pybamm
 import numpy as np
+import copy
 import pickle
 import sys
 from functools import lru_cache
@@ -26,7 +27,7 @@ def is_notebook():
 class Simulation:
     """
     
-    This class constructs the PyBOP simulation class. It was built off the PyBaMM simulation class.
+    This class constructs the PyBOP simulation class. It was initially built from the PyBaMM simulation class.
 
     Parameters:
     ================
@@ -320,6 +321,19 @@ def solve(
         self._solution = solver.solve(self.built_model, t_eval, **kwargs)
 
         return self.solution
+
+    def _get_esoh_solver(self, calc_esoh):
+        if (
+            calc_esoh is False
+            or isinstance(self.model, pybamm.lead_acid.BaseModel)
+            or isinstance(self.model, pybamm.equivalent_circuit.Thevenin)
+            or self.model.options["working electrode"] != "both"
+        ):
+            return None
+
+        return pybamm.lithium_ion.ElectrodeSOHSolver(
+            self.parameter_values, self.model.param
+        )
     
     def save(self, filename):
         """Save simulation using pickle"""
@@ -349,27 +363,86 @@ def save(self, filename):
         with open(filename, "wb") as f:
             pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
 
-    def _get_esoh_solver(self, calc_esoh):
-        if (
-            calc_esoh is False
-            or isinstance(self.model, pybamm.lead_acid.BaseModel)
-            or isinstance(self.model, pybamm.equivalent_circuit.Thevenin)
-            or self.model.options["working electrode"] != "both"
-        ):
-            return None
-
-        return pybamm.lithium_ion.ElectrodeSOHSolver(
-            self.parameter_values, self.model.param
-        )
-
     def load_sim(filename):
         """Load a saved simulation"""
         return pybamm.load(filename)
     
+    @property
+    def model(self):
+        return self._model
+
+    @model.setter
+    def model(self, model):
+        self._model = copy.copy(model)
+
+    @property
+    def model_with_set_params(self):
+        return self._model_with_set_params
+    
+    @property
+    def built_model(self):
+        return self._built_model
+    
+    @property
+    def geometry(self):
+        return self._geometry
+
+    @geometry.setter
+    def geometry(self, geometry):
+        self._geometry = geometry.copy()
+
     @property
     def parameter_values(self):
         return self._parameter_values
 
     @parameter_values.setter
     def parameter_values(self, parameter_values):
-        self._parameter_values = parameter_values.copy()
\ No newline at end of file
+        self._parameter_values = parameter_values.copy()
+
+    @property
+    def submesh_types(self):
+        return self._submesh_types
+
+    @submesh_types.setter
+    def submesh_types(self, submesh_types):
+        self._submesh_types = submesh_types.copy()
+
+    @property
+    def mesh(self):
+        return self._mesh
+
+    @property
+    def var_pts(self):
+        return self._var_pts
+
+    @var_pts.setter
+    def var_pts(self, var_pts):
+        self._var_pts = var_pts.copy()
+
+    @property
+    def spatial_methods(self):
+        return self._spatial_methods
+
+    @spatial_methods.setter
+    def spatial_methods(self, spatial_methods):
+        self._spatial_methods = spatial_methods.copy()
+
+    @property
+    def solver(self):
+        return self._solver
+
+    @solver.setter
+    def solver(self, solver):
+        self._solver = solver.copy()
+
+    @property
+    def output_variables(self):
+        return self._output_variables
+
+    @output_variables.setter
+    def output_variables(self, output_variables):
+        self._output_variables = copy.copy(output_variables)
+
+    @property
+    def solution(self):
+        return self._solution
\ No newline at end of file
diff --git a/tests/Simulation.py b/tests/Simulation.py
index 01998fbc8..60f4364eb 100644
--- a/tests/Simulation.py
+++ b/tests/Simulation.py
@@ -2,14 +2,28 @@
 import pybamm
 import numpy as np
 
-# Form example measurement data
-measured_expirement = np.ones([2,30])
-current_interpolant = pybamm.Interpolant(measured_expirement[:, 0], measured_expirement[:, 1], pybamm.t)
+# Form list of applied current
+measured_expirement = [np.arange(0,3,0.1),np.ones([30])]
+current_interpolant = pybamm.Interpolant(measured_expirement[0], measured_expirement[1], pybamm.t)
 
-# Form model
+# Create model & add applied current
 model = pybop.BaseSPM()
 param = model.default_parameter_values
 param["Current function [A]"] = current_interpolant
 
-# Form simulation
-sim = pybop.Simulation(model, initial_parameter_values=param)
\ No newline at end of file
+# Form initial data
+sim = pybop.Simulation(model, initial_parameter_values=param)
+sim.solve()
+
+# Method to parameterise and run the forward model
+def forward(x):
+    sim.parameter_values.update(
+        {   "Electrode height [m]": x[0], 
+            "Negative particle radius [m]": x[1], 
+            "Positive particle radius [m]": x[2]
+        }
+    )
+    sol = sim.solve()["Voltage [V]"].data
+    return sol
+
+V_out = forward([0.065, 0.2e-6, 0.2e-5])

From c91d2a8a5759381f89b15f96419b9947187627cb Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 31 Jul 2023 10:02:17 +0100
Subject: [PATCH 012/210] Black format, Add NLOpt optimisation class &
 dependancies, Updt. BaseOptimise

---
 {tests => examples}/Simulation.py       |  2 +-
 pybop/__init__.py                       |  4 +--
 pybop/cost_functions/mle.py             | 10 +++---
 pybop/models/base_model.py              |  8 ++---
 pybop/models/spm.py                     |  1 +
 pybop/optimisation/base_optimisation.py | 39 +++++++++++++--------
 pybop/optimisation/nlopt_opt.py         | 46 +++++++++++++++++++++++++
 pybop/plotting/quick_plot.py            | 19 +++++-----
 pybop/simulation.py                     | 36 ++++++++++---------
 pybop/version.py                        |  2 +-
 setup.py                                |  1 +
 11 files changed, 114 insertions(+), 54 deletions(-)
 rename {tests => examples}/Simulation.py (95%)
 create mode 100644 pybop/optimisation/nlopt_opt.py

diff --git a/tests/Simulation.py b/examples/Simulation.py
similarity index 95%
rename from tests/Simulation.py
rename to examples/Simulation.py
index 60f4364eb..0fdc2bca3 100644
--- a/tests/Simulation.py
+++ b/examples/Simulation.py
@@ -26,4 +26,4 @@ def forward(x):
     sol = sim.solve()["Voltage [V]"].data
     return sol
 
-V_out = forward([0.065, 0.2e-6, 0.2e-5])
+V_out = forward([0.065, 0.2e-6, 0.2e-5])
\ No newline at end of file
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 5841d37d3..5748ab3e7 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -31,7 +31,7 @@
 from .models.base_model import BaseModel
 from .models.spm import BaseSPM
 
-# 
+#
 # Simulation class
 #
 from .simulation import Simulation
@@ -39,4 +39,4 @@
 #
 # Remove any imported modules, so we don't expose them as part of pybop
 #
-del sys
\ No newline at end of file
+del sys
diff --git a/pybop/cost_functions/mle.py b/pybop/cost_functions/mle.py
index 48f8b48da..6e2268c15 100644
--- a/pybop/cost_functions/mle.py
+++ b/pybop/cost_functions/mle.py
@@ -1,18 +1,18 @@
-class CostFunction():
+class CostFunction:
     """
     Base class for cost function definition.
     """
 
     def __init__():
-        """"
+        """ "
+
+        Init.
 
-        Init. 
-        
         """
 
     def MLE(self, x0, x_hat, theta):
         """
-        
+
         Function for Maximum Likelihood Estimation
 
         """
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 63f31ebda..100e99a24 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -1,10 +1,11 @@
 from pybamm.models.base_model import BaseModel
 
+
 class BaseModel(BaseModel):
-    """ 
+    """
 
     This is a wrapper class for the PyBaMM Model class.
-    
+
     """
 
     def __init__(self):
@@ -15,10 +16,9 @@ def __init__(self):
         """
 
         self.name = "BaseModel"
-        
 
     def update(self, k):
         """
         Updater
         """
-        print(k)
\ No newline at end of file
+        print(k)
diff --git a/pybop/models/spm.py b/pybop/models/spm.py
index 65abd2092..a29fa0cba 100644
--- a/pybop/models/spm.py
+++ b/pybop/models/spm.py
@@ -1,6 +1,7 @@
 import pybamm
 from .base_model import BaseModel
 
+
 class BaseSPM(pybamm.models.full_battery_models.lithium_ion.BasicSPM):
     """
 
diff --git a/pybop/optimisation/base_optimisation.py b/pybop/optimisation/base_optimisation.py
index 940e168fb..2fa16d5a7 100644
--- a/pybop/optimisation/base_optimisation.py
+++ b/pybop/optimisation/base_optimisation.py
@@ -1,27 +1,38 @@
 import pybop
 
-class BaseOptimisation:
+
+class BaseOptimisation(object):
     """
-    
+
     Base class for the optimisation methods.
-    
+
     """
 
-    def __init__(self, Simulation):
+    def __init__(self):
+        self.name = "Base Optimisation"
 
+    def optimise(self, cost_function, method=None, x0=None, bounds=None, options=None):
         """
+        Optimise method to be overloaded by child classes.
 
-        Initialise and name class.
-        
         """
-        self.name = "Base Optimisation"
-        self.Simulation = Simulation.copy()
+        # Set up optimisation
+        self.cost_function = cost_function
+        self.x0 = x0 or cost_function.x0
+        self.options = options
+        self.method = method or cost_function.default_method
+        self.bounds = bounds or cost_function.bounds
+
+        # Run optimisation
+        result = self._runoptimise(
+            cost_function, self.method, self.x0, self.bounds, self.options
+        )
 
+        return result
 
+    def _runoptimise(self, cost_function, method, x0, bounds, options):
+        """
+        Run optimisation method, to be overloaded by child classes.
 
-    # def NelderMead(self, fun, x0, options):
-    #     """
-    #     PyBOP optimiser using Nelder-Mead.
-    #     """
-    #     res = scipy.optimize(fun, x0, method='nelder-mead', 
-    #     options={'xatol': 1e-8, 'disp': True})
\ No newline at end of file
+        """
+        pass
diff --git a/pybop/optimisation/nlopt_opt.py b/pybop/optimisation/nlopt_opt.py
new file mode 100644
index 000000000..16f88a0f0
--- /dev/null
+++ b/pybop/optimisation/nlopt_opt.py
@@ -0,0 +1,46 @@
+import pybop
+import nlopt
+
+
+class nlopt_opt(pybop.BaseOptimisation):
+    """
+    Wrapper class for the NLOpt optimisation class. Extends the BaseOptimisation class.
+    """
+
+    def __init__(self, cost_function, method, x0, bounds, options):
+        super().__init__()
+        self.cost_function = cost_function
+        self.method = method
+        self.x0 = x0 or cost_function.x0
+        self.bounds = bounds or cost_function.bounds
+        self.options = options
+        self.name = "NLOpt Optimisation"
+
+    def _runoptimise(cost_function, method, x0, bounds, options):
+        """
+        Run the NLOpt opt method.
+
+        Parameters
+        ----------
+        cost_function: function for optimising
+        method: optimisation method
+        x0: Initialisation array
+        options: options dictionary
+        bounds: bounds array
+        """
+        if options.xtol != None:
+            opt.set_xtol_rel(options.xtol)
+
+        if method != None:
+            opt = nlopt.opt(method, len(x0))
+        else:
+            opt = nlopt.opt(nlopt.LN_BOBYQA, len(x0))
+
+        opt.set_min_objective(cost_function)
+
+        opt.set_lower_bounds(bounds.lower)
+        opt.set_upper_bounds(bounds.upper)
+        results = opt.optimize(cost_function)
+        num_evals = opt.get_numevals()
+
+        return results, opt.last_optimum_value(), num_evals
diff --git a/pybop/plotting/quick_plot.py b/pybop/plotting/quick_plot.py
index 3d83c8d3a..e36bed225 100644
--- a/pybop/plotting/quick_plot.py
+++ b/pybop/plotting/quick_plot.py
@@ -2,27 +2,26 @@
 import numpy
 import matplotlib
 
-class QuickPlot():
+
+class QuickPlot:
     """
-    
-    Class to generate plots with standard variables and formatting. 
+
+    Class to generate plots with standard variables and formatting.
 
     Plots
     --------------
     Observability
-    if method == parameterisation 
-        
+    if method == parameterisation
+
         Comparison of fitting data with optimised forward model
-    
+
     elseif method == optimisation
-        
+
         Pareto front
         Alternative solutions
-        Initial value compared to optimal 
+        Initial value compared to optimal
 
     """
 
     def __init__(self):
         self.name = "Quick Plot"
-
-
diff --git a/pybop/simulation.py b/pybop/simulation.py
index c261cecd3..133a41239 100644
--- a/pybop/simulation.py
+++ b/pybop/simulation.py
@@ -23,15 +23,16 @@ def is_notebook():
             return False  # Other type (?)
     except NameError:
         return False  # Probably standard Python interpreter
-    
+
+
 class Simulation:
     """
-    
+
     This class constructs the PyBOP simulation class. It was initially built from the PyBaMM simulation class.
 
     Parameters:
     ================
-   
+
 
     """
 
@@ -48,8 +49,10 @@ def __init__(
         output_variables=None,
         C_rate=None,
     ):
-        self.parameter_values = initial_parameter_values or model.default_parameter_values
-        
+        self.parameter_values = (
+            initial_parameter_values or model.default_parameter_values
+        )
+
         # Check to see that current is provided as a drive_cycle
         current = self._parameter_values.get("Current function [A]")
         if isinstance(current, pybamm.Interpolant):
@@ -70,7 +73,7 @@ def __init__(
                 "measured_experiment must be drive_cycle or C_rate with"
                 "matching sampling frequency between t_eval and measured data"
             )
-        
+
         self._unprocessed_model = model
         self.model = model
         self.geometry = geometry or self.model.default_geometry
@@ -98,10 +101,10 @@ def __init__(
             warnings.filterwarnings("ignore")
 
         self.get_esoh_solver = lru_cache()(self._get_esoh_solver)
-        
+
     def set_parameters(self):
         """
-        Setter for parameter values 
+        Setter for parameter values
 
         Inputs:
         ============
@@ -116,7 +119,6 @@ def set_parameters(self):
         self._parameter_values.process_geometry(self.geometry)
         self.model = self._model_with_set_params
 
-
     def build(self, check_model=True, initial_soc=None):
         """
         A method to build the model into a system of matrices and vectors suitable for
@@ -186,7 +188,7 @@ def plot(self, output_variables=None, **kwargs):
         )
 
         return self.quick_plot
-    
+
     def create_gif(self, number_of_images=80, duration=0.1, output_filename="plot.gif"):
         """
         Create a gif of the parameterisation steps created by :meth:`pybamm.Simulation.plot`.
@@ -204,13 +206,13 @@ def create_gif(self, number_of_images=80, duration=0.1, output_filename="plot.gi
         if self.quick_plot is None:
             self.quick_plot = pybamm.QuickPlot(self._solution)
 
-        #create_git needs to be updated
+        # create_git needs to be updated
         self.quick_plot.create_gif(
             number_of_images=number_of_images,
             duration=duration,
             output_filename=output_filename,
         )
-    
+
     def solve(
         self,
         t_eval=None,
@@ -334,7 +336,7 @@ def _get_esoh_solver(self, calc_esoh):
         return pybamm.lithium_ion.ElectrodeSOHSolver(
             self.parameter_values, self.model.param
         )
-    
+
     def save(self, filename):
         """Save simulation using pickle"""
         if self.model.convert_to_format == "python":
@@ -366,7 +368,7 @@ def save(self, filename):
     def load_sim(filename):
         """Load a saved simulation"""
         return pybamm.load(filename)
-    
+
     @property
     def model(self):
         return self._model
@@ -378,11 +380,11 @@ def model(self, model):
     @property
     def model_with_set_params(self):
         return self._model_with_set_params
-    
+
     @property
     def built_model(self):
         return self._built_model
-    
+
     @property
     def geometry(self):
         return self._geometry
@@ -445,4 +447,4 @@ def output_variables(self, output_variables):
 
     @property
     def solution(self):
-        return self._solution
\ No newline at end of file
+        return self._solution
diff --git a/pybop/version.py b/pybop/version.py
index b3c06d488..f102a9cad 100644
--- a/pybop/version.py
+++ b/pybop/version.py
@@ -1 +1 @@
-__version__ = "0.0.1"
\ No newline at end of file
+__version__ = "0.0.1"
diff --git a/setup.py b/setup.py
index d360d3035..42d1d101f 100644
--- a/setup.py
+++ b/setup.py
@@ -36,6 +36,7 @@
         "scipy>=1.3",
         "pandas>=0.24",
         "casadi>=3.6.0",
+        "nlopt>=2.6",
 	],
 	# https://pypi.org/classifiers/ 
 	classifiers=[],

From 91f4a95b26dacfffa99a6e7943d5621792fb5f5d Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 31 Jul 2023 17:11:24 +0100
Subject: [PATCH 013/210] Updt. Module API, Refactor cost_function
 implementaion, Add example API script

---
 examples/NLOpt_kinetics.py                   | 39 ++++++++++++
 examples/Simulation.py                       |  2 +-
 pybop/__init__.py                            | 29 +++++++--
 pybop/cost_functions/mle.py                  | 18 ------
 pybop/cost_functions/rmse.py                 | 11 ----
 pybop/{cost_functions => models}/__init__.py |  0
 pybop/models/base_model.py                   | 24 -------
 pybop/models/lithium_ion/__init__.py         |  5 ++
 pybop/models/lithium_ion/spm.py              | 14 ++++
 pybop/models/spm.py                          | 13 ----
 pybop/observations.py                        | 19 ++++++
 pybop/optimisation/nlopt_opt.py              | 21 +++---
 pybop/parameterisation.py                    | 67 ++++++++++++++++++++
 pybop/parameters.py                          | 19 ++++++
 pybop/utils.py                               | 11 ++++
 15 files changed, 208 insertions(+), 84 deletions(-)
 create mode 100644 examples/NLOpt_kinetics.py
 delete mode 100644 pybop/cost_functions/mle.py
 delete mode 100644 pybop/cost_functions/rmse.py
 rename pybop/{cost_functions => models}/__init__.py (100%)
 delete mode 100644 pybop/models/base_model.py
 create mode 100644 pybop/models/lithium_ion/__init__.py
 create mode 100644 pybop/models/lithium_ion/spm.py
 delete mode 100644 pybop/models/spm.py
 create mode 100644 pybop/observations.py
 create mode 100644 pybop/parameterisation.py
 create mode 100644 pybop/parameters.py
 create mode 100644 pybop/utils.py

diff --git a/examples/NLOpt_kinetics.py b/examples/NLOpt_kinetics.py
new file mode 100644
index 000000000..85c1c6992
--- /dev/null
+++ b/examples/NLOpt_kinetics.py
@@ -0,0 +1,39 @@
+import pybop
+import numpy as np
+
+# Form observations
+applied_current = [np.arange(0,3,0.1),np.ones([30])]
+observation = [
+    pybop.Observed(["Current function [A]"], applied_current),
+    pybop.Observed(["Voltage [V]"], np.ones([30]) * 4.0)
+]
+
+# Create model & initial parameter set
+model = pybop.models.lithium_ion.SPM()
+param = model.pybamm_model.default_parameter_values # or pybop.ParameterValues("Chen2020")
+
+# Fitting parameters
+param = (
+    pybop.Parameter("Electrode height [m]", prior = pybop.Normal(0,1))
+    pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1))
+    pybop.Parameter("Postive particle radius", prior = pybop.Uniform(0,1))
+)
+
+parameterisation =  pybop.Parameterisation(model, observation=observation, parameters=param)
+
+# get RMSE estimate
+parameterisation.rmse()
+
+# get MAP estimate, starting at a random initial point in parameter space
+parameterisation.map(x0=[p.sample() for p in parameters]) 
+
+# or sample from posterior
+paramterisation.sample(1000, n_chains=4, ....)
+
+# or SOBER
+parameterisation.sober()
+
+
+#Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)
+
+
diff --git a/examples/Simulation.py b/examples/Simulation.py
index 0fdc2bca3..e991d49f1 100644
--- a/examples/Simulation.py
+++ b/examples/Simulation.py
@@ -4,7 +4,7 @@
 
 # Form list of applied current
 measured_expirement = [np.arange(0,3,0.1),np.ones([30])]
-current_interpolant = pybamm.Interpolant(measured_expirement[0], measured_expirement[1], pybamm.t)
+current_interpolant = pybamm.Interpolant(measured_expirement[0], measured_expirement[1], variable="time")
 
 # Create model & add applied current
 model = pybop.BaseSPM()
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 5748ab3e7..c109247bb 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -2,8 +2,8 @@
 # Root of the pybop module.
 # Provides access to all shared functionality (models, solvers, etc.).
 #
-# The code in this file is adapted from pybamm
-# (see https://github.com/pybamm-team/pybamm)
+# The code in this file is adapted from Pints
+# (see https://github.com/pints-team/pints)
 #
 
 import sys
@@ -28,13 +28,30 @@
 #
 # Model Classes
 #
-from .models.base_model import BaseModel
-from .models.spm import BaseSPM
+from .models import lithium_ion
 
 #
-# Simulation class
+# Parameterisation class
 #
-from .simulation import Simulation
+
+from .parameterisation import Parameterisation
+from .parameters import Parameter
+
+#
+# Observation class
+#
+from .observations import Observed
+
+#
+# Optimisation class
+#
+from .optimisation.base_optimisation import BaseOptimisation
+from .optimisation.nlopt_opt import nlopt_opt
+
+#
+# Utility classes and methods
+#
+from .utils import Interpolant
 
 #
 # Remove any imported modules, so we don't expose them as part of pybop
diff --git a/pybop/cost_functions/mle.py b/pybop/cost_functions/mle.py
deleted file mode 100644
index 6e2268c15..000000000
--- a/pybop/cost_functions/mle.py
+++ /dev/null
@@ -1,18 +0,0 @@
-class CostFunction:
-    """
-    Base class for cost function definition.
-    """
-
-    def __init__():
-        """ "
-
-        Init.
-
-        """
-
-    def MLE(self, x0, x_hat, theta):
-        """
-
-        Function for Maximum Likelihood Estimation
-
-        """
diff --git a/pybop/cost_functions/rmse.py b/pybop/cost_functions/rmse.py
deleted file mode 100644
index 4b52bf250..000000000
--- a/pybop/cost_functions/rmse.py
+++ /dev/null
@@ -1,11 +0,0 @@
-# Root Mean Square Cost Function
-
-import numpy as np
-import pybop
-
-def RMSE(x, y, grad, minV, params, model, experiment, observation):
-    yhat = minV * np.ones(len(y))
-    params.update({"Electrode height [m]": x[0], "Negative particle radius [m]": x[1], "Positive particle radius [m]": x[2]})
-    yhat_temp = pybop.simulation(model, experiment=experiment, parameter_values=params, observation=observation)
-    yhat[:len(yhat_temp)] = yhat_temp
-    return np.sqrt(sum((yhat - y)) ** 2)
\ No newline at end of file
diff --git a/pybop/cost_functions/__init__.py b/pybop/models/__init__.py
similarity index 100%
rename from pybop/cost_functions/__init__.py
rename to pybop/models/__init__.py
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
deleted file mode 100644
index 100e99a24..000000000
--- a/pybop/models/base_model.py
+++ /dev/null
@@ -1,24 +0,0 @@
-from pybamm.models.base_model import BaseModel
-
-
-class BaseModel(BaseModel):
-    """
-
-    This is a wrapper class for the PyBaMM Model class.
-
-    """
-
-    def __init__(self):
-        """
-
-        Insert initialisation code as needed.
-
-        """
-
-        self.name = "BaseModel"
-
-    def update(self, k):
-        """
-        Updater
-        """
-        print(k)
diff --git a/pybop/models/lithium_ion/__init__.py b/pybop/models/lithium_ion/__init__.py
new file mode 100644
index 000000000..bd2bf037b
--- /dev/null
+++ b/pybop/models/lithium_ion/__init__.py
@@ -0,0 +1,5 @@
+#
+# Import lithium ion based models
+#
+
+from .spm import SPM
diff --git a/pybop/models/lithium_ion/spm.py b/pybop/models/lithium_ion/spm.py
new file mode 100644
index 000000000..367596ddd
--- /dev/null
+++ b/pybop/models/lithium_ion/spm.py
@@ -0,0 +1,14 @@
+import pybop
+import pybamm
+
+
+class SPM:
+    """
+
+    Composition of the SPM class in PyBaMM.
+
+    """
+
+    def __init__(self):
+        self.pybamm_model = pybamm.lithium_ion.SPM()
+        self.name = "Single Particle Model"
diff --git a/pybop/models/spm.py b/pybop/models/spm.py
deleted file mode 100644
index a29fa0cba..000000000
--- a/pybop/models/spm.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import pybamm
-from .base_model import BaseModel
-
-
-class BaseSPM(pybamm.models.full_battery_models.lithium_ion.BasicSPM):
-    """
-
-    Inherites from the BasicSPM class in PyBaMM
-
-    """
-
-    def __init__(self):
-        super().__init__()
diff --git a/pybop/observations.py b/pybop/observations.py
new file mode 100644
index 000000000..cc0188209
--- /dev/null
+++ b/pybop/observations.py
@@ -0,0 +1,19 @@
+import pybop
+import pybamm
+import numpy as np
+
+
+class Observed:
+    """
+    Class for experimental Observations.
+    """
+
+    def __init__(self, name, data):
+        self.name = name
+        self.data = data
+    
+    def Interpolant(self):
+        if self.variable == "time":
+            self.Interpolant = pybamm.Interpolant(self.x, self.y, pybamm.t)
+        else:
+            NotImplementedError("Only time interpolation is supported")
diff --git a/pybop/optimisation/nlopt_opt.py b/pybop/optimisation/nlopt_opt.py
index 16f88a0f0..b7817d861 100644
--- a/pybop/optimisation/nlopt_opt.py
+++ b/pybop/optimisation/nlopt_opt.py
@@ -16,7 +16,7 @@ def __init__(self, cost_function, method, x0, bounds, options):
         self.options = options
         self.name = "NLOpt Optimisation"
 
-    def _runoptimise(cost_function, method, x0, bounds, options):
+    def _runoptimise(self):
         """
         Run the NLOpt opt method.
 
@@ -28,19 +28,18 @@ def _runoptimise(cost_function, method, x0, bounds, options):
         options: options dictionary
         bounds: bounds array
         """
-        if options.xtol != None:
-            opt.set_xtol_rel(options.xtol)
+        if self.options.xtol is not None:
+            opt.set_xtol_rel(self.options.xtol)
 
-        if method != None:
-            opt = nlopt.opt(method, len(x0))
+        if self.method is not None:
+            opt = nlopt.opt(self.method, len(self.x0))
         else:
-            opt = nlopt.opt(nlopt.LN_BOBYQA, len(x0))
+            opt = nlopt.opt(nlopt.LN_BOBYQA, len(self.x0))
 
-        opt.set_min_objective(cost_function)
-
-        opt.set_lower_bounds(bounds.lower)
-        opt.set_upper_bounds(bounds.upper)
-        results = opt.optimize(cost_function)
+        opt.set_min_objective(self.cost_function)
+        opt.set_lower_bounds(self.bounds.lower)
+        opt.set_upper_bounds(self.bounds.upper)
+        results = opt.optimize(self.cost_function)
         num_evals = opt.get_numevals()
 
         return results, opt.last_optimum_value(), num_evals
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
new file mode 100644
index 000000000..60227d87e
--- /dev/null
+++ b/pybop/parameterisation.py
@@ -0,0 +1,67 @@
+import pybop
+import pybamm
+import numpy as np
+
+
+class Parameterisation:
+    """
+    Parameterisation class for pybop.
+    """
+
+    def __init__(self, model, observations, parameters, x0=None):
+        self.model = model
+        self.parameters = parameters
+        self.observations = observations
+        self.default_parameters = (
+            parameters.default_parameters
+            or self.model.pybamm_model.default_parameter_values
+        )
+
+        if x0 is None:
+            self.x0 = np.zeros(len(self.parameters))
+
+        # To Do:
+        # Split observations into forward model inputs/outputs
+        # checks on observations and parameters
+
+        self.sim = pybop.Simulation(
+            self.model.pybamm_model, parameter_values=self.default_parameters
+        )
+
+    def map(self, x0):
+        """
+        Max a posteriori estimation.
+        """
+        pass
+
+    def sample(self, n_chains):
+        """
+        Sample from the posterior distribution.
+        """
+        pass
+
+    def rmse(self, method=None):
+        """
+        Calculate the root mean squared error.
+        """
+
+        def step(x):
+            self.parameters.update(lambda x: {p: x[i] for i, p in self.parameters})
+            y_hat = self.sim.solve()["Terminal voltage [V]"].data
+            return np.sqrt(np.mean((self.observations["Voltage [V]"] - y_hat) ** 2))
+
+        if method == "nlopt":
+            results = pybop.opt.nlopt(
+                step, self.x0, self.parameters.bounds, self.options
+            )
+        else:
+            results = pybop.opt.scipy(
+                step, self.x0, self.parameters.bounds, self.options
+            )
+        return results
+
+    def mle(self, method):
+        """
+        Maximum likelihood estimation.
+        """
+        pass
diff --git a/pybop/parameters.py b/pybop/parameters.py
new file mode 100644
index 000000000..f7ee3d8a2
--- /dev/null
+++ b/pybop/parameters.py
@@ -0,0 +1,19 @@
+import pybop
+import pybamm
+
+
+class Parameter:
+    """ ""
+    Class for creating parameters in pybop.
+    """
+
+    def __init__(self, param, prior=None, bounds=None):
+        self.name = param
+        self.prior = prior
+        self.bounds = bounds
+
+        # To Do:
+        # priors implementation
+        # parameter check
+        # bounds checks and set defaults
+        # implement methods to assign and retrieve parameters
diff --git a/pybop/utils.py b/pybop/utils.py
new file mode 100644
index 000000000..5312634da
--- /dev/null
+++ b/pybop/utils.py
@@ -0,0 +1,11 @@
+import pybop
+import pybamm
+
+
+class Interpolant:
+    def __init__(self, x, y, variable):
+        self.name = "Interpolant"
+        if variable == "time":
+            self.Interpolant = pybamm.Interpolant(x, y, pybamm.t)
+        else:
+            NotImplementedError("Only time interpolation is supported")

From 3b7a2dc61d1218ba12bce24458c4c04ffdd8f3a1 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 1 Aug 2023 13:50:05 +0100
Subject: [PATCH 014/210] Add priors definition, Initial scipy optimisation
 class

---
 pybop/__init__.py               |  5 +++
 pybop/observations.py           |  2 +-
 pybop/optimisation/scipy_opt.py | 39 +++++++++++++++++
 pybop/parameterisation.py       | 10 ++---
 pybop/parameters.py             |  3 ++
 pybop/priors.py                 | 76 +++++++++++++++++++++++++++++++++
 6 files changed, 129 insertions(+), 6 deletions(-)
 create mode 100644 pybop/optimisation/scipy_opt.py
 create mode 100644 pybop/priors.py

diff --git a/pybop/__init__.py b/pybop/__init__.py
index c109247bb..827de08b7 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -42,6 +42,11 @@
 #
 from .observations import Observed
 
+#
+# Priors class
+#
+from .priors import Gaussian, Uniform, Exponential
+
 #
 # Optimisation class
 #
diff --git a/pybop/observations.py b/pybop/observations.py
index cc0188209..7ac41a801 100644
--- a/pybop/observations.py
+++ b/pybop/observations.py
@@ -11,7 +11,7 @@ class Observed:
     def __init__(self, name, data):
         self.name = name
         self.data = data
-    
+
     def Interpolant(self):
         if self.variable == "time":
             self.Interpolant = pybamm.Interpolant(self.x, self.y, pybamm.t)
diff --git a/pybop/optimisation/scipy_opt.py b/pybop/optimisation/scipy_opt.py
new file mode 100644
index 000000000..8c4f98cb6
--- /dev/null
+++ b/pybop/optimisation/scipy_opt.py
@@ -0,0 +1,39 @@
+import pybop
+from scipy.optimize import minimize
+
+
+class scipy_opt(pybop.BaseOptimisation):
+    """
+    Wrapper class for the Scipy optimisation class. Extends the BaseOptimisation class.
+    """
+
+    def __init__(self, cost_function, x0, bounds=None, options=None):
+        super().__init__()
+        self.cost_function = cost_function
+        self.method = options.optmethod
+        self.x0 = x0 or cost_function.x0
+        self.bounds = bounds
+        self.options = options
+        self.name = "Scipy Optimisation"
+
+    def _runoptimise(self):
+        """
+        Run the Scipy opt method.
+
+        Parameters
+        ----------
+        cost_function: function for optimising
+        method: optimisation method
+        x0: Initialisation array
+        options: options dictionary
+        bounds: bounds array
+        """
+  
+        if self.method is not None and self.bounds is not None:
+            opt = minimize(self.cost_function, self.x0, method = self.method, bounds = self.bounds)
+        elif self.method is not None: 
+            opt = minimize(self.cost_function, self.x0, method = self.method)
+        else:
+            opt = minimize(self.cost_function, self.x0, method = 'BFGS')
+
+        return opt
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 60227d87e..0c85679b1 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -8,21 +8,21 @@ class Parameterisation:
     Parameterisation class for pybop.
     """
 
-    def __init__(self, model, observations, parameters, x0=None):
+    def __init__(self, model, observations, parameters, x0=None, options=None):
         self.model = model
         self.parameters = parameters
         self.observations = observations
+        self.options = options
         self.default_parameters = (
             parameters.default_parameters
             or self.model.pybamm_model.default_parameter_values
         )
-
-        if x0 is None:
-            self.x0 = np.zeros(len(self.parameters))
-
         # To Do:
         # Split observations into forward model inputs/outputs
         # checks on observations and parameters
+        
+        if x0 is None:
+            self.x0 = np.zeros(len(self.parameters))
 
         self.sim = pybop.Simulation(
             self.model.pybamm_model, parameter_values=self.default_parameters
diff --git a/pybop/parameters.py b/pybop/parameters.py
index f7ee3d8a2..06f8748fa 100644
--- a/pybop/parameters.py
+++ b/pybop/parameters.py
@@ -17,3 +17,6 @@ def __init__(self, param, prior=None, bounds=None):
         # parameter check
         # bounds checks and set defaults
         # implement methods to assign and retrieve parameters
+
+    def __repr__(self):
+        return f"Parameter: {self.name} \n Prior: {self.prior} \n Bounds: {self.bounds}"
diff --git a/pybop/priors.py b/pybop/priors.py
new file mode 100644
index 000000000..d8f073da4
--- /dev/null
+++ b/pybop/priors.py
@@ -0,0 +1,76 @@
+import pybop
+import numpy as np
+import scipy.stats as stats
+
+
+class Gaussian:
+    """
+    Gaussian prior class.
+    """
+
+    def __init__(self, mean, sigma):
+        self.name = "Gaussian"
+        self.mean = mean
+        self.sigma = sigma
+
+    def pdf(self, x):
+        return stats.norm.pdf(x, loc=self.mean, scale=self.sigma)
+
+    def logpdf(self, x):
+        return stats.norm.logpdf(x, loc=self.mean, scale=self.sigma)
+
+    def rvs(self, size):
+        if size < 0:
+            raise ValueError("size must be positive")
+        else:
+            return stats.norm.rvs(loc=self.mean, scale=self.sigma, size=size)
+    
+    def __repr__(self):
+        return f"{self.name}, mean: {self.mean}, sigma: {self.sigma}"
+
+class Uniform:
+    """
+    Uniform prior class.
+    """
+
+    def __init__(self, lower, upper):
+        self.name = "Uniform"
+        self.lower = lower
+        self.upper = upper
+
+    def pdf(self, x):
+        return stats.uniform.pdf(x, loc=self.lower, scale=self.upper - self.lower)
+
+    def logpdf(self, x):
+        return stats.uniform.logpdf(x, loc=self.lower, scale=self.upper - self.lower)
+
+    def rvs(self, size):
+        if size < 0:
+            raise ValueError("size must be positive")
+        else:
+            return stats.uniform.rvs(loc=self.lower, scale=self.upper - self.lower, size=size)
+    def __repr__(self):
+        return f"{self.name}, lower: {self.lower}, upper: {self.upper}"
+
+class Exponential:
+    """
+    exponential prior class.
+    """
+
+    def __init__(self, scale):
+        self.name = "Exponential"
+        self.scale = scale
+
+    def pdf(self, x):
+        return stats.expon.pdf(x, scale=self.scale)
+
+    def logpdf(self, x):
+        return stats.expon.logpdf(x, scale=self.scale)
+
+    def rvs(self, size):
+        if size < 0:
+            raise ValueError("size must be positive")
+        else:
+            return stats.expon.rvs(scale=self.scale, size=size)
+    def __repr__(self):
+        return f"{self.name}, scale: {self.scale}"
\ No newline at end of file

From bf861d13381c2cc64100f67e74c52b6e02e6bdd7 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 1 Aug 2023 14:07:21 +0100
Subject: [PATCH 015/210] Add black formatting

---
 examples/NLOpt_kinetics.py      |  8 +++-----
 pybop/optimisation/scipy_opt.py | 12 +++++++-----
 pybop/parameterisation.py       |  2 +-
 pybop/priors.py                 | 12 +++++++++---
 4 files changed, 20 insertions(+), 14 deletions(-)

diff --git a/examples/NLOpt_kinetics.py b/examples/NLOpt_kinetics.py
index 85c1c6992..f20be1baa 100644
--- a/examples/NLOpt_kinetics.py
+++ b/examples/NLOpt_kinetics.py
@@ -14,8 +14,8 @@
 
 # Fitting parameters
 param = (
-    pybop.Parameter("Electrode height [m]", prior = pybop.Normal(0,1))
-    pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1))
+    pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1)),
+    pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1)),
     pybop.Parameter("Postive particle radius", prior = pybop.Uniform(0,1))
 )
 
@@ -34,6 +34,4 @@
 parameterisation.sober()
 
 
-#Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)
-
-
+#Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)
\ No newline at end of file
diff --git a/pybop/optimisation/scipy_opt.py b/pybop/optimisation/scipy_opt.py
index 8c4f98cb6..0073ac3d1 100644
--- a/pybop/optimisation/scipy_opt.py
+++ b/pybop/optimisation/scipy_opt.py
@@ -28,12 +28,14 @@ def _runoptimise(self):
         options: options dictionary
         bounds: bounds array
         """
-  
+
         if self.method is not None and self.bounds is not None:
-            opt = minimize(self.cost_function, self.x0, method = self.method, bounds = self.bounds)
-        elif self.method is not None: 
-            opt = minimize(self.cost_function, self.x0, method = self.method)
+            opt = minimize(
+                self.cost_function, self.x0, method=self.method, bounds=self.bounds
+            )
+        elif self.method is not None:
+            opt = minimize(self.cost_function, self.x0, method=self.method)
         else:
-            opt = minimize(self.cost_function, self.x0, method = 'BFGS')
+            opt = minimize(self.cost_function, self.x0, method="BFGS")
 
         return opt
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 0c85679b1..d0581258a 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -20,7 +20,7 @@ def __init__(self, model, observations, parameters, x0=None, options=None):
         # To Do:
         # Split observations into forward model inputs/outputs
         # checks on observations and parameters
-        
+
         if x0 is None:
             self.x0 = np.zeros(len(self.parameters))
 
diff --git a/pybop/priors.py b/pybop/priors.py
index d8f073da4..b23f2c38e 100644
--- a/pybop/priors.py
+++ b/pybop/priors.py
@@ -24,10 +24,11 @@ def rvs(self, size):
             raise ValueError("size must be positive")
         else:
             return stats.norm.rvs(loc=self.mean, scale=self.sigma, size=size)
-    
+
     def __repr__(self):
         return f"{self.name}, mean: {self.mean}, sigma: {self.sigma}"
 
+
 class Uniform:
     """
     Uniform prior class.
@@ -48,10 +49,14 @@ def rvs(self, size):
         if size < 0:
             raise ValueError("size must be positive")
         else:
-            return stats.uniform.rvs(loc=self.lower, scale=self.upper - self.lower, size=size)
+            return stats.uniform.rvs(
+                loc=self.lower, scale=self.upper - self.lower, size=size
+            )
+
     def __repr__(self):
         return f"{self.name}, lower: {self.lower}, upper: {self.upper}"
 
+
 class Exponential:
     """
     exponential prior class.
@@ -72,5 +77,6 @@ def rvs(self, size):
             raise ValueError("size must be positive")
         else:
             return stats.expon.rvs(scale=self.scale, size=size)
+
     def __repr__(self):
-        return f"{self.name}, scale: {self.scale}"
\ No newline at end of file
+        return f"{self.name}, scale: {self.scale}"

From 0fda9f50db707c95859c67d42a5b21cbee1eb87e Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 1 Aug 2023 14:56:08 +0100
Subject: [PATCH 016/210] Remove duplicate class, typo

---
 examples/NLOpt_kinetics.py |  2 +-
 pybop/utils.py             | 11 -----------
 2 files changed, 1 insertion(+), 12 deletions(-)
 delete mode 100644 pybop/utils.py

diff --git a/examples/NLOpt_kinetics.py b/examples/NLOpt_kinetics.py
index f20be1baa..201e7f6e2 100644
--- a/examples/NLOpt_kinetics.py
+++ b/examples/NLOpt_kinetics.py
@@ -19,7 +19,7 @@
     pybop.Parameter("Postive particle radius", prior = pybop.Uniform(0,1))
 )
 
-parameterisation =  pybop.Parameterisation(model, observation=observation, parameters=param)
+parameterisation = pybop.Parameterisation(model, observation=observation, parameters=param)
 
 # get RMSE estimate
 parameterisation.rmse()
diff --git a/pybop/utils.py b/pybop/utils.py
deleted file mode 100644
index 5312634da..000000000
--- a/pybop/utils.py
+++ /dev/null
@@ -1,11 +0,0 @@
-import pybop
-import pybamm
-
-
-class Interpolant:
-    def __init__(self, x, y, variable):
-        self.name = "Interpolant"
-        if variable == "time":
-            self.Interpolant = pybamm.Interpolant(x, y, pybamm.t)
-        else:
-            NotImplementedError("Only time interpolation is supported")

From 2bfa33ba11add0d09ac6bcafbe89f9eac8a8fd55 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 1 Aug 2023 19:32:36 +0100
Subject: [PATCH 017/210] Syntax & bug fixes, Updt. optimiser &
 parameterisation classes

---
 .../{NLOpt_kinetics.py => Initial_API.py}     | 17 ++++----
 pybop/__init__.py                             | 12 +++---
 pybop/optimisation/base_optimisation.py       |  8 ++--
 pybop/optimisation/nlopt_opt.py               |  6 +--
 pybop/parameterisation.py                     | 40 ++++++++++++-------
 pybop/parameters.py                           |  4 +-
 6 files changed, 51 insertions(+), 36 deletions(-)
 rename examples/{NLOpt_kinetics.py => Initial_API.py} (62%)

diff --git a/examples/NLOpt_kinetics.py b/examples/Initial_API.py
similarity index 62%
rename from examples/NLOpt_kinetics.py
rename to examples/Initial_API.py
index 201e7f6e2..40e5179a6 100644
--- a/examples/NLOpt_kinetics.py
+++ b/examples/Initial_API.py
@@ -8,27 +8,26 @@
     pybop.Observed(["Voltage [V]"], np.ones([30]) * 4.0)
 ]
 
-# Create model & initial parameter set
+# Create model
 model = pybop.models.lithium_ion.SPM()
-param = model.pybamm_model.default_parameter_values # or pybop.ParameterValues("Chen2020")
 
 # Fitting parameters
-param = (
-    pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1)),
-    pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1)),
-    pybop.Parameter("Postive particle radius", prior = pybop.Uniform(0,1))
+params = (
+    pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = (0,1)),
+    pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0,1)),
+    pybop.Parameter("Positive particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0,1))
 )
 
-parameterisation = pybop.Parameterisation(model, observation=observation, parameters=param)
+parameterisation = pybop.Parameterisation(model, observations=observation, fit_parameters=params)
 
 # get RMSE estimate
 parameterisation.rmse()
 
 # get MAP estimate, starting at a random initial point in parameter space
-parameterisation.map(x0=[p.sample() for p in parameters]) 
+parameterisation.map(x0=[p.sample() for p in params]) 
 
 # or sample from posterior
-paramterisation.sample(1000, n_chains=4, ....)
+parameterisation.sample(1000, n_chains=4, ....)
 
 # or SOBER
 parameterisation.sober()
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 827de08b7..ad1e2317d 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -48,15 +48,17 @@
 from .priors import Gaussian, Uniform, Exponential
 
 #
-# Optimisation class
+# Simulation class
 #
-from .optimisation.base_optimisation import BaseOptimisation
-from .optimisation.nlopt_opt import nlopt_opt
+from .simulation import Simulation
+
 
 #
-# Utility classes and methods
+# Optimisation class
 #
-from .utils import Interpolant
+from .optimisation.base_optimisation import BaseOptimisation
+from .optimisation.nlopt_opt import nlopt_opt
+from .optimisation.scipy_opt import scipy_opt
 
 #
 # Remove any imported modules, so we don't expose them as part of pybop
diff --git a/pybop/optimisation/base_optimisation.py b/pybop/optimisation/base_optimisation.py
index 2fa16d5a7..fa16ba865 100644
--- a/pybop/optimisation/base_optimisation.py
+++ b/pybop/optimisation/base_optimisation.py
@@ -11,17 +11,17 @@ class BaseOptimisation(object):
     def __init__(self):
         self.name = "Base Optimisation"
 
-    def optimise(self, cost_function, method=None, x0=None, bounds=None, options=None):
+    def optimise(self, cost_function, x0, method=None, bounds=None, options=None):
         """
         Optimise method to be overloaded by child classes.
 
         """
         # Set up optimisation
         self.cost_function = cost_function
-        self.x0 = x0 or cost_function.x0
+        self.x0 = x0
         self.options = options
-        self.method = method or cost_function.default_method
-        self.bounds = bounds or cost_function.bounds
+        self.method = method
+        self.bounds = bounds
 
         # Run optimisation
         result = self._runoptimise(
diff --git a/pybop/optimisation/nlopt_opt.py b/pybop/optimisation/nlopt_opt.py
index b7817d861..987bbf88c 100644
--- a/pybop/optimisation/nlopt_opt.py
+++ b/pybop/optimisation/nlopt_opt.py
@@ -7,12 +7,12 @@ class nlopt_opt(pybop.BaseOptimisation):
     Wrapper class for the NLOpt optimisation class. Extends the BaseOptimisation class.
     """
 
-    def __init__(self, cost_function, method, x0, bounds, options):
+    def __init__(self, cost_function, x0, bounds, method=None, options=None):
         super().__init__()
         self.cost_function = cost_function
         self.method = method
-        self.x0 = x0 or cost_function.x0
-        self.bounds = bounds or cost_function.bounds
+        self.x0 = x0
+        self.bounds = bounds
         self.options = options
         self.name = "NLOpt Optimisation"
 
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index d0581258a..a0528acdc 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -8,24 +8,26 @@ class Parameterisation:
     Parameterisation class for pybop.
     """
 
-    def __init__(self, model, observations, parameters, x0=None, options=None):
+    def __init__(self, model, observations, fit_parameters, x0=None, options=None):
         self.model = model
-        self.parameters = parameters
+        self.fit_parameters = fit_parameters
         self.observations = observations
         self.options = options
-        self.default_parameters = (
-            parameters.default_parameters
-            or self.model.pybamm_model.default_parameter_values
-        )
+
         # To Do:
         # Split observations into forward model inputs/outputs
         # checks on observations and parameters
 
+        if options is not None:
+            self.parameter_set = options.parameter_set
+        else:
+            self.parameter_set = self.model.pybamm_model.default_parameter_values
+
         if x0 is None:
-            self.x0 = np.zeros(len(self.parameters))
+            self.x0 = np.ones(len(self.fit_parameters)) * 0.1
 
-        self.sim = pybop.Simulation(
-            self.model.pybamm_model, parameter_values=self.default_parameters
+        self.sim = pybamm.Simulation(
+            self.model.pybamm_model, parameter_values=self.parameter_set
         )
 
     def map(self, x0):
@@ -46,17 +48,25 @@ def rmse(self, method=None):
         """
 
         def step(x):
-            self.parameters.update(lambda x: {p: x[i] for i, p in self.parameters})
+            for i in range(len(self.fit_parameters)):
+                self.sim.parameter_set.update(
+                    {
+                        self.fit_parameters[i]
+                        .name: self.fit_parameters[i]
+                        .prior.rvs(1)[0]
+                    }
+                )
+
             y_hat = self.sim.solve()["Terminal voltage [V]"].data
             return np.sqrt(np.mean((self.observations["Voltage [V]"] - y_hat) ** 2))
 
         if method == "nlopt":
-            results = pybop.opt.nlopt(
-                step, self.x0, self.parameters.bounds, self.options
+            results = pybop.nlopt_opt(
+                step, self.x0, [p.bounds for p in self.fit_parameters], self.options
             )
         else:
-            results = pybop.opt.scipy(
-                step, self.x0, self.parameters.bounds, self.options
+            results = pybop.scipy_opt.optimise(
+                step, self.x0, [p.bounds for p in self.fit_parameters], self.options
             )
         return results
 
@@ -65,3 +75,5 @@ def mle(self, method):
         Maximum likelihood estimation.
         """
         pass
+
+        [p for p in self.fit_parameters]
diff --git a/pybop/parameters.py b/pybop/parameters.py
index 06f8748fa..e0933a6c0 100644
--- a/pybop/parameters.py
+++ b/pybop/parameters.py
@@ -1,3 +1,4 @@
+from typing import Any
 import pybop
 import pybamm
 
@@ -7,9 +8,10 @@ class Parameter:
     Class for creating parameters in pybop.
     """
 
-    def __init__(self, param, prior=None, bounds=None):
+    def __init__(self, param, value=None, prior=None, bounds=None):
         self.name = param
         self.prior = prior
+        self.value = value
         self.bounds = bounds
 
         # To Do:

From d0ac5a4decb243a83c13285de09d9cb7881abef7 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 2 Aug 2023 16:16:26 +0100
Subject: [PATCH 018/210] Initial RMSE optimisation complete, bugfixes, example
 usage

---
 examples/Chen_example.csv               | 1389 +++++++++++++++++++++++
 examples/Initial_API.py                 |   28 +-
 pybop/__init__.py                       |    5 +-
 pybop/observations.py                   |    3 +
 pybop/optimisation/base_optimisation.py |    9 +-
 pybop/optimisation/nlopt_opt.py         |   41 +-
 pybop/optimisation/scipy_opt.py         |    2 +-
 pybop/parameterisation.py               |   69 +-
 pybop/simulation.py                     |    6 +-
 9 files changed, 1479 insertions(+), 73 deletions(-)
 create mode 100644 examples/Chen_example.csv

diff --git a/examples/Chen_example.csv b/examples/Chen_example.csv
new file mode 100644
index 000000000..99d509e37
--- /dev/null
+++ b/examples/Chen_example.csv
@@ -0,0 +1,1389 @@
+Time [s],Current [A],Terminal voltage [V],Cycle,Step
+0.0,2.5,4.160927753511467,0.0,0.0
+1.0,2.5,4.157601075676489,0.0,0.0
+2.0,2.5,4.154490994259158,0.0,0.0
+3.0,2.5,4.151579735777284,0.0,0.0
+4.0,2.5,4.148849144222897,0.0,0.0
+5.0,2.5,4.146282844054771,0.0,0.0
+6.0,2.5,4.143866411877354,0.0,0.0
+7.0,2.5,4.14158685882251,0.0,0.0
+8.0,2.5,4.139432527584678,0.0,0.0
+9.0,2.5,4.1373935777586475,0.0,0.0
+10.0,2.5,4.135460207732003,0.0,0.0
+11.0,2.5,4.133623207865335,0.0,0.0
+12.0,2.5,4.131876288053798,0.0,0.0
+13.0,2.5,4.130210715881797,0.0,0.0
+14.0,2.5,4.128621343373044,0.0,0.0
+15.0,2.5,4.127102372425127,0.0,0.0
+16.0,2.5,4.1256486435085735,0.0,0.0
+17.0,2.5,4.124255949522701,0.0,0.0
+18.0,2.5,4.122920513753348,0.0,0.0
+19.0,2.5,4.121637691133036,0.0,0.0
+20.0,2.5,4.1204045357969346,0.0,0.0
+21.0,2.5,4.11921859787859,0.0,0.0
+22.0,2.5,4.118077799023512,0.0,0.0
+23.0,2.5,4.116977284631903,0.0,0.0
+24.0,2.5,4.115915940608523,0.0,0.0
+25.0,2.5,4.1148922144992515,0.0,0.0
+26.0,2.5,4.113904682884345,0.0,0.0
+27.0,2.5,4.112949360973445,0.0,0.0
+28.0,2.5,4.1120256982856205,0.0,0.0
+29.0,2.5,4.1111323466687715,0.0,0.0
+30.0,2.5,4.11026804945668,0.0,0.0
+31.0,2.5,4.109430366615028,0.0,0.0
+32.0,2.5,4.10861857427313,0.0,0.0
+33.0,2.5,4.1078315059979635,0.0,0.0
+34.0,2.5,4.107068078631514,0.0,0.0
+35.0,2.5,4.106326974076594,0.0,0.0
+36.0,2.5,4.105607359218209,0.0,0.0
+37.0,2.5,4.104908336227618,0.0,0.0
+38.0,2.5,4.1042290586599,0.0,0.0
+39.0,2.5,4.1035685421348544,0.0,0.0
+40.0,2.5,4.1029261716599965,0.0,0.0
+41.0,2.5,4.10230128451634,0.0,0.0
+42.0,2.5,4.101693276866006,0.0,0.0
+43.0,2.5,4.101101600597589,0.0,0.0
+44.0,2.5,4.100525726267815,0.0,0.0
+45.0,2.5,4.099964502197802,0.0,0.0
+46.0,2.5,4.099417847146635,0.0,0.0
+47.0,2.5,4.098885319974872,0.0,0.0
+48.0,2.5,4.098366517541476,0.0,0.0
+49.0,2.5,4.097861072571672,0.0,0.0
+50.0,2.5,4.097368645549943,0.0,0.0
+51.0,2.5,4.09688808870161,0.0,0.0
+52.0,2.5,4.0964195142422435,0.0,0.0
+53.0,2.5,4.095962581548417,0.0,0.0
+54.0,2.5,4.095516971816701,0.0,0.0
+55.0,2.5,4.095082386937095,0.0,0.0
+56.0,2.5,4.094658548400727,0.0,0.0
+57.0,2.5,4.09424471783567,0.0,0.0
+58.0,2.5,4.093840843122007,0.0,0.0
+59.0,2.5,4.093446656829645,0.0,0.0
+60.0,2.5,4.093061889347226,0.0,0.0
+61.0,2.5,4.092686283528498,0.0,0.0
+62.0,2.5,4.092319594146908,0.0,0.0
+63.0,2.5,4.091961442559183,0.0,0.0
+64.0,2.5,4.091611652591053,0.0,0.0
+65.0,2.5,4.091270004239898,0.0,0.0
+66.0,2.5,4.090936275768548,0.0,0.0
+67.0,2.5,4.090610254161096,0.0,0.0
+68.0,2.5,4.090291734778852,0.0,0.0
+69.0,2.5,4.089980493354697,0.0,0.0
+70.0,2.5,4.089676347645338,0.0,0.0
+71.0,2.5,4.089379115842617,0.0,0.0
+72.0,2.5,4.089088619679142,0.0,0.0
+73.0,2.5,4.088804687536027,0.0,0.0
+74.0,2.5,4.088527154174912,0.0,0.0
+75.0,2.5,4.088255804667979,0.0,0.0
+76.0,2.5,4.087990501979117,0.0,0.0
+77.0,2.5,4.087731105819368,0.0,0.0
+78.0,2.5,4.087477471187321,0.0,0.0
+79.0,2.5,4.08722945847457,0.0,0.0
+80.0,2.5,4.086986933232946,0.0,0.0
+81.0,2.5,4.086749765949343,0.0,0.0
+82.0,2.5,4.0865178318285365,0.0,0.0
+83.0,2.5,4.086291010583731,0.0,0.0
+84.0,2.5,4.0860691862348055,0.0,0.0
+85.0,2.5,4.085852132426833,0.0,0.0
+86.0,2.5,4.085639716421859,0.0,0.0
+87.0,2.5,4.085431899989458,0.0,0.0
+88.0,2.5,4.085228574804643,0.0,0.0
+89.0,2.5,4.0850296359704155,0.0,0.0
+90.0,2.5,4.084834981878631,0.0,0.0
+91.0,2.5,4.084644514076079,0.0,0.0
+92.0,2.5,4.0844581371360364,0.0,0.0
+93.0,2.5,4.084275758534926,0.0,0.0
+94.0,2.5,4.084097288534272,0.0,0.0
+95.0,2.5,4.083922580111833,0.0,0.0
+96.0,2.5,4.083751443484631,0.0,0.0
+97.0,2.5,4.083583895147556,0.0,0.0
+98.0,2.5,4.083419848098537,0.0,0.0
+99.0,2.5,4.083259217539309,0.0,0.0
+100.0,2.5,4.083101920805127,0.0,0.0
+101.0,2.5,4.082947877296784,0.0,0.0
+102.0,2.5,4.08279700841526,0.0,0.0
+103.0,2.5,4.0826492374987975,0.0,0.0
+104.0,2.5,4.082504489762482,0.0,0.0
+105.0,2.5,4.0823626853081025,0.0,0.0
+106.0,2.5,4.082223665259328,0.0,0.0
+107.0,2.5,4.082087423199833,0.0,0.0
+108.0,2.5,4.0819538876851205,0.0,0.0
+109.0,2.5,4.081822988827989,0.0,0.0
+110.0,2.5,4.081694658258913,0.0,0.0
+111.0,2.5,4.081568829087869,0.0,0.0
+112.0,2.5,4.081445435866936,0.0,0.0
+113.0,2.5,4.081324414554147,0.0,0.0
+114.0,2.5,4.0812057024784885,0.0,0.0
+115.0,2.5,4.081089238305971,0.0,0.0
+116.0,2.5,4.08097494232456,0.0,0.0
+117.0,2.5,4.080862764679917,0.0,0.0
+118.0,2.5,4.080752650215037,0.0,0.0
+119.0,2.5,4.080644541698893,0.0,0.0
+120.0,2.5,4.080538383064326,0.0,0.0
+121.0,2.5,4.080434119381322,0.0,0.0
+122.0,2.5,4.080331696830786,0.0,0.0
+123.0,2.5,4.080231062679405,0.0,0.0
+124.0,2.5,4.080132165254847,0.0,0.0
+125.0,2.5,4.0800349539220875,0.0,0.0
+126.0,2.5,4.079939376720904,0.0,0.0
+127.0,2.5,4.0798453847155685,0.0,0.0
+128.0,2.5,4.079752931441735,0.0,0.0
+129.0,2.5,4.079661970018632,0.0,0.0
+130.0,2.5,4.079572454489028,0.0,0.0
+131.0,2.5,4.0794843397994525,0.0,0.0
+132.0,2.5,4.079397581781398,0.0,0.0
+133.0,2.5,4.079312137132995,0.0,0.0
+134.0,2.5,4.079227963401337,0.0,0.0
+135.0,2.5,4.079145018965368,0.0,0.0
+136.0,2.5,4.0790632581457285,0.0,0.0
+137.0,2.5,4.078982634181892,0.0,0.0
+138.0,2.5,4.07890311548313,0.0,0.0
+139.0,2.5,4.078824663331393,0.0,0.0
+140.0,2.5,4.078747239768525,0.0,0.0
+141.0,2.5,4.078670807581731,0.0,0.0
+142.0,2.5,4.078595330289514,0.0,0.0
+143.0,2.5,4.078520772128148,0.0,0.0
+144.0,2.5,4.078447098038876,0.0,0.0
+145.0,2.5,4.078374273655544,0.0,0.0
+146.0,2.5,4.078302265292856,0.0,0.0
+147.0,2.5,4.078231039935201,0.0,0.0
+148.0,2.5,4.078160565225972,0.0,0.0
+149.0,2.5,4.078090809457463,0.0,0.0
+150.0,2.5,4.0780217415612645,0.0,0.0
+151.0,2.5,4.077953331099245,0.0,0.0
+152.0,2.5,4.077885548254853,0.0,0.0
+153.0,2.5,4.0778183457825286,0.0,0.0
+154.0,2.5,4.077751683756053,0.0,0.0
+155.0,2.5,4.077685554179354,0.0,0.0
+156.0,2.5,4.077619928841112,0.0,0.0
+157.0,2.5,4.077554780081825,0.0,0.0
+158.0,2.5,4.077490080785911,0.0,0.0
+159.0,2.5,4.07742580437427,0.0,0.0
+160.0,2.5,4.077361924797133,0.0,0.0
+161.0,2.5,4.077298416527288,0.0,0.0
+162.0,2.5,4.077235254553625,0.0,0.0
+163.0,2.5,4.077172414375023,0.0,0.0
+164.0,2.5,4.077109871994523,0.0,0.0
+165.0,2.5,4.077047603913931,0.0,0.0
+166.0,2.5,4.076985587128584,0.0,0.0
+167.0,2.5,4.0769237991225085,0.0,0.0
+168.0,2.5,4.0768622178638925,0.0,0.0
+169.0,2.5,4.076800821800829,0.0,0.0
+170.0,2.5,4.076739567832886,0.0,0.0
+171.0,2.5,4.076678430698656,0.0,0.0
+172.0,2.5,4.076617407022613,0.0,0.0
+173.0,2.5,4.076556476171565,0.0,0.0
+174.0,2.5,4.076495617921502,0.0,0.0
+175.0,2.5,4.076434812452586,0.0,0.0
+176.0,2.5,4.076374040344133,0.0,0.0
+177.0,2.5,4.076313282569893,0.0,0.0
+178.0,2.5,4.076252520493434,0.0,0.0
+179.0,2.5,4.0761917358636595,0.0,0.0
+180.0,2.5,4.076130910810625,0.0,0.0
+181.0,2.5,4.076070027841338,0.0,0.0
+182.0,2.5,4.076009069835855,0.0,0.0
+183.0,2.5,4.075948020043392,0.0,0.0
+184.0,2.5,4.075886862078759,0.0,0.0
+185.0,2.5,4.075825579918716,0.0,0.0
+186.0,2.5,4.075764157898728,0.0,0.0
+187.0,2.5,4.075702566041725,0.0,0.0
+188.0,2.5,4.075640790574839,0.0,0.0
+189.0,2.5,4.075578824437293,0.0,0.0
+190.0,2.5,4.075516652749117,0.0,0.0
+191.0,2.5,4.07545426093731,0.0,0.0
+192.0,2.5,4.075391634731802,0.0,0.0
+193.0,2.5,4.075328760161517,0.0,0.0
+194.0,2.5,4.075265623550525,0.0,0.0
+195.0,2.5,4.0752022115142985,0.0,0.0
+196.0,2.5,4.075138510956072,0.0,0.0
+197.0,2.5,4.075074509063162,0.0,0.0
+198.0,2.5,4.075010193303642,0.0,0.0
+199.0,2.5,4.074945551422783,0.0,0.0
+200.0,2.5,4.074880571439843,0.0,0.0
+201.0,2.5,4.0748152416447745,0.0,0.0
+202.0,2.5,4.074749550595088,0.0,0.0
+203.0,2.5,4.074683487112824,0.0,0.0
+204.0,2.5,4.074617034797386,0.0,0.0
+205.0,2.5,4.074550184650403,0.0,0.0
+206.0,2.5,4.074482928099226,0.0,0.0
+207.0,2.5,4.074415254780117,0.0,0.0
+208.0,2.5,4.074347154566803,0.0,0.0
+209.0,2.5,4.074278617567291,0.0,0.0
+210.0,2.5,4.074209634120945,0.0,0.0
+211.0,2.5,4.074140194795576,0.0,0.0
+212.0,2.5,4.074070290384515,0.0,0.0
+213.0,2.5,4.073999911903955,0.0,0.0
+214.0,2.5,4.0739290505900705,0.0,0.0
+215.0,2.5,4.073857697896411,0.0,0.0
+216.0,2.5,4.073785845491324,0.0,0.0
+217.0,2.5,4.073713485255321,0.0,0.0
+218.0,2.5,4.0736406092786925,0.0,0.0
+219.0,2.5,4.073567209858991,0.0,0.0
+220.0,2.5,4.073493279498674,0.0,0.0
+221.0,2.5,4.073418808567246,0.0,0.0
+222.0,2.5,4.07334379108645,0.0,0.0
+223.0,2.5,4.073268220616229,0.0,0.0
+224.0,2.5,4.07319209037358,0.0,0.0
+225.0,2.5,4.073115393764511,0.0,0.0
+226.0,2.5,4.073038124381744,0.0,0.0
+227.0,2.5,4.072960276002726,0.0,0.0
+228.0,2.5,4.072881842587348,0.0,0.0
+229.0,2.5,4.072802818276068,0.0,0.0
+230.0,2.5,4.072723197387714,0.0,0.0
+231.0,2.5,4.0726429744177235,0.0,0.0
+232.0,2.5,4.072562144036067,0.0,0.0
+233.0,2.5,4.072480701085468,0.0,0.0
+234.0,2.5,4.072398640579519,0.0,0.0
+235.0,2.5,4.072315957700959,0.0,0.0
+236.0,2.5,4.072232647799895,0.0,0.0
+237.0,2.5,4.072148706392074,0.0,0.0
+238.0,2.5,4.072064120134619,0.0,0.0
+239.0,2.5,4.071978890849423,0.0,0.0
+240.0,2.5,4.0718930154476585,0.0,0.0
+241.0,2.5,4.071806489930813,0.0,0.0
+242.0,2.5,4.07171931045325,0.0,0.0
+243.0,2.5,4.071631473320771,0.0,0.0
+244.0,2.5,4.071542974989084,0.0,0.0
+245.0,2.5,4.071453812062383,0.0,0.0
+246.0,2.5,4.071363981291887,0.0,0.0
+247.0,2.5,4.0712734795745265,0.0,0.0
+248.0,2.5,4.0711823039515815,0.0,0.0
+249.0,2.5,4.071090451607358,0.0,0.0
+250.0,2.5,4.070997919867907,0.0,0.0
+251.0,2.5,4.070904706199816,0.0,0.0
+252.0,2.5,4.070810808208975,0.0,0.0
+253.0,2.5,4.070716223639418,0.0,0.0
+254.0,2.5,4.070620950372149,0.0,0.0
+255.0,2.5,4.070524986424056,0.0,0.0
+256.0,2.5,4.07042832994678,0.0,0.0
+257.0,2.5,4.070330979225705,0.0,0.0
+258.0,2.5,4.070232932678884,0.0,0.0
+259.0,2.5,4.070134188856022,0.0,0.0
+260.0,2.5,4.070034746437567,0.0,0.0
+261.0,2.5,4.069934604233671,0.0,0.0
+262.0,2.5,4.069833761183301,0.0,0.0
+263.0,2.5,4.069732216353356,0.0,0.0
+264.0,2.5,4.069629962608646,0.0,0.0
+265.0,2.5,4.069526974796968,0.0,0.0
+266.0,2.5,4.069423277465929,0.0,0.0
+267.0,2.5,4.06931886975559,0.0,0.0
+268.0,2.5,4.0692137509128425,0.0,0.0
+269.0,2.5,4.069107920290343,0.0,0.0
+270.0,2.5,4.069001377345511,0.0,0.0
+271.0,2.5,4.0688941216394525,0.0,0.0
+272.0,2.5,4.068786152836081,0.0,0.0
+273.0,2.5,4.068677470701036,0.0,0.0
+274.0,2.5,4.068568075100781,0.0,0.0
+275.0,2.5,4.068457966001725,0.0,0.0
+276.0,2.5,4.068347143469275,0.0,0.0
+277.0,2.5,4.068235607666899,0.0,0.0
+278.0,2.5,4.0681233588553765,0.0,0.0
+279.0,2.5,4.068010397391818,0.0,0.0
+280.0,2.5,4.067896723728946,0.0,0.0
+281.0,2.5,4.067782338414229,0.0,0.0
+282.0,2.5,4.067667242089039,0.0,0.0
+283.0,2.5,4.067551435487968,0.0,0.0
+284.0,2.5,4.0674349194379875,0.0,0.0
+285.0,2.5,4.067317694857721,0.0,0.0
+286.0,2.5,4.067199762756734,0.0,0.0
+287.0,2.5,4.067081124234777,0.0,0.0
+288.0,2.5,4.066961780481108,0.0,0.0
+289.0,2.5,4.066841732773772,0.0,0.0
+290.0,2.5,4.066720982478961,0.0,0.0
+291.0,2.5,4.0665995265560175,0.0,0.0
+292.0,2.5,4.066477362635106,0.0,0.0
+293.0,2.5,4.066354495157822,0.0,0.0
+294.0,2.5,4.066230925036236,0.0,0.0
+295.0,2.5,4.066106653219106,0.0,0.0
+296.0,2.5,4.065981680690279,0.0,0.0
+297.0,2.5,4.065856008467152,0.0,0.0
+298.0,2.5,4.065729637599162,0.0,0.0
+299.0,2.5,4.065602569166355,0.0,0.0
+300.0,2.5,4.065474804277807,0.0,0.0
+300.000000001,0.0,4.083337104220067,0.0,1.0
+301.0,0.0,4.08411857143703,0.0,1.0
+302.0,0.0,4.084823935791453,0.0,1.0
+303.0,0.0,4.085462722054559,0.0,1.0
+304.0,0.0,4.086043182007179,0.0,1.0
+305.0,0.0,4.0865724051017125,0.0,1.0
+306.0,0.0,4.087056427997617,0.0,1.0
+307.0,0.0,4.087500374077019,0.0,1.0
+308.0,0.0,4.08790902639921,0.0,1.0
+309.0,0.0,4.088286058882586,0.0,1.0
+310.0,0.0,4.088635268080958,0.0,1.0
+311.0,0.0,4.088959341219949,0.0,1.0
+312.0,0.0,4.089261112677142,0.0,1.0
+313.0,0.0,4.089542668887757,0.0,1.0
+314.0,0.0,4.089806112806356,0.0,1.0
+315.0,0.0,4.090053122784463,0.0,1.0
+316.0,0.0,4.090285221354024,0.0,1.0
+317.0,0.0,4.090503745704817,0.0,1.0
+318.0,0.0,4.090710046396893,0.0,1.0
+319.0,0.0,4.090905114792385,0.0,1.0
+320.0,0.0,4.091089906030976,0.0,1.0
+321.0,0.0,4.091265371880813,0.0,1.0
+322.0,0.0,4.0914322422960385,0.0,1.0
+323.0,0.0,4.091591184363877,0.0,1.0
+324.0,0.0,4.0917428222357195,0.0,1.0
+325.0,0.0,4.091887766010014,0.0,1.0
+326.0,0.0,4.092026518729413,0.0,1.0
+327.0,0.0,4.0921594814565765,0.0,1.0
+328.0,0.0,4.092287017515516,0.0,1.0
+329.0,0.0,4.09240944878535,0.0,1.0
+330.0,0.0,4.092527417454655,0.0,1.0
+331.0,0.0,4.092641028661417,0.0,1.0
+332.0,0.0,4.092750526981569,0.0,1.0
+333.0,0.0,4.092856120722325,0.0,1.0
+334.0,0.0,4.092958108470949,0.0,1.0
+335.0,0.0,4.093056869083674,0.0,1.0
+336.0,0.0,4.093152462953598,0.0,1.0
+337.0,0.0,4.09324505576939,0.0,1.0
+338.0,0.0,4.093334793123759,0.0,1.0
+339.0,0.0,4.093421944422245,0.0,1.0
+340.0,0.0,4.093506649887989,0.0,1.0
+341.0,0.0,4.093589011210733,0.0,1.0
+342.0,0.0,4.093669150941425,0.0,1.0
+343.0,0.0,4.093747185325492,0.0,1.0
+344.0,0.0,4.093823278769266,0.0,1.0
+345.0,0.0,4.093897505111239,0.0,1.0
+346.0,0.0,4.09396995992965,0.0,1.0
+347.0,0.0,4.094040730949751,0.0,1.0
+348.0,0.0,4.09410990799957,0.0,1.0
+349.0,0.0,4.094177578696497,0.0,1.0
+350.0,0.0,4.094243806711216,0.0,1.0
+351.0,0.0,4.094308657608522,0.0,1.0
+352.0,0.0,4.094372191189041,0.0,1.0
+353.0,0.0,4.094434507708313,0.0,1.0
+354.0,0.0,4.094495651938244,0.0,1.0
+355.0,0.0,4.094555664953677,0.0,1.0
+356.0,0.0,4.094614591157936,0.0,1.0
+357.0,0.0,4.094672469999011,0.0,1.0
+358.0,0.0,4.094729336096383,0.0,1.0
+359.0,0.0,4.0947852193522305,0.0,1.0
+360.0,0.0,4.094840145048124,0.0,1.0
+361.0,0.0,4.094894277223266,0.0,1.0
+362.0,0.0,4.0949475944493345,0.0,1.0
+363.0,0.0,4.0950000983298045,0.0,1.0
+364.0,0.0,4.095051812803234,0.0,1.0
+365.0,0.0,4.095102758594911,0.0,1.0
+366.0,0.0,4.0951529532665045,0.0,1.0
+367.0,0.0,4.095202411257952,0.0,1.0
+368.0,0.0,4.095251143922228,0.0,1.0
+369.0,0.0,4.095299315797117,0.0,1.0
+370.0,0.0,4.09534688558349,0.0,1.0
+371.0,0.0,4.0953938468241775,0.0,1.0
+372.0,0.0,4.095440216551898,0.0,1.0
+373.0,0.0,4.095486010140206,0.0,1.0
+374.0,0.0,4.095531241327584,0.0,1.0
+375.0,0.0,4.095575922238512,0.0,1.0
+376.0,0.0,4.095620063401408,0.0,1.0
+377.0,0.0,4.095663760543893,0.0,1.0
+378.0,0.0,4.095706993028133,0.0,1.0
+379.0,0.0,4.095749763336209,0.0,1.0
+380.0,0.0,4.095792085594328,0.0,1.0
+381.0,0.0,4.095833973140304,0.0,1.0
+382.0,0.0,4.095875438539559,0.0,1.0
+383.0,0.0,4.09591649359953,0.0,1.0
+384.0,0.0,4.0959571493826985,0.0,1.0
+385.0,0.0,4.095997438202164,0.0,1.0
+386.0,0.0,4.096037362024716,0.0,1.0
+387.0,0.0,4.0960769292507475,0.0,1.0
+388.0,0.0,4.096116150545187,0.0,1.0
+389.0,0.0,4.096155036066913,0.0,1.0
+390.0,0.0,4.096193595477757,0.0,1.0
+391.0,0.0,4.096231837950833,0.0,1.0
+392.0,0.0,4.096269772177853,0.0,1.0
+393.0,0.0,4.096307408860641,0.0,1.0
+394.0,0.0,4.096344754822972,0.0,1.0
+395.0,0.0,4.096381817330585,0.0,1.0
+396.0,0.0,4.096418603484685,0.0,1.0
+397.0,0.0,4.096455119952227,0.0,1.0
+398.0,0.0,4.096491372969539,0.0,1.0
+399.0,0.0,4.096527368345044,0.0,1.0
+400.0,0.0,4.096563111461736,0.0,1.0
+401.0,0.0,4.096598627108964,0.0,1.0
+402.0,0.0,4.09663391003031,0.0,1.0
+403.0,0.0,4.096668963385099,0.0,1.0
+404.0,0.0,4.096703791876213,0.0,1.0
+405.0,0.0,4.096738399802303,0.0,1.0
+406.0,0.0,4.096772791057752,0.0,1.0
+407.0,0.0,4.096806969132171,0.0,1.0
+408.0,0.0,4.096840937109579,0.0,1.0
+409.0,0.0,4.0968746976672685,0.0,1.0
+410.0,0.0,4.096908253074219,0.0,1.0
+411.0,0.0,4.096941605189362,0.0,1.0
+412.0,0.0,4.096974755459436,0.0,1.0
+413.0,0.0,4.097007704916578,0.0,1.0
+414.0,0.0,4.097040480435536,0.0,1.0
+415.0,0.0,4.097073076123438,0.0,1.0
+416.0,0.0,4.097105491844794,0.0,1.0
+417.0,0.0,4.097137731121214,0.0,1.0
+418.0,0.0,4.09716979741555,0.0,1.0
+419.0,0.0,4.0972016941341565,0.0,1.0
+420.0,0.0,4.097233424628999,0.0,1.0
+420.000000001,-2.5,4.115314153407617,0.0,2.0
+421.0,-2.5,4.11580126816336,0.0,2.0
+422.0,-2.5,4.116287981535286,0.0,2.0
+423.0,-2.5,4.116777990744232,0.0,2.0
+424.0,-2.5,4.117273191364564,0.0,2.0
+425.0,-2.5,4.117774915639592,0.0,2.0
+426.0,-2.5,4.118284040604012,0.0,2.0
+427.0,-2.5,4.118801048057358,0.0,2.0
+428.0,-2.5,4.119326515995133,0.0,2.0
+429.0,-2.5,4.119860399527127,0.0,2.0
+430.0,-2.5,4.120403180460219,0.0,2.0
+431.0,-2.5,4.120954562276548,0.0,2.0
+432.0,-2.5,4.121514781148596,0.0,2.0
+433.0,-2.5,4.122083516198534,0.0,2.0
+434.0,-2.5,4.1226607942227185,0.0,2.0
+435.0,-2.5,4.123246364371904,0.0,2.0
+436.0,-2.5,4.123840020969835,0.0,2.0
+437.0,-2.5,4.124441526266611,0.0,2.0
+438.0,-2.5,4.125050951332003,0.0,2.0
+439.0,-2.5,4.125667962076965,0.0,2.0
+440.0,-2.5,4.126292367649658,0.0,2.0
+441.0,-2.5,4.126924195444504,0.0,2.0
+442.0,-2.5,4.127563200844878,0.0,2.0
+443.0,-2.5,4.12820917027299,0.0,2.0
+444.0,-2.5,4.128861945806709,0.0,2.0
+445.0,-2.5,4.129521510767318,0.0,2.0
+446.0,-2.5,4.130187710940636,0.0,2.0
+447.0,-2.5,4.130860241429103,0.0,2.0
+448.0,-2.5,4.131538785425746,0.0,2.0
+449.0,-2.5,4.132223012474197,0.0,2.0
+450.0,-2.5,4.1329137060465575,0.0,2.0
+451.0,-2.5,4.1336100747288285,0.0,2.0
+452.0,-2.5,4.134311816352641,0.0,2.0
+453.0,-2.5,4.135018566209412,0.0,2.0
+454.0,-2.5,4.135730402582563,0.0,2.0
+455.0,-2.5,4.136447738344287,0.0,2.0
+456.0,-2.5,4.137169913020526,0.0,2.0
+457.0,-2.5,4.137896687838134,0.0,2.0
+458.0,-2.5,4.13862779190947,0.0,2.0
+459.0,-2.5,4.139363583911809,0.0,2.0
+460.0,-2.5,4.140103858101116,0.0,2.0
+461.0,-2.5,4.140848348950613,0.0,2.0
+462.0,-2.5,4.1415969032465085,0.0,2.0
+463.0,-2.5,4.142349392150335,0.0,2.0
+464.0,-2.5,4.14310594336973,0.0,2.0
+465.0,-2.5,4.143866307267678,0.0,2.0
+466.0,-2.5,4.144630367242537,0.0,2.0
+467.0,-2.5,4.14539800048952,0.0,2.0
+468.0,-2.5,4.146169135105322,0.0,2.0
+469.0,-2.5,4.1469437054342855,0.0,2.0
+470.0,-2.5,4.147721556947632,0.0,2.0
+471.0,-2.5,4.148502566664649,0.0,2.0
+472.0,-2.5,4.149286603209791,0.0,2.0
+473.0,-2.5,4.150073818632925,0.0,2.0
+474.0,-2.5,4.150864013380658,0.0,2.0
+475.0,-2.5,4.151657032252208,0.0,2.0
+476.0,-2.5,4.152452742603151,0.0,2.0
+477.0,-2.5,4.153250998409786,0.0,2.0
+478.0,-2.5,4.154051639048997,0.0,2.0
+479.0,-2.5,4.154854488114104,0.0,2.0
+480.0,-2.5,4.155659352267687,0.0,2.0
+481.0,-2.5,4.156467062646512,0.0,2.0
+482.0,-2.5,4.157276995734728,0.0,2.0
+483.0,-2.5,4.158088929742623,0.0,2.0
+484.0,-2.5,4.158902722580855,0.0,2.0
+485.0,-2.5,4.159718220883334,0.0,2.0
+486.0,-2.5,4.160535259263556,0.0,2.0
+487.0,-2.5,4.161353659596958,0.0,2.0
+488.0,-2.5,4.162173230329908,0.0,2.0
+489.0,-2.5,4.162995033345934,0.0,2.0
+490.0,-2.5,4.163818275506938,0.0,2.0
+491.0,-2.5,4.1646427911171955,0.0,2.0
+492.0,-2.5,4.165468472838174,0.0,2.0
+493.0,-2.5,4.166295209164681,0.0,2.0
+494.0,-2.5,4.167122884071705,0.0,2.0
+495.0,-2.5,4.16795137667258,0.0,2.0
+496.0,-2.5,4.168780560888696,0.0,2.0
+497.0,-2.5,4.1696110735551075,0.0,2.0
+498.0,-2.5,4.170442384273522,0.0,2.0
+499.0,-2.5,4.171274413467192,0.0,2.0
+500.0,-2.5,4.1721070926304,0.0,2.0
+501.0,-2.5,4.172940353307712,0.0,2.0
+502.0,-2.5,4.173774126914772,0.0,2.0
+503.0,-2.5,4.17460834456357,0.0,2.0
+504.0,-2.5,4.175442940725014,0.0,2.0
+505.0,-2.5,4.176278044626564,0.0,2.0
+506.0,-2.5,4.17711347773185,0.0,2.0
+507.0,-2.5,4.177949187515572,0.0,2.0
+508.0,-2.5,4.178785121997135,0.0,2.0
+509.0,-2.5,4.179621229611505,0.0,2.0
+510.0,-2.5,4.180457459083005,0.0,2.0
+511.0,-2.5,4.181293759302215,0.0,2.0
+512.0,-2.5,4.182130080544206,0.0,2.0
+513.0,-2.5,4.182966395471069,0.0,2.0
+514.0,-2.5,4.1838026396555374,0.0,2.0
+515.0,-2.5,4.184638763875634,0.0,2.0
+516.0,-2.5,4.185474718707162,0.0,2.0
+517.0,-2.5,4.186310454421232,0.0,2.0
+518.0,-2.5,4.187145920884718,0.0,2.0
+519.0,-2.5,4.187981067463743,0.0,2.0
+520.0,-2.5,4.188815859287128,0.0,2.0
+521.0,-2.5,4.1896504023686605,0.0,2.0
+522.0,-2.5,4.190484538000852,0.0,2.0
+523.0,-2.5,4.191318220929476,0.0,2.0
+524.0,-2.5,4.192151405074641,0.0,2.0
+525.0,-2.5,4.1929840434470975,0.0,2.0
+526.0,-2.5,4.19381608806758,0.0,2.0
+527.0,-2.5,4.1946474898890145,0.0,2.0
+528.0,-2.5,4.195478198721599,0.0,2.0
+529.0,-2.5,4.196308163160786,0.0,2.0
+530.0,-2.5,4.197137330518019,0.0,2.0
+531.0,-2.5,4.197965646754283,0.0,2.0
+532.0,-2.5,4.198793056416422,0.0,2.0
+533.0,-2.5,4.1996195697873056,0.0,2.0
+534.0,-2.5,4.200445644043602,0.0,2.0
+535.0,-2.5,4.201270821156214,0.0,2.0
+536.0,-2.5,4.20209506239229,0.0,2.0
+537.0,-2.5,4.202918328424658,0.0,2.0
+538.0,-2.5,4.203740579283007,0.0,2.0
+539.0,-2.5,4.2045617743068116,0.0,2.0
+540.0,-2.5,4.205381872100225,0.0,2.0
+541.0,-2.5,4.206200830488596,0.0,2.0
+542.0,-2.5,4.207018606476822,0.0,2.0
+543.0,-2.5,4.207835156209456,0.0,2.0
+544.0,-2.5,4.208650434932421,0.0,2.0
+545.0,-2.5,4.209464396956459,0.0,2.0
+546.0,-2.5,4.210277075901499,0.0,2.0
+547.0,-2.5,4.211088946655144,0.0,2.0
+548.0,-2.5,4.211899546903226,0.0,2.0
+549.0,-2.5,4.212708850053829,0.0,2.0
+550.0,-2.5,4.213516829576945,0.0,2.0
+551.0,-2.5,4.2143234589756196,0.0,2.0
+552.0,-2.5,4.215128711758133,0.0,2.0
+553.0,-2.5,4.215932561410892,0.0,2.0
+554.0,-2.5,4.216734981372289,0.0,2.0
+555.0,-2.5,4.217535945007451,0.0,2.0
+556.0,-2.5,4.218335425583666,0.0,2.0
+557.0,-2.5,4.219133396246829,0.0,2.0
+558.0,-2.5,4.219929829998552,0.0,2.0
+559.0,-2.5,4.220724737110144,0.0,2.0
+560.0,-2.5,4.221518305656589,0.0,2.0
+561.0,-2.5,4.222310344723525,0.0,2.0
+562.0,-2.5,4.223100839241547,0.0,2.0
+563.0,-2.5,4.223889774647726,0.0,2.0
+564.0,-2.5,4.224677136866221,0.0,2.0
+565.0,-2.5,4.2254629122892915,0.0,2.0
+566.0,-2.5,4.226247087758805,0.0,2.0
+567.0,-2.5,4.227029650547929,0.0,2.0
+568.0,-2.5,4.227810588343391,0.0,2.0
+569.0,-2.5,4.228589889227962,0.0,2.0
+570.0,-2.5,4.229367541663446,0.0,2.0
+570.000000001,0.0,4.210029284710582,0.0,3.0
+571.0,0.0,4.207213583314949,0.0,3.0
+572.0,0.0,4.2045971631097725,0.0,3.0
+573.0,0.0,4.202161839008122,0.0,3.0
+574.0,0.0,4.199890898745848,0.0,3.0
+575.0,0.0,4.197769335614359,0.0,3.0
+576.0,0.0,4.195783879691244,0.0,3.0
+577.0,0.0,4.193922813568967,0.0,3.0
+578.0,0.0,4.19217522692314,0.0,3.0
+579.0,0.0,4.1905311507282805,0.0,3.0
+580.0,0.0,4.1889814120405005,0.0,3.0
+581.0,0.0,4.187518661668531,0.0,3.0
+582.0,0.0,4.186134907137069,0.0,3.0
+583.0,0.0,4.184824930563117,0.0,3.0
+584.0,0.0,4.1835819030923505,0.0,3.0
+585.0,0.0,4.182401580048656,0.0,3.0
+586.0,0.0,4.181278703809178,0.0,3.0
+587.0,0.0,4.180209910457267,0.0,3.0
+588.0,0.0,4.179190532538634,0.0,3.0
+589.0,0.0,4.178216902784102,0.0,3.0
+590.0,0.0,4.177286614461846,0.0,3.0
+591.0,0.0,4.176396007237823,0.0,3.0
+592.0,0.0,4.175542354184778,0.0,3.0
+593.0,0.0,4.17472364073388,0.0,3.0
+594.0,0.0,4.17393750941874,0.0,3.0
+595.0,0.0,4.173181867365283,0.0,3.0
+596.0,0.0,4.172454471651524,0.0,3.0
+597.0,0.0,4.171754031090117,0.0,3.0
+598.0,0.0,4.171079263572318,0.0,3.0
+599.0,0.0,4.17042913754243,0.0,3.0
+600.0,0.0,4.16980120491864,0.0,3.0
+601.0,0.0,4.169194204224323,0.0,3.0
+602.0,0.0,4.168607759644541,0.0,3.0
+603.0,0.0,4.168041150823556,0.0,3.0
+604.0,0.0,4.167493774627918,0.0,3.0
+605.0,0.0,4.166962625224374,0.0,3.0
+606.0,0.0,4.166448148159899,0.0,3.0
+607.0,0.0,4.165949685934117,0.0,3.0
+608.0,0.0,4.165466676378533,0.0,3.0
+609.0,0.0,4.164998206772577,0.0,3.0
+610.0,0.0,4.1645429199915345,0.0,3.0
+611.0,0.0,4.1641007216410015,0.0,3.0
+612.0,0.0,4.1636710663369385,0.0,3.0
+613.0,0.0,4.16325346065624,0.0,3.0
+614.0,0.0,4.1628471299862,0.0,3.0
+615.0,0.0,4.162451571498087,0.0,3.0
+616.0,0.0,4.162066421723589,0.0,3.0
+617.0,0.0,4.16169126270297,0.0,3.0
+618.0,0.0,4.161325704401287,0.0,3.0
+619.0,0.0,4.1609692153506135,0.0,3.0
+620.0,0.0,4.160621529491947,0.0,3.0
+621.0,0.0,4.160282325457457,0.0,3.0
+622.0,0.0,4.159951311130621,0.0,3.0
+623.0,0.0,4.159628069141708,0.0,3.0
+624.0,0.0,4.159312117980469,0.0,3.0
+625.0,0.0,4.159003373346276,0.0,3.0
+626.0,0.0,4.158701613036827,0.0,3.0
+627.0,0.0,4.158406643057931,0.0,3.0
+628.0,0.0,4.158118297327637,0.0,3.0
+629.0,0.0,4.157836437392334,0.0,3.0
+630.0,0.0,4.157560952154421,0.0,3.0
+631.0,0.0,4.157291261979277,0.0,3.0
+632.0,0.0,4.157026688466741,0.0,3.0
+633.0,0.0,4.156767652572423,0.0,3.0
+634.0,0.0,4.156514032810383,0.0,3.0
+635.0,0.0,4.156265726685805,0.0,3.0
+636.0,0.0,4.15602265052153,0.0,3.0
+637.0,0.0,4.155784739291854,0.0,3.0
+638.0,0.0,4.155551946463349,0.0,3.0
+639.0,0.0,4.1553237049393745,0.0,3.0
+640.0,0.0,4.155099377411003,0.0,3.0
+641.0,0.0,4.154879446227916,0.0,3.0
+642.0,0.0,4.154663814247297,0.0,3.0
+643.0,0.0,4.154452393741274,0.0,3.0
+644.0,0.0,4.154245106315513,0.0,3.0
+645.0,0.0,4.154041882830858,0.0,3.0
+646.0,0.0,4.153842663327825,0.0,3.0
+647.0,0.0,4.153647101167119,0.0,3.0
+648.0,0.0,4.153454830558504,0.0,3.0
+649.0,0.0,4.153266067313362,0.0,3.0
+650.0,0.0,4.153080721404211,0.0,3.0
+651.0,0.0,4.152898707130987,0.0,3.0
+652.0,0.0,4.152719943082192,0.0,3.0
+653.0,0.0,4.152544352097112,0.0,3.0
+654.0,0.0,4.152371861229269,0.0,3.0
+655.0,0.0,4.1522023277734,0.0,3.0
+656.0,0.0,4.152035610979901,0.0,3.0
+657.0,0.0,4.1518717097175015,0.0,3.0
+658.0,0.0,4.151710551395647,0.0,3.0
+659.0,0.0,4.151552066364199,0.0,3.0
+660.0,0.0,4.1513961878880865,0.0,3.0
+661.0,0.0,4.15124285212288,0.0,3.0
+662.0,0.0,4.151091998090975,0.0,3.0
+663.0,0.0,4.1509435592345785,0.0,3.0
+664.0,0.0,4.150797472097141,0.0,3.0
+665.0,0.0,4.150653690629847,0.0,3.0
+666.0,0.0,4.150512163297496,0.0,3.0
+667.0,0.0,4.1503728411991965,0.0,3.0
+668.0,0.0,4.15023567804895,0.0,3.0
+669.0,0.0,4.150100630156968,0.0,3.0
+670.0,0.0,4.149967656411437,0.0,3.0
+671.0,0.0,4.1498366540695955,0.0,3.0
+672.0,0.0,4.1497075385471796,0.0,3.0
+673.0,0.0,4.149580332413257,0.0,3.0
+674.0,0.0,4.149454998704056,0.0,3.0
+675.0,0.0,4.14933150294905,0.0,3.0
+676.0,0.0,4.149209813155258,0.0,3.0
+677.0,0.0,4.149089899791887,0.0,3.0
+678.0,0.0,4.148971735775508,0.0,3.0
+679.0,0.0,4.148855296455618,0.0,3.0
+680.0,0.0,4.1487405596006734,0.0,3.0
+681.0,0.0,4.148627505384641,0.0,3.0
+682.0,0.0,4.14851611637379,0.0,3.0
+683.0,0.0,4.148406377514072,0.0,3.0
+684.0,0.0,4.148298213522299,0.0,3.0
+685.0,0.0,4.148191511522451,0.0,3.0
+686.0,0.0,4.148086312994496,0.0,3.0
+687.0,0.0,4.1479825873201,0.0,3.0
+688.0,0.0,4.147880304164437,0.0,3.0
+689.0,0.0,4.147779433472801,0.0,3.0
+690.0,0.0,4.147679945467388,0.0,3.0
+690.000000001,2.5,4.128614765545601,1.0,0.0
+691.0,2.5,4.125806121237927,1.0,0.0
+692.0,2.5,4.123215794986313,1.0,0.0
+693.0,2.5,4.1208229134493735,1.0,0.0
+694.0,2.5,4.118607471025524,1.0,0.0
+695.0,2.5,4.116551784497935,1.0,0.0
+696.0,2.5,4.114640381218213,1.0,0.0
+697.0,2.5,4.112859689636109,1.0,0.0
+698.0,2.5,4.111197424781445,1.0,0.0
+699.0,2.5,4.1096425953611275,1.0,0.0
+700.0,2.5,4.108185319207477,1.0,0.0
+701.0,2.5,4.106817367636223,1.0,0.0
+702.0,2.5,4.105530584404381,1.0,0.0
+703.0,2.5,4.104318858718375,1.0,0.0
+704.0,2.5,4.103175499004113,1.0,0.0
+705.0,2.5,4.102095597490596,1.0,0.0
+706.0,2.5,4.101073956789457,1.0,0.0
+707.0,2.5,4.100106646480028,1.0,0.0
+708.0,2.5,4.099189265075946,1.0,0.0
+709.0,2.5,4.0983181499111465,1.0,0.0
+710.0,2.5,4.0974904450012435,1.0,0.0
+711.0,2.5,4.096702826328648,1.0,0.0
+712.0,2.5,4.095952583807382,1.0,0.0
+713.0,2.5,4.0952374707757215,1.0,0.0
+714.0,2.5,4.094555187694315,1.0,0.0
+715.0,2.5,4.093903667889831,1.0,0.0
+716.0,2.5,4.093280877078022,1.0,0.0
+717.0,2.5,4.092685281272766,1.0,0.0
+718.0,2.5,4.092115414449436,1.0,0.0
+719.0,2.5,4.091569972939239,1.0,0.0
+720.0,2.5,4.09104717147136,1.0,0.0
+721.0,2.5,4.090545739714515,1.0,0.0
+722.0,2.5,4.0900648204169885,1.0,0.0
+723.0,2.5,4.089603449382283,1.0,0.0
+724.0,2.5,4.089160753388908,1.0,0.0
+725.0,2.5,4.088735029900462,1.0,0.0
+726.0,2.5,4.0883258737423,1.0,0.0
+727.0,2.5,4.0879325054599285,1.0,0.0
+728.0,2.5,4.087554207133284,1.0,0.0
+729.0,2.5,4.087190186810957,1.0,0.0
+730.0,2.5,4.086839527158593,1.0,0.0
+731.0,2.5,4.086501759926133,1.0,0.0
+732.0,2.5,4.0861762895157385,1.0,0.0
+733.0,2.5,4.085862558779947,1.0,0.0
+734.0,2.5,4.085559956599416,1.0,0.0
+735.0,2.5,4.08526796397757,1.0,0.0
+736.0,2.5,4.084986129068984,1.0,0.0
+737.0,2.5,4.084713999265481,1.0,0.0
+738.0,2.5,4.084451147597297,1.0,0.0
+739.0,2.5,4.08419712400763,1.0,0.0
+740.0,2.5,4.083951565539416,1.0,0.0
+741.0,2.5,4.083714107407066,1.0,0.0
+742.0,2.5,4.083484404949723,1.0,0.0
+743.0,2.5,4.083262100125357,1.0,0.0
+744.0,2.5,4.083046824275364,1.0,0.0
+745.0,2.5,4.08283832164241,1.0,0.0
+746.0,2.5,4.082636310723714,1.0,0.0
+747.0,2.5,4.0824405255597345,1.0,0.0
+748.0,2.5,4.082250714809793,1.0,0.0
+749.0,2.5,4.082066640890373,1.0,0.0
+750.0,2.5,4.0818880791738374,1.0,0.0
+751.0,2.5,4.08171473227161,1.0,0.0
+752.0,2.5,4.08154625823742,1.0,0.0
+753.0,2.5,4.081382576608256,1.0,0.0
+754.0,2.5,4.081223491802858,1.0,0.0
+755.0,2.5,4.0810688177970835,1.0,0.0
+756.0,2.5,4.080918377636783,1.0,0.0
+757.0,2.5,4.080772002987455,1.0,0.0
+758.0,2.5,4.08062953371918,1.0,0.0
+759.0,2.5,4.080490740915204,1.0,0.0
+760.0,2.5,4.080355347942114,1.0,0.0
+761.0,2.5,4.080223318596588,1.0,0.0
+762.0,2.5,4.080094506404174,1.0,0.0
+763.0,2.5,4.079968770905705,1.0,0.0
+764.0,2.5,4.0798459774126865,1.0,0.0
+765.0,2.5,4.0797259967792545,1.0,0.0
+766.0,2.5,4.079608705189785,1.0,0.0
+767.0,2.5,4.079493948205887,1.0,0.0
+768.0,2.5,4.079381547473939,1.0,0.0
+769.0,2.5,4.079271442100604,1.0,0.0
+770.0,2.5,4.079163519575337,1.0,0.0
+771.0,2.5,4.079057671435461,1.0,0.0
+772.0,2.5,4.078953793119238,1.0,0.0
+773.0,2.5,4.078851783826287,1.0,0.0
+774.0,2.5,4.07875154638534,1.0,0.0
+775.0,2.5,4.0786529792242465,1.0,0.0
+776.0,2.5,4.078555977035114,1.0,0.0
+777.0,2.5,4.078460463561321,1.0,0.0
+778.0,2.5,4.0783663529236325,1.0,0.0
+779.0,2.5,4.078273562173607,1.0,0.0
+780.0,2.5,4.078182011193613,1.0,0.0
+781.0,2.5,4.078091622601979,1.0,0.0
+782.0,2.5,4.078002321662702,1.0,0.0
+783.0,2.5,4.077914035307862,1.0,0.0
+784.0,2.5,4.077826692056932,1.0,0.0
+785.0,2.5,4.0777402258409134,1.0,0.0
+786.0,2.5,4.077654571435659,1.0,0.0
+787.0,2.5,4.077569665857292,1.0,0.0
+788.0,2.5,4.077485448296463,1.0,0.0
+789.0,2.5,4.077401860056638,1.0,0.0
+790.0,2.5,4.077318844495759,1.0,0.0
+791.0,2.5,4.077236341050073,1.0,0.0
+792.0,2.5,4.0771542857423775,1.0,0.0
+793.0,2.5,4.0770726373132895,1.0,0.0
+794.0,2.5,4.076991345937895,1.0,0.0
+795.0,2.5,4.076910363576668,1.0,0.0
+796.0,2.5,4.076829643933492,1.0,0.0
+797.0,2.5,4.076749142416511,1.0,0.0
+798.0,2.5,4.076668816102087,1.0,0.0
+799.0,2.5,4.076588623701528,1.0,0.0
+800.0,2.5,4.07650852553042,1.0,0.0
+801.0,2.5,4.076428483480787,1.0,0.0
+802.0,2.5,4.076348460995688,1.0,0.0
+803.0,2.5,4.076268423046131,1.0,0.0
+804.0,2.5,4.076188320415346,1.0,0.0
+805.0,2.5,4.076108076853919,1.0,0.0
+806.0,2.5,4.076027700246825,1.0,0.0
+807.0,2.5,4.075947158610126,1.0,0.0
+808.0,2.5,4.075866421197667,1.0,0.0
+809.0,2.5,4.075785458480302,1.0,0.0
+810.0,2.5,4.075704242126962,1.0,0.0
+811.0,2.5,4.075622744987126,1.0,0.0
+812.0,2.5,4.07554094107501,1.0,0.0
+813.0,2.5,4.075458805555057,1.0,0.0
+814.0,2.5,4.0753763147289055,1.0,0.0
+815.0,2.5,4.075293446023828,1.0,0.0
+816.0,2.5,4.075210177982228,1.0,0.0
+817.0,2.5,4.075126478009019,1.0,0.0
+818.0,2.5,4.075042268381398,1.0,0.0
+819.0,2.5,4.0749575776201485,1.0,0.0
+820.0,2.5,4.074872385282608,1.0,0.0
+821.0,2.5,4.07478667174869,1.0,0.0
+822.0,2.5,4.074700418206247,1.0,0.0
+823.0,2.5,4.074613606637252,1.0,0.0
+824.0,2.5,4.074526219804822,1.0,0.0
+825.0,2.5,4.07443824124094,1.0,0.0
+826.0,2.5,4.0743496552349345,1.0,0.0
+827.0,2.5,4.07426044682273,1.0,0.0
+828.0,2.5,4.074170601776774,1.0,0.0
+829.0,2.5,4.074080106596522,1.0,0.0
+830.0,2.5,4.073988944409249,1.0,0.0
+831.0,2.5,4.07389706411082,1.0,0.0
+832.0,2.5,4.07380448348669,1.0,0.0
+833.0,2.5,4.073711189875896,1.0,0.0
+834.0,2.5,4.073617171155592,1.0,0.0
+835.0,2.5,4.073522415729633,1.0,0.0
+836.0,2.5,4.073426912517358,1.0,0.0
+837.0,2.5,4.073330650942989,1.0,0.0
+838.0,2.5,4.073233620925456,1.0,0.0
+839.0,2.5,4.073135812868662,1.0,0.0
+840.0,2.5,4.073037217652044,1.0,0.0
+841.0,2.5,4.072937826621785,1.0,0.0
+842.0,2.5,4.072837631582176,1.0,0.0
+843.0,2.5,4.072736624454799,1.0,0.0
+844.0,2.5,4.072634785196609,1.0,0.0
+845.0,2.5,4.07253211599917,1.0,0.0
+846.0,2.5,4.07242860985028,1.0,0.0
+847.0,2.5,4.072324260116496,1.0,0.0
+848.0,2.5,4.072219060535384,1.0,0.0
+849.0,2.5,4.072113005207956,1.0,0.0
+850.0,2.5,4.072006088591653,1.0,0.0
+851.0,2.5,4.07189830549335,1.0,0.0
+852.0,2.5,4.071789651062911,1.0,0.0
+853.0,2.5,4.071680120786833,1.0,0.0
+854.0,2.5,4.071569710482282,1.0,0.0
+855.0,2.5,4.071458416291358,1.0,0.0
+856.0,2.5,4.071346234675647,1.0,0.0
+857.0,2.5,4.071233157910828,1.0,0.0
+858.0,2.5,4.071119185993691,1.0,0.0
+859.0,2.5,4.0710043162925444,1.0,0.0
+860.0,2.5,4.070888546282846,1.0,0.0
+861.0,2.5,4.070771873720951,1.0,0.0
+862.0,2.5,4.0706542966396135,1.0,0.0
+863.0,2.5,4.070535813343663,1.0,0.0
+864.0,2.5,4.070416422405941,1.0,0.0
+865.0,2.5,4.070296122663345,1.0,0.0
+866.0,2.5,4.070174913213193,1.0,0.0
+867.0,2.5,4.070052793409649,1.0,0.0
+868.0,2.5,4.069929762860374,1.0,0.0
+869.0,2.5,4.069805821423346,1.0,0.0
+870.0,2.5,4.069680951292653,1.0,0.0
+871.0,2.5,4.069555163670968,1.0,0.0
+872.0,2.5,4.069428460770549,1.0,0.0
+873.0,2.5,4.069300842934896,1.0,0.0
+874.0,2.5,4.069172310729855,1.0,0.0
+875.0,2.5,4.069042864941206,1.0,0.0
+876.0,2.5,4.06891250657255,1.0,0.0
+877.0,2.5,4.068781236843257,1.0,0.0
+878.0,2.5,4.068649057186542,1.0,0.0
+879.0,2.5,4.06851596924772,1.0,0.0
+880.0,2.5,4.068381974882488,1.0,0.0
+881.0,2.5,4.068247076155449,1.0,0.0
+882.0,2.5,4.06811127533861,1.0,0.0
+883.0,2.5,4.067974574910159,1.0,0.0
+884.0,2.5,4.067836977553112,1.0,0.0
+885.0,2.5,4.067698486154311,1.0,0.0
+886.0,2.5,4.067559103803314,1.0,0.0
+887.0,2.5,4.067418833791489,1.0,0.0
+888.0,2.5,4.067277679611176,1.0,0.0
+889.0,2.5,4.067135644954893,1.0,0.0
+890.0,2.5,4.066992733714616,1.0,0.0
+891.0,2.5,4.066848892267121,1.0,0.0
+892.0,2.5,4.066704158323439,1.0,0.0
+893.0,2.5,4.066558545968444,1.0,0.0
+894.0,2.5,4.066412058590058,1.0,0.0
+895.0,2.5,4.066264699716728,1.0,0.0
+896.0,2.5,4.066116473016315,1.0,0.0
+897.0,2.5,4.065967382294969,1.0,0.0
+898.0,2.5,4.065817431496182,1.0,0.0
+899.0,2.5,4.065666624699817,1.0,0.0
+900.0,2.5,4.065514966121278,1.0,0.0
+901.0,2.5,4.0653624601105625,1.0,0.0
+902.0,2.5,4.065209111151687,1.0,0.0
+903.0,2.5,4.065054923861827,1.0,0.0
+904.0,2.5,4.064899902990779,1.0,0.0
+905.0,2.5,4.064744053420258,1.0,0.0
+906.0,2.5,4.064587380163446,1.0,0.0
+907.0,2.5,4.064429888364402,1.0,0.0
+908.0,2.5,4.06427158329768,1.0,0.0
+909.0,2.5,4.064112470367832,1.0,0.0
+910.0,2.5,4.063952555109091,1.0,0.0
+911.0,2.5,4.063791843184997,1.0,0.0
+912.0,2.5,4.063630277497095,1.0,0.0
+913.0,2.5,4.063467894940995,1.0,0.0
+914.0,2.5,4.063304716928806,1.0,0.0
+915.0,2.5,4.063140748220183,1.0,0.0
+916.0,2.5,4.062975993642285,1.0,0.0
+917.0,2.5,4.06281045808888,1.0,0.0
+918.0,2.5,4.062644146519421,1.0,0.0
+919.0,2.5,4.062477063958197,1.0,0.0
+920.0,2.5,4.062309215493494,1.0,0.0
+921.0,2.5,4.062140606276824,1.0,0.0
+922.0,2.5,4.061971241522149,1.0,0.0
+923.0,2.5,4.061801126505238,1.0,0.0
+924.0,2.5,4.0616302665629105,1.0,0.0
+925.0,2.5,4.061458667092474,1.0,0.0
+926.0,2.5,4.061286333551058,1.0,0.0
+927.0,2.5,4.061113271455032,1.0,0.0
+928.0,2.5,4.060939486379491,1.0,0.0
+929.0,2.5,4.060764983957747,1.0,0.0
+930.0,2.5,4.060589769880763,1.0,0.0
+931.0,2.5,4.060413849896752,1.0,0.0
+932.0,2.5,4.060237229810745,1.0,0.0
+933.0,2.5,4.06005987981483,1.0,0.0
+934.0,2.5,4.0598818196646285,1.0,0.0
+935.0,2.5,4.059703067216386,1.0,0.0
+936.0,2.5,4.059523627666805,1.0,0.0
+937.0,2.5,4.059343506233953,1.0,0.0
+938.0,2.5,4.059162708156519,1.0,0.0
+939.0,2.5,4.058981238693309,1.0,0.0
+940.0,2.5,4.058799103122527,1.0,0.0
+941.0,2.5,4.058616306741245,1.0,0.0
+942.0,2.5,4.058432854864801,1.0,0.0
+943.0,2.5,4.05824875282633,1.0,0.0
+944.0,2.5,4.058064005976207,1.0,0.0
+945.0,2.5,4.057878619681599,1.0,0.0
+946.0,2.5,4.057692599325923,1.0,0.0
+947.0,2.5,4.05750595030854,1.0,0.0
+948.0,2.5,4.0573186780442025,1.0,0.0
+949.0,2.5,4.057130787962739,1.0,0.0
+950.0,2.5,4.056942285508683,1.0,0.0
+951.0,2.5,4.0567531761408,1.0,0.0
+952.0,2.5,4.056563465331922,1.0,0.0
+953.0,2.5,4.056373158568492,1.0,0.0
+954.0,2.5,4.056182249396747,1.0,0.0
+955.0,2.5,4.055990746503981,1.0,0.0
+956.0,2.5,4.055798660633878,1.0,0.0
+957.0,2.5,4.055605997033133,1.0,0.0
+958.0,2.5,4.05541276094956,1.0,0.0
+959.0,2.5,4.055218957631721,1.0,0.0
+960.0,2.5,4.055024592328643,1.0,0.0
+961.0,2.5,4.054829670289562,1.0,0.0
+962.0,2.5,4.054634196763572,1.0,0.0
+963.0,2.5,4.054438176999461,1.0,0.0
+964.0,2.5,4.054241616245413,1.0,0.0
+965.0,2.5,4.054044519748825,1.0,0.0
+966.0,2.5,4.053846892756033,1.0,0.0
+967.0,2.5,4.053648740512184,1.0,0.0
+968.0,2.5,4.0534500682609895,1.0,0.0
+969.0,2.5,4.05325088124461,1.0,0.0
+970.0,2.5,4.053051184703445,1.0,0.0
+971.0,2.5,4.0528509838760245,1.0,0.0
+972.0,2.5,4.052650283998865,1.0,0.0
+973.0,2.5,4.05244909030632,1.0,0.0
+974.0,2.5,4.052247408030486,1.0,0.0
+975.0,2.5,4.052045239239031,1.0,0.0
+976.0,2.5,4.051842589327295,1.0,0.0
+977.0,2.5,4.051639465184019,1.0,0.0
+978.0,2.5,4.051435871888983,1.0,0.0
+979.0,2.5,4.051231814512316,1.0,0.0
+980.0,2.5,4.051027298114285,1.0,0.0
+981.0,2.5,4.0508223277452835,1.0,0.0
+982.0,2.5,4.050616908445679,1.0,0.0
+983.0,2.5,4.050411045245694,1.0,0.0
+984.0,2.5,4.050204743165406,1.0,0.0
+985.0,2.5,4.049998007214599,1.0,0.0
+986.0,2.5,4.0497908423927385,1.0,0.0
+987.0,2.5,4.049583253688934,1.0,0.0
+988.0,2.5,4.049375246081811,1.0,0.0
+989.0,2.5,4.049166824539588,1.0,0.0
+990.0,2.5,4.048957994019945,1.0,0.0
+990.000000001,0.0,4.066274523105717,1.0,1.0
+991.0,0.0,4.067511739204034,1.0,1.0
+992.0,0.0,4.068650009253588,1.0,1.0
+993.0,0.0,4.0696997147561635,1.0,1.0
+994.0,0.0,4.070670124553682,1.0,1.0
+995.0,0.0,4.0715693731808384,1.0,1.0
+996.0,0.0,4.072404508687583,1.0,1.0
+997.0,0.0,4.073181636025303,1.0,1.0
+998.0,0.0,4.0739062339845,1.0,1.0
+999.0,0.0,4.074584320156081,1.0,1.0
+1000.0,0.0,4.075218792981734,1.0,1.0
+1001.0,0.0,4.07581509928771,1.0,1.0
+1002.0,0.0,4.0763762026188575,1.0,1.0
+1003.0,0.0,4.0769049131918,1.0,1.0
+1004.0,0.0,4.077404780641758,1.0,1.0
+1005.0,0.0,4.077877158490983,1.0,1.0
+1006.0,0.0,4.07832509236538,1.0,1.0
+1007.0,0.0,4.0787501488805855,1.0,1.0
+1008.0,0.0,4.079154052977803,1.0,1.0
+1009.0,0.0,4.079538687437624,1.0,1.0
+1010.0,0.0,4.0799050326547475,1.0,1.0
+1011.0,0.0,4.080254786713908,1.0,1.0
+1012.0,0.0,4.080588888736091,1.0,1.0
+1013.0,0.0,4.080908472259136,1.0,1.0
+1014.0,0.0,4.081214603883834,1.0,1.0
+1015.0,0.0,4.081507905298471,1.0,1.0
+1016.0,0.0,4.0817893903723315,1.0,1.0
+1017.0,0.0,4.082059896227781,1.0,1.0
+1018.0,0.0,4.082320048210548,1.0,1.0
+1019.0,0.0,4.082570341984091,1.0,1.0
+1020.0,0.0,4.082811496044326,1.0,1.0
+1021.0,0.0,4.083044069852036,1.0,1.0
+1022.0,0.0,4.083268510883889,1.0,1.0
+1023.0,0.0,4.083485244294439,1.0,1.0
+1024.0,0.0,4.083694693278856,1.0,1.0
+1025.0,0.0,4.08389721605856,1.0,1.0
+1026.0,0.0,4.0840933422143015,1.0,1.0
+1027.0,0.0,4.08428335109877,1.0,1.0
+1028.0,0.0,4.084467487019907,1.0,1.0
+1029.0,0.0,4.084645991753886,1.0,1.0
+1030.0,0.0,4.084819072696092,1.0,1.0
+1031.0,0.0,4.084986904340376,1.0,1.0
+1032.0,0.0,4.085149911007361,1.0,1.0
+1033.0,0.0,4.085308604700753,1.0,1.0
+1034.0,0.0,4.08546285585263,1.0,1.0
+1035.0,0.0,4.0856128132306715,1.0,1.0
+1036.0,0.0,4.08575860412488,1.0,1.0
+1037.0,0.0,4.085900335197976,1.0,1.0
+1038.0,0.0,4.086038098836824,1.0,1.0
+1039.0,0.0,4.08617270770479,1.0,1.0
+1040.0,0.0,4.086303863559995,1.0,1.0
+1041.0,0.0,4.086431684092347,1.0,1.0
+1042.0,0.0,4.086556275849842,1.0,1.0
+1043.0,0.0,4.086677734646073,1.0,1.0
+1044.0,0.0,4.0867961459470274,1.0,1.0
+1045.0,0.0,4.086911791390844,1.0,1.0
+1046.0,0.0,4.08702481724515,1.0,1.0
+1047.0,0.0,4.087135220618481,1.0,1.0
+1048.0,0.0,4.0872430942025275,1.0,1.0
+1049.0,0.0,4.087348524979184,1.0,1.0
+1050.0,0.0,4.087451594413944,1.0,1.0
+1051.0,0.0,4.087552393836369,1.0,1.0
+1052.0,0.0,4.0876510648822855,1.0,1.0
+1053.0,0.0,4.087747639120805,1.0,1.0
+1054.0,0.0,4.08784218853943,1.0,1.0
+1055.0,0.0,4.087934781211356,1.0,1.0
+1056.0,0.0,4.088025481420903,1.0,1.0
+1057.0,0.0,4.088114349783614,1.0,1.0
+1058.0,0.0,4.088201455845237,1.0,1.0
+1059.0,0.0,4.088286851571946,1.0,1.0
+1060.0,0.0,4.088370586763548,1.0,1.0
+1061.0,0.0,4.088452710494326,1.0,1.0
+1062.0,0.0,4.088533268835792,1.0,1.0
+1063.0,0.0,4.088612304946186,1.0,1.0
+1064.0,0.0,4.08868988445602,1.0,1.0
+1065.0,0.0,4.088766078305341,1.0,1.0
+1066.0,0.0,4.0888408949833455,1.0,1.0
+1067.0,0.0,4.088914370653588,1.0,1.0
+1068.0,0.0,4.088986538911817,1.0,1.0
+1069.0,0.0,4.089057430858544,1.0,1.0
+1070.0,0.0,4.089127075168416,1.0,1.0
+1071.0,0.0,4.0891954981568714,1.0,1.0
+1072.0,0.0,4.089262723844032,1.0,1.0
+1073.0,0.0,4.089328774015838,1.0,1.0
+1074.0,0.0,4.089393689368266,1.0,1.0
+1075.0,0.0,4.089457657266609,1.0,1.0
+1076.0,0.0,4.0895205732893665,1.0,1.0
+1077.0,0.0,4.089582460509208,1.0,1.0
+1078.0,0.0,4.089643340419053,1.0,1.0
+1079.0,0.0,4.089703232972178,1.0,1.0
+1080.0,0.0,4.089762156620776,1.0,1.0
+1081.0,0.0,4.089820128353002,1.0,1.0
+1082.0,0.0,4.089877163728433,1.0,1.0
+1083.0,0.0,4.0899332769123,1.0,1.0
+1084.0,0.0,4.089988480708047,1.0,1.0
+1085.0,0.0,4.090042942961702,1.0,1.0
+1086.0,0.0,4.090096605343914,1.0,1.0
+1087.0,0.0,4.09014946085848,1.0,1.0
+1088.0,0.0,4.0902015264805796,1.0,1.0
+1089.0,0.0,4.090252818381426,1.0,1.0
+1090.0,0.0,4.090303351946826,1.0,1.0
+1091.0,0.0,4.090353141795051,1.0,1.0
+1092.0,0.0,4.090402201794179,1.0,1.0
+1093.0,0.0,4.090450545078762,1.0,1.0
+1094.0,0.0,4.090498184065852,1.0,1.0
+1095.0,0.0,4.09054517636494,1.0,1.0
+1096.0,0.0,4.090591544875099,1.0,1.0
+1097.0,0.0,4.090637274177523,1.0,1.0
+1098.0,0.0,4.090682378239904,1.0,1.0
+1099.0,0.0,4.090726870582236,1.0,1.0
+1100.0,0.0,4.090770764286746,1.0,1.0
+1101.0,0.0,4.090814072007476,1.0,1.0
+1102.0,0.0,4.0908568059794765,1.0,1.0
+1103.0,0.0,4.09089897802794,1.0,1.0
+1104.0,0.0,4.090940599576809,1.0,1.0
+1105.0,0.0,4.090981683409852,1.0,1.0
+1106.0,0.0,4.091022245792877,1.0,1.0
+1107.0,0.0,4.091062295272398,1.0,1.0
+1108.0,0.0,4.091101843141846,1.0,1.0
+1109.0,0.0,4.091140900448937,1.0,1.0
+1110.0,0.0,4.091179478000868,1.0,1.0
+1110.000000001,-2.5,4.108685027099113,1.0,2.0
+1111.0,-2.5,4.109249145264736,1.0,2.0
+1112.0,-2.5,4.109756288211877,1.0,2.0
+1113.0,-2.5,4.110216306657217,1.0,2.0
+1114.0,-2.5,4.11063679848971,1.0,2.0
+1115.0,-2.5,4.111024144279855,1.0,2.0
+1116.0,-2.5,4.111383688693465,1.0,2.0
+1117.0,-2.5,4.111719910353336,1.0,2.0
+1118.0,-2.5,4.112036627838165,1.0,2.0
+1119.0,-2.5,4.1123374513584645,1.0,2.0
+1120.0,-2.5,4.112624703713546,1.0,2.0
+1121.0,-2.5,4.112901264842645,1.0,2.0
+1122.0,-2.5,4.113169023059253,1.0,2.0
+1123.0,-2.5,4.113429662109631,1.0,2.0
+1124.0,-2.5,4.1136849705905485,1.0,2.0
+1125.0,-2.5,4.11393590218169,1.0,2.0
+1126.0,-2.5,4.114183898556045,1.0,2.0
+1127.0,-2.5,4.114429812580923,1.0,2.0
+1128.0,-2.5,4.114674508933649,1.0,2.0
+1129.0,-2.5,4.114918858556363,1.0,2.0
+1130.0,-2.5,4.115163355133316,1.0,2.0
+1131.0,-2.5,4.115408750813659,1.0,2.0
+1132.0,-2.5,4.115655457774607,1.0,2.0
+1133.0,-2.5,4.115903970540377,1.0,2.0
+1134.0,-2.5,4.116154731935361,1.0,2.0
+1135.0,-2.5,4.1164079747050675,1.0,2.0
+1136.0,-2.5,4.116664113153866,1.0,2.0
+1137.0,-2.5,4.116923483994771,1.0,2.0
+1138.0,-2.5,4.117186304751822,1.0,2.0
+1139.0,-2.5,4.117452733393656,1.0,2.0
+1140.0,-2.5,4.117723048647415,1.0,2.0
+1141.0,-2.5,4.117997449976209,1.0,2.0
+1142.0,-2.5,4.118276067261086,1.0,2.0
+1143.0,-2.5,4.118559027442687,1.0,2.0
+1144.0,-2.5,4.118846454892512,1.0,2.0
+1145.0,-2.5,4.119138434977853,1.0,2.0
+1146.0,-2.5,4.119435211584634,1.0,2.0
+1147.0,-2.5,4.1197368141989426,1.0,2.0
+1148.0,-2.5,4.120043272604645,1.0,2.0
+1149.0,-2.5,4.120354607129009,1.0,2.0
+1150.0,-2.5,4.120670808247033,1.0,2.0
+1151.0,-2.5,4.120991834230043,1.0,2.0
+1152.0,-2.5,4.121317949818342,1.0,2.0
+1153.0,-2.5,4.1216494070134075,1.0,2.0
+1154.0,-2.5,4.121985930927271,1.0,2.0
+1155.0,-2.5,4.122327484251333,1.0,2.0
+1156.0,-2.5,4.122674005538976,1.0,2.0
+1157.0,-2.5,4.123025407361925,1.0,2.0
+1158.0,-2.5,4.123381649938508,1.0,2.0
+1159.0,-2.5,4.1237434461927736,1.0,2.0
+1160.0,-2.5,4.124110291142608,1.0,2.0
+1161.0,-2.5,4.124482143996708,1.0,2.0
+1162.0,-2.5,4.124858951949952,1.0,2.0
+1163.0,-2.5,4.125240649374779,1.0,2.0
+1164.0,-2.5,4.125627156974626,1.0,2.0
+1165.0,-2.5,4.126018765297173,1.0,2.0
+1166.0,-2.5,4.126415420508046,1.0,2.0
+1167.0,-2.5,4.1268169804047625,1.0,2.0
+1168.0,-2.5,4.1272234104186545,1.0,2.0
+1169.0,-2.5,4.127634671758837,1.0,2.0
+1170.0,-2.5,4.128050721125763,1.0,2.0
+1171.0,-2.5,4.128471557190049,1.0,2.0
+1172.0,-2.5,4.128897234233817,1.0,2.0
+1173.0,-2.5,4.129327650792582,1.0,2.0
+1174.0,-2.5,4.1297627716613174,1.0,2.0
+1175.0,-2.5,4.130202559226611,1.0,2.0
+1176.0,-2.5,4.13064697326481,1.0,2.0
+1177.0,-2.5,4.131095970727928,1.0,2.0
+1178.0,-2.5,4.131549539618323,1.0,2.0
+1179.0,-2.5,4.132007619400688,1.0,2.0
+1180.0,-2.5,4.132470161637274,1.0,2.0
+1181.0,-2.5,4.132937116253136,1.0,2.0
+1182.0,-2.5,4.133408429926535,1.0,2.0
+1183.0,-2.5,4.133884045858476,1.0,2.0
+1184.0,-2.5,4.13436399518869,1.0,2.0
+1185.0,-2.5,4.134848256511372,1.0,2.0
+1186.0,-2.5,4.135336720628326,1.0,2.0
+1187.0,-2.5,4.135829329839066,1.0,2.0
+1188.0,-2.5,4.136326022479192,1.0,2.0
+1189.0,-2.5,4.136826732668227,1.0,2.0
+1190.0,-2.5,4.137331390055763,1.0,2.0
+1191.0,-2.5,4.137839919566874,1.0,2.0
+1192.0,-2.5,4.138352241147238,1.0,2.0
+1193.0,-2.5,4.138868269508739,1.0,2.0
+1194.0,-2.5,4.139388090405576,1.0,2.0
+1195.0,-2.5,4.139911945468805,1.0,2.0
+1196.0,-2.5,4.140439469506935,1.0,2.0
+1197.0,-2.5,4.140970596830726,1.0,2.0
+1198.0,-2.5,4.141505258693858,1.0,2.0
+1199.0,-2.5,4.142043383132191,1.0,2.0
+1200.0,-2.5,4.142584894803722,1.0,2.0
+1201.0,-2.5,4.143129714829247,1.0,2.0
+1202.0,-2.5,4.143677760634381,1.0,2.0
+1203.0,-2.5,4.1442289457928165,1.0,2.0
+1204.0,-2.5,4.14478322862258,1.0,2.0
+1205.0,-2.5,4.145341122756782,1.0,2.0
+1206.0,-2.5,4.145902133383769,1.0,2.0
+1207.0,-2.5,4.146466201686998,1.0,2.0
+1208.0,-2.5,4.147033267834858,1.0,2.0
+1209.0,-2.5,4.1476032709162425,1.0,2.0
+1210.0,-2.5,4.148176148876015,1.0,2.0
+1211.0,-2.5,4.148751838450418,1.0,2.0
+1212.0,-2.5,4.149330275102583,1.0,2.0
+1213.0,-2.5,4.149911392958335,1.0,2.0
+1214.0,-2.5,4.150495124742351,1.0,2.0
+1215.0,-2.5,4.151081702911843,1.0,2.0
+1216.0,-2.5,4.151670935118932,1.0,2.0
+1217.0,-2.5,4.152262725946282,1.0,2.0
+1218.0,-2.5,4.152857026354436,1.0,2.0
+1219.0,-2.5,4.153453787405518,1.0,2.0
+1220.0,-2.5,4.154052960236228,1.0,2.0
+1221.0,-2.5,4.154654496030229,1.0,2.0
+1222.0,-2.5,4.155258345990371,1.0,2.0
+1223.0,-2.5,4.155864461310419,1.0,2.0
+1224.0,-2.5,4.156472793146713,1.0,2.0
+1225.0,-2.5,4.157083337101548,1.0,2.0
+1226.0,-2.5,4.157696051150865,1.0,2.0
+1227.0,-2.5,4.1583108666402815,1.0,2.0
+1228.0,-2.5,4.158927739327761,1.0,2.0
+1229.0,-2.5,4.159546625154724,1.0,2.0
+1230.0,-2.5,4.160167480223082,1.0,2.0
+1231.0,-2.5,4.160790260771999,1.0,2.0
+1232.0,-2.5,4.161414923154602,1.0,2.0
+1233.0,-2.5,4.162041423814567,1.0,2.0
+1234.0,-2.5,4.16266971926274,1.0,2.0
+1235.0,-2.5,4.163299771039238,1.0,2.0
+1236.0,-2.5,4.1639315429873,1.0,2.0
+1237.0,-2.5,4.164564985346292,1.0,2.0
+1238.0,-2.5,4.165200055599982,1.0,2.0
+1239.0,-2.5,4.165836711249497,1.0,2.0
+1240.0,-2.5,4.1664749097914004,1.0,2.0
+1241.0,-2.5,4.1671146086956625,1.0,2.0
+1242.0,-2.5,4.167755765383997,1.0,2.0
+1243.0,-2.5,4.168398337208374,1.0,2.0
+1244.0,-2.5,4.1690422814296175,1.0,2.0
+1245.0,-2.5,4.169687567259625,1.0,2.0
+1246.0,-2.5,4.170334241751983,1.0,2.0
+1247.0,-2.5,4.170982193315098,1.0,2.0
+1248.0,-2.5,4.171631382319352,1.0,2.0
+1249.0,-2.5,4.172281769042215,1.0,2.0
+1250.0,-2.5,4.172933313647918,1.0,2.0
+1251.0,-2.5,4.173585976167334,1.0,2.0
+1252.0,-2.5,4.174239716478154,1.0,2.0
+1253.0,-2.5,4.1748944942855015,1.0,2.0
+1254.0,-2.5,4.175550269102773,1.0,2.0
+1255.0,-2.5,4.1762070002328775,1.0,2.0
+1256.0,-2.5,4.176864646749841,1.0,2.0
+1257.0,-2.5,4.177523167480745,1.0,2.0
+1258.0,-2.5,4.178182520988054,1.0,2.0
+1259.0,-2.5,4.178842665552368,1.0,2.0
+1260.0,-2.5,4.179503559155461,1.0,2.0
+1260.000000001,0.0,4.160964013318741,1.0,3.0
+1261.0,0.0,4.158572141824962,1.0,3.0
+1262.0,0.0,4.156376079810138,1.0,3.0
+1263.0,0.0,4.154355287883229,1.0,3.0
+1264.0,0.0,4.152491375699777,1.0,3.0
+1265.0,0.0,4.15076812516371,1.0,3.0
+1266.0,0.0,4.149171470426165,1.0,3.0
+1267.0,0.0,4.147689317719975,1.0,3.0
+1268.0,0.0,4.146309632986848,1.0,3.0
+1269.0,0.0,4.145023571363815,1.0,3.0
+1270.0,0.0,4.143820927136515,1.0,3.0
+1271.0,0.0,4.142695079880294,1.0,3.0
+1272.0,0.0,4.1416381894283445,1.0,3.0
+1273.0,0.0,4.14064487102113,1.0,3.0
+1274.0,0.0,4.13970920934347,1.0,3.0
+1275.0,0.0,4.138826626364079,1.0,3.0
+1276.0,0.0,4.137992857750286,1.0,3.0
+1277.0,0.0,4.137204112149755,1.0,3.0
+1278.0,0.0,4.136456270215449,1.0,3.0
+1279.0,0.0,4.135746551393303,1.0,3.0
+1280.0,0.0,4.135072086036729,1.0,3.0
+1281.0,0.0,4.134429879915956,1.0,3.0
+1282.0,0.0,4.133817769759332,1.0,3.0
+1283.0,0.0,4.133233704495695,1.0,3.0
+1284.0,0.0,4.132675743275834,1.0,3.0
+1285.0,0.0,4.132141856675212,1.0,3.0
+1286.0,0.0,4.13163047997326,1.0,3.0
+1287.0,0.0,4.13114039589672,1.0,3.0
+1288.0,0.0,4.130670508342971,1.0,3.0
+1289.0,0.0,4.130219777592415,1.0,3.0
+1290.0,0.0,4.129785742285175,1.0,3.0
+1291.0,0.0,4.129368320529917,1.0,3.0
+1292.0,0.0,4.1289667590876435,1.0,3.0
+1293.0,0.0,4.128580441095567,1.0,3.0
+1294.0,0.0,4.128208154421832,1.0,3.0
+1295.0,0.0,4.127848527451031,1.0,3.0
+1296.0,0.0,4.127501498535111,1.0,3.0
+1297.0,0.0,4.127166525127259,1.0,3.0
+1298.0,0.0,4.12684313956645,1.0,3.0
+1299.0,0.0,4.126530143174026,1.0,3.0
+1300.0,0.0,4.1262271792578895,1.0,3.0
+1301.0,0.0,4.125933882682511,1.0,3.0
+1302.0,0.0,4.125649818819935,1.0,3.0
+1303.0,0.0,4.125374543972036,1.0,3.0
+1304.0,0.0,4.125107415795206,1.0,3.0
+1305.0,0.0,4.124848189574386,1.0,3.0
+1306.0,0.0,4.124596511743216,1.0,3.0
+1307.0,0.0,4.124352057786894,1.0,3.0
+1308.0,0.0,4.124114469897172,1.0,3.0
+1309.0,0.0,4.123883423770482,1.0,3.0
+1310.0,0.0,4.123658683075876,1.0,3.0
+1311.0,0.0,4.123440001395834,1.0,3.0
+1312.0,0.0,4.123227154652392,1.0,3.0
+1313.0,0.0,4.123019671431074,1.0,3.0
+1314.0,0.0,4.122817455156986,1.0,3.0
+1315.0,0.0,4.122620334724273,1.0,3.0
+1316.0,0.0,4.122428142796556,1.0,3.0
+1317.0,0.0,4.12224073234334,1.0,3.0
+1318.0,0.0,4.122057976175602,1.0,3.0
+1319.0,0.0,4.121879766506314,1.0,3.0
+1320.0,0.0,4.121706014534377,1.0,3.0
+1321.0,0.0,4.121535798038875,1.0,3.0
+1322.0,0.0,4.121369506151888,1.0,3.0
+1323.0,0.0,4.121207051728784,1.0,3.0
+1324.0,0.0,4.12104834283579,1.0,3.0
+1325.0,0.0,4.120893300672793,1.0,3.0
+1326.0,0.0,4.120741859315891,1.0,3.0
+1327.0,0.0,4.120593965473212,1.0,3.0
+1328.0,0.0,4.12044955868774,1.0,3.0
+1329.0,0.0,4.12030772622053,1.0,3.0
+1330.0,0.0,4.120168950001753,1.0,3.0
+1331.0,0.0,4.120033151243904,1.0,3.0
+1332.0,0.0,4.119900257880457,1.0,3.0
+1333.0,0.0,4.119770204439625,1.0,3.0
+1334.0,0.0,4.119642931924266,1.0,3.0
+1335.0,0.0,4.119518387696884,1.0,3.0
+1336.0,0.0,4.119396494292352,1.0,3.0
+1337.0,0.0,4.119276777146785,1.0,3.0
+1338.0,0.0,4.1191594517585095,1.0,3.0
+1339.0,0.0,4.119044450606128,1.0,3.0
+1340.0,0.0,4.118931709417646,1.0,3.0
+1341.0,0.0,4.11882116710964,1.0,3.0
+1342.0,0.0,4.118712765728629,1.0,3.0
+1343.0,0.0,4.1186064503949895,1.0,3.0
+1344.0,0.0,4.118502156713998,1.0,3.0
+1345.0,0.0,4.118399739448249,1.0,3.0
+1346.0,0.0,4.118299209261662,1.0,3.0
+1347.0,0.0,4.118200513557185,1.0,3.0
+1348.0,0.0,4.1181036019272454,1.0,3.0
+1349.0,0.0,4.118008426115434,1.0,3.0
+1350.0,0.0,4.117914939979552,1.0,3.0
+1351.0,0.0,4.117823099456101,1.0,3.0
+1352.0,0.0,4.117732860639865,1.0,3.0
+1353.0,0.0,4.1176441741203815,1.0,3.0
+1354.0,0.0,4.117557007544608,1.0,3.0
+1355.0,0.0,4.117471323815646,1.0,3.0
+1356.0,0.0,4.117387087687448,1.0,3.0
+1357.0,0.0,4.11730426573703,1.0,3.0
+1358.0,0.0,4.117222826337418,1.0,3.0
+1359.0,0.0,4.117142739631756,1.0,3.0
+1360.0,0.0,4.117063958651974,1.0,3.0
+1361.0,0.0,4.116986396092423,1.0,3.0
+1362.0,0.0,4.116910074054813,1.0,3.0
+1363.0,0.0,4.116834966029668,1.0,3.0
+1364.0,0.0,4.116761047174298,1.0,3.0
+1365.0,0.0,4.116688294290901,1.0,3.0
+1366.0,0.0,4.11661668580559,1.0,3.0
+1367.0,0.0,4.116546201748191,1.0,3.0
+1368.0,0.0,4.1164768237325,1.0,3.0
+1369.0,0.0,4.116408534937501,1.0,3.0
+1370.0,0.0,4.116341320089215,1.0,3.0
+1371.0,0.0,4.1162751654430405,1.0,3.0
+1372.0,0.0,4.116210058766934,1.0,3.0
+1373.0,0.0,4.1161459643077425,1.0,3.0
+1374.0,0.0,4.11608277734336,1.0,3.0
+1375.0,0.0,4.116020544200532,1.0,3.0
+1376.0,0.0,4.115959245171489,1.0,3.0
+1377.0,0.0,4.115898860961665,1.0,3.0
+1378.0,0.0,4.11583937268339,1.0,3.0
+1379.0,0.0,4.115780761849897,1.0,3.0
+1380.0,0.0,4.115723010369455,1.0,3.0
diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index 40e5179a6..1c1db9d2e 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -1,36 +1,38 @@
 import pybop
+import pandas as pd
 import numpy as np
 
 # Form observations
-applied_current = [np.arange(0,3,0.1),np.ones([30])]
-observation = [
-    pybop.Observed(["Current function [A]"], applied_current),
-    pybop.Observed(["Voltage [V]"], np.ones([30]) * 4.0)
-]
+Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy() #[np.arange(0,10,0.1),np.ones([100])]
+observations = dict(
+    Time = pybop.Observed(["Time [s]"], Measurements[:,0]),
+    Current = pybop.Observed(["Current function [A]"], Measurements[:,1]),
+    Voltage = pybop.Observed(["Voltage [V]"], Measurements[:,2])
+)
 
 # Create model
 model = pybop.models.lithium_ion.SPM()
 
 # Fitting parameters
 params = (
-    pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = (0,1)),
-    pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0,1)),
-    pybop.Parameter("Positive particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0,1))
+    pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = (0.03,0.1)),
+    pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0.1e-6,0.8e-6)),
+    pybop.Parameter("Positive particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0.1e-5,0.8e-5))
 )
 
-parameterisation = pybop.Parameterisation(model, observations=observation, fit_parameters=params)
+parameterisation = pybop.Parameterisation(model, observations=observations, fit_parameters=params)
 
 # get RMSE estimate
-parameterisation.rmse()
+results, last_optim, num_evals = parameterisation.rmse(method="nlopt")
 
 # get MAP estimate, starting at a random initial point in parameter space
-parameterisation.map(x0=[p.sample() for p in params]) 
+# parameterisation.map(x0=[p.sample() for p in params]) 
 
 # or sample from posterior
-parameterisation.sample(1000, n_chains=4, ....)
+# parameterisation.sample(1000, n_chains=4, ....)
 
 # or SOBER
-parameterisation.sober()
+# parameterisation.sober()
 
 
 #Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)
\ No newline at end of file
diff --git a/pybop/__init__.py b/pybop/__init__.py
index ad1e2317d..7cc8690e3 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -52,13 +52,12 @@
 #
 from .simulation import Simulation
 
-
 #
 # Optimisation class
 #
 from .optimisation.base_optimisation import BaseOptimisation
-from .optimisation.nlopt_opt import nlopt_opt
-from .optimisation.scipy_opt import scipy_opt
+from .optimisation.nlopt_opt import NLoptOptimize
+from .optimisation.scipy_opt import ScipyMinimize
 
 #
 # Remove any imported modules, so we don't expose them as part of pybop
diff --git a/pybop/observations.py b/pybop/observations.py
index 7ac41a801..e6db914bf 100644
--- a/pybop/observations.py
+++ b/pybop/observations.py
@@ -12,6 +12,9 @@ def __init__(self, name, data):
         self.name = name
         self.data = data
 
+    def __repr__(self):
+        return f"Observation: {self.name} \n Data: {self.data}"
+
     def Interpolant(self):
         if self.variable == "time":
             self.Interpolant = pybamm.Interpolant(self.x, self.y, pybamm.t)
diff --git a/pybop/optimisation/base_optimisation.py b/pybop/optimisation/base_optimisation.py
index fa16ba865..a60f9fe72 100644
--- a/pybop/optimisation/base_optimisation.py
+++ b/pybop/optimisation/base_optimisation.py
@@ -11,7 +11,7 @@ class BaseOptimisation(object):
     def __init__(self):
         self.name = "Base Optimisation"
 
-    def optimise(self, cost_function, x0, method=None, bounds=None, options=None):
+    def optimise(self, cost_function, x0, bounds, method=None):
         """
         Optimise method to be overloaded by child classes.
 
@@ -19,18 +19,15 @@ def optimise(self, cost_function, x0, method=None, bounds=None, options=None):
         # Set up optimisation
         self.cost_function = cost_function
         self.x0 = x0
-        self.options = options
         self.method = method
         self.bounds = bounds
 
         # Run optimisation
-        result = self._runoptimise(
-            cost_function, self.method, self.x0, self.bounds, self.options
-        )
+        result = self._runoptimise(self.cost_function, self.x0, self.bounds)
 
         return result
 
-    def _runoptimise(self, cost_function, method, x0, bounds, options):
+    def _runoptimise(self, cost_function, x0, bounds):
         """
         Run optimisation method, to be overloaded by child classes.
 
diff --git a/pybop/optimisation/nlopt_opt.py b/pybop/optimisation/nlopt_opt.py
index 987bbf88c..d50763882 100644
--- a/pybop/optimisation/nlopt_opt.py
+++ b/pybop/optimisation/nlopt_opt.py
@@ -2,21 +2,26 @@
 import nlopt
 
 
-class nlopt_opt(pybop.BaseOptimisation):
+class NLoptOptimize(pybop.BaseOptimisation):
     """
     Wrapper class for the NLOpt optimisation class. Extends the BaseOptimisation class.
     """
 
-    def __init__(self, cost_function, x0, bounds, method=None, options=None):
+    def __init__(self, method=None, x0=None, xtol=None):
         super().__init__()
-        self.cost_function = cost_function
-        self.method = method
-        self.x0 = x0
-        self.bounds = bounds
-        self.options = options
         self.name = "NLOpt Optimisation"
 
-    def _runoptimise(self):
+        if method is not None:
+            self.opt = nlopt.opt(method, len(x0))
+        else:
+            self.opt = nlopt.opt(nlopt.LN_BOBYQA, len(x0))
+
+        if xtol is not None:
+            self.opt.set_xtol_rel(xtol)
+        else:
+            self.opt.set_xtol_rel(1e-5)
+
+    def _runoptimise(self, cost_function, x0, bounds):
         """
         Run the NLOpt opt method.
 
@@ -25,21 +30,13 @@ def _runoptimise(self):
         cost_function: function for optimising
         method: optimisation method
         x0: Initialisation array
-        options: options dictionary
         bounds: bounds array
         """
-        if self.options.xtol is not None:
-            opt.set_xtol_rel(self.options.xtol)
-
-        if self.method is not None:
-            opt = nlopt.opt(self.method, len(self.x0))
-        else:
-            opt = nlopt.opt(nlopt.LN_BOBYQA, len(self.x0))
 
-        opt.set_min_objective(self.cost_function)
-        opt.set_lower_bounds(self.bounds.lower)
-        opt.set_upper_bounds(self.bounds.upper)
-        results = opt.optimize(self.cost_function)
-        num_evals = opt.get_numevals()
+        self.opt.set_min_objective(cost_function)
+        self.opt.set_lower_bounds(bounds["lower"])
+        self.opt.set_upper_bounds(bounds["upper"])
+        results = self.opt.optimize(x0)
+        num_evals = self.opt.get_numevals()
 
-        return results, opt.last_optimum_value(), num_evals
+        return results, self.opt.last_optimum_value(), num_evals
diff --git a/pybop/optimisation/scipy_opt.py b/pybop/optimisation/scipy_opt.py
index 0073ac3d1..3586f43fb 100644
--- a/pybop/optimisation/scipy_opt.py
+++ b/pybop/optimisation/scipy_opt.py
@@ -2,7 +2,7 @@
 from scipy.optimize import minimize
 
 
-class scipy_opt(pybop.BaseOptimisation):
+class ScipyMinimize(pybop.BaseOptimisation):
     """
     Wrapper class for the Scipy optimisation class. Extends the BaseOptimisation class.
     """
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index a0528acdc..c68d34343 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -3,6 +3,12 @@
 import numpy as np
 
 
+# To Do:
+# checks on observations and parameters
+# implement method to update parameterisation without reconstructing the simulation
+# Geometric parameters might always require reconstruction (i.e. electrode height)
+
+
 class Parameterisation:
     """
     Parameterisation class for pybop.
@@ -13,21 +19,32 @@ def __init__(self, model, observations, fit_parameters, x0=None, options=None):
         self.fit_parameters = fit_parameters
         self.observations = observations
         self.options = options
-
-        # To Do:
-        # Split observations into forward model inputs/outputs
-        # checks on observations and parameters
+        self.bounds = dict(
+            lower=[p.bounds[0] for p in fit_parameters],
+            upper=[p.bounds[1] for p in fit_parameters],
+        )
 
         if options is not None:
             self.parameter_set = options.parameter_set
         else:
             self.parameter_set = self.model.pybamm_model.default_parameter_values
 
+        try:
+            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
+                self.observations["Time"].data,
+                self.observations["Current"].data,
+                pybamm.t,
+            )
+        except:
+            raise ValueError("Current function not supplied")
+
         if x0 is None:
-            self.x0 = np.ones(len(self.fit_parameters)) * 0.1
+            self.x0 = np.mean([self.bounds["lower"], self.bounds["upper"]], axis=0)
 
-        self.sim = pybamm.Simulation(
-            self.model.pybamm_model, parameter_values=self.parameter_set
+        self.sim = pybop.Simulation(
+            self.model.pybamm_model,
+            parameter_values=self.parameter_set,
+            solver=pybamm.CasadiSolver(),
         )
 
     def map(self, x0):
@@ -47,27 +64,33 @@ def rmse(self, method=None):
         Calculate the root mean squared error.
         """
 
-        def step(x):
+        def step(x, grad):
             for i in range(len(self.fit_parameters)):
-                self.sim.parameter_set.update(
-                    {
-                        self.fit_parameters[i]
-                        .name: self.fit_parameters[i]
-                        .prior.rvs(1)[0]
-                    }
-                )
+                self.parameter_set.update({self.fit_parameters[i].name: x[i]})
 
+            self.sim = pybamm.Simulation(
+                self.model.pybamm_model,
+                parameter_values=self.parameter_set,
+                solver=pybamm.CasadiSolver(),
+            )
             y_hat = self.sim.solve()["Terminal voltage [V]"].data
-            return np.sqrt(np.mean((self.observations["Voltage [V]"] - y_hat) ** 2))
+
+            try:
+                res = np.sqrt(
+                    np.mean((self.observations["Voltage"].data[1] - y_hat) ** 2)
+                )
+            except:
+                raise ValueError(
+                    "Measurement and modelled data length mismatch, potentially due to voltage cut-offs"
+                )
+            return res
 
         if method == "nlopt":
-            results = pybop.nlopt_opt(
-                step, self.x0, [p.bounds for p in self.fit_parameters], self.options
-            )
+            optim = pybop.NLoptOptimize(x0=self.x0)
+            results = optim.optimise(step, self.x0, self.bounds)
         else:
-            results = pybop.scipy_opt.optimise(
-                step, self.x0, [p.bounds for p in self.fit_parameters], self.options
-            )
+            optim = pybop.NLoptOptimize(method)
+            results = optim.optimise(step, self.x0, self.bounds)
         return results
 
     def mle(self, method):
@@ -75,5 +98,3 @@ def mle(self, method):
         Maximum likelihood estimation.
         """
         pass
-
-        [p for p in self.fit_parameters]
diff --git a/pybop/simulation.py b/pybop/simulation.py
index 133a41239..c1c33b9b0 100644
--- a/pybop/simulation.py
+++ b/pybop/simulation.py
@@ -41,7 +41,7 @@ def __init__(
         model,
         measured_experiment=None,
         geometry=None,
-        initial_parameter_values=None,
+        parameter_values=None,
         submesh_types=None,
         var_pts=None,
         spatial_methods=None,
@@ -49,9 +49,7 @@ def __init__(
         output_variables=None,
         C_rate=None,
     ):
-        self.parameter_values = (
-            initial_parameter_values or model.default_parameter_values
-        )
+        self.parameter_values = parameter_values or model.default_parameter_values
 
         # Check to see that current is provided as a drive_cycle
         current = self._parameter_values.get("Current function [A]")

From 37c16beaecde04d99e5c092d96871f30504202dc Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 3 Aug 2023 14:41:50 +0100
Subject: [PATCH 019/210] Add PEM holder method, Update example, clean out of
 date files

---
 examples/Initial_API.py   | 10 +++++-----
 examples/Simulation.py    | 29 -----------------------------
 pybop/parameterisation.py |  9 ++++++++-
 3 files changed, 13 insertions(+), 35 deletions(-)
 delete mode 100644 examples/Simulation.py

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index 1c1db9d2e..f0bb4e4a3 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -3,19 +3,19 @@
 import numpy as np
 
 # Form observations
-Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy() #[np.arange(0,10,0.1),np.ones([100])]
+Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy() 
 observations = dict(
-    Time = pybop.Observed(["Time [s]"], Measurements[:,0]),
+    Time = pybop.Observed(["Time [s]"], Measurements[:,0]), 
     Current = pybop.Observed(["Current function [A]"], Measurements[:,1]),
     Voltage = pybop.Observed(["Voltage [V]"], Measurements[:,2])
 )
-
-# Create model
+ 
+# Define model
 model = pybop.models.lithium_ion.SPM()
 
 # Fitting parameters
 params = (
-    pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = (0.03,0.1)),
+    pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = (0.03,0.1)), 
     pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0.1e-6,0.8e-6)),
     pybop.Parameter("Positive particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0.1e-5,0.8e-5))
 )
diff --git a/examples/Simulation.py b/examples/Simulation.py
deleted file mode 100644
index e991d49f1..000000000
--- a/examples/Simulation.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import pybop
-import pybamm
-import numpy as np
-
-# Form list of applied current
-measured_expirement = [np.arange(0,3,0.1),np.ones([30])]
-current_interpolant = pybamm.Interpolant(measured_expirement[0], measured_expirement[1], variable="time")
-
-# Create model & add applied current
-model = pybop.BaseSPM()
-param = model.default_parameter_values
-param["Current function [A]"] = current_interpolant
-
-# Form initial data
-sim = pybop.Simulation(model, initial_parameter_values=param)
-sim.solve()
-
-# Method to parameterise and run the forward model
-def forward(x):
-    sim.parameter_values.update(
-        {   "Electrode height [m]": x[0], 
-            "Negative particle radius [m]": x[1], 
-            "Positive particle radius [m]": x[2]
-        }
-    )
-    sol = sim.solve()["Voltage [V]"].data
-    return sol
-
-V_out = forward([0.065, 0.2e-6, 0.2e-5])
\ No newline at end of file
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index c68d34343..46c82bca4 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -59,6 +59,12 @@ def sample(self, n_chains):
         """
         pass
 
+    def pem(self, method=None):
+        """
+        Predictive error minimisation.
+        """
+        pass
+
     def rmse(self, method=None):
         """
         Calculate the root mean squared error.
@@ -93,8 +99,9 @@ def step(x, grad):
             results = optim.optimise(step, self.x0, self.bounds)
         return results
 
-    def mle(self, method):
+    def mle(self, method=None):
         """
         Maximum likelihood estimation.
         """
         pass
+

From 282874ff27eb638c55258d38c1d114080686c554 Mon Sep 17 00:00:00 2001
From: Brady Planden <55357039+BradyPlanden@users.noreply.github.com>
Date: Fri, 4 Aug 2023 11:50:09 +0100
Subject: [PATCH 020/210] Update LICENSE to BSD 3

---
 LICENSE | 41 ++++++++++++++++++++++++-----------------
 1 file changed, 24 insertions(+), 17 deletions(-)

diff --git a/LICENSE b/LICENSE
index c7c3f30fd..160abed72 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,21 +1,28 @@
-MIT License
+BSD 3-Clause License
 
-Copyright (c) 2023 PRISM-Organisation
+Copyright (c) 2023, pybop-team
 
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
 
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
+1. Redistributions of source code must retain the above copyright notice, this
+   list of conditions and the following disclaimer.
 
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation
+   and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its
+   contributors may be used to endorse or promote products derived from
+   this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

From 5955c948ea09165ce8afafbde3a58ac2a5d102d6 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 4 Aug 2023 17:10:49 +0100
Subject: [PATCH 021/210] Progress: Updt. model build structure for
 parameterisation groups

---
 examples/Initial_API.py   | 22 ++++-----
 pybop/parameterisation.py | 93 +++++++++++++++++++++++++--------------
 2 files changed, 72 insertions(+), 43 deletions(-)

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index f0bb4e4a3..6d37f5157 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -4,21 +4,23 @@
 
 # Form observations
 Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy() 
-observations = dict(
-    Time = pybop.Observed(["Time [s]"], Measurements[:,0]), 
-    Current = pybop.Observed(["Current function [A]"], Measurements[:,1]),
-    Voltage = pybop.Observed(["Voltage [V]"], Measurements[:,2])
-)
+observations = {
+    "Time [s]": pybop.Observed(["Time [s]"], Measurements[:,0]), 
+    "Current function [A]": pybop.Observed(["Current function [A]"], Measurements[:,1]),
+    "Voltage [V]": pybop.Observed(["Voltage [V]"], Measurements[:,2])
+}
  
 # Define model
 model = pybop.models.lithium_ion.SPM()
+model.parameter_values = pybop.ParameterSet("Chen2020") #To implement
 
 # Fitting parameters
-params = (
-    pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = (0.03,0.1)), 
-    pybop.Parameter("Negative particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0.1e-6,0.8e-6)),
-    pybop.Parameter("Positive particle radius [m]", prior = pybop.Uniform(0,1), bounds = (0.1e-5,0.8e-5))
-)
+params = {
+    "Upper voltage cut-off [V]": pybop.Parameter("Upper voltage cut-off [V]", prior = pybop.Gaussian(4.0,0.01), bounds = [3.8,4.1])
+    # "Electrode height [m]": pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = [0.03,0.1]), 
+    # "Negative particle radius [m]": pybop.Parameter("Negative particle radius [m]", prior = pybop.Gaussian(0,1), bounds = [0.1e-6,0.8e-6]),
+    # "Positive particle radius [m]": pybop.Parameter("Positive particle radius [m]", prior = pybop.Gaussian(0,1), bounds = [0.1e-5,0.8e-5])
+}
 
 parameterisation = pybop.Parameterisation(model, observations=observations, fit_parameters=params)
 
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 46c82bca4..79ae2526a 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -20,32 +20,59 @@ def __init__(self, model, observations, fit_parameters, x0=None, options=None):
         self.observations = observations
         self.options = options
         self.bounds = dict(
-            lower=[p.bounds[0] for p in fit_parameters],
-            upper=[p.bounds[1] for p in fit_parameters],
+            lower=[self.fit_parameters[p].bounds[0] for p in self.fit_parameters],
+            upper=[self.fit_parameters[p].bounds[1] for p in self.fit_parameters],
         )
 
-        if options is not None:
-            self.parameter_set = options.parameter_set
+        if model.pybamm_model is not None:
+            if options is not None:
+                self.parameter_set = options.parameter_set
+            else:
+                self.parameter_set = self.model.pybamm_model.default_parameter_values
+
+            try:
+                self.parameter_set["Current function [A]"] = pybamm.Interpolant(
+                    self.observations["Time [s]"].data,
+                    self.observations["Current function [A]"].data,
+                    pybamm.t,
+                )
+            except:
+                raise ValueError("Current function not supplied")
+
+            if x0 is None:
+                self.x0 = np.mean([self.bounds["lower"], self.bounds["upper"]], axis=0)
+
+            # self.sim = pybop.Simulation(
+            #     self.model.pybamm_model,
+            #     parameter_values=self.parameter_set,
+            #     solver=pybamm.CasadiSolver(),
+            # )
+
+            # set input parameters in parameter set from fitting parameters
+            for i in self.fit_parameters:
+                self.parameter_set[i] = "[input]"
+            
+            self.fit_dict = {p: self.fit_parameters[p].prior.mean for p in self.fit_parameters}
+
+            #Set up geometry on model
+            geometry = self.model.pybamm_model.default_geometry
+
+            # Set up parameters for geometry and model
+            self.parameter_set.process_model(self.model.pybamm_model)
+            self.parameter_set.process_geometry(geometry)
+
+            # Mesh the model
+            mesh = pybamm.Mesh(geometry, self.model.pybamm_model.default_submesh_types, self.model.pybamm_model.default_var_pts) #update
+
+            # Discretise the model
+            disc = pybamm.Discretisation(mesh, self.model.pybamm_model.default_spatial_methods)
+            disc.process_model(self.model.pybamm_model)
+
+            # Set solver
+            self.solver = pybamm.CasadiSolver()
         else:
-            self.parameter_set = self.model.pybamm_model.default_parameter_values
-
-        try:
-            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                self.observations["Time"].data,
-                self.observations["Current"].data,
-                pybamm.t,
-            )
-        except:
-            raise ValueError("Current function not supplied")
-
-        if x0 is None:
-            self.x0 = np.mean([self.bounds["lower"], self.bounds["upper"]], axis=0)
-
-        self.sim = pybop.Simulation(
-            self.model.pybamm_model,
-            parameter_values=self.parameter_set,
-            solver=pybamm.CasadiSolver(),
-        )
+            raise ValueError("No pybamm model supplied")
+
 
     def map(self, x0):
         """
@@ -71,15 +98,16 @@ def rmse(self, method=None):
         """
 
         def step(x, grad):
-            for i in range(len(self.fit_parameters)):
-                self.parameter_set.update({self.fit_parameters[i].name: x[i]})
+            for i,p in enumerate(self.fit_dict):
+                self.fit_dict[p] = x[i]
+            print(self.fit_dict)
 
-            self.sim = pybamm.Simulation(
-                self.model.pybamm_model,
-                parameter_values=self.parameter_set,
-                solver=pybamm.CasadiSolver(),
-            )
-            y_hat = self.sim.solve()["Terminal voltage [V]"].data
+            # self.sim = pybamm.Simulation(
+            #     self.model.pybamm_model,
+            #     parameter_values=self.parameter_set,
+            #     solver=pybamm.CasadiSolver(),
+            # )
+            y_hat = self.solver.solve(self.model.pybamm_model, inputs=self.fit_dict)["Terminal voltage [V]"].data
 
             try:
                 res = np.sqrt(
@@ -103,5 +131,4 @@ def mle(self, method=None):
         """
         Maximum likelihood estimation.
         """
-        pass
-
+        pass
\ No newline at end of file

From fb082fc7bbb9e93f367064c9be26bc5f55887ab6 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Sat, 5 Aug 2023 18:38:04 +0100
Subject: [PATCH 022/210] Progress: Add parameter_sets class with model class
 inclusion

---
 examples/Initial_API.py         |  2 +-
 pybop/__init__.py               |  4 ++++
 pybop/models/lithium_ion/spm.py |  3 +--
 pybop/parameter_sets.py         | 16 ++++++++++++++++
 pybop/parameterisation.py       |  4 ++--
 5 files changed, 24 insertions(+), 5 deletions(-)
 create mode 100644 pybop/parameter_sets.py

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index 6d37f5157..48749344f 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -12,7 +12,7 @@
  
 # Define model
 model = pybop.models.lithium_ion.SPM()
-model.parameter_values = pybop.ParameterSet("Chen2020") #To implement
+model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020") #To implement
 
 # Fitting parameters
 params = {
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 7cc8690e3..14204e866 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -30,6 +30,10 @@
 #
 from .models import lithium_ion
 
+#
+# Parameterisation class
+#
+from .parameter_sets import ParameterSet
 #
 # Parameterisation class
 #
diff --git a/pybop/models/lithium_ion/spm.py b/pybop/models/lithium_ion/spm.py
index 367596ddd..99b118a99 100644
--- a/pybop/models/lithium_ion/spm.py
+++ b/pybop/models/lithium_ion/spm.py
@@ -4,11 +4,10 @@
 
 class SPM:
     """
-
     Composition of the SPM class in PyBaMM.
-
     """
 
     def __init__(self):
         self.pybamm_model = pybamm.lithium_ion.SPM()
         self.name = "Single Particle Model"
+        self.parameter_set = self.pybamm_model.default_parameter_values
diff --git a/pybop/parameter_sets.py b/pybop/parameter_sets.py
new file mode 100644
index 000000000..299b1d41c
--- /dev/null
+++ b/pybop/parameter_sets.py
@@ -0,0 +1,16 @@
+import pybamm
+import pybop
+
+class ParameterSet:
+    """
+    Class for creating parameter sets in pybop.
+    """
+
+    def __new__(cls, method, name):
+        if method.casefold() == "pybamm":
+            try:
+                return pybamm.ParameterValues(name).copy()
+            except:
+                raise ValueError("Parameter set not found")
+        else:
+            raise ValueError("Only PybaMM parameter sets are currently implemented")
\ No newline at end of file
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 79ae2526a..ee7672ae6 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -25,8 +25,8 @@ def __init__(self, model, observations, fit_parameters, x0=None, options=None):
         )
 
         if model.pybamm_model is not None:
-            if options is not None:
-                self.parameter_set = options.parameter_set
+            if model.parameter_set is not None:
+                self.parameter_set = model.parameter_set
             else:
                 self.parameter_set = self.model.pybamm_model.default_parameter_values
 

From d332a3f0dec745253dff09e23e3e794eefb3e95b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 9 Aug 2023 09:02:09 +0100
Subject: [PATCH 023/210] Updt. parameterisation for model_build

---
 pybop/parameterisation.py | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index ee7672ae6..5f1f591dd 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -72,7 +72,24 @@ def __init__(self, model, observations, fit_parameters, x0=None, options=None):
             self.solver = pybamm.CasadiSolver()
         else:
             raise ValueError("No pybamm model supplied")
-
+        
+    def build_model(self):
+        """
+        Build the model.
+        """
+        
+        if self.model.pybamm_model.built_model:
+            return
+        elif self.model.pybamm_model.is_discretised:
+            self.model.pybamm_model._model_with_set_params = self.model.pybamm_model
+            self.model.pybamm_model._built_model = self.pybamm_model
+        else:
+            # Set parameters
+            # Mesh
+            # Discretise
+            # Built model
+            pass
+        
 
     def map(self, x0):
         """

From 52362fd3354f30238bfd64138a50ab62fb396c43 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 9 Aug 2023 18:00:21 +0100
Subject: [PATCH 024/210] Updt parameterisation cls w/ build_model(),
 set_init_soc(), set_params()

---
 examples/Initial_API.py   |   3 +-
 pybop/__init__.py         |   1 +
 pybop/parameter_sets.py   |   3 +-
 pybop/parameterisation.py | 173 +++++++++------
 pybop/simulation.py       | 448 --------------------------------------
 5 files changed, 112 insertions(+), 516 deletions(-)
 delete mode 100644 pybop/simulation.py

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index 48749344f..5e3efee98 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -16,8 +16,9 @@
 
 # Fitting parameters
 params = {
-    "Upper voltage cut-off [V]": pybop.Parameter("Upper voltage cut-off [V]", prior = pybop.Gaussian(4.0,0.01), bounds = [3.8,4.1])
+    # "Upper voltage cut-off [V]": pybop.Parameter("Upper voltage cut-off [V]", prior = pybop.Gaussian(4.0,0.01), bounds = [3.8,4.1])
     # "Electrode height [m]": pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = [0.03,0.1]), 
+     "Negative electrode Bruggeman coefficient (electrolyte)": pybop.Parameter("Negative electrode Bruggeman coefficient (electrolyte)", prior = pybop.Gaussian(1.5,0.1), bounds = [0.8,1.7]), 
     # "Negative particle radius [m]": pybop.Parameter("Negative particle radius [m]", prior = pybop.Gaussian(0,1), bounds = [0.1e-6,0.8e-6]),
     # "Positive particle radius [m]": pybop.Parameter("Positive particle radius [m]", prior = pybop.Gaussian(0,1), bounds = [0.1e-5,0.8e-5])
 }
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 14204e866..b32cce831 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -34,6 +34,7 @@
 # Parameterisation class
 #
 from .parameter_sets import ParameterSet
+
 #
 # Parameterisation class
 #
diff --git a/pybop/parameter_sets.py b/pybop/parameter_sets.py
index 299b1d41c..eb84b9da1 100644
--- a/pybop/parameter_sets.py
+++ b/pybop/parameter_sets.py
@@ -1,6 +1,7 @@
 import pybamm
 import pybop
 
+
 class ParameterSet:
     """
     Class for creating parameter sets in pybop.
@@ -13,4 +14,4 @@ def __new__(cls, method, name):
             except:
                 raise ValueError("Parameter set not found")
         else:
-            raise ValueError("Only PybaMM parameter sets are currently implemented")
\ No newline at end of file
+            raise ValueError("Only PybaMM parameter sets are currently implemented")
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 5f1f591dd..6dcf6b89d 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -14,82 +14,125 @@ class Parameterisation:
     Parameterisation class for pybop.
     """
 
-    def __init__(self, model, observations, fit_parameters, x0=None, options=None):
-        self.model = model
+    def __init__(
+        self,
+        model,
+        observations,
+        fit_parameters,
+        geometry=None,
+        submesh_types=None,
+        var_pts=None,
+        spatial_methods=None,
+        solver=None,
+        x0=None,
+        check_model=True,
+        init_soc=None,
+    ):
+        self.model = model.pybamm_model
+        self._unprocessed_model = model.pybamm_model
         self.fit_parameters = fit_parameters
         self.observations = observations
-        self.options = options
         self.bounds = dict(
             lower=[self.fit_parameters[p].bounds[0] for p in self.fit_parameters],
             upper=[self.fit_parameters[p].bounds[1] for p in self.fit_parameters],
         )
+        self._model_with_set_params = None
+        self._built_model = None
+        self._geometry = geometry or self.model.default_geometry
+        self._submesh_types = submesh_types or self.model.default_submesh_types
+        self._var_pts = var_pts or self.model.default_var_pts
+        self._spatial_methods = spatial_methods or self.model.default_spatial_methods
+        self.solver = solver or self.model.default_solver
+
+        if model.parameter_set is not None:
+            self.parameter_set = model.parameter_set
+        else:
+            self.parameter_set = self.model.default_parameter_values
 
-        if model.pybamm_model is not None:
-            if model.parameter_set is not None:
-                self.parameter_set = model.parameter_set
-            else:
-                self.parameter_set = self.model.pybamm_model.default_parameter_values
-
-            try:
-                self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                    self.observations["Time [s]"].data,
-                    self.observations["Current function [A]"].data,
-                    pybamm.t,
-                )
-            except:
-                raise ValueError("Current function not supplied")
+        try:
+            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
+                self.observations["Time [s]"].data,
+                self.observations["Current function [A]"].data,
+                pybamm.t,
+            )
+        except:
+            raise ValueError("Current function not supplied")
 
-            if x0 is None:
-                self.x0 = np.mean([self.bounds["lower"], self.bounds["upper"]], axis=0)
+        if x0 is None:
+            self.x0 = np.mean([self.bounds["lower"], self.bounds["upper"]], axis=0)
 
-            # self.sim = pybop.Simulation(
-            #     self.model.pybamm_model,
-            #     parameter_values=self.parameter_set,
-            #     solver=pybamm.CasadiSolver(),
-            # )
+        # set input parameters in parameter set from fitting parameters
+        for i in self.fit_parameters:
+            self.parameter_set[i] = "[input]"
 
-            # set input parameters in parameter set from fitting parameters
-            for i in self.fit_parameters:
-                self.parameter_set[i] = "[input]"
-            
-            self.fit_dict = {p: self.fit_parameters[p].prior.mean for p in self.fit_parameters}
+        self._unprocessed_parameter_set = self.parameter_set
+        self.fit_dict = {
+            p: self.fit_parameters[p].prior.mean for p in self.fit_parameters
+        }
 
-            #Set up geometry on model
-            geometry = self.model.pybamm_model.default_geometry
+        # Set t_eval
+        self.time_data = self.parameter_set["Current function [A]"].x[0]
 
-            # Set up parameters for geometry and model
-            self.parameter_set.process_model(self.model.pybamm_model)
-            self.parameter_set.process_geometry(geometry)
+        self.build_model(check_model=check_model, init_soc=init_soc)
 
-            # Mesh the model
-            mesh = pybamm.Mesh(geometry, self.model.pybamm_model.default_submesh_types, self.model.pybamm_model.default_var_pts) #update
+        # Set solver
+        self.solver = pybamm.CasadiSolver()
 
-            # Discretise the model
-            disc = pybamm.Discretisation(mesh, self.model.pybamm_model.default_spatial_methods)
-            disc.process_model(self.model.pybamm_model)
+    def build_model(self, check_model=True, init_soc=None):
+        """
+        Build the model (if not built already).
+        """
+        if init_soc is not None:
+            self.set_init_soc(init_soc)  # define this function
 
-            # Set solver
-            self.solver = pybamm.CasadiSolver()
+        if self._built_model:
+            return
+        elif self.model.is_discretised:
+            self.model._model_with_set_params = self.model.pybamm_model
+            self.model._built_model = self.pybamm_model
         else:
-            raise ValueError("No pybamm model supplied")
-        
-    def build_model(self):
+            self.set_params()
+            self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
+            self._disc = pybamm.Discretisation(self._mesh, self._spatial_methods)
+            self._built_model = self._disc.process_model(
+                self._model_with_set_params, inplace=False, check_model=check_model
+            )
+
+            # Clear solver
+            self.solver._model_set_up = {}
+
+    def set_init_soc(self, init_soc):
+        """
+        Set the initial state of charge.
+        """
+        if self._built_initial_soc != init_soc:
+            # reset
+            self._model_with_set_params = None
+            self._built_model = None
+            self.op_conds_to_built_models = None
+            self.op_conds_to_built_solvers = None
+
+        param = self.model.param
+        self.parameter_set = (
+            self._unprocessed_parameter_set.set_initial_stoichiometries(
+                init_soc, param=param, inplace=False
+            )
+        )
+        # Save solved initial SOC in case we need to re-build the model
+        self._built_initial_soc = init_soc
+
+    def set_params(self):
         """
-        Build the model.
+        Set the parameters in the model.
         """
-        
-        if self.model.pybamm_model.built_model:
+        if self._model_with_set_params:
             return
-        elif self.model.pybamm_model.is_discretised:
-            self.model.pybamm_model._model_with_set_params = self.model.pybamm_model
-            self.model.pybamm_model._built_model = self.pybamm_model
-        else:
-            # Set parameters
-            # Mesh
-            # Discretise
-            # Built model
-            pass
-        
+
+        self._model_with_set_params = self.parameter_set.process_model(
+            self._unprocessed_model, inplace=False
+        )
+        self.parameter_set.process_geometry(self._geometry)
+        self.model = self._model_with_set_params
 
     def map(self, x0):
         """
@@ -115,25 +158,23 @@ def rmse(self, method=None):
         """
 
         def step(x, grad):
-            for i,p in enumerate(self.fit_dict):
+            for i, p in enumerate(self.fit_dict):
                 self.fit_dict[p] = x[i]
             print(self.fit_dict)
 
-            # self.sim = pybamm.Simulation(
-            #     self.model.pybamm_model,
-            #     parameter_values=self.parameter_set,
-            #     solver=pybamm.CasadiSolver(),
-            # )
-            y_hat = self.solver.solve(self.model.pybamm_model, inputs=self.fit_dict)["Terminal voltage [V]"].data
+            y_hat = self.solver.solve(
+                self._built_model, self.time_data, inputs=self.fit_dict
+            )["Terminal voltage [V]"].data
 
             try:
                 res = np.sqrt(
-                    np.mean((self.observations["Voltage"].data[1] - y_hat) ** 2)
+                    np.mean((self.observations["Voltage [V]"].data[1] - y_hat) ** 2)
                 )
             except:
                 raise ValueError(
                     "Measurement and modelled data length mismatch, potentially due to voltage cut-offs"
                 )
+            print(res)
             return res
 
         if method == "nlopt":
@@ -148,4 +189,4 @@ def mle(self, method=None):
         """
         Maximum likelihood estimation.
         """
-        pass
\ No newline at end of file
+        pass
diff --git a/pybop/simulation.py b/pybop/simulation.py
deleted file mode 100644
index c1c33b9b0..000000000
--- a/pybop/simulation.py
+++ /dev/null
@@ -1,448 +0,0 @@
-import pybamm
-import numpy as np
-import copy
-import pickle
-import sys
-from functools import lru_cache
-import warnings
-
-
-def is_notebook():
-    try:
-        shell = get_ipython().__class__.__name__
-        if shell == "ZMQInteractiveShell":  # pragma: no cover
-            # Jupyter notebook or qtconsole
-            cfg = get_ipython().config
-            nb = len(cfg["InteractiveShell"].keys()) == 0
-            return nb
-        elif shell == "TerminalInteractiveShell":  # pragma: no cover
-            return False  # Terminal running IPython
-        elif shell == "Shell":  # pragma: no cover
-            return True  # Google Colab notebook
-        else:  # pragma: no cover
-            return False  # Other type (?)
-    except NameError:
-        return False  # Probably standard Python interpreter
-
-
-class Simulation:
-    """
-
-    This class constructs the PyBOP simulation class. It was initially built from the PyBaMM simulation class.
-
-    Parameters:
-    ================
-
-
-    """
-
-    def __init__(
-        self,
-        model,
-        measured_experiment=None,
-        geometry=None,
-        parameter_values=None,
-        submesh_types=None,
-        var_pts=None,
-        spatial_methods=None,
-        solver=None,
-        output_variables=None,
-        C_rate=None,
-    ):
-        self.parameter_values = parameter_values or model.default_parameter_values
-
-        # Check to see that current is provided as a drive_cycle
-        current = self._parameter_values.get("Current function [A]")
-        if isinstance(current, pybamm.Interpolant):
-            self.operating_mode = "drive cycle"
-        elif isinstance(current, pybamm.Interpolant):
-            # This requires syncing the sampling frequency to ensure equivalent vector lengths
-            self.operating_mode = "without experiment"
-            if C_rate:
-                self.C_rate = C_rate
-                self._parameter_values.update(
-                    {
-                        "Current function [A]": self.C_rate
-                        * self._parameter_values["Nominal cell capacity [A.h]"]
-                    }
-                )
-        else:
-            raise TypeError(
-                "measured_experiment must be drive_cycle or C_rate with"
-                "matching sampling frequency between t_eval and measured data"
-            )
-
-        self._unprocessed_model = model
-        self.model = model
-        self.geometry = geometry or self.model.default_geometry
-        self.submesh_types = submesh_types or self.model.default_submesh_types
-        self.var_pts = var_pts or self.model.default_var_pts
-        self.spatial_methods = spatial_methods or self.model.default_spatial_methods
-        self.solver = solver or self.model.default_solver
-        self.output_variables = output_variables
-
-        # Initialize empty built states
-        self._model_with_set_params = None
-        self._built_model = None
-        self._built_initial_soc = None
-        self.op_conds_to_built_models = None
-        self.op_conds_to_built_solvers = None
-        self._mesh = None
-        self._disc = None
-        self._solution = None
-        self.quick_plot = None
-
-        # ignore runtime warnings in notebooks
-        if is_notebook():  # pragma: no cover
-            import warnings
-
-            warnings.filterwarnings("ignore")
-
-        self.get_esoh_solver = lru_cache()(self._get_esoh_solver)
-
-    def set_parameters(self):
-        """
-        Setter for parameter values
-
-        Inputs:
-        ============
-        param: The parameter object to set
-        """
-        if self.model_with_set_params:
-            return
-
-        self._model_with_set_params = self._parameter_values.process_model(
-            self._unprocessed_model, inplace=False
-        )
-        self._parameter_values.process_geometry(self.geometry)
-        self.model = self._model_with_set_params
-
-    def build(self, check_model=True, initial_soc=None):
-        """
-        A method to build the model into a system of matrices and vectors suitable for
-        performing numerical computations. If the model has already been built or
-        solved then this function will have no effect. This method will automatically set the parameters
-        if they have not already been set.
-
-        Parameters
-        ----------
-        check_model : bool, optional
-            If True, model checks are performed after discretisation (see
-            :meth:`pybamm.Discretisation.process_model`). Default is True.
-        initial_soc : float, optional
-            Initial State of Charge (SOC) for the simulation. Must be between 0 and 1.
-            If given, overwrites the initial concentrations provided in the parameter
-            set.
-        """
-        if initial_soc is not None:
-            self.set_initial_soc(initial_soc)
-
-        if self.built_model:
-            return
-        elif self.model.is_discretised:
-            self._model_with_set_params = self.model
-            self._built_model = self.model
-        else:
-            self.set_parameters()
-            self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
-            self._disc = pybamm.Discretisation(self._mesh, self._spatial_methods)
-            self._built_model = self._disc.process_model(
-                self._model_with_set_params, inplace=False, check_model=check_model
-            )
-            # rebuilt model so clear solver setup
-            self._solver._model_set_up = {}
-
-    def setup_for_parameterisation():
-        """
-        A method to setup self.model for the parameterisation experiment
-        """
-
-    def plot(self, output_variables=None, **kwargs):
-        """
-        A method to quickly plot the outputs of the simulation. Creates a
-        :class:`pybamm.QuickPlot` object (with keyword arguments 'kwargs') and
-        then calls :meth:`pybamm.QuickPlot.dynamic_plot`.
-
-        Parameters
-        ----------
-        output_variables: list, optional
-            A list of the variables to plot.
-        **kwargs
-            Additional keyword arguments passed to
-            :meth:`pybamm.QuickPlot.dynamic_plot`.
-            For a list of all possible keyword arguments see :class:`pybamm.QuickPlot`.
-        """
-
-        if self._solution is None:
-            raise ValueError(
-                "Model has not been solved, please solve the model before plotting."
-            )
-
-        if output_variables is None:
-            output_variables = self.output_variables
-
-        self.quick_plot = pybop.dynamic_plot(
-            self._solution, output_variables=output_variables, **kwargs
-        )
-
-        return self.quick_plot
-
-    def create_gif(self, number_of_images=80, duration=0.1, output_filename="plot.gif"):
-        """
-        Create a gif of the parameterisation steps created by :meth:`pybamm.Simulation.plot`.
-
-        Parameters
-        ----------
-        number_of_images : int (optional)
-            Number of images/plots to be compiled for a GIF.
-        duration : float (optional)
-            Duration of visibility of a single image/plot in the created GIF.
-        output_filename : str (optional)
-            Name of the generated GIF file.
-
-        """
-        if self.quick_plot is None:
-            self.quick_plot = pybamm.QuickPlot(self._solution)
-
-        # create_git needs to be updated
-        self.quick_plot.create_gif(
-            number_of_images=number_of_images,
-            duration=duration,
-            output_filename=output_filename,
-        )
-
-    def solve(
-        self,
-        t_eval=None,
-        solver=None,
-        check_model=True,
-        calc_esoh=True,
-        starting_solution=None,
-        initial_soc=None,
-        callbacks=None,
-        showprogress=False,
-        **kwargs,
-    ):
-        """
-        A method to solve the model for parameterisation. This method will automatically build
-        and set the model parameters if not already done so.
-
-        Parameters
-        ----------
-        t_eval : numeric type, optional
-            The times (in seconds) at which to compute the solution. Can be
-            provided as an array of times at which to return the solution, or as a
-            list `[t0, tf]` where `t0` is the initial time and `tf` is the final time.
-            If provided as a list the solution is returned at 100 points within the
-            interval `[t0, tf]`.
-
-            If None and the parameter "Current function [A]" is read from data
-            (i.e. drive cycle simulation) the model will be solved at the times
-            provided in the data.
-        solver : :class:`pybop.BaseSolver`, optional
-            The solver to use to solve the model. If None, Simulation.solver is used
-        check_model : bool, optional
-            If True, model checks are performed after discretisation (see
-            :meth:`pybamm.Discretisation.process_model`). Default is True.
-        calc_esoh : bool, optional
-            Whether to include eSOH variables in the summary variables. If `False`
-            then only summary variables that do not require the eSOH calculation
-            are calculated. Default is True.
-        starting_solution : :class:`pybamm.Solution`
-            The solution to start stepping from. If None (default), then self._solution
-            is used. Must be None if not using an experiment.
-        initial_soc : float, optional
-            Initial State of Charge (SOC) for the simulation. Must be between 0 and 1.
-            If given, overwrites the initial concentrations provided in the parameter
-            set.
-        callbacks : list of callbacks, optional
-            A list of callbacks to be called at each time step. Each callback must
-            implement all the methods defined in :class:`pybamm.callbacks.BaseCallback`.
-        showprogress : bool, optional
-            Whether to show a progress bar for cycling. If true, shows a progress bar
-            for cycles. Has no effect when not used with an experiment.
-            Default is False.
-        **kwargs
-            Additional key-word arguments passed to `solver.solve`.
-            See :meth:`pybamm.BaseSolver.solve`.
-        """
-        # Setup
-        if solver is None:
-            solver = self.solver
-
-        callbacks = pybamm.callbacks.setup_callbacks(callbacks)
-        logs = {}
-
-        self.build(check_model=check_model, initial_soc=initial_soc)
-
-        if self.operating_mode == "drive cycle":
-            # For drive cycles (current provided as data) we perform additional
-            # tests on t_eval (if provided) to ensure the returned solution
-            # captures the input.
-            time_data = self._parameter_values["Current function [A]"].x[0]
-            # If no t_eval is provided, we use the times provided in the data.
-            if t_eval is None:
-                pybamm.logger.info("Setting t_eval as specified by the data")
-                t_eval = time_data
-            # If t_eval is provided we first check if it contains all of the
-            # times in the data to within 10-12. If it doesn't, we then check
-            # that the largest gap in t_eval is smaller than the smallest gap in
-            # the time data (to ensure the resolution of t_eval is fine enough).
-            # We only raise a warning here as users may genuinely only want
-            # the solution returned at some specified points.
-            elif (
-                set(np.round(time_data, 12)).issubset(set(np.round(t_eval, 12)))
-            ) is False:
-                warnings.warn(
-                    """
-                    t_eval does not contain all of the time points in the data
-                    set. Note: passing t_eval = None automatically sets t_eval
-                    to be the points in the data.
-                    """,
-                    pybamm.SolverWarning,
-                )
-                dt_data_min = np.min(np.diff(time_data))
-                dt_eval_max = np.max(np.diff(t_eval))
-                if dt_eval_max > dt_data_min + sys.float_info.epsilon:
-                    warnings.warn(
-                        """
-                        The largest timestep in t_eval ({}) is larger than
-                        the smallest timestep in the data ({}). The returned
-                        solution may not have the correct resolution to accurately
-                        capture the input. Try refining t_eval. Alternatively,
-                        passing t_eval = None automatically sets t_eval to be the
-                        points in the data.
-                        """.format(
-                            dt_eval_max, dt_data_min
-                        ),
-                        pybamm.SolverWarning,
-                    )
-
-        self._solution = solver.solve(self.built_model, t_eval, **kwargs)
-
-        return self.solution
-
-    def _get_esoh_solver(self, calc_esoh):
-        if (
-            calc_esoh is False
-            or isinstance(self.model, pybamm.lead_acid.BaseModel)
-            or isinstance(self.model, pybamm.equivalent_circuit.Thevenin)
-            or self.model.options["working electrode"] != "both"
-        ):
-            return None
-
-        return pybamm.lithium_ion.ElectrodeSOHSolver(
-            self.parameter_values, self.model.param
-        )
-
-    def save(self, filename):
-        """Save simulation using pickle"""
-        if self.model.convert_to_format == "python":
-            # We currently cannot save models in the 'python' format
-            raise NotImplementedError(
-                """
-                Cannot save simulation if model format is python.
-                Set model.convert_to_format = 'casadi' instead.
-                """
-            )
-        # Clear solver problem (not pickle-able, will automatically be recomputed)
-        if (
-            isinstance(self._solver, pybamm.CasadiSolver)
-            and self._solver.integrator_specs != {}
-        ):
-            self._solver.integrator_specs = {}
-
-        if self.op_conds_to_built_solvers is not None:
-            for solver in self.op_conds_to_built_solvers.values():
-                if (
-                    isinstance(solver, pybamm.CasadiSolver)
-                    and solver.integrator_specs != {}
-                ):
-                    solver.integrator_specs = {}
-
-        with open(filename, "wb") as f:
-            pickle.dump(self, f, pickle.HIGHEST_PROTOCOL)
-
-    def load_sim(filename):
-        """Load a saved simulation"""
-        return pybamm.load(filename)
-
-    @property
-    def model(self):
-        return self._model
-
-    @model.setter
-    def model(self, model):
-        self._model = copy.copy(model)
-
-    @property
-    def model_with_set_params(self):
-        return self._model_with_set_params
-
-    @property
-    def built_model(self):
-        return self._built_model
-
-    @property
-    def geometry(self):
-        return self._geometry
-
-    @geometry.setter
-    def geometry(self, geometry):
-        self._geometry = geometry.copy()
-
-    @property
-    def parameter_values(self):
-        return self._parameter_values
-
-    @parameter_values.setter
-    def parameter_values(self, parameter_values):
-        self._parameter_values = parameter_values.copy()
-
-    @property
-    def submesh_types(self):
-        return self._submesh_types
-
-    @submesh_types.setter
-    def submesh_types(self, submesh_types):
-        self._submesh_types = submesh_types.copy()
-
-    @property
-    def mesh(self):
-        return self._mesh
-
-    @property
-    def var_pts(self):
-        return self._var_pts
-
-    @var_pts.setter
-    def var_pts(self, var_pts):
-        self._var_pts = var_pts.copy()
-
-    @property
-    def spatial_methods(self):
-        return self._spatial_methods
-
-    @spatial_methods.setter
-    def spatial_methods(self, spatial_methods):
-        self._spatial_methods = spatial_methods.copy()
-
-    @property
-    def solver(self):
-        return self._solver
-
-    @solver.setter
-    def solver(self, solver):
-        self._solver = solver.copy()
-
-    @property
-    def output_variables(self):
-        return self._output_variables
-
-    @output_variables.setter
-    def output_variables(self, output_variables):
-        self._output_variables = copy.copy(output_variables)
-
-    @property
-    def solution(self):
-        return self._solution

From 57d302558ee2c8de49f9fb8d56066fe1b790c04c Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 10 Aug 2023 17:02:47 +0100
Subject: [PATCH 025/210] Non-geometric parameterisation fitting complete, rm
 simulation class from init

---
 examples/Initial_API.py   |  9 +++------
 pybop/__init__.py         |  5 -----
 pybop/parameterisation.py | 12 ++++++------
 3 files changed, 9 insertions(+), 17 deletions(-)

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index 5e3efee98..1e5ffb7d9 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -12,15 +12,12 @@
  
 # Define model
 model = pybop.models.lithium_ion.SPM()
-model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020") #To implement
+model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
 
 # Fitting parameters
 params = {
-    # "Upper voltage cut-off [V]": pybop.Parameter("Upper voltage cut-off [V]", prior = pybop.Gaussian(4.0,0.01), bounds = [3.8,4.1])
-    # "Electrode height [m]": pybop.Parameter("Electrode height [m]", prior = pybop.Gaussian(0,1), bounds = [0.03,0.1]), 
-     "Negative electrode Bruggeman coefficient (electrolyte)": pybop.Parameter("Negative electrode Bruggeman coefficient (electrolyte)", prior = pybop.Gaussian(1.5,0.1), bounds = [0.8,1.7]), 
-    # "Negative particle radius [m]": pybop.Parameter("Negative particle radius [m]", prior = pybop.Gaussian(0,1), bounds = [0.1e-6,0.8e-6]),
-    # "Positive particle radius [m]": pybop.Parameter("Positive particle radius [m]", prior = pybop.Gaussian(0,1), bounds = [0.1e-5,0.8e-5])
+    "Negative electrode active material volume fraction": pybop.Parameter("Negative electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.1,0.9]), 
+    "Positive electrode active material volume fraction": pybop.Parameter("Positive electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.1,0.9]), 
 }
 
 parameterisation = pybop.Parameterisation(model, observations=observations, fit_parameters=params)
diff --git a/pybop/__init__.py b/pybop/__init__.py
index b32cce831..e154c23ff 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -52,11 +52,6 @@
 #
 from .priors import Gaussian, Uniform, Exponential
 
-#
-# Simulation class
-#
-from .simulation import Simulation
-
 #
 # Optimisation class
 #
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 6dcf6b89d..90d8df8da 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -5,7 +5,6 @@
 
 # To Do:
 # checks on observations and parameters
-# implement method to update parameterisation without reconstructing the simulation
 # Geometric parameters might always require reconstruction (i.e. electrode height)
 
 
@@ -44,6 +43,9 @@ def __init__(
         self._spatial_methods = spatial_methods or self.model.default_spatial_methods
         self.solver = solver or self.model.default_solver
 
+        # Set solver
+        self.solver = pybamm.CasadiSolver()
+
         if model.parameter_set is not None:
             self.parameter_set = model.parameter_set
         else:
@@ -75,9 +77,6 @@ def __init__(
 
         self.build_model(check_model=check_model, init_soc=init_soc)
 
-        # Set solver
-        self.solver = pybamm.CasadiSolver()
-
     def build_model(self, check_model=True, init_soc=None):
         """
         Build the model (if not built already).
@@ -88,8 +87,8 @@ def build_model(self, check_model=True, init_soc=None):
         if self._built_model:
             return
         elif self.model.is_discretised:
-            self.model._model_with_set_params = self.model.pybamm_model
-            self.model._built_model = self.pybamm_model
+            self.model._model_with_set_params = self.model
+            self.model._built_model = self.model
         else:
             self.set_params()
             self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
@@ -180,6 +179,7 @@ def step(x, grad):
         if method == "nlopt":
             optim = pybop.NLoptOptimize(x0=self.x0)
             results = optim.optimise(step, self.x0, self.bounds)
+
         else:
             optim = pybop.NLoptOptimize(method)
             results = optim.optimise(step, self.x0, self.bounds)

From 5df369602dcd83a31a8b2361c7ebfe782508d943 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 16 Aug 2023 12:59:38 +0100
Subject: [PATCH 026/210] Add optim step method w/ lambda, Add initial test
 framework w/ nox + pytest

---
 .github/workflows/test_on_push.yaml | 26 +++++++++++++++
 examples/Initial_API.py             |  8 ++---
 noxfile.py                          | 16 ++++++++++
 pybop/parameterisation.py           | 49 +++++++++++++++--------------
 requirements.txt                    |  5 ---
 setup.py                            | 10 +++---
 tests/unit/test_parameterisation.py | 45 ++++++++++++++++++++++++++
 7 files changed, 121 insertions(+), 38 deletions(-)
 create mode 100644 .github/workflows/test_on_push.yaml
 create mode 100644 noxfile.py
 delete mode 100644 requirements.txt
 create mode 100644 tests/unit/test_parameterisation.py

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
new file mode 100644
index 000000000..eedb94d68
--- /dev/null
+++ b/.github/workflows/test_on_push.yaml
@@ -0,0 +1,26 @@
+name: Python package
+
+on: [push]
+
+jobs:
+  build:
+
+    runs-on: ubuntu-latest
+    strategy:
+      matrix:
+        python-version: ["3.8", "3.9", "3.10", "3.11"]
+
+    steps:
+      - uses: actions/checkout@v3
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v4
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          pip install --upgrade pip nox
+          pip install -e .
+      - name: Test with pytest
+        run: |
+          pytest
diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index 1e5ffb7d9..c30bbf8ed 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -16,14 +16,14 @@
 
 # Fitting parameters
 params = {
-    "Negative electrode active material volume fraction": pybop.Parameter("Negative electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.1,0.9]), 
-    "Positive electrode active material volume fraction": pybop.Parameter("Positive electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.1,0.9]), 
+    "Negative electrode active material volume fraction": pybop.Parameter("Negative electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.05,0.95]), 
+    "Positive electrode active material volume fraction": pybop.Parameter("Positive electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.05,0.95]), 
 }
 
 parameterisation = pybop.Parameterisation(model, observations=observations, fit_parameters=params)
 
-# get RMSE estimate
-results, last_optim, num_evals = parameterisation.rmse(method="nlopt")
+# get RMSE estimate using NLOpt
+results, last_optim, num_evals = parameterisation.rmse(signal="Voltage [V]", method="nlopt")
 
 # get MAP estimate, starting at a random initial point in parameter space
 # parameterisation.map(x0=[p.sample() for p in params]) 
diff --git a/noxfile.py b/noxfile.py
new file mode 100644
index 000000000..d96c45832
--- /dev/null
+++ b/noxfile.py
@@ -0,0 +1,16 @@
+import nox
+
+# nox options
+nox.options.reuse_existing_virtualenvs = True
+
+# @nox.session
+# def lint(session):
+#     session.install('flake8')
+#     session.run('flake8', 'example.py')
+
+
+@nox.session
+def tests(session):
+    session.run_always('pip', 'install', '-e', '.')
+    session.install('pytest')
+    session.run('pytest')
\ No newline at end of file
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 90d8df8da..e54aa13d2 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -133,9 +133,28 @@ def set_params(self):
         self.parameter_set.process_geometry(self._geometry)
         self.model = self._model_with_set_params
 
+    def step(self, signal, x, grad):
+        for i, p in enumerate(self.fit_dict):
+            self.fit_dict[p] = x[i]
+        print(self.fit_dict)
+
+        y_hat = self.solver.solve(
+            self._built_model, self.time_data, inputs=self.fit_dict
+        )[signal].data
+
+        try:
+            res = np.sqrt(
+                np.mean((self.observations["Voltage [V]"].data[1] - y_hat) ** 2)
+            )
+        except:
+            raise ValueError(
+                "Measurement and modelled data length mismatch, potentially due to reaching a voltage cut-off"
+            )
+        return res
+
     def map(self, x0):
         """
-        Max a posteriori estimation.
+        Maximum a posteriori estimation.
         """
         pass
 
@@ -151,38 +170,20 @@ def pem(self, method=None):
         """
         pass
 
-    def rmse(self, method=None):
+    def rmse(self, signal, method=None):
         """
         Calculate the root mean squared error.
         """
 
-        def step(x, grad):
-            for i, p in enumerate(self.fit_dict):
-                self.fit_dict[p] = x[i]
-            print(self.fit_dict)
-
-            y_hat = self.solver.solve(
-                self._built_model, self.time_data, inputs=self.fit_dict
-            )["Terminal voltage [V]"].data
-
-            try:
-                res = np.sqrt(
-                    np.mean((self.observations["Voltage [V]"].data[1] - y_hat) ** 2)
-                )
-            except:
-                raise ValueError(
-                    "Measurement and modelled data length mismatch, potentially due to voltage cut-offs"
-                )
-            print(res)
-            return res
-
         if method == "nlopt":
             optim = pybop.NLoptOptimize(x0=self.x0)
-            results = optim.optimise(step, self.x0, self.bounds)
+            results = optim.optimise(
+                lambda x, grad: self.step(signal, x, grad), self.x0, self.bounds
+            )
 
         else:
             optim = pybop.NLoptOptimize(method)
-            results = optim.optimise(step, self.x0, self.bounds)
+            results = optim.optimise(self.step, self.x0, self.bounds)
         return results
 
     def mle(self, method=None):
diff --git a/requirements.txt b/requirements.txt
deleted file mode 100644
index dae82630d..000000000
--- a/requirements.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-numpy
-pandas
-scipy
-pybamm
-matplotlib
\ No newline at end of file
diff --git a/setup.py b/setup.py
index 42d1d101f..bf5523cde 100644
--- a/setup.py
+++ b/setup.py
@@ -31,11 +31,11 @@
 	url='https://github.com/pybop-team/PyBOP',
 	# List of packages to install with this one 
 	install_requires=[
-        "pybamm>=23.1"
-        "numpy>=1.16",
-        "scipy>=1.3",
-        "pandas>=0.24",
-        "casadi>=3.6.0",
+        "pybamm>=23.1",
+        "numpy>=1.25",
+        "scipy>=1.11",
+        "pandas>=2.0",
+        "casadi>=3.6",
         "nlopt>=2.6",
 	],
 	# https://pypi.org/classifiers/ 
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
new file mode 100644
index 000000000..551366d31
--- /dev/null
+++ b/tests/unit/test_parameterisation.py
@@ -0,0 +1,45 @@
+import pybop
+import pytest
+import numpy as np
+import pandas as pd
+
+
+class TestParameterisation:
+    def test_rmse(self):
+        # Form observations
+        Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy()
+        observations = {
+            "Time [s]": pybop.Observed(["Time [s]"], Measurements[:,0]), 
+            "Current function [A]": pybop.Observed(["Current function [A]"], Measurements[:,1]),
+            "Voltage [V]": pybop.Observed(["Voltage [V]"], Measurements[:,2])
+        }
+
+        # Define model
+        model = pybop.models.lithium_ion.SPM()
+        model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+
+        # Fitting parameters
+        params = {
+            "Negative electrode active material volume fraction": pybop.Parameter(
+                "Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.6, 0.1),
+                bounds=[0.05, 0.95],
+            ),
+            "Positive electrode active material volume fraction": pybop.Parameter(
+                "Positive electrode active material volume fraction",
+                prior=pybop.Gaussian(0.6, 0.1),
+                bounds=[0.05, 0.95],
+            ),
+        }
+
+        parameterisation = pybop.Parameterisation(
+            model, observations=observations, fit_parameters=params
+        )
+
+        # get RMSE estimate using NLOpt
+        results, last_optim, num_evals = parameterisation.rmse(
+            signal="Voltage [V]", method="nlopt"
+        )
+        # Assertions
+        np.testing.assert_allclose(last_optim, 1e-1, atol=5e-2)
+        
\ No newline at end of file

From 66d58565b228615bfced9d4bfe896de3706aebbe Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 16 Aug 2023 13:09:08 +0100
Subject: [PATCH 027/210] Fix test_on_push for nox

---
 .github/workflows/test_on_push.yaml | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index eedb94d68..9fc78541f 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -1,4 +1,4 @@
-name: Python package
+name: PyBOP
 
 on: [push]
 
@@ -21,6 +21,6 @@ jobs:
           python -m pip install --upgrade pip
           pip install --upgrade pip nox
           pip install -e .
-      - name: Test with pytest
+      - name: Test with nox
         run: |
-          pytest
+          nox

From c0001e5c55886e2ea1b0ba38d1a58e3160921b4c Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 16 Aug 2023 13:12:14 +0100
Subject: [PATCH 028/210] Updt numpy version requirement, add fail-fast false
 condition

---
 .github/workflows/test_on_push.yaml | 1 +
 setup.py                            | 2 +-
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index 9fc78541f..04f4afc26 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -7,6 +7,7 @@ jobs:
 
     runs-on: ubuntu-latest
     strategy:
+      fail-fast: false
       matrix:
         python-version: ["3.8", "3.9", "3.10", "3.11"]
 
diff --git a/setup.py b/setup.py
index bf5523cde..67ed0aef4 100644
--- a/setup.py
+++ b/setup.py
@@ -32,7 +32,7 @@
 	# List of packages to install with this one 
 	install_requires=[
         "pybamm>=23.1",
-        "numpy>=1.25",
+        "numpy>=1.16",
         "scipy>=1.11",
         "pandas>=2.0",
         "casadi>=3.6",

From 38bddb072ca36469d3ee2d04abfde4b0f90bf008 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 16 Aug 2023 13:24:03 +0100
Subject: [PATCH 029/210] Updt dependancy requirements for python 3.8 support

---
 setup.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/setup.py b/setup.py
index 67ed0aef4..a9a328598 100644
--- a/setup.py
+++ b/setup.py
@@ -33,8 +33,8 @@
 	install_requires=[
         "pybamm>=23.1",
         "numpy>=1.16",
-        "scipy>=1.11",
-        "pandas>=2.0",
+        "scipy>=1.3",
+        "pandas>=1.0",
         "casadi>=3.6",
         "nlopt>=2.6",
 	],

From 1fb9fac65ed5d255f36ab3b434020315ec079416 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 16 Aug 2023 15:32:41 +0100
Subject: [PATCH 030/210] Updt README w/ build status

---
 README.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/README.md b/README.md
index da868b90f..441e2c469 100644
--- a/README.md
+++ b/README.md
@@ -1,5 +1,11 @@
 # PyBOP - A *Py*thon package for *B*attery *O*ptimisation and *P*arameterisation
 
+<div align="center">
+
+[![Build Status](https://github.com/pybop-team/PyBOP/actions/workflows/CI/badge.svg)](https://github.com/pybop-team/PyBOP/actions)
+
+</div>
+
 PyBOP aims to be a modular library for the parameterisation and optimisation of battery models, with a particular focus on classes built around [PyBaMM](https://github.com/pybamm-team/PyBaMM) models. The figure below gives the current conceptual idea of PyBOP's structure. This will likely evolve as development progresses.
 
 <p align="center">

From cc10421d4dd99209592d70c91f15dab83c396a2b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 16 Aug 2023 15:41:07 +0100
Subject: [PATCH 031/210] Test icon syntax fix

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 441e2c469..20f03d5b7 100644
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 <div align="center">
 
-[![Build Status](https://github.com/pybop-team/PyBOP/actions/workflows/CI/badge.svg)](https://github.com/pybop-team/PyBOP/actions)
+[![Build Status](https://github.com/pybop-team/PyBOP/actions/workflows/test_on_push.yaml/badge.svg?branch=develop)](https://github.com/pybop-team/PyBOP/actions/workflows/test_on_push.yaml)
 
 </div>
 

From 6b7ab48a391f3116cedea3c0c7107cb3ac5071a0 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 17 Aug 2023 16:19:40 +0100
Subject: [PATCH 032/210] Updt. x0 to be sampled from priors, Progress: API to
 list formation

---
 examples/Initial_API.py   | 10 +++++-----
 pybop/parameterisation.py | 12 ++++++++++--
 2 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index c30bbf8ed..261e296ef 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -4,11 +4,11 @@
 
 # Form observations
 Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy() 
-observations = {
-    "Time [s]": pybop.Observed(["Time [s]"], Measurements[:,0]), 
-    "Current function [A]": pybop.Observed(["Current function [A]"], Measurements[:,1]),
-    "Voltage [V]": pybop.Observed(["Voltage [V]"], Measurements[:,2])
-}
+observations = [
+    pybop.Observed(["Time [s]"], Measurements[:,0]), 
+    pybop.Observed(["Current function [A]"], Measurements[:,1]),
+    pybop.Observed(["Voltage [V]"], Measurements[:,2])
+]
  
 # Define model
 model = pybop.models.lithium_ion.SPM()
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index e54aa13d2..a31cc31ea 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -30,7 +30,12 @@ def __init__(
         self.model = model.pybamm_model
         self._unprocessed_model = model.pybamm_model
         self.fit_parameters = fit_parameters
-        self.observations = observations
+
+        self.observations = {o.name: o for o in observations} # needs to be fixed
+        for name in ["Time [s]", "Current function [A]"]:
+            if name not in self.observations:
+                raise ValueError(f"expected {name} in list of observations")
+
         self.bounds = dict(
             lower=[self.fit_parameters[p].bounds[0] for p in self.fit_parameters],
             upper=[self.fit_parameters[p].bounds[1] for p in self.fit_parameters],
@@ -61,7 +66,10 @@ def __init__(
             raise ValueError("Current function not supplied")
 
         if x0 is None:
-            self.x0 = np.mean([self.bounds["lower"], self.bounds["upper"]], axis=0)
+            self.x0 = np.zeros(len(self.fit_parameters))
+
+            for i, j in enumerate(self.fit_parameters):
+                self.x0[i] = self.fit_parameters[j].prior.rvs(1)
 
         # set input parameters in parameter set from fitting parameters
         for i in self.fit_parameters:

From d50702e284e92cc543c693390e6c98229f76b746 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 17 Aug 2023 18:07:16 +0100
Subject: [PATCH 033/210] API change to observation & params definition to
 type::list

---
 examples/Initial_API.py   | 14 +++++++-------
 pybop/parameterisation.py |  6 +++---
 2 files changed, 10 insertions(+), 10 deletions(-)

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index 261e296ef..a884409bb 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -5,9 +5,9 @@
 # Form observations
 Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy() 
 observations = [
-    pybop.Observed(["Time [s]"], Measurements[:,0]), 
-    pybop.Observed(["Current function [A]"], Measurements[:,1]),
-    pybop.Observed(["Voltage [V]"], Measurements[:,2])
+    pybop.Observed("Time [s]", Measurements[:,0]), 
+    pybop.Observed("Current function [A]", Measurements[:,1]),
+    pybop.Observed("Voltage [V]", Measurements[:,2])
 ]
  
 # Define model
@@ -15,10 +15,10 @@
 model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
 
 # Fitting parameters
-params = {
-    "Negative electrode active material volume fraction": pybop.Parameter("Negative electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.05,0.95]), 
-    "Positive electrode active material volume fraction": pybop.Parameter("Positive electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.05,0.95]), 
-}
+params = [
+    pybop.Parameter("Negative electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.05,0.95]), 
+    pybop.Parameter("Positive electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.05,0.95]), 
+]
 
 parameterisation = pybop.Parameterisation(model, observations=observations, fit_parameters=params)
 
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index a31cc31ea..008e38bfd 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -29,9 +29,10 @@ def __init__(
     ):
         self.model = model.pybamm_model
         self._unprocessed_model = model.pybamm_model
-        self.fit_parameters = fit_parameters
+        self.fit_parameters = {o.name: o for o in fit_parameters}
+        self.observations = {o.name: o for o in observations}
 
-        self.observations = {o.name: o for o in observations} # needs to be fixed
+        # Check that the observations contain time and current
         for name in ["Time [s]", "Current function [A]"]:
             if name not in self.observations:
                 raise ValueError(f"expected {name} in list of observations")
@@ -67,7 +68,6 @@ def __init__(
 
         if x0 is None:
             self.x0 = np.zeros(len(self.fit_parameters))
-
             for i, j in enumerate(self.fit_parameters):
                 self.x0[i] = self.fit_parameters[j].prior.rvs(1)
 

From ee7fe83f7727672c9ab12a1d2846123d39c25df4 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 18 Aug 2023 09:03:32 +0100
Subject: [PATCH 034/210] refactor API change for observ. & param class
 type::list, tests update for change

---
 examples/Initial_API.py             | 34 +++++++++++++++++++----------
 pybop/parameterisation.py           |  2 +-
 tests/unit/test_parameterisation.py | 21 +++++++++---------
 3 files changed, 34 insertions(+), 23 deletions(-)

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index a884409bb..25faa65b7 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -3,30 +3,42 @@
 import numpy as np
 
 # Form observations
-Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy() 
+Measurements = pd.read_csv("examples/Chen_example.csv", comment="#").to_numpy()
 observations = [
-    pybop.Observed("Time [s]", Measurements[:,0]), 
-    pybop.Observed("Current function [A]", Measurements[:,1]),
-    pybop.Observed("Voltage [V]", Measurements[:,2])
+    pybop.Observed("Time [s]", Measurements[:, 0]),
+    pybop.Observed("Current function [A]", Measurements[:, 1]),
+    pybop.Observed("Voltage [V]", Measurements[:, 2]),
 ]
- 
+
 # Define model
 model = pybop.models.lithium_ion.SPM()
 model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
 
 # Fitting parameters
 params = [
-    pybop.Parameter("Negative electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.05,0.95]), 
-    pybop.Parameter("Positive electrode active material volume fraction", prior = pybop.Gaussian(0.6,0.1), bounds = [0.05,0.95]), 
+    pybop.Parameter(
+        "Negative electrode active material volume fraction",
+        prior=pybop.Gaussian(0.6, 0.1),
+        bounds=[0.05, 0.95],
+    ),
+    pybop.Parameter(
+        "Positive electrode active material volume fraction",
+        prior=pybop.Gaussian(0.6, 0.1),
+        bounds=[0.05, 0.95],
+    ),
 ]
 
-parameterisation = pybop.Parameterisation(model, observations=observations, fit_parameters=params)
+parameterisation = pybop.Parameterisation(
+    model, observations=observations, fit_parameters=params
+)
 
 # get RMSE estimate using NLOpt
-results, last_optim, num_evals = parameterisation.rmse(signal="Voltage [V]", method="nlopt")
+results, last_optim, num_evals = parameterisation.rmse(
+    signal="Voltage [V]", method="nlopt"
+)
 
 # get MAP estimate, starting at a random initial point in parameter space
-# parameterisation.map(x0=[p.sample() for p in params]) 
+# parameterisation.map(x0=[p.sample() for p in params])
 
 # or sample from posterior
 # parameterisation.sample(1000, n_chains=4, ....)
@@ -35,4 +47,4 @@
 # parameterisation.sober()
 
 
-#Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)
\ No newline at end of file
+# Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 008e38bfd..898f87b52 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -69,7 +69,7 @@ def __init__(
         if x0 is None:
             self.x0 = np.zeros(len(self.fit_parameters))
             for i, j in enumerate(self.fit_parameters):
-                self.x0[i] = self.fit_parameters[j].prior.rvs(1)
+                self.x0[i] = self.fit_parameters[j].prior.rvs(1)[0]
 
         # set input parameters in parameter set from fitting parameters
         for i in self.fit_parameters:
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index 551366d31..123363517 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -7,30 +7,30 @@
 class TestParameterisation:
     def test_rmse(self):
         # Form observations
-        Measurements = pd.read_csv("examples/Chen_example.csv", comment='#').to_numpy()
-        observations = {
-            "Time [s]": pybop.Observed(["Time [s]"], Measurements[:,0]), 
-            "Current function [A]": pybop.Observed(["Current function [A]"], Measurements[:,1]),
-            "Voltage [V]": pybop.Observed(["Voltage [V]"], Measurements[:,2])
-        }
+        Measurements = pd.read_csv("examples/Chen_example.csv", comment="#").to_numpy()
+        observations = [
+            pybop.Observed("Time [s]", Measurements[:, 0]),
+            pybop.Observed("Current function [A]", Measurements[:, 1]),
+            pybop.Observed("Voltage [V]", Measurements[:, 2]),
+        ]
 
         # Define model
         model = pybop.models.lithium_ion.SPM()
         model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
 
         # Fitting parameters
-        params = {
-            "Negative electrode active material volume fraction": pybop.Parameter(
+        params = [
+            pybop.Parameter(
                 "Negative electrode active material volume fraction",
                 prior=pybop.Gaussian(0.6, 0.1),
                 bounds=[0.05, 0.95],
             ),
-            "Positive electrode active material volume fraction": pybop.Parameter(
+            pybop.Parameter(
                 "Positive electrode active material volume fraction",
                 prior=pybop.Gaussian(0.6, 0.1),
                 bounds=[0.05, 0.95],
             ),
-        }
+        ]
 
         parameterisation = pybop.Parameterisation(
             model, observations=observations, fit_parameters=params
@@ -42,4 +42,3 @@ def test_rmse(self):
         )
         # Assertions
         np.testing.assert_allclose(last_optim, 1e-1, atol=5e-2)
-        
\ No newline at end of file

From d8b8077ffc5f3f735df1a5078c52b4ecbcde039b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 18 Aug 2023 10:29:17 +0100
Subject: [PATCH 035/210] Refactor parameterisation & spm class, Add BaseModel
 class

---
 pybop/__init__.py               |  1 +
 pybop/models/BaseModel.py       | 24 +++++++++
 pybop/models/lithium_ion/spm.py | 92 ++++++++++++++++++++++++++++++--
 pybop/parameterisation.py       | 93 +++------------------------------
 4 files changed, 122 insertions(+), 88 deletions(-)
 create mode 100644 pybop/models/BaseModel.py

diff --git a/pybop/__init__.py b/pybop/__init__.py
index e154c23ff..7aeec0553 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -28,6 +28,7 @@
 #
 # Model Classes
 #
+from .models import BaseModel
 from .models import lithium_ion
 
 #
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
new file mode 100644
index 000000000..a526909bf
--- /dev/null
+++ b/pybop/models/BaseModel.py
@@ -0,0 +1,24 @@
+import pybop
+
+
+class BaseModel:
+    """
+    Base class for PyBOP models
+    """
+
+    def __init__(self, name="Base Model"):
+        self.pybamm_model = None
+        self.name = name
+        self.parameter_set = None
+
+    def build(self):
+        """
+        Build the model
+        """
+        pass
+
+    def sim(self):
+        """
+        Simulate the model
+        """
+        pass
diff --git a/pybop/models/lithium_ion/spm.py b/pybop/models/lithium_ion/spm.py
index 99b118a99..5ea73fbc4 100644
--- a/pybop/models/lithium_ion/spm.py
+++ b/pybop/models/lithium_ion/spm.py
@@ -1,13 +1,99 @@
 import pybop
 import pybamm
+from ..BaseModel import BaseModel
 
 
-class SPM:
+class SPM(BaseModel):
     """
     Composition of the SPM class in PyBaMM.
     """
 
-    def __init__(self):
+    def __init__(
+        self,
+        name="Single Particle Model",
+        geometry=None,
+        submesh_types=None,
+        var_pts=None,
+        spatial_methods=None,
+        solver=None,
+    ):
+        super().__init__()
         self.pybamm_model = pybamm.lithium_ion.SPM()
-        self.name = "Single Particle Model"
+        self._unprocessed_model = self.pybamm_model
+        self.name = name
         self.parameter_set = self.pybamm_model.default_parameter_values
+        self._model_with_set_params = None
+        self._built_model = None
+        self._geometry = geometry or self.pybamm_model.default_geometry
+        self._submesh_types = submesh_types or self.pybamm_model.default_submesh_types
+        self._var_pts = var_pts or self.pybamm_model.default_var_pts
+        self._spatial_methods = (
+            spatial_methods or self.pybamm_model.default_spatial_methods
+        )
+        self.solver = solver or self.pybamm_model.default_solver
+
+    def build_model(
+        self,
+        check_model=True,
+        init_soc=None,
+    ):
+        """
+        Build the model (if not built already).
+        """
+        if init_soc is not None:
+            self.set_init_soc(init_soc)  # define this function
+
+        if self._built_model:
+            return
+
+        elif self.pybamm_model.is_discretised:
+            self.pybamm_model._model_with_set_params = self.pybamm_model
+            self.pybamm_model._built_model = self.pybamm_model
+        else:
+            self.set_params()
+            self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
+            self._disc = pybamm.Discretisation(self._mesh, self._spatial_methods)
+            self._built_model = self._disc.process_model(
+                self._model_with_set_params, inplace=False, check_model=check_model
+            )
+
+            # Clear solver
+            self.solver._model_set_up = {}
+
+    def set_init_soc(self, init_soc):
+        """
+        Set the initial state of charge.
+        """
+        if self._built_initial_soc != init_soc:
+            # reset
+            self._model_with_set_params = None
+            self._built_model = None
+            self.op_conds_to_built_models = None
+            self.op_conds_to_built_solvers = None
+
+        param = self.model.pybamm_model.param
+        self.parameter_set = (
+            self._unprocessed_parameter_set.set_initial_stoichiometries(
+                init_soc, param=param, inplace=False
+            )
+        )
+        # Save solved initial SOC in case we need to re-build the model
+        self._built_initial_soc = init_soc
+
+    def set_params(self):
+        """
+        Set the parameters in the model.
+        """
+        if self._model_with_set_params:
+            return
+
+        self._model_with_set_params = self.parameter_set.process_model(
+            self._unprocessed_model, inplace=False
+        )
+        self.parameter_set.process_geometry(self._geometry)
+        self.pybamm_model = self._model_with_set_params
+
+    def sim(self):
+        """
+        Simulate the model
+        """
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 898f87b52..70cbd7c93 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -3,11 +3,6 @@
 import numpy as np
 
 
-# To Do:
-# checks on observations and parameters
-# Geometric parameters might always require reconstruction (i.e. electrode height)
-
-
 class Parameterisation:
     """
     Parameterisation class for pybop.
@@ -18,17 +13,11 @@ def __init__(
         model,
         observations,
         fit_parameters,
-        geometry=None,
-        submesh_types=None,
-        var_pts=None,
-        spatial_methods=None,
-        solver=None,
         x0=None,
         check_model=True,
         init_soc=None,
     ):
-        self.model = model.pybamm_model
-        self._unprocessed_model = model.pybamm_model
+        self.model = model
         self.fit_parameters = {o.name: o for o in fit_parameters}
         self.observations = {o.name: o for o in observations}
 
@@ -41,21 +30,11 @@ def __init__(
             lower=[self.fit_parameters[p].bounds[0] for p in self.fit_parameters],
             upper=[self.fit_parameters[p].bounds[1] for p in self.fit_parameters],
         )
-        self._model_with_set_params = None
-        self._built_model = None
-        self._geometry = geometry or self.model.default_geometry
-        self._submesh_types = submesh_types or self.model.default_submesh_types
-        self._var_pts = var_pts or self.model.default_var_pts
-        self._spatial_methods = spatial_methods or self.model.default_spatial_methods
-        self.solver = solver or self.model.default_solver
-
-        # Set solver
-        self.solver = pybamm.CasadiSolver()
-
-        if model.parameter_set is not None:
-            self.parameter_set = model.parameter_set
+
+        if self.model.parameter_set is not None:
+            self.parameter_set = self.model.parameter_set
         else:
-            self.parameter_set = self.model.default_parameter_values
+            self.parameter_set = self.model.pybamm_model.default_parameter_values
 
         try:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
@@ -83,71 +62,15 @@ def __init__(
         # Set t_eval
         self.time_data = self.parameter_set["Current function [A]"].x[0]
 
-        self.build_model(check_model=check_model, init_soc=init_soc)
-
-    def build_model(self, check_model=True, init_soc=None):
-        """
-        Build the model (if not built already).
-        """
-        if init_soc is not None:
-            self.set_init_soc(init_soc)  # define this function
-
-        if self._built_model:
-            return
-        elif self.model.is_discretised:
-            self.model._model_with_set_params = self.model
-            self.model._built_model = self.model
-        else:
-            self.set_params()
-            self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
-            self._disc = pybamm.Discretisation(self._mesh, self._spatial_methods)
-            self._built_model = self._disc.process_model(
-                self._model_with_set_params, inplace=False, check_model=check_model
-            )
-
-            # Clear solver
-            self.solver._model_set_up = {}
-
-    def set_init_soc(self, init_soc):
-        """
-        Set the initial state of charge.
-        """
-        if self._built_initial_soc != init_soc:
-            # reset
-            self._model_with_set_params = None
-            self._built_model = None
-            self.op_conds_to_built_models = None
-            self.op_conds_to_built_solvers = None
-
-        param = self.model.param
-        self.parameter_set = (
-            self._unprocessed_parameter_set.set_initial_stoichiometries(
-                init_soc, param=param, inplace=False
-            )
-        )
-        # Save solved initial SOC in case we need to re-build the model
-        self._built_initial_soc = init_soc
-
-    def set_params(self):
-        """
-        Set the parameters in the model.
-        """
-        if self._model_with_set_params:
-            return
-
-        self._model_with_set_params = self.parameter_set.process_model(
-            self._unprocessed_model, inplace=False
-        )
-        self.parameter_set.process_geometry(self._geometry)
-        self.model = self._model_with_set_params
+        self.model.build_model(check_model=check_model, init_soc=init_soc)
 
     def step(self, signal, x, grad):
         for i, p in enumerate(self.fit_dict):
             self.fit_dict[p] = x[i]
         print(self.fit_dict)
 
-        y_hat = self.solver.solve(
-            self._built_model, self.time_data, inputs=self.fit_dict
+        y_hat = self.model.solver.solve(
+            self.model._built_model, self.time_data, inputs=self.fit_dict
         )[signal].data
 
         try:

From e3f49c587f604a2633b916f618344b47558bee82 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 18 Aug 2023 11:26:45 +0100
Subject: [PATCH 036/210] Refactor #2 of parameterisation & spm class, Aligned
 init. parameter conditions for rmse/nlopt

---
 pybop/models/lithium_ion/spm.py | 28 ++++++++++++++++++--
 pybop/parameterisation.py       | 47 +++++++++++++--------------------
 2 files changed, 44 insertions(+), 31 deletions(-)

diff --git a/pybop/models/lithium_ion/spm.py b/pybop/models/lithium_ion/spm.py
index 5ea73fbc4..c42ec0f0e 100644
--- a/pybop/models/lithium_ion/spm.py
+++ b/pybop/models/lithium_ion/spm.py
@@ -16,12 +16,13 @@ def __init__(
         var_pts=None,
         spatial_methods=None,
         solver=None,
+        parameter_set=None,
     ):
         super().__init__()
         self.pybamm_model = pybamm.lithium_ion.SPM()
         self._unprocessed_model = self.pybamm_model
         self.name = name
-        self.parameter_set = self.pybamm_model.default_parameter_values
+        self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
         self._model_with_set_params = None
         self._built_model = None
         self._geometry = geometry or self.pybamm_model.default_geometry
@@ -77,7 +78,7 @@ def set_init_soc(self, init_soc):
                 init_soc, param=param, inplace=False
             )
         )
-        # Save solved initial SOC in case we need to re-build the model
+        # Save solved initial SOC in case we need to rebuild the model
         self._built_initial_soc = init_soc
 
     def set_params(self):
@@ -93,6 +94,29 @@ def set_params(self):
         self.parameter_set.process_geometry(self._geometry)
         self.pybamm_model = self._model_with_set_params
 
+    def build_parameter_set(self, observations, fit_parameters):
+        """
+        Build the parameter set.
+        """
+
+        try:
+            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
+                observations["Time [s]"].data,
+                observations["Current function [A]"].data,
+                pybamm.t,
+            )
+        except:
+            raise ValueError("Current function not supplied")
+
+        # set input parameters in parameter set from fitting parameters
+        for i in fit_parameters:
+            self.parameter_set[i] = "[input]"
+
+        self._unprocessed_parameter_set = self.parameter_set
+
+        # Set t_eval
+        self.time_data = self.parameter_set["Current function [A]"].x[0]
+
     def sim(self):
         """
         Simulate the model
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 70cbd7c93..3bc9cc27b 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -16,8 +16,10 @@ def __init__(
         x0=None,
         check_model=True,
         init_soc=None,
+        verbose=False,
     ):
         self.model = model
+        self.fit_dict = {}
         self.fit_parameters = {o.name: o for o in fit_parameters}
         self.observations = {o.name: o for o in observations}
 
@@ -26,51 +28,34 @@ def __init__(
             if name not in self.observations:
                 raise ValueError(f"expected {name} in list of observations")
 
+        # Set bounds
         self.bounds = dict(
             lower=[self.fit_parameters[p].bounds[0] for p in self.fit_parameters],
             upper=[self.fit_parameters[p].bounds[1] for p in self.fit_parameters],
         )
 
-        if self.model.parameter_set is not None:
-            self.parameter_set = self.model.parameter_set
-        else:
-            self.parameter_set = self.model.pybamm_model.default_parameter_values
-
-        try:
-            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                self.observations["Time [s]"].data,
-                self.observations["Current function [A]"].data,
-                pybamm.t,
-            )
-        except:
-            raise ValueError("Current function not supplied")
-
+        # Sample from prior for x0
         if x0 is None:
             self.x0 = np.zeros(len(self.fit_parameters))
             for i, j in enumerate(self.fit_parameters):
-                self.x0[i] = self.fit_parameters[j].prior.rvs(1)[0]
-
-        # set input parameters in parameter set from fitting parameters
-        for i in self.fit_parameters:
-            self.parameter_set[i] = "[input]"
-
-        self._unprocessed_parameter_set = self.parameter_set
-        self.fit_dict = {
-            p: self.fit_parameters[p].prior.mean for p in self.fit_parameters
-        }
+                self.x0[i] = self.fit_parameters[j].prior.rvs(1)[
+                    0
+                ]  # Updt to capture dimensions per parameter
 
-        # Set t_eval
-        self.time_data = self.parameter_set["Current function [A]"].x[0]
+        # Align initial guess with sample from prior
+        for i, j in enumerate(self.fit_parameters):
+            self.fit_dict[j] = {j: self.x0[i]}
 
+        # Build parameter set and model
+        self.model.build_parameter_set(self.observations, self.fit_parameters)
         self.model.build_model(check_model=check_model, init_soc=init_soc)
 
-    def step(self, signal, x, grad):
+    def step(self, signal, x, grad, verbose):
         for i, p in enumerate(self.fit_dict):
             self.fit_dict[p] = x[i]
-        print(self.fit_dict)
 
         y_hat = self.model.solver.solve(
-            self.model._built_model, self.time_data, inputs=self.fit_dict
+            self.model._built_model, self.model.time_data, inputs=self.fit_dict
         )[signal].data
 
         try:
@@ -81,6 +66,10 @@ def step(self, signal, x, grad):
             raise ValueError(
                 "Measurement and modelled data length mismatch, potentially due to reaching a voltage cut-off"
             )
+
+        if verbose:
+            print(self.fit_dict)
+
         return res
 
     def map(self, x0):

From d21249ba9823ff4535237680ec987a0a60873d96 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 18 Aug 2023 15:38:10 +0100
Subject: [PATCH 037/210] Data generation in test methods, debug parameter
 initilisation problem for spm+basemodel, parameterisation.py tidy

---
 examples/Initial_API.py             |  12 +--
 pybop/models/BaseModel.py           |   4 +-
 pybop/models/lithium_ion/spm.py     | 129 +++++++++++++++++++++-------
 pybop/parameterisation.py           |  38 +++++---
 tests/unit/test_parameterisation.py |  34 +++++++-
 5 files changed, 161 insertions(+), 56 deletions(-)

diff --git a/examples/Initial_API.py b/examples/Initial_API.py
index 25faa65b7..5a47e27aa 100644
--- a/examples/Initial_API.py
+++ b/examples/Initial_API.py
@@ -11,20 +11,20 @@
 ]
 
 # Define model
-model = pybop.models.lithium_ion.SPM()
-model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+model = pybop.models.lithium_ion.SPM(parameter_set=parameter_set)
 
 # Fitting parameters
 params = [
     pybop.Parameter(
         "Negative electrode active material volume fraction",
-        prior=pybop.Gaussian(0.6, 0.1),
-        bounds=[0.05, 0.95],
+        prior=pybop.Gaussian(0.75, 0.05),
+        bounds=[0.65, 0.85],
     ),
     pybop.Parameter(
         "Positive electrode active material volume fraction",
-        prior=pybop.Gaussian(0.6, 0.1),
-        bounds=[0.05, 0.95],
+        prior=pybop.Gaussian(0.65, 0.05),
+        bounds=[0.55, 0.75],
     ),
 ]
 
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index a526909bf..809a99e28 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -7,9 +7,9 @@ class BaseModel:
     """
 
     def __init__(self, name="Base Model"):
-        self.pybamm_model = None
+        # self.pybamm_model = None
         self.name = name
-        self.parameter_set = None
+        # self.parameter_set = None
 
     def build(self):
         """
diff --git a/pybop/models/lithium_ion/spm.py b/pybop/models/lithium_ion/spm.py
index c42ec0f0e..133a241b6 100644
--- a/pybop/models/lithium_ion/spm.py
+++ b/pybop/models/lithium_ion/spm.py
@@ -11,30 +11,39 @@ class SPM(BaseModel):
     def __init__(
         self,
         name="Single Particle Model",
+        parameter_set=None,
         geometry=None,
         submesh_types=None,
         var_pts=None,
         spatial_methods=None,
         solver=None,
-        parameter_set=None,
     ):
         super().__init__()
         self.pybamm_model = pybamm.lithium_ion.SPM()
         self._unprocessed_model = self.pybamm_model
         self.name = name
+
         self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
-        self._model_with_set_params = None
-        self._built_model = None
-        self._geometry = geometry or self.pybamm_model.default_geometry
-        self._submesh_types = submesh_types or self.pybamm_model.default_submesh_types
-        self._var_pts = var_pts or self.pybamm_model.default_var_pts
-        self._spatial_methods = (
+        self._unprocessed_parameter_set = self.parameter_set
+
+        self.geometry = geometry or self.pybamm_model.default_geometry
+        self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types
+        self.var_pts = var_pts or self.pybamm_model.default_var_pts
+        self.spatial_methods = (
             spatial_methods or self.pybamm_model.default_spatial_methods
         )
         self.solver = solver or self.pybamm_model.default_solver
 
+        self._model_with_set_params = None
+        self._built_model = None
+        self._built_initial_soc = None
+        self._mesh = None
+        self._disc = None
+
     def build_model(
         self,
+        observations,
+        fit_parameters,
         check_model=True,
         init_soc=None,
     ):
@@ -42,24 +51,26 @@ def build_model(
         Build the model (if not built already).
         """
         if init_soc is not None:
-            self.set_init_soc(init_soc)  # define this function
+            self.set_init_soc(init_soc)
 
         if self._built_model:
             return
 
         elif self.pybamm_model.is_discretised:
-            self.pybamm_model._model_with_set_params = self.pybamm_model
-            self.pybamm_model._built_model = self.pybamm_model
+            self._model_with_set_params = self.pybamm_model
+            self._built_model = self.pybamm_model
         else:
-            self.set_params()
-            self._mesh = pybamm.Mesh(self._geometry, self._submesh_types, self._var_pts)
-            self._disc = pybamm.Discretisation(self._mesh, self._spatial_methods)
+            self.set_params(observations, fit_parameters)
+            self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
+            self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
             self._built_model = self._disc.process_model(
                 self._model_with_set_params, inplace=False, check_model=check_model
             )
+            # Set t_eval
+            self.time_data = self._parameter_set["Current function [A]"].x[0]
 
             # Clear solver
-            self.solver._model_set_up = {}
+            self._solver._model_set_up = {}
 
     def set_init_soc(self, init_soc):
         """
@@ -72,7 +83,7 @@ def set_init_soc(self, init_soc):
             self.op_conds_to_built_models = None
             self.op_conds_to_built_solvers = None
 
-        param = self.model.pybamm_model.param
+        param = self.pybamm_model.param
         self.parameter_set = (
             self._unprocessed_parameter_set.set_initial_stoichiometries(
                 init_soc, param=param, inplace=False
@@ -81,24 +92,13 @@ def set_init_soc(self, init_soc):
         # Save solved initial SOC in case we need to rebuild the model
         self._built_initial_soc = init_soc
 
-    def set_params(self):
+    def set_params(self, observations, fit_parameters):
         """
         Set the parameters in the model.
         """
-        if self._model_with_set_params:
+        if self.model_with_set_params:
             return
 
-        self._model_with_set_params = self.parameter_set.process_model(
-            self._unprocessed_model, inplace=False
-        )
-        self.parameter_set.process_geometry(self._geometry)
-        self.pybamm_model = self._model_with_set_params
-
-    def build_parameter_set(self, observations, fit_parameters):
-        """
-        Build the parameter set.
-        """
-
         try:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
                 observations["Time [s]"].data,
@@ -112,12 +112,77 @@ def build_parameter_set(self, observations, fit_parameters):
         for i in fit_parameters:
             self.parameter_set[i] = "[input]"
 
-        self._unprocessed_parameter_set = self.parameter_set
-
-        # Set t_eval
-        self.time_data = self.parameter_set["Current function [A]"].x[0]
+        self._model_with_set_params = self._parameter_set.process_model(
+            self._unprocessed_model, inplace=False
+        )
+        self._parameter_set.process_geometry(self.geometry)
+        self.pybamm_model = self._model_with_set_params
 
     def sim(self):
         """
         Simulate the model
         """
+
+    @property
+    def built_model(self):
+        return self._built_model
+
+    @property
+    def parameter_set(self):
+        return self._parameter_set
+
+    @parameter_set.setter
+    def parameter_set(self, parameter_set):
+        self._parameter_set = parameter_set.copy()
+
+    @property
+    def model_with_set_params(self):
+        return self._model_with_set_params
+
+    @property
+    def built_model(self):
+        return self._built_model
+
+    @property
+    def geometry(self):
+        return self._geometry
+
+    @geometry.setter
+    def geometry(self, geometry):
+        self._geometry = geometry.copy()
+
+    @property
+    def submesh_types(self):
+        return self._submesh_types
+
+    @submesh_types.setter
+    def submesh_types(self, submesh_types):
+        self._submesh_types = submesh_types.copy()
+
+    @property
+    def mesh(self):
+        return self._mesh
+
+    @property
+    def var_pts(self):
+        return self._var_pts
+
+    @var_pts.setter
+    def var_pts(self, var_pts):
+        self._var_pts = var_pts.copy()
+
+    @property
+    def spatial_methods(self):
+        return self._spatial_methods
+
+    @spatial_methods.setter
+    def spatial_methods(self, spatial_methods):
+        self._spatial_methods = spatial_methods.copy()
+
+    @property
+    def solver(self):
+        return self._solver
+
+    @solver.setter
+    def solver(self, solver):
+        self._solver = solver.copy()
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index 3bc9cc27b..aa6828d3c 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -1,5 +1,4 @@
 import pybop
-import pybamm
 import numpy as np
 
 
@@ -19,6 +18,7 @@ def __init__(
         verbose=False,
     ):
         self.model = model
+        self.verbose = verbose
         self.fit_dict = {}
         self.fit_parameters = {o.name: o for o in fit_parameters}
         self.observations = {o.name: o for o in observations}
@@ -46,28 +46,42 @@ def __init__(
         for i, j in enumerate(self.fit_parameters):
             self.fit_dict[j] = {j: self.x0[i]}
 
-        # Build parameter set and model
-        self.model.build_parameter_set(self.observations, self.fit_parameters)
-        self.model.build_model(check_model=check_model, init_soc=init_soc)
+        # Build model with observations and fitting_parameters
+        self.model.build_model(
+            self.observations,
+            self.fit_parameters,
+            check_model=check_model,
+            init_soc=init_soc,
+        )
 
-    def step(self, signal, x, grad, verbose):
+    def step(self, signal, x, grad):
         for i, p in enumerate(self.fit_dict):
             self.fit_dict[p] = x[i]
 
         y_hat = self.model.solver.solve(
-            self.model._built_model, self.model.time_data, inputs=self.fit_dict
+            self.model.built_model, self.model.time_data, inputs=self.fit_dict
         )[signal].data
 
-        try:
-            res = np.sqrt(
-                np.mean((self.observations["Voltage [V]"].data[1] - y_hat) ** 2)
+        print(
+            "Last Voltage Values:", y_hat[-1], self.observations["Voltage [V]"].data[-1]
+        )
+
+        if len(y_hat) != len(self.observations["Voltage [V]"].data):
+            print(
+                "len of vectors:",
+                len(y_hat),
+                len(self.observations["Voltage [V]"].data),
             )
-        except:
             raise ValueError(
-                "Measurement and modelled data length mismatch, potentially due to reaching a voltage cut-off"
+                "Measurement and simulated data length mismatch, potentially due to reaching a voltage cut-off"
             )
 
-        if verbose:
+        try:
+            res = np.sqrt(np.mean((self.observations["Voltage [V]"].data - y_hat) ** 2))
+        except:
+            print("Error in RMSE calculation")
+
+        if self.verbose:
             print(self.fit_dict)
 
         return res
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index 123363517..a55dae54b 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -1,17 +1,43 @@
 import pybop
 import pytest
+import pybamm
 import numpy as np
 import pandas as pd
 
 
 class TestParameterisation:
+    def getdata(self, x1, x2):
+        model = pybamm.lithium_ion.SPM()
+        params = pybamm.ParameterValues("Chen2020")
+
+        params.update(
+            {
+                "Negative electrode active material volume fraction": x1,
+                "Positive electrode active material volume fraction": x2,
+            }
+        )
+        experiment = pybamm.Experiment(
+            [
+                (
+                    "Discharge at 0.5C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                    "Charge at 0.5C for 2.5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                ),
+            ]
+            * 2
+        )
+        sim = pybamm.Simulation(model, experiment=experiment, parameter_values=params)
+        return sim.solve(initial_soc=0.5)
+
     def test_rmse(self):
         # Form observations
-        Measurements = pd.read_csv("examples/Chen_example.csv", comment="#").to_numpy()
+        solution = self.getdata(0.6, 0.6)
+
         observations = [
-            pybop.Observed("Time [s]", Measurements[:, 0]),
-            pybop.Observed("Current function [A]", Measurements[:, 1]),
-            pybop.Observed("Voltage [V]", Measurements[:, 2]),
+            pybop.Observed("Time [s]", solution["Time [s]"].data),
+            pybop.Observed("Current function [A]", solution["Current [A]"].data),
+            pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
         # Define model

From 4735367adcab4830dffca70eecaf1b48218e7522 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 18 Aug 2023 19:32:00 +0100
Subject: [PATCH 038/210] Updt. to default parameter set for a stable & working
 state

---
 tests/unit/test_parameterisation.py | 33 +++++++++++++++--------------
 1 file changed, 17 insertions(+), 16 deletions(-)

diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index a55dae54b..6bf4f6e92 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -1,38 +1,38 @@
 import pybop
-import pytest
 import pybamm
+import pytest
 import numpy as np
-import pandas as pd
 
 
 class TestParameterisation:
-    def getdata(self, x1, x2):
+    def getdata(self, x0):
         model = pybamm.lithium_ion.SPM()
-        params = pybamm.ParameterValues("Chen2020")
+        params = model.default_parameter_values
 
         params.update(
             {
-                "Negative electrode active material volume fraction": x1,
-                "Positive electrode active material volume fraction": x2,
+                "Negative electrode active material volume fraction": x0[0],
+                "Positive electrode active material volume fraction": x0[1],
             }
         )
         experiment = pybamm.Experiment(
             [
                 (
-                    "Discharge at 0.5C for 5 minutes (1 second period)",
+                    "Discharge at 2C for 5 minutes (1 second period)",
                     "Rest for 2 minutes (1 second period)",
-                    "Charge at 0.5C for 2.5 minutes (1 second period)",
+                    "Charge at 1C for 5 minutes (1 second period)",
                     "Rest for 2 minutes (1 second period)",
                 ),
             ]
             * 2
         )
         sim = pybamm.Simulation(model, experiment=experiment, parameter_values=params)
-        return sim.solve(initial_soc=0.5)
+        return sim.solve()
 
     def test_rmse(self):
         # Form observations
-        solution = self.getdata(0.6, 0.6)
+        x0 = np.array([0.55, 0.63])
+        solution = self.getdata(x0)
 
         observations = [
             pybop.Observed("Time [s]", solution["Time [s]"].data),
@@ -42,19 +42,19 @@ def test_rmse(self):
 
         # Define model
         model = pybop.models.lithium_ion.SPM()
-        model.parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+        model.parameter_set = model.pybamm_model.default_parameter_values
 
         # Fitting parameters
         params = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.6, 0.1),
-                bounds=[0.05, 0.95],
+                prior=pybop.Gaussian(0.5, 0.05),
+                bounds=[0.35, 0.75],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
-                prior=pybop.Gaussian(0.6, 0.1),
-                bounds=[0.05, 0.95],
+                prior=pybop.Gaussian(0.65, 0.05),
+                bounds=[0.45, 0.85],
             ),
         ]
 
@@ -67,4 +67,5 @@ def test_rmse(self):
             signal="Voltage [V]", method="nlopt"
         )
         # Assertions
-        np.testing.assert_allclose(last_optim, 1e-1, atol=5e-2)
+        np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
+        np.testing.assert_almost_equal(results, x0, decimal=1)

From 9d7181b1f4beb9cfbc5ae729534dd21895b78032 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Sat, 19 Aug 2023 11:14:38 +0100
Subject: [PATCH 039/210] Add issue templates

---
 .github/ISSUE_TEMPLATE/bug_report.yml      | 37 ++++++++++++++++++++++
 .github/ISSUE_TEMPLATE/feature_request.yml | 35 ++++++++++++++++++++
 2 files changed, 72 insertions(+)
 create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml
 create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml

diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 000000000..0857a4b77
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,37 @@
+name: Bug Report
+description: Create a bug report
+title: "[Bug]: "
+labels: ["bug"]
+body:
+  - type: markdown
+    attributes:
+      value: |
+        Thanks for filling out this report to help us improve!
+  - type: input
+    id: python-version
+    attributes:
+      label: Python Version
+      description: What python version are you using?
+      placeholder: python version
+    validations:
+      required: true
+  - type: text-area
+    id: bug-description
+    attributes:
+      label: Describe the bug
+      description: A clear and concise description of the bug.
+    validations:
+      required: true
+  - type: text-area
+    id: reproduce
+    attributes:
+      label: Steps to reproduce the behaviour
+      description: Tell us how to reproduce this behaviour. Please try to include a [Minimum Workable Example](https://stackoverflow.com/help/minimal-reproducible-example)
+    validations:
+      required: true
+  - type: text-area
+    id: logs
+    attributes:
+      label: Relevant log output
+      description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks.
+      render: shell
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 000000000..58987bf0c
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,35 @@
+name: Feature request
+about: Suggest a feature
+title: "[Feature]:"
+labels: ["enhancement"]
+body:
+  -type: markdown
+   attributes:
+     value: |
+       Thanks for filling out this report to help us improve!
+  -type: input
+    id: Feature
+    attributes:
+      label: Feature description
+      description: Describe the feature you'd like
+      placeholder: Feature description
+      validations:
+        required: true
+  -type: input
+    id: Motivation
+    attributes:
+      label: Motivation
+      description: Please enter the motivation for this feature i.e (problem, performance, etc)
+  -type: input
+    id: Possible Implementation
+    attributes:
+      label: Possible implementation
+      description: Please enter any possible implementation for this feature
+  -type: input
+    id: Additional context
+    attributes:
+      label: Additional context
+      description: Add any additional context about the feature request.
+      placeholder: Additional context
+
+

From 01ea80eb8e4c59dfdffddd313ebffcedaae34e54 Mon Sep 17 00:00:00 2001
From: Brady Planden <55357039+BradyPlanden@users.noreply.github.com>
Date: Sat, 19 Aug 2023 11:55:20 +0100
Subject: [PATCH 040/210] Syntax fix for issue templates (#23)

* Issue template bugfix
---
 .github/ISSUE_TEMPLATE/bug_report.yml      |  6 ++--
 .github/ISSUE_TEMPLATE/feature_request.yml | 41 ++++++++++------------
 2 files changed, 21 insertions(+), 26 deletions(-)

diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 0857a4b77..0b95cd9a8 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -15,21 +15,21 @@ body:
       placeholder: python version
     validations:
       required: true
-  - type: text-area
+  - type: textarea
     id: bug-description
     attributes:
       label: Describe the bug
       description: A clear and concise description of the bug.
     validations:
       required: true
-  - type: text-area
+  - type: textarea
     id: reproduce
     attributes:
       label: Steps to reproduce the behaviour
       description: Tell us how to reproduce this behaviour. Please try to include a [Minimum Workable Example](https://stackoverflow.com/help/minimal-reproducible-example)
     validations:
       required: true
-  - type: text-area
+  - type: textarea
     id: logs
     attributes:
       label: Relevant log output
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index 58987bf0c..84ffca5d8 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -1,35 +1,30 @@
 name: Feature request
-about: Suggest a feature
-title: "[Feature]:"
+description: Suggest a feature
 labels: ["enhancement"]
 body:
-  -type: markdown
-   attributes:
-     value: |
-       Thanks for filling out this report to help us improve!
-  -type: input
-    id: Feature
+  - type: markdown
+    attributes:
+      value: |
+        Thanks for filling out this report to help us improve!
+  - type: textarea
+    id: feature
     attributes:
       label: Feature description
-      description: Describe the feature you'd like
-      placeholder: Feature description
-      validations:
+      description: Describe the feature you'd like.
+    validations:
         required: true
-  -type: input
-    id: Motivation
+  - type: textarea
+    id: motivation
     attributes:
       label: Motivation
-      description: Please enter the motivation for this feature i.e (problem, performance, etc)
-  -type: input
-    id: Possible Implementation
+      description: Please enter the motivation for this feature i.e (problem, performance, etc).
+  - type: textarea
+    id: possible-implementation
     attributes:
       label: Possible implementation
-      description: Please enter any possible implementation for this feature
-  -type: input
-    id: Additional context
+      description: Please enter any possible implementation for this feature.
+  - type: textarea
+    id: context
     attributes:
       label: Additional context
-      description: Add any additional context about the feature request.
-      placeholder: Additional context
-
-
+      description: Add any additional context about the feature request.
\ No newline at end of file

From 08e5bce8436da0f8cde18fce317ac3aee3e9ad39 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 14:13:41 +0100
Subject: [PATCH 041/210] Updt. README.md w/ allcontributors, Updt. setup.py

---
 README.md                   | 164 ++++++++++++++++++++++++++++++++++--
 assets/Temp_Logo.png        | Bin 0 -> 9277 bytes
 examples/Initial_HMC_API.py |  53 ++++++++++++
 setup.py                    |  19 +----
 4 files changed, 213 insertions(+), 23 deletions(-)
 create mode 100644 assets/Temp_Logo.png
 create mode 100644 examples/Initial_HMC_API.py

diff --git a/README.md b/README.md
index 20f03d5b7..93dc93fcd 100644
--- a/README.md
+++ b/README.md
@@ -1,22 +1,170 @@
-# PyBOP - A *Py*thon package for *B*attery *O*ptimisation and *P*arameterisation
-
 <div align="center">
 
-[![Build Status](https://github.com/pybop-team/PyBOP/actions/workflows/test_on_push.yaml/badge.svg?branch=develop)](https://github.com/pybop-team/PyBOP/actions/workflows/test_on_push.yaml)
+  <img src="assets/Temp_logo.png" alt="logo" width="200" height="auto" />
+  <h1>Python Battery Optimisation and Parameterisation</h1>
+
+
+<p>
+  <a href="https://github.com/pybop-team/PyBOP/actions/workflows/test_on_push.yaml">
+    <img src="https://img.shields.io/github/actions/workflow/status/pybop-team/PyBOP/test_on_push.yaml?label=Build%20Status" alt="build" />
+  </a>
+  <a href="https://github.com/pybop-team/PyBOP/graphs/contributors">
+    <img src="https://img.shields.io/github/contributors/pybop-team/PyBOP" alt="contributors" />
+  </a>
+  <a href="">
+    <img src="https://img.shields.io/github/last-commit/pybop-team/PyBOP" alt="last update" />
+  </a>
+  <a href="https://github.com/pybop-team/PyBOPe/network/members">
+    <img src="https://img.shields.io/github/forks/pybop-team/PyBOP" alt="forks" />
+  </a>
+  <a href="https://github.com/pybop-team/PyBOP/stargazers">
+    <img src="https://img.shields.io/github/stars/pybop-team/PyBOP" alt="stars" />
+  </a>
+  <a href="https://github.com/pybop-team/PyBOP/issues/">
+    <img src="https://img.shields.io/github/issues/pybop-team/PyBOP" alt="open issues" />
+  </a>
+  <a href="https://github.com/pybop-team/PyBOP/blob/develop/LICENSE">
+    <img src="https://img.shields.io/github/license/pybop-team/PyBOP" alt="license" />
+  </a>
+</p>
 
 </div>
 
-PyBOP aims to be a modular library for the parameterisation and optimisation of battery models, with a particular focus on classes built around [PyBaMM](https://github.com/pybamm-team/PyBaMM) models. The figure below gives the current conceptual idea of PyBOP's structure. This will likely evolve as development progresses.
+<!-- Software Specification -->
+## PyBOP
+PyBOP provides a comprehensive suite of tools for parameterisation and optimisation of battery models. It aims to implement Bayesian and frequentist techniques with example workflows to guide the user. PyBOP can be applied to parameterise a wide range of battery models, including the electrochemical and equivalent circuit models available in PyBAMM. A major emphasis in PyBOP is understandable and actionable diagnostics for the user, while still providing extensibility for advanced probabilistic methods. By building on the state-of-the-art battery models and leveraging Python's accessibility, PyBOP enables agile and robust parameterisation and optimisation.
+
+The figure below gives PyBOP's current conceptual structure. The living software specification of PyBOP can be found [here](https://github.com/pybop-team/software-spec). This package is under active development, expect API evolution with releases.
+
 
 <p align="center">
     <img src="assets/PyBOP_Arch.svg" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
 </p>
 
-The living software specification of PyBOP can be found [here](https://github.com/pybop-team/software-spec); however, an overview is introduced below.
+<!-- Getting Started -->
+## Getting Started
+
+<!-- Installation -->
+### Installation
+
+Create a virtual environment, i.e with [pyenv](https://github.com/pyenv/pyenv#installation) and [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv#installation):
+
+```bash
+pyenv virtualenv pybop-env
+pyenv activate pybop-env
+```
+
+Install PyBOP:
+
+```bash
+ pip install git+https://github.com/pybop-team/PyBOP
+```
+
+<!-- Installation -->
+### Usage
+The example below shows a simple fitting routine that starts by generating synthetic data from a single particle model with modified parameter values. An RMSE cost function using the terminal voltage as the optimised signal is completed to determine the unknown parameter values.
+
+```python
+import pybop
+import pybamm
+import pandas as pd
+import numpy as np
+
+def getdata(x0):
+        model = pybamm.lithium_ion.SPM()
+        params = model.default_parameter_values
+
+        params.update(
+            {
+                "Negative electrode active material volume fraction": x0[0],
+                "Positive electrode active material volume fraction": x0[1],
+            }
+        )
+        experiment = pybamm.Experiment(
+            [
+                (
+                    "Discharge at 2C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                    "Charge at 1C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                ),
+            ]
+            * 2
+        )
+        sim = pybamm.Simulation(model, experiment=experiment, parameter_values=params)
+        return sim.solve()
+
+
+# Form observations
+x0 = np.array([0.55, 0.63])
+solution = getdata(x0)
+
+observations = [
+    pybop.Observed("Time [s]", solution["Time [s]"].data),
+    pybop.Observed("Current function [A]", solution["Current [A]"].data),
+    pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
+]
+
+# Define model
+model = pybop.models.lithium_ion.SPM()
+model.parameter_set = model.pybamm_model.default_parameter_values
+
+# Fitting parameters
+params = [
+    pybop.Parameter(
+        "Negative electrode active material volume fraction",
+        prior=pybop.Gaussian(0.5, 0.05),
+        bounds=[0.35, 0.75],
+    ),
+    pybop.Parameter(
+        "Positive electrode active material volume fraction",
+        prior=pybop.Gaussian(0.65, 0.05),
+        bounds=[0.45, 0.85],
+    ),
+]
+
+parameterisation = pybop.Parameterisation(
+    model, observations=observations, fit_parameters=params
+)
+
+# get RMSE estimate using NLOpt
+results, last_optim, num_evals = parameterisation.rmse(
+    signal="Voltage [V]", method="nlopt" # results = [0.54452026, 0.63064801]
+)
+```
+
+<!-- Code of Conduct -->
+### Code of Conduct
+
+PyBOP aims to foster a broad consortium of developers and users, building on and
+learning from the success of the PyBaMM community. Our values are:
+
+-   Open-source (code and ideas should be shared)
+
+-   Inclusivity and fairness (those who want to contribute may do so, and their input is appropriately recognised)
+
+-   Inter-operability (aiming for modularity to enable maximum impact and inclusivity)
+
+-   User-friendliness (putting user requirements first, thinking about user-assistance & workflows)
+
+
+<!-- Contributing -->
+## Contributing
+Thanks to all of our contributing members! [[emoji key](https://allcontributors.org/docs/en/emoji-key)]
+
+<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
+<!-- prettier-ignore-start -->
+<!-- markdownlint-disable -->
+
+<!-- markdownlint-restore -->
+<!-- prettier-ignore-end -->
+
+<!-- ALL-CONTRIBUTORS-LIST:END -->
+
+Contributions are always welcome! See `contributing.md` for ways to get started.
+
+
 
-- Provide design optimisation plus both frequentist and Bayesian parameterisation methods to battery modellers
-- Provide workflows and examples for parameter fitting and grouping
-- Create diagnostics for end-users to understand parameter identifiability and optimisation fidelity
 
 **Community and values**
 
diff --git a/assets/Temp_Logo.png b/assets/Temp_Logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..fa64dab9d5f24bdb17b90bd7a2aa4c25f7747eeb
GIT binary patch
literal 9277
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

literal 0
HcmV?d00001

diff --git a/examples/Initial_HMC_API.py b/examples/Initial_HMC_API.py
new file mode 100644
index 000000000..42ce387ba
--- /dev/null
+++ b/examples/Initial_HMC_API.py
@@ -0,0 +1,53 @@
+import pybop
+import pandas as pd
+import numpy as np
+
+import numpyro
+import numpyro.infer as infer
+
+# Form observations
+Measurements = pd.read_csv("examples/Chen_example.csv", comment="#").to_numpy()
+observations = [
+    pybop.Observed("Time [s]", Measurements[:, 0]),
+    pybop.Observed("Current function [A]", Measurements[:, 1]),
+    pybop.Observed("Voltage [V]", Measurements[:, 2]),
+]
+
+# Define model
+parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+model = pybop.models.lithium_ion.SPM(parameter_set=parameter_set)
+
+# Fitting parameters
+params = [
+    pybop.Parameter(
+        "Negative electrode active material volume fraction",
+        prior=pybop.Gaussian(0.75, 0.05),
+        bounds=[0.65, 0.85],
+    ),
+    pybop.Parameter(
+        "Positive electrode active material volume fraction",
+        prior=pybop.Gaussian(0.65, 0.05),
+        bounds=[0.55, 0.75],
+    ),
+]
+
+parameterisation = pybop.Parameterisation(
+    model, observations=observations, fit_parameters=params
+)
+
+# get RMSE estimate using NLOpt
+results, last_optim, num_evals = parameterisation.rmse(
+    signal="Voltage [V]", method="nlopt"
+)
+
+# get MAP estimate, starting at a random initial point in parameter space
+# parameterisation.map(x0=[p.sample() for p in params])
+
+# or sample from posterior
+# parameterisation.sample(1000, n_chains=4, ....)
+
+# or SOBER
+# parameterisation.sober()
+
+
+# Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)
diff --git a/setup.py b/setup.py
index a9a328598..d08697bff 100644
--- a/setup.py
+++ b/setup.py
@@ -11,34 +11,23 @@
     long_description = ''
 
 setup(
-	# Name of the package 
-	name='PyBOP',
-	# Packages to include into the distribution 
+	name='pybop',
 	packages=find_packages('.'),
-	# Start with a small number and increase it with 
-	# every change you make https://semver.org 
 	version='0.0.1',
-	# Chose a license from here: https: // 
-	# help.github.com / articles / licensing - a - 
-	# repository. For example: MIT 
-	license='MIT',
-	# Short description of your library 
+	license='BSD-3-Clause',
 	description='Python Battery Optimisation and Parameterisation',
-	# Long description of your library 
 	long_description=long_description,
 	long_description_content_type='text/markdown',
-	# Either the link to your github or to your website 
 	url='https://github.com/pybop-team/PyBOP',
-	# List of packages to install with this one 
+
 	install_requires=[
         "pybamm>=23.1",
         "numpy>=1.16",
         "scipy>=1.3",
         "pandas>=1.0",
-        "casadi>=3.6",
         "nlopt>=2.6",
 	],
 	# https://pypi.org/classifiers/ 
 	classifiers=[],
-    python_requires=">=3.8,<3.12",
+    python_requires=">=3.8,<=3.12",
 )

From 3950511c99cab99af1c2aca0de29834f20c3f9f9 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 14:16:54 +0100
Subject: [PATCH 042/210] Fix links

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 93dc93fcd..e6e479457 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 <div align="center">
 
-  <img src="assets/Temp_logo.png" alt="logo" width="200" height="auto" />
+  <img src="assets/Temp_Logo.png" alt="logo" width="200" height="auto" />
   <h1>Python Battery Optimisation and Parameterisation</h1>
 
 

From 8b08694aa5e9fb7f8c7259715c002ca6b3d5f851 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 14:17:36 +0100
Subject: [PATCH 043/210] Updt. logo size

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index e6e479457..4f268fa6a 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 <div align="center">
 
-  <img src="assets/Temp_Logo.png" alt="logo" width="200" height="auto" />
+  <img src="assets/Temp_Logo.png" alt="logo" width="400" height="auto" />
   <h1>Python Battery Optimisation and Parameterisation</h1>
 
 

From 13090a3b2c43c3caaeaefe69fd87118cbfdcf608 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 14:19:30 +0100
Subject: [PATCH 044/210] Logo crop

---
 assets/Temp_Logo.png | Bin 9277 -> 9532 bytes
 1 file changed, 0 insertions(+), 0 deletions(-)

diff --git a/assets/Temp_Logo.png b/assets/Temp_Logo.png
index fa64dab9d5f24bdb17b90bd7a2aa4c25f7747eeb..4ef2853b345d37284b8e3272c312b5a7d091b6f2 100644
GIT binary patch
literal 9532
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

literal 9277
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


From da9e4254b532e99b63f0d647201a677584254f08 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 14:20:51 +0100
Subject: [PATCH 045/210] Remove duplicates

---
 README.md | 18 ------------------
 1 file changed, 18 deletions(-)

diff --git a/README.md b/README.md
index 4f268fa6a..917d83305 100644
--- a/README.md
+++ b/README.md
@@ -162,21 +162,3 @@ Thanks to all of our contributing members! [[emoji key](https://allcontributors.
 <!-- ALL-CONTRIBUTORS-LIST:END -->
 
 Contributions are always welcome! See `contributing.md` for ways to get started.
-
-
-
-
-**Community and values**
-
-PyBOP aims to foster a broad consortium of developers and users, building on and
-learning from the success of the PyBaMM community. Our values are:
-
--   Open-source (code and ideas should be shared)
-
--   Inclusivity and fairness (those who want to contribute may do so,
-    and their input is appropriately recognised)
-
--   Inter-operability (aiming for modularity to enable maximum impact
-    and inclusivity)
-
--   User-friendliness (putting user requirements first, thinking about user- assistance & workflows)

From de800cd3fc32eb9bb14ece48fe393cf5c049c293 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 14:22:25 +0100
Subject: [PATCH 046/210] Updt heading structure

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 917d83305..a0d8a51cb 100644
--- a/README.md
+++ b/README.md
@@ -134,7 +134,7 @@ results, last_optim, num_evals = parameterisation.rmse(
 ```
 
 <!-- Code of Conduct -->
-### Code of Conduct
+## Code of Conduct
 
 PyBOP aims to foster a broad consortium of developers and users, building on and
 learning from the success of the PyBaMM community. Our values are:

From 01ef49d9b8e7edc63184d1e42a69a01a812d74c7 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 14:29:04 +0100
Subject: [PATCH 047/210] Upd. commit badge link

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index a0d8a51cb..f0001ff18 100644
--- a/README.md
+++ b/README.md
@@ -12,7 +12,7 @@
     <img src="https://img.shields.io/github/contributors/pybop-team/PyBOP" alt="contributors" />
   </a>
   <a href="">
-    <img src="https://img.shields.io/github/last-commit/pybop-team/PyBOP" alt="last update" />
+    <img src="https://img.shields.io/github/last-commit/pybop-team/PyBOP/develop" alt="last update" />
   </a>
   <a href="https://github.com/pybop-team/PyBOPe/network/members">
     <img src="https://img.shields.io/github/forks/pybop-team/PyBOP" alt="forks" />

From 664d6f3f5afdba7243f55d865be81ea0eace69db Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 14:41:44 +0100
Subject: [PATCH 048/210] Remove HMC example

---
 examples/Initial_HMC_API.py | 53 -------------------------------------
 1 file changed, 53 deletions(-)
 delete mode 100644 examples/Initial_HMC_API.py

diff --git a/examples/Initial_HMC_API.py b/examples/Initial_HMC_API.py
deleted file mode 100644
index 42ce387ba..000000000
--- a/examples/Initial_HMC_API.py
+++ /dev/null
@@ -1,53 +0,0 @@
-import pybop
-import pandas as pd
-import numpy as np
-
-import numpyro
-import numpyro.infer as infer
-
-# Form observations
-Measurements = pd.read_csv("examples/Chen_example.csv", comment="#").to_numpy()
-observations = [
-    pybop.Observed("Time [s]", Measurements[:, 0]),
-    pybop.Observed("Current function [A]", Measurements[:, 1]),
-    pybop.Observed("Voltage [V]", Measurements[:, 2]),
-]
-
-# Define model
-parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
-model = pybop.models.lithium_ion.SPM(parameter_set=parameter_set)
-
-# Fitting parameters
-params = [
-    pybop.Parameter(
-        "Negative electrode active material volume fraction",
-        prior=pybop.Gaussian(0.75, 0.05),
-        bounds=[0.65, 0.85],
-    ),
-    pybop.Parameter(
-        "Positive electrode active material volume fraction",
-        prior=pybop.Gaussian(0.65, 0.05),
-        bounds=[0.55, 0.75],
-    ),
-]
-
-parameterisation = pybop.Parameterisation(
-    model, observations=observations, fit_parameters=params
-)
-
-# get RMSE estimate using NLOpt
-results, last_optim, num_evals = parameterisation.rmse(
-    signal="Voltage [V]", method="nlopt"
-)
-
-# get MAP estimate, starting at a random initial point in parameter space
-# parameterisation.map(x0=[p.sample() for p in params])
-
-# or sample from posterior
-# parameterisation.sample(1000, n_chains=4, ....)
-
-# or SOBER
-# parameterisation.sober()
-
-
-# Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)

From ae61f09a3a434bf91748777821c35ab053c52d0b Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 24 Aug 2023 14:51:24 +0000
Subject: [PATCH 049/210] docs: update README.md [skip ci]

---
 README.md | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/README.md b/README.md
index f0001ff18..880c03669 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,7 @@
 <div align="center">
+<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
+[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)
+<!-- ALL-CONTRIBUTORS-BADGE:END -->
 
   <img src="assets/Temp_Logo.png" alt="logo" width="400" height="auto" />
   <h1>Python Battery Optimisation and Parameterisation</h1>
@@ -155,6 +158,13 @@ Thanks to all of our contributing members! [[emoji key](https://allcontributors.
 <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
 <!-- prettier-ignore-start -->
 <!-- markdownlint-disable -->
+<table>
+  <tbody>
+    <tr>
+      <td align="center" valign="top" width="14.28%"><a href="http://bradyplanden.github.io"><img src="https://avatars.githubusercontent.com/u/55357039?v=4?s=100" width="100px;" alt="Brady Planden"/><br /><sub><b>Brady Planden</b></sub></a><br /><a href="#infra-BradyPlanden" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Tests">⚠️</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Code">💻</a> <a href="#example-BradyPlanden" title="Examples">💡</a></td>
+    </tr>
+  </tbody>
+</table>
 
 <!-- markdownlint-restore -->
 <!-- prettier-ignore-end -->
@@ -162,3 +172,16 @@ Thanks to all of our contributing members! [[emoji key](https://allcontributors.
 <!-- ALL-CONTRIBUTORS-LIST:END -->
 
 Contributions are always welcome! See `contributing.md` for ways to get started.
+
+## Contributors ✨
+
+Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
+
+<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
+<!-- prettier-ignore-start -->
+<!-- markdownlint-disable -->
+<!-- markdownlint-restore -->
+<!-- prettier-ignore-end -->
+<!-- ALL-CONTRIBUTORS-LIST:END -->
+
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
\ No newline at end of file

From 8071ed67216675e6ccdc00089af40c417eb4ce11 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Thu, 24 Aug 2023 14:51:25 +0000
Subject: [PATCH 050/210] docs: create .all-contributorsrc [skip ci]

---
 .all-contributorsrc | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)
 create mode 100644 .all-contributorsrc

diff --git a/.all-contributorsrc b/.all-contributorsrc
new file mode 100644
index 000000000..730848a57
--- /dev/null
+++ b/.all-contributorsrc
@@ -0,0 +1,29 @@
+{
+  "files": [
+    "README.md"
+  ],
+  "imageSize": 100,
+  "commit": false,
+  "commitType": "docs",
+  "commitConvention": "angular",
+  "contributors": [
+    {
+      "login": "BradyPlanden",
+      "name": "Brady Planden",
+      "avatar_url": "https://avatars.githubusercontent.com/u/55357039?v=4",
+      "profile": "http://bradyplanden.github.io",
+      "contributions": [
+        "infra",
+        "test",
+        "code",
+        "example"
+      ]
+    }
+  ],
+  "contributorsPerLine": 7,
+  "skipCi": true,
+  "repoType": "github",
+  "repoHost": "https://github.com",
+  "projectName": "PyBOP",
+  "projectOwner": "pybop-team"
+}

From e111c94c90de34e3c5dcc98f0f72f8ea8a6e5c81 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 24 Aug 2023 16:03:40 +0100
Subject: [PATCH 051/210] Move all-contributors badge

---
 README.md | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 880c03669..d57bb939d 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,4 @@
 <div align="center">
-<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)
-<!-- ALL-CONTRIBUTORS-BADGE:END -->
 
   <img src="assets/Temp_Logo.png" alt="logo" width="400" height="auto" />
   <h1>Python Battery Optimisation and Parameterisation</h1>
@@ -31,6 +28,10 @@
   </a>
 </p>
 
+<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
+[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)
+<!-- ALL-CONTRIBUTORS-BADGE:END -->
+
 </div>
 
 <!-- Software Specification -->

From 326740316d3eafea59c3cc2fa9d23868ea0f7d48 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 8 Sep 2023 08:23:11 -0700
Subject: [PATCH 052/210] Updt. README example + grammar

---
 README.md | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index d57bb939d..98af3efa9 100644
--- a/README.md
+++ b/README.md
@@ -66,7 +66,7 @@ Install PyBOP:
 
 <!-- Installation -->
 ### Usage
-The example below shows a simple fitting routine that starts by generating synthetic data from a single particle model with modified parameter values. An RMSE cost function using the terminal voltage as the optimised signal is completed to determine the unknown parameter values.
+The example below shows a simple fitting routine that starts by generating synthetic data from a single particle model with modified parameter values. An RMSE cost function using the terminal voltage as the optimised signal is completed to determine the unknown parameter values. First, the synthetic data is generated:
 
 ```python
 import pybop
@@ -102,7 +102,9 @@ def getdata(x0):
 # Form observations
 x0 = np.array([0.55, 0.63])
 solution = getdata(x0)
-
+```
+Next, the observed variables are defined, with the model construction and parameter definitions following. Finally, the parameterisation class is constructed and parameter fitting is completed. 
+```python
 observations = [
     pybop.Observed("Time [s]", solution["Time [s]"].data),
     pybop.Observed("Current function [A]", solution["Current [A]"].data),
@@ -185,4 +187,4 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 <!-- prettier-ignore-end -->
 <!-- ALL-CONTRIBUTORS-LIST:END -->
 
-This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
\ No newline at end of file
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specifications. Contributions of any kind are welcome!
\ No newline at end of file

From 1dbd91c131b120f637981b7ecb0452e3118aefd8 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Sun, 10 Sep 2023 12:59:03 +0100
Subject: [PATCH 053/210] Add init py files

---
 pybop/optimisation/__init__.py | 0
 pybop/plotting/__init__.py     | 0
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 pybop/optimisation/__init__.py
 create mode 100644 pybop/plotting/__init__.py

diff --git a/pybop/optimisation/__init__.py b/pybop/optimisation/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/pybop/plotting/__init__.py b/pybop/plotting/__init__.py
new file mode 100644
index 000000000..e69de29bb

From 936e6a5a96661cc243db9e1a3e73c7cde3a31dfd Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 08:56:31 +0000
Subject: [PATCH 054/210] docs: update README.md [skip ci]

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 98af3efa9..991321bb7 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
 </p>
 
 <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-1-orange.svg?style=flat-square)](#contributors-)
+[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)
 <!-- ALL-CONTRIBUTORS-BADGE:END -->
 
 </div>
@@ -165,6 +165,7 @@ Thanks to all of our contributing members! [[emoji key](https://allcontributors.
   <tbody>
     <tr>
       <td align="center" valign="top" width="14.28%"><a href="http://bradyplanden.github.io"><img src="https://avatars.githubusercontent.com/u/55357039?v=4?s=100" width="100px;" alt="Brady Planden"/><br /><sub><b>Brady Planden</b></sub></a><br /><a href="#infra-BradyPlanden" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Tests">⚠️</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Code">💻</a> <a href="#example-BradyPlanden" title="Examples">💡</a></td>
+      <td align="center" valign="top" width="14.28%"><a href="https://github.com/NicolaCourtier"><img src="https://avatars.githubusercontent.com/u/45851982?v=4?s=100" width="100px;" alt="NicolaCourtier"/><br /><sub><b>NicolaCourtier</b></sub></a><br /><a href="https://github.com/pybop-team/PyBOP/commits?author=NicolaCourtier" title="Code">💻</a></td>
     </tr>
   </tbody>
 </table>

From 9de2ac80cdd27cc700424e920d2f9053186418e4 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 08:56:32 +0000
Subject: [PATCH 055/210] docs: update .all-contributorsrc [skip ci]

---
 .all-contributorsrc | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/.all-contributorsrc b/.all-contributorsrc
index 730848a57..3392afcc5 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -18,6 +18,15 @@
         "code",
         "example"
       ]
+    },
+    {
+      "login": "NicolaCourtier",
+      "name": "NicolaCourtier",
+      "avatar_url": "https://avatars.githubusercontent.com/u/45851982?v=4",
+      "profile": "https://github.com/NicolaCourtier",
+      "contributions": [
+        "code"
+      ]
     }
   ],
   "contributorsPerLine": 7,

From aedd14a3f59897e5b87627e671a1213835f8fbae Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 08:59:28 +0000
Subject: [PATCH 056/210] docs: update README.md [skip ci]

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 991321bb7..594906ce1 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
 </p>
 
 <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-2-orange.svg?style=flat-square)](#contributors-)
+[![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-)
 <!-- ALL-CONTRIBUTORS-BADGE:END -->
 
 </div>
@@ -166,6 +166,7 @@ Thanks to all of our contributing members! [[emoji key](https://allcontributors.
     <tr>
       <td align="center" valign="top" width="14.28%"><a href="http://bradyplanden.github.io"><img src="https://avatars.githubusercontent.com/u/55357039?v=4?s=100" width="100px;" alt="Brady Planden"/><br /><sub><b>Brady Planden</b></sub></a><br /><a href="#infra-BradyPlanden" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Tests">⚠️</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Code">💻</a> <a href="#example-BradyPlanden" title="Examples">💡</a></td>
       <td align="center" valign="top" width="14.28%"><a href="https://github.com/NicolaCourtier"><img src="https://avatars.githubusercontent.com/u/45851982?v=4?s=100" width="100px;" alt="NicolaCourtier"/><br /><sub><b>NicolaCourtier</b></sub></a><br /><a href="https://github.com/pybop-team/PyBOP/commits?author=NicolaCourtier" title="Code">💻</a></td>
+      <td align="center" valign="top" width="14.28%"><a href="http://howey.eng.ox.ac.uk"><img src="https://avatars.githubusercontent.com/u/2247552?v=4?s=100" width="100px;" alt="David Howey"/><br /><sub><b>David Howey</b></sub></a><br /><a href="#ideas-davidhowey" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-davidhowey" title="Mentoring">🧑‍🏫</a></td>
     </tr>
   </tbody>
 </table>

From a38c67be780093d3431c24754eb632cb8ae4dc45 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 08:59:29 +0000
Subject: [PATCH 057/210] docs: update .all-contributorsrc [skip ci]

---
 .all-contributorsrc | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/.all-contributorsrc b/.all-contributorsrc
index 3392afcc5..faad9c994 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -27,6 +27,16 @@
       "contributions": [
         "code"
       ]
+    },
+    {
+      "login": "davidhowey",
+      "name": "David Howey",
+      "avatar_url": "https://avatars.githubusercontent.com/u/2247552?v=4",
+      "profile": "http://howey.eng.ox.ac.uk",
+      "contributions": [
+        "ideas",
+        "mentoring"
+      ]
     }
   ],
   "contributorsPerLine": 7,

From fd6d52fd7603f1bd72a3e06812f20f16276fe5fa Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 09:04:19 +0000
Subject: [PATCH 058/210] docs: update README.md [skip ci]

---
 README.md | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 594906ce1..fa1d36186 100644
--- a/README.md
+++ b/README.md
@@ -29,7 +29,7 @@
 </p>
 
 <!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-3-orange.svg?style=flat-square)](#contributors-)
+[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-)
 <!-- ALL-CONTRIBUTORS-BADGE:END -->
 
 </div>
@@ -167,6 +167,7 @@ Thanks to all of our contributing members! [[emoji key](https://allcontributors.
       <td align="center" valign="top" width="14.28%"><a href="http://bradyplanden.github.io"><img src="https://avatars.githubusercontent.com/u/55357039?v=4?s=100" width="100px;" alt="Brady Planden"/><br /><sub><b>Brady Planden</b></sub></a><br /><a href="#infra-BradyPlanden" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Tests">⚠️</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Code">💻</a> <a href="#example-BradyPlanden" title="Examples">💡</a></td>
       <td align="center" valign="top" width="14.28%"><a href="https://github.com/NicolaCourtier"><img src="https://avatars.githubusercontent.com/u/45851982?v=4?s=100" width="100px;" alt="NicolaCourtier"/><br /><sub><b>NicolaCourtier</b></sub></a><br /><a href="https://github.com/pybop-team/PyBOP/commits?author=NicolaCourtier" title="Code">💻</a></td>
       <td align="center" valign="top" width="14.28%"><a href="http://howey.eng.ox.ac.uk"><img src="https://avatars.githubusercontent.com/u/2247552?v=4?s=100" width="100px;" alt="David Howey"/><br /><sub><b>David Howey</b></sub></a><br /><a href="#ideas-davidhowey" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-davidhowey" title="Mentoring">🧑‍🏫</a></td>
+      <td align="center" valign="top" width="14.28%"><a href="http://www.rse.ox.ac.uk"><img src="https://avatars.githubusercontent.com/u/1148404?v=4?s=100" width="100px;" alt="Martin Robinson"/><br /><sub><b>Martin Robinson</b></sub></a><br /><a href="#ideas-martinjrobins" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-martinjrobins" title="Mentoring">🧑‍🏫</a></td>
     </tr>
   </tbody>
 </table>

From 6074e973a100e4ba4bcfa1157efc37f7d76f7524 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Tue, 12 Sep 2023 09:04:20 +0000
Subject: [PATCH 059/210] docs: update .all-contributorsrc [skip ci]

---
 .all-contributorsrc | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/.all-contributorsrc b/.all-contributorsrc
index faad9c994..920bf1dde 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -37,6 +37,16 @@
         "ideas",
         "mentoring"
       ]
+    },
+    {
+      "login": "martinjrobins",
+      "name": "Martin Robinson",
+      "avatar_url": "https://avatars.githubusercontent.com/u/1148404?v=4",
+      "profile": "http://www.rse.ox.ac.uk",
+      "contributions": [
+        "ideas",
+        "mentoring"
+      ]
     }
   ],
   "contributorsPerLine": 7,

From 01956aabbc0b019d5b15474bcb341fa488ecf81b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 13 Sep 2023 12:53:29 +0100
Subject: [PATCH 060/210] __init__.py bugfix for #28

---
 pybop/__init__.py | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/pybop/__init__.py b/pybop/__init__.py
index 7aeec0553..86a62d733 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -56,9 +56,7 @@
 #
 # Optimisation class
 #
-from .optimisation.base_optimisation import BaseOptimisation
-from .optimisation.nlopt_opt import NLoptOptimize
-from .optimisation.scipy_opt import ScipyMinimize
+from .optimisation import *
 
 #
 # Remove any imported modules, so we don't expose them as part of pybop

From 0530d11844df5ceb6aea511d7986465b495b5cc7 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Thu, 14 Sep 2023 12:27:36 +0100
Subject: [PATCH 061/210] Add links to PyBaMM

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index fa1d36186..0219931a5 100644
--- a/README.md
+++ b/README.md
@@ -36,7 +36,7 @@
 
 <!-- Software Specification -->
 ## PyBOP
-PyBOP provides a comprehensive suite of tools for parameterisation and optimisation of battery models. It aims to implement Bayesian and frequentist techniques with example workflows to guide the user. PyBOP can be applied to parameterise a wide range of battery models, including the electrochemical and equivalent circuit models available in PyBAMM. A major emphasis in PyBOP is understandable and actionable diagnostics for the user, while still providing extensibility for advanced probabilistic methods. By building on the state-of-the-art battery models and leveraging Python's accessibility, PyBOP enables agile and robust parameterisation and optimisation.
+PyBOP provides a comprehensive suite of tools for parameterisation and optimisation of battery models. It aims to implement Bayesian and frequentist techniques with example workflows to guide the user. PyBOP can be applied to parameterise a wide range of battery models, including the electrochemical and equivalent circuit models available in [PyBaMM](https://pybamm.org/). A major emphasis in PyBOP is understandable and actionable diagnostics for the user, while still providing extensibility for advanced probabilistic methods. By building on the state-of-the-art battery models and leveraging Python's accessibility, PyBOP enables agile and robust parameterisation and optimisation.
 
 The figure below gives PyBOP's current conceptual structure. The living software specification of PyBOP can be found [here](https://github.com/pybop-team/software-spec). This package is under active development, expect API evolution with releases.
 
@@ -143,7 +143,7 @@ results, last_optim, num_evals = parameterisation.rmse(
 ## Code of Conduct
 
 PyBOP aims to foster a broad consortium of developers and users, building on and
-learning from the success of the PyBaMM community. Our values are:
+learning from the success of the [PyBaMM](https://pybamm.org/) community. Our values are:
 
 -   Open-source (code and ideas should be shared)
 

From 6d20181d24c571a759251738eb33466cf58862ae Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 14 Sep 2023 12:31:16 +0100
Subject: [PATCH 062/210] Alignment for #28, fix build error

---
 pybop/__init__.py                                             | 4 +++-
 .../{base_optimisation.py => BaseOptimisation.py}             | 2 +-
 pybop/optimisation/{nlopt_opt.py => NLoptOptimize.py}         | 3 ++-
 pybop/optimisation/{scipy_opt.py => SciPyMinimize.py}         | 3 ++-
 4 files changed, 8 insertions(+), 4 deletions(-)
 rename pybop/optimisation/{base_optimisation.py => BaseOptimisation.py} (95%)
 rename pybop/optimisation/{nlopt_opt.py => NLoptOptimize.py} (92%)
 rename pybop/optimisation/{scipy_opt.py => SciPyMinimize.py} (93%)

diff --git a/pybop/__init__.py b/pybop/__init__.py
index 86a62d733..ad678ba42 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -56,7 +56,9 @@
 #
 # Optimisation class
 #
-from .optimisation import *
+from .optimisation import BaseOptimisation
+from .optimisation.NLoptOptimize import NLoptOptimize
+from .optimisation.SciPyMinimize import SciPyMinimize
 
 #
 # Remove any imported modules, so we don't expose them as part of pybop
diff --git a/pybop/optimisation/base_optimisation.py b/pybop/optimisation/BaseOptimisation.py
similarity index 95%
rename from pybop/optimisation/base_optimisation.py
rename to pybop/optimisation/BaseOptimisation.py
index a60f9fe72..14364a787 100644
--- a/pybop/optimisation/base_optimisation.py
+++ b/pybop/optimisation/BaseOptimisation.py
@@ -1,7 +1,7 @@
 import pybop
 
 
-class BaseOptimisation(object):
+class BaseOptimisation:
     """
 
     Base class for the optimisation methods.
diff --git a/pybop/optimisation/nlopt_opt.py b/pybop/optimisation/NLoptOptimize.py
similarity index 92%
rename from pybop/optimisation/nlopt_opt.py
rename to pybop/optimisation/NLoptOptimize.py
index d50763882..6d0f5ba87 100644
--- a/pybop/optimisation/nlopt_opt.py
+++ b/pybop/optimisation/NLoptOptimize.py
@@ -1,8 +1,9 @@
 import pybop
 import nlopt
+from .BaseOptimisation import BaseOptimisation
 
 
-class NLoptOptimize(pybop.BaseOptimisation):
+class NLoptOptimize(BaseOptimisation):
     """
     Wrapper class for the NLOpt optimisation class. Extends the BaseOptimisation class.
     """
diff --git a/pybop/optimisation/scipy_opt.py b/pybop/optimisation/SciPyMinimize.py
similarity index 93%
rename from pybop/optimisation/scipy_opt.py
rename to pybop/optimisation/SciPyMinimize.py
index 3586f43fb..ee4c57067 100644
--- a/pybop/optimisation/scipy_opt.py
+++ b/pybop/optimisation/SciPyMinimize.py
@@ -1,8 +1,9 @@
 import pybop
 from scipy.optimize import minimize
+from .BaseOptimisation import BaseOptimisation
 
 
-class ScipyMinimize(pybop.BaseOptimisation):
+class SciPyMinimize(BaseOptimisation):
     """
     Wrapper class for the Scipy optimisation class. Extends the BaseOptimisation class.
     """

From 5345a62b1d1a02b89ca116c99f6df3c408738070 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 14 Sep 2023 16:55:48 +0100
Subject: [PATCH 063/210] Adding CONTRIBUTING.md

---
 CONTRIBUTING.md | 287 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 287 insertions(+)
 create mode 100644 CONTRIBUTING.md

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
new file mode 100644
index 000000000..d1f8bc013
--- /dev/null
+++ b/CONTRIBUTING.md
@@ -0,0 +1,287 @@
+# Contributing to PyBOP
+
+If you'd like to contribute to PyBOP, please have a look at the [pre-commit](#pre-commit-checks) and the [workflow](#workflow) guidelines below.
+
+## Pre-commit checks
+
+Before you commit any code, please perform the following checks:
+
+- [All tests pass](#testing): `$ nox`
+
+
+## Workflow
+
+We use [GIT](https://en.wikipedia.org/wiki/Git) and [GitHub](https://en.wikipedia.org/wiki/GitHub) to coordinate our work. When making any kind of update, we try to follow the procedure below.
+
+### A. Before you begin
+
+1. Create an [issue](https://guides.github.com/features/issues/) where new proposals can be discussed before any coding is done.
+2. Create a [branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/) of this repo (ideally on your own [fork](https://help.github.com/articles/fork-a-repo/)), where all changes will be made
+3. Download the source code onto your local system, by [cloning](https://help.github.com/articles/cloning-a-repository/) the repository (or your fork of the repository).
+4. [Install](Developer-Install) PyBOP with the developer options.
+5. [Test](#testing) if your installation worked, using the test script: `$ python run-tests.py --unit`.
+
+You now have everything you need to start making changes!
+
+### B. Writing your code
+
+6. PyBOP is developed in [Python](https://en.wikipedia.org/wiki/Python_(programming_language)), and makes heavy use of [NumPy](https://en.wikipedia.org/wiki/NumPy) (see also [NumPy for MatLab users](https://numpy.org/doc/stable/user/numpy-for-matlab-users.html) and [Python for R users](http://blog.hackerearth.com/how-can-r-users-learn-python-for-data-science)).
+7. Make sure to follow our [coding style guidelines](#coding-style-guidelines).
+8. Commit your changes to your branch with [useful, descriptive commit messages](https://chris.beams.io/posts/git-commit/): Remember these are publicly visible and should still make sense a few months ahead in time. While developing, you can keep using the GitHub issue you're working on as a place for discussion. [Refer to your commits](https://stackoverflow.com/questions/8910271/how-can-i-reference-a-commit-in-an-issue-comment-on-github) when discussing specific lines of code.
+9. If you want to add a dependency on another library, or re-use code you found somewhere else, have a look at [these guidelines](#dependencies-and-reusing-code).
+
+### C. Merging your changes with PyBOP
+
+10. [Test your code!](#testing)
+12. If you added a major new feature, perhaps it should be showcased in an [example notebook](#example-notebooks).
+13. If you've added new functionality, please add additional tests to ensure ample code coverage in PyBOP.
+13. When you feel your code is finished, or at least warrants serious discussion, create a [pull request](https://help.github.com/articles/about-pull-requests/) (PR) on [PyBOP's GitHub page](https://github.com/pybop-team/PyBOP).
+14. Once a PR has been created, it will be reviewed by any member of the community. Changes might be suggested which you can make by simply adding new commits to the branch. When everything's finished, someone with the right GitHub permissions will merge your changes into PyBOP main repository.
+
+Finally, if you really, really, _really_ love developing PyBOP, have a look at the current [project infrastructure](#infrastructure).
+
+## Coding style guidelines
+
+PyBOP follows the [PEP8 recommendations](https://www.python.org/dev/peps/pep-0008/) for coding style. These are very common guidelines, and community tools have been developed to check how well projects implement them.
+
+### Ruff
+
+We use [ruff](https://github.com/charliermarsh/ruff) to check our PEP8 adherence. To try this on your system, navigate to the PyBOP directory in a console and type
+
+```bash
+python -m pip install pre-commit
+pre-commit run ruff
+```
+
+ruff is configured inside the file `pre-commit-config.yaml`, allowing us to ignore some errors. If you think this should be added or removed, please submit an [issue](#issues)
+
+When you commit your changes they will be checked against ruff automatically (see [Pre-commit checks](#pre-commit-checks)).
+
+### Naming
+
+Naming is hard. In general, we aim for descriptive class, method, and argument names. Avoid abbreviations when possible without making names overly long, so `mean` is better than `mu`, but a class name like `MyClass` is fine.
+
+Class names are CamelCase, and start with an upper case letter, for example `MyOtherClass`. Method and variable names are lower-case, and use underscores for word separation, for example, `x` or `iteration_count`.
+
+## Dependencies and reusing code
+
+While it's a bad idea for developers to "reinvent the wheel", it's important for users to get a _reasonably sized download and an easy install_. In addition, external libraries can sometimes cease to be supported, and when they contain bugs it might take a while before fixes become available as automatic downloads to PyBOP users.
+For these reasons, all dependencies in PyBOP should be thought about carefully and discussed on GitHub.
+
+Direct inclusion of code from other packages is possible, as long as their license permits it and is compatible with ours, but again should be considered carefully and discussed in the group. Snippets from blogs and [stackoverflow](https://stackoverflow.com/) can often be included without attribution, but if they solve a particularly nasty problem (or are very hard to read) it's often a good idea to attribute (and document) them, by commenting with a link in the source code.
+
+### Separating dependencies
+
+On the other hand... We _do_ want to compare several tools, to generate documentation, and speed up development. For this reason, the dependency structure is split into 4 parts:
+
+1. Core PyBOP: A minimal set, including things like NumPy, SciPy, etc. All infrastructure should run against this set of dependencies, as well as any numerical methods we implement ourselves.
+2. Extras: Other inference packages and their dependencies. Methods we don't want to implement ourselves, but do want to provide an interface to can have their dependencies added here.
+3. Documentation generating code: Everything you need to generate and work on the docs.
+4. Development code: Everything you need to do PyBOP development (so all of the above packages, plus ruff and other testing tools).
+
+Only 'core pybop' is installed by default. The others have to be specified explicitly when running the installation command.
+
+### Matplotlib
+
+We use Matplotlib in PyBOP, but with two caveats:
+
+First, Matplotlib should only be used in plotting methods, and these should _never_ be called by other PyBOP methods. So users who don't like Matplotlib will not be forced to use it in any way. Use in notebooks is OK and encouraged.
+
+Second, Matplotlib should never be imported at the module level, but always inside methods. For example:
+
+```
+def plot_great_things(self, x, y, z):
+    import matplotlib.pyplot as pl
+    ...
+```
+
+This allows people to (1) use PyBOP without ever importing Matplotlib and (2) configure Matplotlib's back-end in their scripts, which _must_ be done before e.g. `pyplot` is first imported.
+
+## Testing
+
+All code requires testing. We use the [pytest](https://docs.pytest.org/en/) package for our tests. (These tests typically just check that the code runs without error, and so, are more _debugging_ than _testing_ in a strict sense. Nevertheless, they are very useful to have!)
+
+If you have nox installed, to run unit tests, type
+
+```bash
+nox
+```
+
+else, type
+
+```bash
+python run-tests.py
+```
+
+### Writing tests
+
+Every new feature should have its own test. To create ones, have a look at the `test` directory and see if there's a test for a similar method. Copy-pasting is a good way to start.
+
+Next, add some simple (and speedy!) tests of your main features. If these run without exceptions that's a good start! Next, check the output of your methods using any of these [functions](https://docs.pytest.org/en/7.4.x/reference/reference.html#functions).
+
+### Debugging
+
+Often, the code you write won't pass the tests straight away, at which stage it will become necessary to debug.
+The key to successful debugging is to isolate the problem by finding the smallest possible example that causes the bug.
+In practice, there are a few tricks to help you do this, which we give below.
+Once you've isolated the issue, it's a good idea to add a unit test that replicates this issue, so that you can easily check whether it's been fixed, and make sure that it's easily picked up if it crops up again.
+This also means that, if you can't fix the bug yourself, it will be much easier to ask for help (by opening a [bug-report issue](https://github.com/pybop-team/PyBOP/issues/new?assignees=&labels=bug&projects=&template=bug_report.yml&title=%5BBug%5D%3A+)).
+
+1. Run individual test scripts instead of the whole test suite:
+
+   ```bash
+   python tests/unit/path/to/test
+   ```
+
+   You can also run an individual test from a particular script, e.g.
+
+   ```bash
+   python tests/unit/test_quick_plot.py TestQuickPlot.test_failure
+   ```
+
+   If you want to run several, but not all, the tests from a script, you can restrict which tests are run from a particular script by using the skipping decorator:
+
+   ```python
+   @unittest.skip("")
+   def test_bit_of_code(self):
+       ...
+   ```
+
+   or by just commenting out all the tests you don't want to run.
+2. Set break-points, either in your IDE or using the Python debugging module. To use the latter, add the following line where you want to set the break point
+
+   ```python
+   import ipdb
+
+   ipdb.set_trace()
+   ```
+
+   This will start the [Python interactive debugger](https://gist.github.com/mono0926/6326015). If you want to be able to use magic commands from `ipython`, such as `%timeit`, then set
+
+   ```python
+   from IPython import embed
+
+   embed()
+   import ipdb
+
+   ipdb.set_trace()
+   ```
+
+   at the break point instead.
+   Figuring out where to start the debugger is the real challenge. Some good ways to set debugging break points are:
+
+   1. Try-except blocks. Suppose the line `do_something_complicated()` is raising a `ValueError`. Then you can put a try-except block around that line as:
+
+      ```python
+      try:
+          do_something_complicated()
+      except ValueError:
+          import ipdb
+
+          ipdb.set_trace()
+      ```
+
+      This will start the debugger at the point where the `ValueError` was raised, and allow you to investigate further. Sometimes, it is more informative to put the try-except block further up the call stack than exactly where the error is raised.
+   2. Warnings. If functions are raising warnings instead of errors, it can be hard to pinpoint where this is coming from. Here, you can use the `warnings` module to convert warnings to errors:
+
+      ```python
+      import warnings
+
+      warnings.simplefilter("error")
+      ```
+
+      Then you can use a try-except block, as in a., but with, for example, `RuntimeWarning` instead of `ValueError`.
+
+3. To isolate whether a bug is in a model, its Jacobian or its simplified version, you can set the `use_jacobian` and/or `use_simplify` attributes of the model to `False` (they are both `True` by default for most models).
+4. If a model isn't giving the answer you expect, you can try comparing it to other models. For example, you can investigate parameter limits in which two models should give the same answer by setting some parameters to be small or zero. The `StandardOutputComparison` class can be used to compare some standard outputs from battery models.
+5. To get more information about what is going on under the hood, and hence understand what is causing the bug, you can set the [logging](https://realpython.com/python-logging/) level to `DEBUG` by adding the following line to your test or script:
+
+   ```python3
+   pybop.set_logging_level("DEBUG")
+   ```
+
+### Profiling
+
+Sometimes, a bit of code will take much longer than you expect to run. In this case, you can set
+
+```python
+from IPython import embed
+
+embed()
+import ipdb
+
+ipdb.set_trace()
+```
+
+as above, and then use some of the profiling tools. In order of increasing detail:
+
+1. Simple timer. In ipython, the command
+
+   ```
+   %time command_to_time()
+   ```
+
+   tells you how long the line `command_to_time()` takes. You can use `%timeit` instead to run the command several times and obtain more accurate timings.
+2. Simple profiler. Using `%prun` instead of `%time` will give a brief profiling report 3. Detailed profiler. You can install the detailed profiler `snakeviz` through pip:
+
+   ```bash
+   pip install snakeviz
+   ```
+
+   and then, in ipython, run
+
+   ```
+   %load_ext snakeviz
+   %snakeviz command_to_time()
+   ```
+
+   This will open a window in your browser with detailed profiling information.
+
+## Infrastructure
+
+### Setuptools
+
+Installation of PyBOP _and dependencies_ is handled via [setuptools](http://setuptools.readthedocs.io/)
+
+Configuration files:
+
+```
+setup.py
+```
+
+Note that this file must be kept in sync with the version number in [pybop/**init**.py](pybop/__init__.py).
+
+### Continuous Integration using GitHub actions
+
+Each change pushed to the PyBOP GitHub repository will trigger the test and benchmark suites to be run, using [GitHub actions](https://github.com/features/actions).
+
+Tests are run for different operating systems, and for all Python versions officially supported by PyBOP. If you opened a Pull Request, feedback is directly available on the corresponding page. If all tests pass, a green tick will be displayed next to the corresponding test run. If one or more test(s) fail, a red cross will be displayed instead.
+
+Similarly, the benchmark suite is automatically run for the most recently pushed commit. Benchmark results are compared to the results available for the latest commit on the `develop` branch. Should any significant performance regression be found, a red cross will be displayed next to the benchmark run.
+
+In all cases, more details can be obtained by clicking on a specific run.
+
+Configuration files for various GitHub actions workflow can be found in `.github/worklfows`.
+
+### Codecov
+
+Code coverage (how much of our code is seen by the (linux) unit tests) is tested using [Codecov](https://docs.codecov.io/), a report is visible on https://codecov.io/gh/pybop-team/PyBOP.
+
+Configuration files:
+
+```
+.coveragerc
+```
+
+### GitHub
+
+GitHub does some magic with particular filenames. In particular:
+
+- The first page people see when they go to [our GitHub page](https://github.com/pybop-team/PyBOP) displays the contents of [README.md](README.md), which is written in the [Markdown](https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet) format. Some guidelines can be found [here](https://help.github.com/articles/about-readmes/).
+- The license for using PyBOP is stored in [LICENSE](LICENSE.txt), and [automatically](https://help.github.com/articles/adding-a-license-to-a-repository/) linked to by GitHub.
+- This file, [CONTRIBUTING.md](CONTRIBUTING.md) is recognised as the contribution guidelines and a link is [automatically](https://github.com/blog/1184-contributing-guidelines) displayed when new issues or pull requests are created.
+
+## Acknowledgements
+
+This CONTRIBUTING.md file, along with large sections of the code infrastructure,
+was copied from the excellent [Pints GitHub repo](https://github.com/pints-team/pints), and [PyBaMM repo](https://github.com/pybamm-team/PyBaMM)
\ No newline at end of file

From 01f32977efa7f4fa643227dba4ce5ce29ee931f6 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 14 Sep 2023 17:33:14 +0100
Subject: [PATCH 064/210] Add codecov to workflow, update noxfile with coverage
 session

---
 .github/workflows/test_on_push.yaml | 36 +++++++++++++++++++++++++++--
 noxfile.py                          |  8 ++++++-
 2 files changed, 41 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index 04f4afc26..40827f79e 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -4,7 +4,6 @@ on: [push]
 
 jobs:
   build:
-
     runs-on: ubuntu-latest
     strategy:
       fail-fast: false
@@ -12,7 +11,7 @@ jobs:
         python-version: ["3.8", "3.9", "3.10", "3.11"]
 
     steps:
-      - uses: actions/checkout@v3
+      - uses: actions/checkout@v4
       - name: Set up Python ${{ matrix.python-version }}
         uses: actions/setup-python@v4
         with:
@@ -25,3 +24,36 @@ jobs:
       - name: Test with nox
         run: |
           nox
+
+  # Runs only on Ubuntu with Python 3.11
+  check_coverage:
+    needs: style
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+    name: Coverage tests (ubuntu-latest / Python 3.11)
+
+    steps:
+      - name: Check out PyBOP repository
+        uses: actions/checkout@v4
+      - name: Set up Python 3.11
+        id: setup-python
+        uses: actions/setup-python@v4
+        with:
+          python-version: 3.11
+          cache: 'pip'
+          cache-dependency-path: setup.py
+
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip
+          pip install --upgrade pip nox
+          pip install -e .
+
+      - name: Run unit tests for Ubuntu with Python 3.11 and generate coverage report
+        run: nox -s coverage
+
+      - name: Upload coverage report
+        uses: codecov/codecov-action@v3
+        env:
+          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
\ No newline at end of file
diff --git a/noxfile.py b/noxfile.py
index d96c45832..ad833df1b 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -13,4 +13,10 @@
 def tests(session):
     session.run_always('pip', 'install', '-e', '.')
     session.install('pytest')
-    session.run('pytest')
\ No newline at end of file
+    session.run('pytest')
+
+@nox.session
+def coverage(session):
+    session.run_always('pip', 'install', '-e', '.')
+    session.install('pytest-cov')
+    session.run('pytest', '--cov')
\ No newline at end of file

From b8cef8e07eb2ef6cab6d9d07114debca85cbf7ac Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Thu, 14 Sep 2023 20:43:39 +0100
Subject: [PATCH 065/210] Update installation guide

Advise using virtualenv rather than pyenv-virtualenv for consistency with the PyBaMM installation instructions.
---
 README.md | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 54 insertions(+), 4 deletions(-)

diff --git a/README.md b/README.md
index 0219931a5..566bf12d5 100644
--- a/README.md
+++ b/README.md
@@ -49,23 +49,73 @@ The figure below gives PyBOP's current conceptual structure. The living software
 ## Getting Started
 
 <!-- Installation -->
+### Prerequisites
+To use and/or contribute to PyBOP, you must first install Python 3 (specifically, 3.8-3.11). For example, on a Debian-based distribution (Debian, Ubuntu - including via WSL, Linux Mint), open a terminal and enter:
+
+```bash
+sudo apt update
+sudo apt install python3 python3-virtualenv
+```
+
+For further information, please refer to the similar [installation instructions for PyBaMM](https://docs.pybamm.org/en/latest/source/user_guide/installation/GNU-linux.html).
+
 ### Installation
 
-Create a virtual environment, i.e with [pyenv](https://github.com/pyenv/pyenv#installation) and [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv#installation):
+Create a virtual environment called `pybop-env` within your current directory using:
+
+```bash
+virtualenv pybop-env
+```
+
+Activate the environment with:
+
+```bash
+source pybop-env/bin/activate
+```
+
+You can check which version of python is installed within the virtual environment by typing:
+
+```bash
+python --version
+```
+
+Later, you can deactivate the environment and go back to your original system using:
+
+```bash
+deactivate
+```
+
+Note that there are alternative packages which can be used to create and manage [virtual environments](https://realpython.com/python-virtual-environments-a-primer/), for example [pyenv](https://github.com/pyenv/pyenv#installation) and [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv#installation). In this case, follow the instructions to install these packages and then to create, activate and deactivate a virtual environment, use:
 
 ```bash
 pyenv virtualenv pybop-env
 pyenv activate pybop-env
+pyenv deactivate
 ```
 
-Install PyBOP:
+Within your virtual environment, install the `develop` branch of PyBOP:
 
 ```bash
- pip install git+https://github.com/pybop-team/PyBOP
+pip install git+https://github.com/pybop-team/PyBOP.git@develop
 ```
 
-<!-- Installation -->
+To alternatively install PyBOP from a local directory, use the following template, substituting in the relevant path:
+
+```bash
+pip install -e "PATH_TO_PYBOP"
+```
+
+Now, with PyBOP installed in your virtual environment, you can run Python scripts which import and use the functionality of this package.
+
+<!-- Example Usage -->
 ### Usage
+PyBOP has two classes of intended use case:
+1. parameter estimation from battery test data
+2. design optimisation subject to battery manufacturing/usage constraints
+
+These classes encompass a wide variety of optimisation problems, which depend on the choice of battery model, the available data and/or the choice of design parameters.
+
+### Parameter estimation
 The example below shows a simple fitting routine that starts by generating synthetic data from a single particle model with modified parameter values. An RMSE cost function using the terminal voltage as the optimised signal is completed to determine the unknown parameter values. First, the synthetic data is generated:
 
 ```python

From 81b97b932c328ac19fbde7a82d386384a9e49cb0 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 09:49:56 +0100
Subject: [PATCH 066/210] yaml bugfix

---
 .github/workflows/test_on_push.yaml | 1 -
 1 file changed, 1 deletion(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index 40827f79e..b1074e915 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -27,7 +27,6 @@ jobs:
 
   # Runs only on Ubuntu with Python 3.11
   check_coverage:
-    needs: style
     runs-on: ubuntu-latest
     strategy:
       fail-fast: false

From 609677b7ed89d50d943ccf3222df6e830be75079 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 10:00:07 +0100
Subject: [PATCH 067/210] Add cov-report flag

---
 noxfile.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/noxfile.py b/noxfile.py
index ad833df1b..efb9aa8f3 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -19,4 +19,4 @@ def tests(session):
 def coverage(session):
     session.run_always('pip', 'install', '-e', '.')
     session.install('pytest-cov')
-    session.run('pytest', '--cov')
\ No newline at end of file
+    session.run('pytest', '--cov', '--cov-report=xml')
\ No newline at end of file

From b2c5437d93e53174f153675ea64756ee3ba3baf7 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 10:06:43 +0100
Subject: [PATCH 068/210] Split Nox sessions

---
 .github/workflows/test_on_push.yaml | 4 ++--
 noxfile.py                          | 2 +-
 2 files changed, 3 insertions(+), 3 deletions(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index b1074e915..a090f2ce8 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -21,9 +21,9 @@ jobs:
           python -m pip install --upgrade pip
           pip install --upgrade pip nox
           pip install -e .
-      - name: Test with nox
+      - name: Unit tests with nox
         run: |
-          nox
+          nox -s unit_test
 
   # Runs only on Ubuntu with Python 3.11
   check_coverage:
diff --git a/noxfile.py b/noxfile.py
index efb9aa8f3..b48348a9e 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -10,7 +10,7 @@
 
 
 @nox.session
-def tests(session):
+def unit_test(session):
     session.run_always('pip', 'install', '-e', '.')
     session.install('pytest')
     session.run('pytest')

From 3c1d3d3dcb5e69b53215cf10964e1871b9bfdfe2 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 10:14:55 +0100
Subject: [PATCH 069/210] Add codecov badge

---
 README.md | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/README.md b/README.md
index fa1d36186..a7c139929 100644
--- a/README.md
+++ b/README.md
@@ -20,18 +20,17 @@
   <a href="https://github.com/pybop-team/PyBOP/stargazers">
     <img src="https://img.shields.io/github/stars/pybop-team/PyBOP" alt="stars" />
   </a>
+  <a href="https://codecov.io/gh/pybop-team/PyBOP">
+    <img src="https://img.shields.io/github/stars/pybop-team/PyBOP" alt="codecov" />
+  </a>
   <a href="https://github.com/pybop-team/PyBOP/issues/">
-    <img src="https://img.shields.io/github/issues/pybop-team/PyBOP" alt="open issues" />
+    <img src="https://codecov.io/gh/pybamm-team/PyBaMM/branch/main/graph/badge.svg" alt="open issues" />
   </a>
   <a href="https://github.com/pybop-team/PyBOP/blob/develop/LICENSE">
     <img src="https://img.shields.io/github/license/pybop-team/PyBOP" alt="license" />
   </a>
 </p>
 
-<!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section -->
-[![All Contributors](https://img.shields.io/badge/all_contributors-4-orange.svg?style=flat-square)](#contributors-)
-<!-- ALL-CONTRIBUTORS-BADGE:END -->
-
 </div>
 
 <!-- Software Specification -->

From cf5c50d977cf17cedbfb4ad9e77a38155b94cd26 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 10:21:10 +0100
Subject: [PATCH 070/210] bugfix badge

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index a7c139929..765a1a38c 100644
--- a/README.md
+++ b/README.md
@@ -21,10 +21,10 @@
     <img src="https://img.shields.io/github/stars/pybop-team/PyBOP" alt="stars" />
   </a>
   <a href="https://codecov.io/gh/pybop-team/PyBOP">
-    <img src="https://img.shields.io/github/stars/pybop-team/PyBOP" alt="codecov" />
+    <img src="https://codecov.io/gh/pybop-team/PyBOP/branch/develop/graph/badge.svg" alt="codecov" />
   </a>
   <a href="https://github.com/pybop-team/PyBOP/issues/">
-    <img src="https://codecov.io/gh/pybamm-team/PyBaMM/branch/main/graph/badge.svg" alt="open issues" />
+    <img src="https://img.shields.io/github/issues/pybop-team/PyBOP" alt="open issues" />
   </a>
   <a href="https://github.com/pybop-team/PyBOP/blob/develop/LICENSE">
     <img src="https://img.shields.io/github/license/pybop-team/PyBOP" alt="license" />

From 58fd600829a5c4e682b5ebc2834b0add86da5d52 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 10:42:00 +0100
Subject: [PATCH 071/210] Update & relax assertations

---
 tests/unit/test_parameterisation.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index 6bf4f6e92..e77638283 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -31,7 +31,7 @@ def getdata(self, x0):
 
     def test_rmse(self):
         # Form observations
-        x0 = np.array([0.55, 0.63])
+        x0 = np.array([0.52, 0.63])
         solution = self.getdata(x0)
 
         observations = [
@@ -49,12 +49,12 @@ def test_rmse(self):
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
                 prior=pybop.Gaussian(0.5, 0.05),
-                bounds=[0.35, 0.75],
+                bounds=[0.4, 0.65],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
                 prior=pybop.Gaussian(0.65, 0.05),
-                bounds=[0.45, 0.85],
+                bounds=[0.5, 0.75],
             ),
         ]
 
@@ -68,4 +68,4 @@ def test_rmse(self):
         )
         # Assertions
         np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
-        np.testing.assert_almost_equal(results, x0, decimal=1)
+        np.testing.assert_allclose(results, x0, atol=5e-2)

From e11781bf1cfeede751f486c8a0ac368e0d6b9c2b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 11:05:53 +0100
Subject: [PATCH 072/210] Add PR trigger

---
 .github/workflows/test_on_push.yaml | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index a090f2ce8..a75406db7 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -1,6 +1,7 @@
 name: PyBOP
 
-on: [push]
+on: [push, pull_request]
+
 
 jobs:
   build:

From 2cdc7e7df04eebe6151dc74ac63cbea7c91b7352 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 11:07:04 +0100
Subject: [PATCH 073/210] Add concurrency cancel trigger

---
 .github/workflows/test_on_push.yaml | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index a75406db7..f6516faf2 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -2,7 +2,14 @@ name: PyBOP
 
 on: [push, pull_request]
 
-
+concurrency:
+  # github.workflow: name of the workflow, so that we don't cancel other workflows
+  # github.event.pull_request.number || github.ref: pull request number or branch name if not a pull request
+  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+  # Cancel in-progress runs when a new workflow with the same group name is triggered
+  # This avoids workflow runs on both pushes and PRs
+  cancel-in-progress: true
+  
 jobs:
   build:
     runs-on: ubuntu-latest

From 1528651183e27c6f19c0d3b8a8f16e7dc1c53de9 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 11:21:15 +0100
Subject: [PATCH 074/210] Syntax for concurrency trigger

---
 .github/workflows/test_on_push.yaml | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index f6516faf2..4f4d0b8a6 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -1,6 +1,9 @@
 name: PyBOP
 
-on: [push, pull_request]
+on:
+  push:
+  workflow_dispatch:
+  pull_request:
 
 concurrency:
   # github.workflow: name of the workflow, so that we don't cancel other workflows
@@ -9,7 +12,7 @@ concurrency:
   # Cancel in-progress runs when a new workflow with the same group name is triggered
   # This avoids workflow runs on both pushes and PRs
   cancel-in-progress: true
-  
+
 jobs:
   build:
     runs-on: ubuntu-latest

From a0cc83c58d30c662537e04b73afe8d4a47811900 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 11:40:08 +0100
Subject: [PATCH 075/210] Grammar, codecov

---
 CONTRIBUTING.md | 15 +++++----------
 1 file changed, 5 insertions(+), 10 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index d1f8bc013..2a34360f1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,7 +6,7 @@ If you'd like to contribute to PyBOP, please have a look at the [pre-commit](#pr
 
 Before you commit any code, please perform the following checks:
 
-- [All tests pass](#testing): `$ nox`
+- [All tests pass](#testing): `$ nox -s unit_test`
 
 
 ## Workflow
@@ -104,7 +104,7 @@ All code requires testing. We use the [pytest](https://docs.pytest.org/en/) pack
 If you have nox installed, to run unit tests, type
 
 ```bash
-nox
+nox -s unit_test
 ```
 
 else, type
@@ -261,17 +261,12 @@ Similarly, the benchmark suite is automatically run for the most recently pushed
 
 In all cases, more details can be obtained by clicking on a specific run.
 
-Configuration files for various GitHub actions workflow can be found in `.github/worklfows`.
+Configuration files for various GitHub actions workflow can be found in `.github/workflows`.
 
 ### Codecov
 
-Code coverage (how much of our code is seen by the (linux) unit tests) is tested using [Codecov](https://docs.codecov.io/), a report is visible on https://codecov.io/gh/pybop-team/PyBOP.
+Code coverage (how much of our code is seen by the (Linux) unit tests) is tested using [Codecov](https://docs.codecov.io/), a report is visible on https://codecov.io/gh/pybop-team/PyBOP.
 
-Configuration files:
-
-```
-.coveragerc
-```
 
 ### GitHub
 
@@ -284,4 +279,4 @@ GitHub does some magic with particular filenames. In particular:
 ## Acknowledgements
 
 This CONTRIBUTING.md file, along with large sections of the code infrastructure,
-was copied from the excellent [Pints GitHub repo](https://github.com/pints-team/pints), and [PyBaMM repo](https://github.com/pybamm-team/PyBaMM)
\ No newline at end of file
+was copied from the excellent [Pints repo](https://github.com/pints-team/pints), and [PyBaMM repo](https://github.com/pybamm-team/PyBaMM)
\ No newline at end of file

From 9e6c5cfad881b81006a5996ebd74650abc2f8ff1 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 15 Sep 2023 17:04:22 +0100
Subject: [PATCH 076/210] Loosen assertion and shift unit_test  bounds

---
 tests/unit/test_parameterisation.py | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index e77638283..40d2b7f3d 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -48,13 +48,13 @@ def test_rmse(self):
         params = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.5, 0.05),
-                bounds=[0.4, 0.65],
+                prior=pybop.Gaussian(0.5, 0.02),
+                bounds=[0.375, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
-                prior=pybop.Gaussian(0.65, 0.05),
-                bounds=[0.5, 0.75],
+                prior=pybop.Gaussian(0.65, 0.02),
+                bounds=[0.525, 0.75],
             ),
         ]
 
@@ -68,4 +68,4 @@ def test_rmse(self):
         )
         # Assertions
         np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
-        np.testing.assert_allclose(results, x0, atol=5e-2)
+        np.testing.assert_allclose(results, x0, atol=1e-1)

From 38e8339f60dce5f6aed598484f5bd429a2bdbd0a Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Mon, 18 Sep 2023 11:24:18 +0100
Subject: [PATCH 077/210] Update Architecture diagram (#43)

Update the Architecture diagram
---
 README.md                                     |   4 +-
 assets/PyBOP_Arch.pdf                         | Bin 110377 -> 0 bytes
 assets/PyBOP_Arch.svg                         |  74 -------------
 ...cture.drawio => PyBOP_Architecture.drawio} | 103 +++++++++---------
 assets/PyBOP_Architecture.png                 | Bin 0 -> 147518 bytes
 5 files changed, 56 insertions(+), 125 deletions(-)
 delete mode 100644 assets/PyBOP_Arch.pdf
 delete mode 100644 assets/PyBOP_Arch.svg
 rename assets/{PyBOP-Architecture.drawio => PyBOP_Architecture.drawio} (83%)
 create mode 100644 assets/PyBOP_Architecture.png

diff --git a/README.md b/README.md
index cefe1dfc7..4c89bea8b 100644
--- a/README.md
+++ b/README.md
@@ -37,11 +37,11 @@
 ## PyBOP
 PyBOP provides a comprehensive suite of tools for parameterisation and optimisation of battery models. It aims to implement Bayesian and frequentist techniques with example workflows to guide the user. PyBOP can be applied to parameterise a wide range of battery models, including the electrochemical and equivalent circuit models available in [PyBaMM](https://pybamm.org/). A major emphasis in PyBOP is understandable and actionable diagnostics for the user, while still providing extensibility for advanced probabilistic methods. By building on the state-of-the-art battery models and leveraging Python's accessibility, PyBOP enables agile and robust parameterisation and optimisation.
 
-The figure below gives PyBOP's current conceptual structure. The living software specification of PyBOP can be found [here](https://github.com/pybop-team/software-spec). This package is under active development, expect API evolution with releases.
+The figure below gives PyBOP's current conceptual structure. The living software specification of PyBOP can be found [here](https://github.com/pybop-team/software-spec). This package is under active development, expect API (Application Programming Interface) evolution with releases.
 
 
 <p align="center">
-    <img src="assets/PyBOP_Arch.svg" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
+    <img src="assets/PyBOP_Architecture.png" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
 </p>
 
 <!-- Getting Started -->
diff --git a/assets/PyBOP_Arch.pdf b/assets/PyBOP_Arch.pdf
deleted file mode 100644
index 17d36a9c67f8979280494d3c38c8a9700bbfabb5..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 110377
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
Wvi%uTUS24aR}`CxNl{A)`~Lve0B%SC

diff --git a/assets/PyBOP_Arch.svg b/assets/PyBOP_Arch.svg
deleted file mode 100644
index 49a7c78c8..000000000
--- a/assets/PyBOP_Arch.svg
+++ /dev/null
@@ -1,74 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-
-<svg
-   version="1.1"
-   id="svg2"
-   width="754.66669"
-   height="318.66666"
-   viewBox="0 0 754.66669 318.66666"
-   xmlns:xlink="http://www.w3.org/1999/xlink"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:svg="http://www.w3.org/2000/svg">
-  <defs
-     id="defs6">
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath20">
-      <path
-         d="M 0,0 H 566 V 239 H 0 Z"
-         id="path18" />
-    </clipPath>
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath30">
-      <path
-         d="M 0.5,239 H 566 V -2.384186e-6 H 0.5 Z"
-         id="path28" />
-    </clipPath>
-    <clipPath
-       clipPathUnits="userSpaceOnUse"
-       id="clipPath36">
-      <path
-         d="m 0.5,-0.5 h 566 V 239 H 0.5 Z"
-         id="path34" />
-    </clipPath>
-  </defs>
-  <g
-     id="g10"
-     transform="matrix(1.3333333,0,0,-1.3333333,0,318.66667)">
-    <g
-       id="g14">
-      <g
-         id="g16"
-         clip-path="url(#clipPath20)">
-        <path
-           d="M 0,239 H 566 V 0 H 0 Z"
-           style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none"
-           id="path22" />
-      </g>
-    </g>
-    <g
-       id="g24">
-      <g
-         id="g26"
-         clip-path="url(#clipPath30)">
-        <g
-           id="g32"
-           clip-path="url(#clipPath36)">
-          <g
-             id="g38"
-             transform="matrix(565.5,0,0,239,0.5,-2.384186e-6)">
-            <image
-               width="1"
-               height="1"
-               preserveAspectRatio="none"
-               transform="matrix(1,0,0,-1,0,1)"
-               xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABf4AAAKICAYAAAAhJevmAAAABHNCSVQICAgIfAhkiAAAIABJREFUeJzs3Xd4VGXax/HvtEwq6QmQ0HsRRIqAgK6ouIu9rV3UfcWCsoIVyyqKsHYQBdfVtaywKnZAlN4hAgGktwAJEJKQQnqZOe8fkwwJk0ZNJvw+e+0lOeU595yZyUzuc5/7MRmGYSAiIiIiIiINitPp5J577sbHx85H//oIs8Vc1yGJiIiIyFliresARERERERE5PRyGgavvPIKX3/9DSUlJbRs2YoXXni+rsMSERERkbNEiX8REREREZEGxOl08vLLL/PGG2/w2muv4XA4GDt2LHa7D0899VRdhyciIiIiZ4ES/yIiIiIiIg2Ew+HgtXHjmDx5MpPee4+/3X8/AMHBwTzxxBMYGIx6fBQ2m62OIxURERGRM0mJfxERERERkQaisLCQHTt38umnn3L11Ve7lw8fPpzIyEh+/ukncnNzCQkJqcMoRURERORMM2lyXxERERERkYbD6XRiNlc+kW9160RERESk4VDiX0RERERERERERESkAVGrHxERERERkQYoMTGRdevWYTab6d27N40bN67rkERERETkLFHiX0REREREpAEpKipi0qRJfPDBB7Rt24aiomJSU1P5/PPP6dmzZ12HJyIiIiJngVr9iIiIiIiINCCPP/44EydOZMKECYwcOZLcvFz69+uPv78/S5YsITAwsK5DFBEREZEzTLM6iYiIiIiINACGYTD+tfG8++67/O1vf+Opp57CbrcTFhrGoIsHER8fz5rff6/rMEVERETkLFDiX0REREREpAFYtGgRr7z6Cs2bNeOZZ5+psC46KhqAuDgl/kVERETOBUr8i4iIiIiIeLnc3Fxefull8vPzGXbvvbRu1brC+rIOr9u2b6uL8ERERETkLFPiX0RERERExMv9/PPPLFm6hKCgIO644w6P9enp6QDk5OSc7dBEREREpA4o8S8iIiIiIuLFcnNyeeuttzAMg6uuuor27dpVWO90OtmfuB8AHx+fughRRERERM4yJf5FRERERES82Lz581i7di0mk4mbb7oZTKYK648ePcq+vfsACA0NrYsQRUREROQsU+JfRERERETEi82ePRvDMGjSuDH9+vX1WJ+amsq+vXsBiIqKOsvRiYiIiEhdsNZ1ACIiIiIi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HA6ysjLJyjpKdnY2eXl55OTmkpebS25uLpmZme7l+fn55OflkZef7/65qKiI4uISSkqKKSkuprikhIKCAjp06MD//ve/MxZ3cHDwGRtbpD5Q4l9ERESknnn66adp2aoVwx94gJiYGI/1BmCqIiOVk5PDtGnTWLJkCe+///4ZjlREpAEqbemvvL+IiEt+QT7Jh5I5ePAghw8fZteuXSQkJHD48GEOp6SQkZ5OTk4OOTk55OXlUVh4eiZXLioqOi3jiJyrlPgXERERqUf8/f254YYbuP766/n0P//hgQce4N577630AkD5iv+cnBy++eYbJk2axPr163lv0nuqYhIRORllrX7qNgoRkTpx4MABEhIS2LNnD5s2bWLjhg3s3rOHtLQ0MjMzK93Hx8eH0LBQoqOjCQkNJSgwkMDAQIKDgwkJCSEkOIRGIcH42u3YbDasVis2mw82mxUfm49rmc1autyGzWrF5uOj77Iip0iJfxEREZF6ZujQofzpkktYuGgRL7zwAv/617/4v/97gPvuv4+mTZq4q1D9/PzIzc3l66++ZtJ7roQ/QJcuXRh277A6i19EpEFQ5l9EGrjcvFx2bN/B1q1biYuLY/XqVezevYfU1NQK24WFhdO8eXP69O5N4yZNaNmyJS1btiQ2NpaIiAgCAwMJCAggwD8A/wB/bDZbHT0iESlPiX8RERGResZmszF69GgWL1mC0+kkMTGRF198gX//+98MG3YPRUVFmEwmPvroI7755hvWrVtXYf/HHnuMwMDAOopeRMTLlSX81etHxOvoel3NUlJSWLlyJTNnzmTJ4sXs3beXoqJi9/qOnToxaNDFdO7cic6dO9OufTuiIqMIDQ3V98uzpKSkBKfTic1mq3ZOr/rO6XBS4ijBYrFgsVjqOpwzzjAMSoqLwWSqNxe/lPgXERERqYeuGDKEQRcPYtHCRe5l+/fvY+zYse6fn332WY/9unbtyu233342QhQRERERL1BUVMTy5cuZNm0av/zyCwcOHHCv69atG7169mLAwAH07t2bZs2aqcVOHcrIyOD2229n3969vDtxIldccQUA999/P2vWrOGWW27hueeeq+Moa2fca+OYNn0aFw8axNSpH9Z1OGfcmt9/555hw4iIiGDa9OnEVtKq9WxT4l9ERESkHrLZbIwe9QRLFruq/mvr0UcfVTWWiMipMKnY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M4e5c+cyYMAAbDYbq1atIjY2lrCwMO68806ys7PzJEPVqlWZPn063t7eOe68+qNq1arlyfmLKhX+RURERERERERExHQpKSm88847fPDBBwD069ePkSNHUrx4cZOTFXw9e/Zkzpw5bN68mX379lG7dm1Pm59mzZpRoUKFGxqV/1cEBATQqlWrPDm2XJsK/yIiIiIiIiIiImKq3bt3ExUVxYoVKyhZsiTvvfceffv2NTtWodG6dWvKly/P8ePHWb58OWFhYfzyyy8A3H///Xl6bsMwyMrKwsvLK0/PIzmpKZaIiIiIiIiIiIiY5j//+Q/t27dnxYoVtG7dmqVLl6ron8tKlSpF69atAViwYAE//vgjp0+fpmTJkrRr187ccJInVPgXERERERERERGRWy4uLo4BAwbwr3/9i7Nnz/LCCy+wePFi6tevb3a0QqlXr14AbN68mbfffhuA5s2bU7FixRs+xl+ZANhqtWq0vwnU6kdERERERERERERuqY0bNxIVFcXGjRspV64cY8eOzfOWM0Vdy5YtqVSpEjExMcTHxwMXe//fjB07drB8+fJrTtJrs9m4/fbbCQwM9CxLSEjghx9+wMvL67qT+7rdbho1akRoaOhNZZKrU+FfREREREREREREbgnDMJgyZQovv/wySUlJdOrUiXHjxlGjRg2zoxV6oaGhtGvXjpiYGOBi+58/tvm5VJj/Y4H+0uNp06bx6aefXvX4hmHg7e3N6tWradKkiWefmJgYunbtisViuW4+wzCYN28e9957700/N7mSWv2IiIiIiIiIiIhInjt16hT/+te/GDBgAOnp6bzxxhssWLBARf9cZrPZ8Pb2xtvbG6s1Z/m3V69ennXt2rWjXLlynnUWiwUfHx/P+kusViu+vr54e3vj5eWFzWa76pfdbsdut3vOefmxHA7HNfe79OVwOP704oDcOI34FxEREREREbnFsrKyWLJkCW3btqVYsWI51v3666+EhYVRvXp1k9LdGitXrqRixYpUrlw5x/KDBw9y8uRJ2rZta1IyEckLq1ev5plnnuH333+natWqjB8/ns6dO5sdq1CqX78+Bw8eBLiibU7Hjh05dOgQhmEQFBSUY11gYCCLFy/G6XTmeG2qWbMme/bsuW6bnkssFgslS5YEYMqUKYwZM+amsqvNT+5R4V9ERERERETkFktISOD5558n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9+706NGDPn360LhxY4oXL56vRnlL3klLS+P48eMsW7aMadOmceDAAby8vHj77bfp16+f2fGuoMK/iIiIiIiIiAmcTudVl2dnZ+NyuXIse/XVV5k/fz47d+7Ex8eHmTNnmj6h7yVlypRhxowZLFq0iL1793LXXXcxatQoSpQocd39nE4nbrf7iuWGYVzx/Dt06ECHDh1yNbdIUbVhwwYiIyP57bffqFChAmPHjuW+++4zO1a+FhERwfz583nllVf49NNPiY6OJjo6mmLFiuHj42P6BVi5NbKzs0lOTiYrKwuAGjVqMGLECHr06GFysqtT4V9ERERERETkFgsKCuKVV16hfPnyV6x7+OGHr1ju7e1Nr169blW8m1a5cmWioqJuap/HH3+c2rVrX7G8Y8eOVKxYMbeiich/GYbBpEmTGDp0KMnJyXTu3Jlx48Z5WojJ9QUFBTFx4kT69OnDV199xcaNGzl69ChJSUlXvYgphY+3tzelSpWiXr16dOjQgccee+xPL3KbyWJcukdOREREREyXmZnJoUOHrloIgYujTFq3bs369etZu3YtzZs3v+p2J0+exGq1Urp06byMKyIiUqDExMRQuXJlKlWqxIEDB9SeQ4qMkydPMmTIEL766iu8vLwYNmwYQ4cOxeFwmB2twMrIyCA1NfWad29J4WO1WvHy8iI4ONjsKDdEI/5FRERE8hGHw8G0adM4ffo0L7zwAk2aNLmp/WNjY/nkk09YunQpc+bMyQlhOY0AACAASURBVKOUIiIiIlJQ/Pzzz0RGRrJr1y6qV6/O+PHj6dSpk9mxCjwfHx98fHzMjiFyTVazA4iIiIjI/1itVp588kmio6Np06YNjz76KJs2bfrT/WJjYxk5ciTNmjXj9ddf5+6779ZofxEREZEiLCsri/fee4+7776bXbt20atXL5YvX66iv0gRocK/iIiISD5Tp04dnnzySTIyMpgxYwZt2rThscceY9OmTdjtdqzWi2/hvL29OXv2LCNHjqRp06a88sorHDt2jIiICPr372/ysxARERERs8TExPDAAw8wdOhQvLy8GDVqFDNnzqRcuXJmRxORW0StfkRERETyoaioKGbMmEFycjIZGRl8+eWXfPPNN/Ts2ZO4uDisVisff/wxq1atIiYmJse+/fv3z9eTTImIiIhI3lm4cCEDBw7k8OHDNGjQgAkTJtCyZUuzY4nILabJfUVERETyqQEDBjB58uSb2iciIoLffvtNhX8REZGr0OS+UpilpaUxcuRIhg8fDkDfvn358MMP9b5QpIhSqx8RERGRfCoqKopixYrd1D5PP/20PtyJiIiIFDG7d++mW7duDB8+nLCwMD755BM+++wzvS8UKcJU+BcRERHJp2rVqkWfPn1uePuIiAieeOKJPEwkIiIiIvnNrFmz6NChAytWrKBZs2b8+OOPek8oIir8i4iIiORnNzPqX6P9RURERIqO+Ph4nnvuOR566CFOnz7Nc889x5IlS2jUqJHZ0UQkH9DkviIiIiL52KVR/3/W61+j/UVERESKjs2bN/PMM8+wYcMGypYty+jRo3nwwQfNjlXkZGZm4na70RSqRYPVasVms+FwOMyOckNU+BcRERHJ56Kiovjqq69ISkq65jb9+/fXaH8RERGRImDq1Km8/PLLxMfH07FjR8aPH0/NmjXNjlVknDt3ju+//56FCxeyZ88eEhMTcblcZseSW8DX15fQ0FDatGlD9+7dadeundmRrsti6JKUiIiISL73zDPPMGnSpKuui4iI4LffflPhX0RE5E/ExMRQuXJlKlWqxIEDB7DZbGZHErlhZ86cYciQIXzxxRfY7XaGDBnCa6+9hre3t9nRigSn08nUqVMZM2YMhw8fBsBiseBwOLBYLCank1vB5XKRnZ0NXPzed+vWjVdffZUmTZqYnOzqNOJfREREpACIjIxkxowZVx31r97+IiIiIoXbL7/8QmRkJNu3b6dKlSqMGzeOrl27mh2ryDh//jzPPvssM2fOBKBly5Y88MADtGnThrCwsALT+kX+npSUFA4ePMjChQuZM2cOCxYsYM2aNYwbN45HH33U7HhX0Ih/ERERkQJiwIABV/T612h/ERGRG6cR/1LQuFwuxo4dy2uvvUZ6ejr33nsvY8eOJSIiwuxoRUZKSgp9+vRhwYIFlChRghEjRvDvf/8bLy8vs6OJiQ4cOMCwYcP45ptvcDgcfPnll/lung2r2QFERERE5MZERUVRrFixHMs02l9ERESkcDp69CgPPfQQgwYNwmKx8N577xEdHa2i/y32zjvvsGDBAsLDw5k/fz79+vVT0V+oVq0as2bNYtCgQTidTs8dOfmJCv8iIiIiBUStWrXo06eP53FERARPPPGEiYlEREREJC/8+OOP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W2cUlytXToZh6Pjx4/r77781cuRIpaen67PPPpOdnZ1cXV119epVXbt2zfrfN94BMmPGDPXv31+SbjmeJI0YMSJHnmvr1q01dOhQxcbGau/evbJYLLKzs9OVK1d08eJF/fbbb1q9erWio6MlXV/OxdbWVhcuXNDJkyfl6uqqtLQ01a9fX/Hx8UpOTlZ4eLhatWqV6TypqakKCwvT+fPnVbduXZUvX17S9U1VW7durbNnz0qSKlWqJFtbWx0/flw7duxQp06ddPbsWb3zzjuSrt8hdPbsWZ0/f14ffPCBoqKi5ODgoCpVqujKlSs6c+aM9u3bZ/0eK1myZI68bsjava45n56erjNnzujy5cv66KOPFB0dLVdXV1WuXFnHjx9XTEyMhg8frrCwMB04cED29vaqWLGiYmJiFBMTowULFsjT01OTJ0+WjY2NkpKSdPToUVksFnXp0kXR0dHy9fVViRIlFBUVpTNnzujHH39UVFSUwsPDrXnPnTunkydPytfX17oPQXJysqKiomRra6uuXbvq8OHDkq4voeXg4KC4uDgdO3ZMtra2unbtmvU5LVmyREFBQUpISJCjo6OqVasmwzB08OBBHTx4UL169VKJEiWsS/UtWLBA3bp1U1pamtzc3FS5cmXZ29vr9OnTOnnypCZPnqz4+HjNmjWLTXwBAACQa/ibJwCYKKsNetPS0nTw4EG9++671iVrGjdufFNdXFyc6tWrpzVr1mjbtm3aunWrhgwZIjs7O8XExGjRokWSpOeff966MfCSJUusGwlnWLlypa5duyZHR0d17NhRkjR16lQlJCSoTp062rhxozZs2KCtW7fqt99+U9WqVZWamqpx48ZZl/fJaGTcuDTI8ePHNXjwYKWmpqpixYpavny5tm/fru3bt2vevHlyc3PT5cuXrUuwrFu3TuvXr5eTk5NCQkK0bds2bdiwQVu2bLFerPjpp5904MCBTPlXr16t5ORkNWzYUMWLF7/pdTpw4IDmzp2r4ODgW/4zb948Xb16VdL15ubRo0clSZUrV75pWaP7YWNjo5YtW8rW1lY7duy46TkcPHhQO3fulCS1a9fuvpYnws0qVKgg6fqFlX///VfS9c/XhAkTZBiGGjZsqE2bNmnjxo3atGmTNm3apOeee06StHDhQl27dk1Vq1bV5s2bNXDgQEnXNxD9/fffFR4eLhcX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IiIiIiIiIiIiInqGsPBPRERERERERERERPQMYeGfiIiIiIiIiIiIiOgZwsI/EREREREREREREdEzhIV/IiIiIiIiIiIiIqJnCAv/RERERERERERERETPEBb+iYiIiIiIiIiIiIieISz8ExERERERERERERE9Q1j4JyIiIiIiIiIiIiJ6hrDwT0RERERERERERET0DGHhn4joIWQyGQBACGHhTIieXDw+6GnXsA83fOabA78/iIiIiIjIUlj4JyJ6CI1GAwAoKyuzcCZEHVNRUQGj0Qi1Wg2lUtnheAqFAo6Ojqirq+PxQU+98vJymEwmqNVqWFlZdTieQqGAg4MDampqeHzQU6+kpAS1tbXQaDRQKBSWToeIiIiI2oCFfyKih3B2dgYA3Lhxw8KZEHXMnTt3UFlZCa1WC2tr6w7HUygU0vFRWFjY4XhElnT79m1UV1dDq9WiS5cuHY6nVCrh7OwMk8nE44OeeoWFhairq4NOpzPLiTEiIiIi6nws/BMRPYS3tzcA4OTJkxbOhKhjMjIyUFVVBb1eDzs7uw7Hk8lk6NOnDwAeH/T0u3jxIurq6uDh4QGVStXheEqlEl5eXhBC4PTp02bIkMhyTp06BaD+byJe8U9ERET0dGDhn4joIcLCwiCTyXDs2DGYTCZLp0P0yI4cOQIACA0NNUurHwAIDw8HACQlJbGPOT3VEhMTAfz/Z35HyWQy6fg4evRoh+MRWVLDPvzCCy9YOBMiIiIiaisW/omIHiIwMBCurq44c+aMVDgletrk5ORg7969kMvlGDVqlNnihoSEwMnJCWlpaTh+/LjZ4hI9TpcuXcI///lPqFQqREREmC1uWFgYbG1tceTIEZw9e9ZscYkep/T0dCQnJ8PBwQEhISGWToeIiIiI2oiFfyKih3B2dsb06dNRV1eHVatW8ap/eiqtX78et2/fxqhRoxAYGGi2uD169MDUqVNhMpkQHR2N+/fvmy020ePy+eefo6ysDC+//DL69u1rtrheXl547bXXUFlZiejoaLPFJXpchBCIjo6G0WjElClT0LNnT0unRERERERtpPj4448/tnQSRERPOj8/P8TFxeH8+fOoq6vDiBEjLJ0SUZvt2rULK1asgFKpxPbt29GjRw+zxvfz88OePXtw7tw5qFQqhIaGmjU+UWfatm0boqKi4ODggB07dkCn05kttkwmg4+PD77++mucO3cOTk5OCAoKMlt8os62evVqxMbGQqfTYfv27XB0dLR0SkRERETURiz8ExG1gb29Pby9vfGPf/wDqampcHR0xNChQy2dFtFDJSQkYPr06aioqMCnn36KSZMmmX0MjUYDvV6PuLg4pKSkwMXFBYMGDTL7OETmtn//frzzzjswGo1Yu3YtxowZY/YxtFotunfvjvj4eCQnJ8PT0xP9+vUz+zhE5vbVV19h4cKFAIA//elPMBgMFs6IiIiIiNqDhX8iojbq3bs3rK2tkZCQgMOHD6O0tBRDhw6FtbW1pVMjaqK2thZffvkl3nrrLZSWluJ3v/sdVq9eDbm8c7r8+fn5oa6uDseOHcO///1vmEwmBAYGQqVSdcp4RB1hNBqxefNmzJkzB1VVVZg5cyY+/vhjs0zq25wBAwagvLwcaWlpOHDgAORyOQICAsw2yTaROTW0pvr973+PmpoaLFu2DPPnz7d0WkRERETUTiz8ExG1Q1BQEOzs7JCSkoLvvvsOhw8fhr29PXQ6Hezt7S2dHhHKy8uRmpqKefPmYePGjTCZTJg2bRpiYmI6/SSVwWCATCZDamoqUlNTkZiYCEdHR+h0Otja2nbq2ERtUVJSgqNHj2L27Nn44osvUFtbizlz5uDzzz9Hly5dOnXs8PBwVFdXIy0tDUlJSUhJSUHXrl3h7OwMGxubTh2bqC3u3LmDb775BjNmzMDOnTshhMDy5cvx4YcfQqFQWDo9IiIiImonmRBCWDoJIqKnzZ49e7B48WL873//AwB4eHggJCQEAQEBcHd3h5OTk4UzpOdJRUUF8vPzcfHiRaSkpCAjIwMA4OjoiMWLF2Px4sWPtWjz1VdfYdmyZbh+/TqA+rtlDAYDBg0aBHd3d2g0mseWC1F5eTny8vJw/vx5pKWl4ccffwRQ34JnxYoVWLBgwWPNZ+vWrfjoo49w69YtAIC3tzcMBgMGDhyIHj16wMHB4bHmQ8+30tJS5OXl4ezZszh+/DiuXLkCAOjevTuioqIwffp0C2dIRERERI+KhX8iokdUUFCAL774Art27ZL+o0z0JPj5z3+O0aNH491330Xfvn0tkkNubi5iY2Oxd+9eZGdnWyQHoub06NED48aNw/z589GnTx+L5JCdnY2YmBjExcVJJ5CJngQeHh6IjIzE7Nmz0bNnT0unQ0REREQdwMI/EVEHFRUV4fjx49iwYQOuXr2KoqIi3Lt3z9Jp0XPEysoK3bp1g4uLC9555x2MHj0a7u7ulk4LAHDr1i0kJydj8+bNyM7ORlFREYxGo6XToudIly5doNVq4ebmhlmzZiEiIgKurq6WTgsAUFhYiCNHjiAmJga5ubkoLi7m8UGPlUqlglarRc+ePTFv3jy88MIL0Ol0lk6LiIiIiMzg/wAq4SfRnuqw2AAAAABJRU5ErkJggg=="
-               id="image40" />
-          </g>
-        </g>
-      </g>
-    </g>
-  </g>
-</svg>
diff --git a/assets/PyBOP-Architecture.drawio b/assets/PyBOP_Architecture.drawio
similarity index 83%
rename from assets/PyBOP-Architecture.drawio
rename to assets/PyBOP_Architecture.drawio
index a376dedbd..9045249c2 100644
--- a/assets/PyBOP-Architecture.drawio
+++ b/assets/PyBOP_Architecture.drawio
@@ -1,9 +1,12 @@
-<mxfile host="app.diagrams.net" modified="2023-07-17T09:39:50.258Z" agent="Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:109.0) Gecko/20100101 Firefox/116.0" etag="R1Rc19VzA4c5cRQsho2y" version="21.6.2" type="device">
+<mxfile host="app.diagrams.net" modified="2023-09-18T10:17:45.280Z" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/117.0" etag="c32hgD70DTLdr2bVtD3K" version="21.7.5" type="device">
   <diagram name="Page-1" id="KMmnkO2Ysz7c5i8QPpm3">
-    <mxGraphModel dx="1363" dy="423" grid="1" gridSize="1" guides="0" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
+    <mxGraphModel dx="1450" dy="166" grid="1" gridSize="1" guides="0" tooltips="1" connect="1" arrows="1" fold="1" page="0" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
       <root>
         <mxCell id="0" />
         <mxCell id="1" parent="0" />
+        <mxCell id="gN4vE8bEkTlw2jWnqAIC-14" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f5f5f5;fontColor=#333333;strokeColor=#666666;" parent="1" vertex="1">
+          <mxGeometry x="-23" y="533" width="821" height="351" as="geometry" />
+        </mxCell>
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-1" target="hdwB_MQwIhiL4xS-3u5l-3" edge="1">
           <mxGeometry relative="1" as="geometry" />
         </mxCell>
@@ -31,14 +34,14 @@
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-6" target="hdwB_MQwIhiL4xS-3u5l-1" edge="1">
           <mxGeometry relative="1" as="geometry" />
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-6" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
-          <mxGeometry x="297" y="606" width="70" height="40" as="geometry" />
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-6" value="Parameter Values" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#f8cecc;strokeColor=#b85450;" parent="1" vertex="1">
+          <mxGeometry x="272" y="589" width="120" height="60" as="geometry" />
         </mxCell>
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-11" target="hdwB_MQwIhiL4xS-3u5l-6" edge="1">
           <mxGeometry relative="1" as="geometry" />
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-11" value="" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
-          <mxGeometry x="193" y="611" width="70" height="30" as="geometry" />
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-11" value="Non-optimised Parameters" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#dae8fc;strokeColor=#6c8ebf;" parent="1" vertex="1">
+          <mxGeometry x="111" y="594" width="100" height="50" as="geometry" />
         </mxCell>
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-91" value="" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-13" target="hdwB_MQwIhiL4xS-3u5l-1" edge="1">
           <mxGeometry relative="1" as="geometry" />
@@ -59,95 +62,97 @@
           <mxGeometry x="462" y="716" width="6.7" height="13" as="geometry" />
         </mxCell>
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-23" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABeBlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFUAAAAJCgAgAEAAAAAQAAACKgAwAEAAAAAQAAAEYAAAAAQVNDSUkAAABBQUFFNDNqYWJWTmJiQnRGRkwyems3Wkoyc1NicEk4MGZXMkpBeW1seFdrRERTNlBPRTNUaGpadTA3VVRKN0ZyCnh1dXh2ZlY2MSt5TzA3cFdwUGxBQlNINDRLdlFEeUNKRUJRaFhpb1ZJQUZDTklBUUN1QkVnSVFBVlh6MEIvR0IKa0JDcWtKaTFyVkpRWjdUYWUrL01uWHZ1bVRPSnZLRTd6T2RiUmhLdVc3RnlWV1BFTzAxdFI3Zk1DUyt4dFl3dQp2SkNYV2ZtSTEwcWNvaHB6V2dHZGV6RXVlNExxRVZxa3lVQnQwemYxRFNIYnNoaEhiOGpiVjYvcHV2Mk83aDEzCjdyeHIxKzY3NzlsL2YvL2d3MGRHVDB4T25TUTBkU3FYWjRXdzF5d1l4bEpUczBmdThJNEgxZDFaV25RbXhiOVcKWk15ckdjUnhMcmEwdHExZHQzNUQrMFl1Y2N6citBcStrcS9pOWJ5Qk4xN2N0SG5MMW0zSzl0czYrV3EraGpkegpEMi9oSFh3VDM4SzNjaVdTSUE0MWRKT0dOY3V3N0ZET1N0SXcwNWxCSTNtYmtsekNvTEVjU1p0NlN0Y0lFKzJHCmtvUlIwVmFDYU5tMGJSWE01QUUzY2RLeENyWkdRL1FNNjRUYVdQTDFlUGJzN1EwSDFST0hCcUpCdGJKUnpST04KRHZrVU1VRkd2S2w4Nzc2Kyt5YXJiWmdrUnlOVmt6cmp0WVM1UG44a3FCNnI5Q3ZYbFQwUFBQalFoQ0RBWWJadQpwcmw4WEJ3UUdLandQRkpnUk9CVkt5dnpnUU51WHRWWk91Z1pPblI0K0lZdndBU1lzQklGUmgzZXlqZnl0cmhjCmppWXRyWkNqSnFzZ21Pcng1Vm1zUkd5bWF3YWRhWXdXSENxd1owbWFUZ25UeGVyRVNoWFdacFF1RVVrcUtjc1cKbjhtVVN2VG1qQkxKT1U0eGx4QTdjNFJsblArdnVjRmJyVTBWV0tvdlZ0TE52RUJxYXRWQ3FZS2hNRXRoeFR4Vgprcm90ZURHS3dpQ2FyUXVzaXBZaE50R1lVR2VqSzV5andlT3pJM3p0N0RHK2pyZVBCZFVoQVhCWkRZVTlZK09SCkNlR3IrbGtxaUVrTkdTVHRDRDhvR3V2czc2NWVvU3p6OVh6RDJJaGxFczBTVEVkanRSUG1vbjdoeGg4UlRBN3EKbWlzTVloZm40bTR3b2NYbDFwc0lUbFk1bjB2NmJ4bnY3QitvMWlxblBSbmQxVGpUQllMQWxZVmZsSUUvUnZsbQpjV1RXRUdVSGhmRG1zbjVYVmViZTNxRWVSVXpnVGU3ZFBucDRtRzl6YnpFYXpSQldpcklNWldSR0pFNmZqc3R0Ck41VHhMOUw1NmJnZjZxRUZPc0FMTzJBUDdJTmhPQXFqb01KcG1JSEg0Q2s0RDgvREsvQXF2QWF2dzV2d05seUMKeS9BdXZBOVg0RlA0SEw2QUwyRVJ2b1l5TE1PMzhEMWNoV3Z3Sy93TzExRURha1lLMm9sNjBYNFVRRUVVUnVObwpBcDFFT3JMUldUU0R6cUVuME5Qb1BIb09YVUF2b0xmUU8raER0SUFXMFEvb1IvUXp1aXBkbGo2UVBwSStsajZSCkZxVFBwRVhwTytrbjZacjBtL1NuOUpkMFhmb2IxK0VHTE9NMjNJNjdjRGZlaFFmd1FUeUpOWnpCZVZ6RUpjengKNC9oSi9BeCtGbC9BczNnZXY0UmZ4cGZ3ZS9pcktzc1NxcjNPTS9DZmdaZitBWHNVbFRRPcxmgcUAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAjfaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+QUFBRTQzamFiVk5iYkJ0RkZMMnprN1pKMnNTYnBJODBmVzJKQXltbHhXa0REUzZQT0UzVGhqWnUwN1VUSjdGciYjeEE7eHV1eHZmVjYxK3lPMDdwV3BQbEFCU0g0NEt2UUR5Q0pFQlFoWGlvVklBRkNOSUFRQ3VCRWdJUUFWWHowQi9HQiYjeEE7a0JDcWtKaTFyVkpRWjdUYWUrL01uWHZ1bVRPSnZLRTd6T2RiUmhLdVc3RnlWV1BFTzAxdFI3Zk1DUyt4dFl3dSYjeEE7dkpDWFdmbUkxMHFjb2hweldnR2RlekV1ZTRMcUVWcWt5VUJ0MHpmMURTSGJzaGhIYjhqYlY2L3B1djJPN2gxMyYjeEE7N3J4cjErNjc3OWwvZi8vZ3cwZEdUMHhPblNRMGRTcVhaNFd3MXl3WXhsSlRzMGZ1OEk0SDFkMVpXblFteGI5VyYjeEE7Wk15ckdjUnhMcmEwdHExZHQzNUQrMFl1Y2N6citBcStrcS9pOWJ5Qk4xN2N0SG5MMW0zSzl0czYrV3EraGpkeiYjeEE7RDIvaEhYd1QzOEszY2lXU0lBNDFkSk9HTmN1dzdGRE9TdEl3MDVsQkkzbWJrbHpDb0xFY1NadDZTdGNJRSsyRyYjeEE7a29SUjBWYUNhTm0wYlJYTTVBRTNjZEt4Q3JaR1EvUU02NFRhV1BMMWVQYnM3UTBIMVJPSEJxSkJ0YkpSelJPTiYjeEE7RHZrVU1VRkd2S2w4Nzc2Kyt5YXJiWmdrUnlOVmt6cmp0WVM1UG44a3FCNnI5Q3ZYbFQwUFBQalFoQ0RBWWJadSYjeEE7cHJsOFhCd1FHS2p3UEZKZ1JPQlZLeXZ6Z1FOdVh0VlpPdWdaT25SNCtJWXZ3QVNZc0JJRlJoM2V5amZ5dHJoYyYjeEE7amlZdHJaQ2pKcXNnbU9yeDVWbXNSR3ltYXdhZGFZd1dIQ3F3WjBtYVRnblR4ZXJFU2hYV1pwUXVFVWtxS2NzVyYjeEE7bjhtVVN2VG1qQkxKT1U0eGx4QTdjNFJsblArdnVjRmJyVTBWV0tvdlZ0TE52RUJxYXRWQ3FZS2hNRXRoeFR4ViYjeEE7a3JvdGVER0t3aUNhclF1c2lwWWhOdEdZVUdlaks1eWp3ZU96STN6dDdERytqcmVQQmRVaEFYQlpEWVU5WStPUiYjeEE7Q2VHcitsa3FpRWtOR1NUdENEOG9HdXZzNzY1ZW9Teno5WHpEMklobEVzMFNURWRqdFJQbW9uN2h4aDhSVEE3cSYjeEE7bWlzTVloZm40bTR3b2NYbDFwc0lUbFk1bjB2NmJ4bnY3QitvMWlxblBSbmQxVGpUQllMQWxZVmZsSUUvUnZsbSYjeEE7Y1dUV0VHVUhoZkRtc241WFZlYmUzcUVlUlV6Z1RlN2RQbnA0bUc5emJ6RWF6UkJXaXJJTVpXUkdKRTZmanN0dCYjeEE7TjVUeEw5TDU2YmdmNnFFRk9zQUxPMkFQN0lOaE9BcWpvTUpwbUlISDRDazREOC9ESy9BcXZBYXZ3NXZ3Tmx5QyYjeEE7eS9BdXZBOVg0RlA0SEw2QUwyRVJ2b1l5TE1PMzhEMWNoV3Z3Sy93TzExRURha1lLMm9sNjBYNFVRRUVVUnVObyYjeEE7QXAxRU9yTFJXVFNEenFFbjBOUG9QSG9PWFVBdm9M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;" parent="1" vertex="1">
-          <mxGeometry x="462" y="546" width="7" height="14.42" as="geometry" />
+          <mxGeometry x="315" y="658" width="7" height="14.42" as="geometry" />
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-30" value="Physics/ECM" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-30" value="Physics-based" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
           <mxGeometry x="185" y="829" width="90" height="40" as="geometry" />
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-31" value="Empirical" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-31" value="Empirical" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
           <mxGeometry x="385" y="829" width="90" height="40" as="geometry" />
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-32" value="Data-Driven" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-32" value="Data-driven" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
           <mxGeometry x="285" y="829" width="90" height="40" as="geometry" />
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-34" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-30" edge="1">
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-34" value="" style="endArrow=none;html=1;rounded=0;exitX=0;exitY=0;exitDx=0;exitDy=0;strokeColor=#585858;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-30" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
             <mxPoint x="212" y="801" as="sourcePoint" />
             <mxPoint x="271" y="738" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-35" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-31" edge="1">
+        <mxCell id="hdwB_MQwIhiL4xS-3u5l-35" value="" style="endArrow=none;html=1;rounded=0;exitX=1;exitY=0;exitDx=0;exitDy=0;strokeColor=#585858;" parent="1" source="hdwB_MQwIhiL4xS-3u5l-31" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
             <mxPoint x="482" y="849.62" as="sourcePoint" />
             <mxPoint x="393" y="736" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-40" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="47" y="699" as="sourcePoint" />
-            <mxPoint x="110" y="699" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-41" value="Excitation" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;flipH=1;" parent="1" vertex="1">
-          <mxGeometry x="39" y="674" width="60" height="30" as="geometry" />
-        </mxCell>
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-43" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABdRlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFRAAAAJCgAgAEAAAAAQAAACagAwAEAAAAAQAAACIAAAAAQVNDSUkAAABBQUFFMkhqYWJWTmRiQlJWRkQ1MzdnSnRvZDFweTA4cGY0UGRhaEhCTFZTcGl6L2RVZ29WdWxCbXQ5MytMT3ZkCjJidmJvYk16Njh5ZHdySnBjaDhNR0tNUFBxRThxRzFqdE1iVW55Z3hKbXFNQlluUlJ0dEdUWXdhbm5neFB2aGkKRERIeHp1NEcwVEEza3pubjNIUHUrYzUzdjBubERkMWh3ZUFLa3JCdjFlbzFOZkhBSkxVZDNUS0hBOFRXeG5YaApSUVBNeXNjRFZ1b00xWmpUQU9qQ2EwblpIMUdQMFFKTmh5dEozMVZWUjIzTFloeTlJKzljdTY3MTN2dmFkdDIvCis0RTlleDk4Nk9DalhUMVBIaHM0TlRKNm10RE1tVnlldWJHQTZSckdjbTJkWDI0T0RFWFV2Uk8wNEl5SWI2WEoKWUVBemlPUE0xVGMwcnQrd2NWUFRaaTV4ekgxOEZWL04xL0FxWHMxcjVyWnMzYlo5aDdMem5oYStscS9qZGR6UAo2M2t6MzhLMzhlMWNpYWVJUXczZHBESE5NaXc3bXJQU05NWjBadEI0M3FZa2x6Sm9Ja2V5cHA3Uk5jTEV1TkUwCllWU01sU0xhUk5hMlhETjl5Q3NjY1N6WDFtaVVubU10VUhtV2crMytmZnM3WWhIMTFKSHVzWWhhU2xUelJLTzkKUVVVc2tCR3ZYWHI0UU9jakkrVXhUSktqOGJKSm5hRkt3VXhuS0I1UlQ1VG1sWDFML3NjZWYySllFT0F3V3plegpYRDRwRGdoM2wzanVkeGtSZU5YU3ptejRrRmRYZHBZUCszdVBITzI3N1Fzd1lTYXNsTXVvd3h2NFp0NllsSmZHCjBwYm01cWpKU2doRzI0TjVsaWdTbSttYVFhZHF4bHlIQ3V3VEpFdEhoZWxoZFJMRkVtdFRTcXVJcEpXTVpZdlgKWkVvcGVtZEZrZVFjcDVCTGljd2NZZVBPLy9lODROMzJSbDJXNlV3VWRUTXZrSnBhdVZIR05SUm1LYXlRcDBwYQp0d1V2UmtFWVJMTjFnVlhSeG9sTk5DYlVXZU1KNTNqazVIUS9Yejk5Z20vZ1RZTVJ0VmNBWEZHak1mL2dVSHhZCitLcCtuZ3BpTXIwR3lUckNqNGpCV3JyYXlsY295M3dqM3pUWWI1bEVzd1RUWTRuS0NUTmpJZUVtbnhKTTl1aWEKSnd4aUYyYVNYakNsSmVXR093aE9sem1mU1lmdUdtL3A2aTczV3NyNngzVlA0MHdYQ01JTDEzekJiK1puK1ZaeAo1SVFoMnZZSTRjMU1oRHhWbWZzN2V0c1ZzWURYZW5mNzlORSt2c083eFFGWFpFK2VUY3FOdCtYd0w3elp5V1FJCnFxQWVtaUVBdTJBZkhJQStPQTREb01KWm1JSm40SG00QksvQW0vQVd2QTN6OEM2OER4L0FGZmdJUG9ZRnVBYlgKNFN2NEdoYmhXMWlDRmZnZWZvUWJjQk4rZ3ovZ0ZxcEdkVWhCdTFFSE9vakNLSUppYUFnTm85TklSelk2ajZiUQpCZlFzZWdGZFFpK2p5K2hWOUI3NkVIMktycUpGOUJQNkdmMktia2hYcEUra3o2VFBwUytrcTlLWDBxTDBnL1NMCmRGUDZYZnBUK2t1NkpmMk5mYmdheTdnUk4rRlczSWIzNEc1OEdJOWdEWS9qUEM3Z0l1YjRJbjRPdjRoZndwZngKTko3RnIrTTM4QnlleHd0bGFpVlUrU1hQd1g4ZWZQMGYzWnVRT0E9PRrZ8zAAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAjTaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM4PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+QUFBRTJIamFiVk5kYkJSVkZENTM3Z0p0b2QxcHkwOHBmNFBkYWhIQkxWU3Bpei9kVWdvVnVsQm10OTMrTE92ZCYjeEE7MmJ2Ym9iTXo2OHlkd3JKcGNoOE1HS01QUHFFOHFHMWp0TWJVbnlneEptcU1CWW5SUnR0R1RZd2Fubmd4UHZoaSYjeEE7RERIeHp1NEcwVEEza3pubjNIUHUrYzUzdjBubERkMWh3ZUFLa3JCdjFlbzFOZkhBSkxVZDNUS0hBOFRXeG5YaCYjeEE7UlFQTXlzY0RWdW9NMVpqVEFPakNhMG5aSDFHUDBRSk5oeXRKMzFWVlIyM0xZaHk5SSs5Y3U2NzEzdnZhZHQyLyYjeEE7KzRFOWV4OTg2T0NqWFQxUEhoczROVEo2bXRETW1WeWV1YkdBNlJyR2NtMmRYMjRPREVYVXZSTzA0SXlJYjZYSiYjeEE7WUVBemlPUE0xVGMwcnQrd2NWUFRaaTV4ekgxOEZWL04xL0FxWHMxcjVyWnMzYlo5aDdMem5oYStscS9qZGR6UCYjeEE7NjNrejM4SzM4ZTFjaWFlSVF3M2RwREhOTWl3N21yUFNOTVowWnRCNDNxWWtsekpvSWtleXBwN1JOY0xFdU5FMCYjeEE7WVZTTWxTTGFSTmEyWEROOXlDc2NjU3pYMW1pVW5tTXRVSG1XZyszK2ZmczdZaEgxMUpIdXNZaGFTbFR6UktPOSYjeEE7UVVVc2tCR3ZYWHI0UU9jakkrVXhUSktqOGJKSm5hRkt3VXhuS0I1UlQ1VG1sWDFML3NjZWYySllFT0F3V3pleiYjeEE7WEQ0cERnaDNsM2p1ZHhrUmVOWFN6bXo0a0ZkWGRwWVArM3VQSE8yNzdRc3dZU2FzbE11b3d4djRadDZZbEpmRyYjeEE7MHBibTVxakpTZ2hHMjRONWxpZ1NtK21hUWFkcXhseUhDdXdUSkV0SGhlbGhkUkxGRW10VFNxdUlwSldNWll2WCYjeEE7WkVvcGVtZEZrZVFjcDVCTGljd2NZZVBPLy9lODROMzJSbDJXNlV3VWRUTXZrSnBhdVZIR05SUm1LYXlRcDBwYSYjeEE7dHdVdlJrRVlSTE4xZ1ZYUnhvbE5OQ2JVV2VNSjUzams1SFEvWHo5OWdtL2dUWU1SdFZjQVhGR2pNZi9nVUh4WSYjeEE7K0twK25ncGlNcjBHeVRyQ2o0akJXcnJheWxjb3kzd2ozelRZYjVsRXN3VFRZNG5LQ1ROakllRW1ueEpNOXVpYSYjeEE7Snd4aUYyYVNYakNsSmVXR093aE9sem1mU1lmdUdtL3A2aTczV3NyNngzVlA0MHdYQ01JTDEzekJiK1puK1ZaeCYjeEE7NUlRaDJ2WUk0YzFNaER4Vm1mczdldHNWc1lEWGVuZjc5TkUrdnNPN3hRRlhaRStlVGNxTnQrWHdMN3paeVdRSSYjeEE7cXFBZW1pRUF1MkFmSElBK09BNERvTUpabUlKbjRIbTRCSy9BbS9BV3ZBM3o4QzY4RHgvQUZmZ0lQb1lGdUFiWCYjeEE7NFN2NEdoYmhXMWlDRmZnZWZvUWJjQk4rZ3ovZ0ZxcEdkVWhCdTFFSE9vakNLSUppYUFnTm85TklSelk2ajZiUSYjeEE7QmZRc2VnRmRRaStqeStoVjlCNzZFSDJLcnFKRjlCUDZHZjJLYmtoWHBF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;" parent="1" vertex="1">
           <mxGeometry x="234" y="696" width="7.85" height="7.02" as="geometry" />
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-78" value="" style="endArrow=classic;html=1;rounded=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;" parent="1" edge="1">
-          <mxGeometry width="50" height="50" relative="1" as="geometry">
-            <mxPoint x="47" y="725" as="sourcePoint" />
-            <mxPoint x="110" y="725" as="targetPoint" />
-          </mxGeometry>
-        </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-79" value="Design Space" style="text;html=1;strokeColor=none;fillColor=none;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=0;" parent="1" vertex="1">
-          <mxGeometry x="20" y="700" width="86" height="30" as="geometry" />
-        </mxCell>
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-81" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAAQYAAABKEAYAAAAJSCbcAAAKqGlDQ1BJQ0MgUHJvZmlsZQAASImVlwdQU+kWgP9700NCS4h0Qm/SWwApIbTQpYOohCRAKCEGgogdWVyBtSAighVdEFFwVYosNkSxLQKKXRdkEVHWxYINlXeBIbj75r0378ycOd899/znP+ef+8+cCwBZniMSpcHyAKQLs8ShPh706JhYOm4YQEANEAAJQBxupogZEhIAEJm1f5f3d5BoRG6ZTeX69/f/VRR4/EwuAFAIwgm8TG46wqcQfcEVibMAQO1H/LrLs0RT3IEwVYwUiPC9KU6a4dEpTphmNJiOCQ9lIUwFAE/icMRJAJDoiJ+ezU1C8pDcEbYU8gRChEUIu6anZ/AQPo6wERKD+EhT+RkJ3+VJ+lvOBGlODidJyjO9TAveU5ApSuOs+D+P439Leppkdg8DREnJYt9QxCoiZ3YvNcNfysKEoOBZFvCm46c5WeIbMcvcTFbsLPM4nv7StWlBAbOcKPBmS/NkscNnmZ/pFTbL4oxQ6V6JYhZzljniuX0lqRFSfzKfLc2fmxweNcvZgsigWc5MDfOfi2FJ/WJJqLR+vtDHY25fb2nv6Znf9StgS9dmJYf7SnvnzNXPFzLncmZGS2vj8T295mIipPGiLA/pXqK0EGk8P81H6s/MDpOuzUI+yLm1IdIzTOH4hcwyYIEMkIaoGNBBAPLkCUAWPydrqhFWhmiFWJCUnEVnIjeMT2cLuebz6daW1jYATN3Xmc/hLW36HkK0a3O+vIMAuLhOTk62zfn8hwA4OQYA8fGczwg5I9leAK6UciXi7Bnf9F3CACKQA1SgAjSBLjACZsAa2ANn4A68gB8IBuEgBiwBXJAM0pHKl4NVYD0oAEVgK9gBKsA+cBAcBsfACdAM2sAFcBlcB92gDzwE/WAIvARj4D2YgCAIB5EhCqQCaUH6kClkDTEgV8gLCoBCoRgoHkqChJAEWgVtgIqgEqgCOgDVQr9Ap6EL0FWoB7oPDUAj0BvoM4yCSTAV1oANYAuYATNhfzgcXgwnwcvgXDgf3gyXw1XwUbgJvgBfh/vgfvglPI4CKBkUDaWNMkMxUCxUMCoWlYgSo9agClFlqCpUPaoV1Ym6hepHjaI+obFoCpqONkM7o33REWguehl6DboYXYE+jG5Cd6BvoQfQY+hvGDJGHWOKccKwMdGYJMxyTAGmDFONacRcwvRhhjDvsVgsDWuIdcD6YmOwKdiV2GLsHmwD9jy2BzuIHcfhcCo4U5wLLhjHwWXhCnC7cEdx53C9uCHcR7wMXgtvjffGx+KF+Dx8Gf4I/iy+Fz+MnyDIE/QJToRgAo+wgrCFcIjQSrhJGCJMEBWIhkQXYjgxhbieWE6sJ14iPiK+lZGR0ZFxlFkoI5BZJ1Muc1zmisyAzCeSIsmExCLFkSSkzaQa0nnSfdJbMplsQHYnx5KzyJvJteSL5Cfkj7IUWXNZtixPdq1spWyTbK/sKzmCnL4cU26JXK5cmdxJuZtyo/IEeQN5ljxHfo18pfxp+bvy4woUBSuFYIV0hWKFIwpXFZ4r4hQNFL0UeYr5igcVLyoOUlAUXQqLwqVsoByiXKIMUbFUQyqbmkItoh6jdlHHlBSVbJUilXKUKpXOKPXTUDQDGpuWRttCO0G7Q/s8T2Mecx5/3qZ59fN6531QVlN2V+YrFyo3KPcpf1ahq3ippKpsU2lWeayKVjVRXai6XHWv6iXVUTWqmrMaV61Q7YTaA3VY3UQ9VH2l+kH1G+rjGpoaPhoijV0aFzVGNWma7popmqWaZzVHtCharloCrVKtc1ov6Ep0Jj2NXk7voI9pq2v7aku0D2h3aU/oGOpE6OTpNOg81iXqMnQTdUt123XH9LT0AvVW6dXpPdAn6DP0k/V36nfqfzAwNIgy2GjQbPDcUNmQbZhrWGf4yIhs5Ga0zKjK6LYx1phhnGq8x7jbBDaxM0k2qTS5aQqb2psKTPeY9szHzHecL5xfNf+uGcmMaZZtVmc2YE4zDzDPM282f2WhZxFrsc2i0+KbpZ1lmuUhy4dWilZ+VnlWrVZvrE2sudaV1rdtyDbeNmttWmxe25ra8m332t6zo9gF2m20a7f7au9gL7avtx9x0HOId9jtcJdBZYQwihlXHDGOHo5rHdscPznZO2U5nXD6y9nMOdX5iPPzBYYL+AsOLRh00XHhuBxw6Xelu8a77nftd9N247hVuT1113XnuVe7DzONmSnMo8xXHpYeYo9Gjw8sJ9Zq1nlPlKePZ6Fnl5eiV4RXhdcTbx3vJO867zEfO5+VPud9Mb7+vtt877I12Fx2LXvMz8FvtV+HP8k/zL/C/2mASYA4oDUQDvQL3B74KEg/SBjUHAyC2cHbgx+HGIYsC/l1IXZhyMLKhc9CrUJXhXaGUcKWhh0Jex/uEb4l/GGEUYQkoj1SLjIusjbyQ5RnVElUf7RF9Oro6zGqMYKYllhcbGRsdez4Iq9FOxYNxdnFFcTdWWy4OGfx1SWqS9KWnFkqt5Sz9GQ8Jj4q/kj8F04wp4oznsBO2J0wxmVxd3Jf8tx5pbwRvgu/hD+c6JJYkvg8ySVpe9JIsltyWfKogCWoELxO8U3Zl/IhNTi1JnUyLSqtIR2fHp9+WqgoTBV2ZGhm5GT0iExFBaL+ZU7LdiwbE/uLqzOhzMWZLVlUZDC6ITGS/CAZyHbNrsz+uDxy+ckchRxhzo0VJis2rRjO9c79eSV6JXdl+yrtVetXDaxmrj6wBlqTsKZ9re7a/LVD63zWHV5PXJ+6/rc8y7ySvHcboja05mvkr8sf/MHnh7oC2QJxwd2Nzhv3/Yj+UfBj1yabTbs2fSvkFV4rsiwqK/pSzC2+9pPVT+U/TW5O3Ny1xX7L3q3YrcKtd7a5bTtcolCSWzK4PXB7Uym9tLD03Y6lO66W2Zbt20ncKdnZXx5Q3rJLb9fWXV8qkiv6Kj0qG3ar7960+8Me3p7eve576/dp7Cva93m/YP+9Az4HmqoMqsoOYg9mH3x2KPJQ58+Mn2urVauLqr/WCGv6D4ce7qh1qK09on5kSx1cJ6kbORp3tPuY57GWerP6Aw20hqLj4Ljk+Itf4n+5c8L/RPtJxsn6U/qndjdSGguboKYVTWPNyc39LTEtPaf9Tre3Orc2/mr+a02bdlvlGaUzW84Sz+afnTyXe278vOj86IWkC4PtS9sfXoy+eLtjYUfXJf9LVy57X77Yyew8d8XlSttVp6unrzGuNV+3v950w+5G4292vzV22Xc13XS42dLt2N3as6DnbK9b74Vbnrcu32bfvt4X1NdzJ+LOvbtxd/vv8e49v592//WD7AcTD9c9wjwqfCz/uOyJ+pOq341/b+i37z8z4Dlw42nY04eD3MGXf2T+8WUo/xn5Wdmw1nDtc+vnbSPeI90vFr0Yeil6OTFa8KfCn7tfGb069Zf7XzfGoseGXotfT74pfqvytuad7bv28ZDxJ+/T3098KPyo8vHwJ8anzs9Rn4cnln/BfSn/avy19Zv/t0eT6ZOTIo6YMz0KoBCFExMBeFMDADkGAEo3Mj8smpmnpwWa+QeYJvCfeGbmnhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABehlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFWAAAAJCgAgAEAAAAAQAAAQagAwAEAAAAAQAAAEoAAAAAQVNDSUkAAABBQUFFNjNqYWJWTmRiQlJWRkQ1M2JpbHRvZDFweTA4cGY0UGRhaXNXMjFLbEZuKzZwUlFxZFBtWjNYYmI3ckxlCm5iMjdPK3pzekRwenQ3QnNtOXdIZzhiSUEwOG9EMnJiR01VWS82TEVHSDlDQkRScUdtMGJJU0ZxZU9MRitPQ0wKTWNURU83c2JSTVBjVE9hY2MrODU1enZmL1NhV05YU0hkWFl1SXdsWHJLaGNXUlB5VGxIYjBTMXozRXRzTGFVTApMK0JsVmpia3RXTEhxY2FjQmtDblg0L0tIcjk2Z09acDNGYys5R05WZGNDMkxNYlJlL0syVmF0YjczK2dyZjNCCjdROTE3SGo0a2QyUDl3OCtmZURJMFluSlk0UW1qbWV5TEJmMG1qbkRXS3F0ODhqTjNqRy91aU5OODg2RStKYWIKakhvMWd6ak9oZnFHeGpWcjE2MXYyc0Fsam5rRlg4RXIrVXBleGF0NXpZV05telp2MmFwc3U2K0ZyK0tyZVIzMwo4SHJlekRmeXpYd0xWMEl4NGxCRE4ybFFzd3pMRG1Tc09BMHluUmswbExVcHljUU1Hc21RcEtrbmRJMHdNVzRnClRoZ1ZZOFdJbGs3YVZzNk03M0VUSnh3cloyczBRRSt5RmlnL1M1MWRudTZkUFVHL2VuVGZRTml2RmcrcVdhTFIKb1U1RkxKQVJyMTE4ZEZmdll4T2xNVXlTb2FHU1NaMnhjc0pjYjEvSXJ4NHF6aXRYTEhxZWVQS3BjVUdBdzJ6ZApUSEw1c0NqZ0d5anlQSkpqUk9CVml6dnp2ajF1WHNsWjJ1c1oycmQvK0k0dndQaVlzR0k1UmgzZXdEZnd4cWk4CkdJNWJXaTVEVFZaRU1OblZtV1dSQXJHWnJobDBwaWFjYzZqQW5pWkpPaWxNRjZzVEtSUlptMUZhUlNTdUpDeGIKdkNaVGl0RzdNd29rNHpqNVRFeWN6QkNXY3Y2LzV3YnZ0VGVaWTRuZVNFRTNzd0twcVpVYUpYS0d3aXlGNWJOVQppZXUyNE1YSUM0Tm90aTZ3S2xxSzJFUmpRcDAxcm5BTytnL1BqdkExczRmNFd0NDA2bGVIQk1CbE5SRDBqSTZGCnhvV3Y2cWVvSUNZeFpKQ2tJM3kvR0t5bHY2MTBoYkxNMS9IMW95T1dTVFJMTUIyT2xDdk1oZnVFRzMxR01EbW8KYTY0d2lKMmZpN3JCbUJhVkcrNGlPRjdpZkM3ZWQ4OTRTLzlBcWRkaTBwUFNYWTB6WFNEd1hiNWEyUjYvL2gzZgpKRXFtRGRGMlVBaHZMdDNucXNyYzJUUFVwWWdGdk5hOTIyZjNEL090cFZ0c21KNVd3aW5DQ3ZrWnBVUEpUMDlICnUwV0JxUk5SdWZHT1F2NUZQRDhWN1lNcXFJZG04RUk3ZE1NdUdJYURjQVJVT0FFejhCeThCT2ZnVlhnTDNvWjMKNEYxNEh6NkVqK0FpZkFLZndtVzRDdC9BdC9BOUxNQVBzQWpMOEJOY2g1dHdDMzZEUCtBMnFrWjFTRUhiVVEvYQpqWHpJajRKb0RJMmpZMGhITmpxRlp0QnA5QUk2Zzg2aFY5QjU5QnI2QUgyTXZrQlgwQUs2Z1g1R3Y2S2Iwa1hwCmMrbEw2WkwwbFhSRitscGFrSzVKdjBpM3BOK2xQNlcvcE52UzM3Z0NWMk1aTitJbTNJcmJjQWNld0h2eEJOWncKQ21keEhoY3d4OC9qRi9GWi9ESStqMmZ4UEg0RHY0ay93NWZ3dFJMYkVpci9wU2ZoUHcrKzhROGt4WmEwZJJWPgAAAAlwSFlzAAAWJQAAFiUBSVIk8AAACOhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+MTwvdGlmZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0PC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xNDQ8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+MjYyPC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+QUFBRTYzamFiVk5kYkJSVkZENTNiaWx0b2QxcHkwOHBmNFBkYWlzVzIxS2xGbis2cFJRcWRQbVozWGJiN3JMZSYjeEE7bmIyN08renN6RHB6dDdCc205d0hnOGJJQTA4b0QycmJHTVVZLzZMRUdIOUNCRFJxR20wYklTRnFlT0xGK09DTCYjeEE7TWNURU83c2JSTVBjVE9hY2MrODU1enZmL1NhV05YU0hkWFl1SXdsWHJLaGNXUlB5VGxIYjBTMXozRXRzTGFVTCYjeEE7TCtCbFZqYmt0V0xIcWNhY0JrQ25YNC9LSHI5NmdPWnAzRmMrOUdOVmRjQzJMTWJSZS9LMlZhdGI3MytncmYzQiYjeEE7N1E5MTdIajRrZDJQOXc4K2ZlREkwWW5KWTRRbWptZXlMQmYwbWpuRFdLcXQ4OGpOM2pHL3VpTk44ODZFK0phYiYjeEE7akhvMWd6ak9oZnFHeGpWcjE2MXYyc0Fsam5rRlg4RXIrVXBleGF0NXpZV05telp2MmFwc3U2K0ZyK0tyZVIzMyYjeEE7OEhyZXpEZnl6WHdMVjBJeDRsQkROMmxRc3d6TERtU3NPQTB5blJrMGxMVXB5Y1FNR3NtUXBLa25kSTB3TVc0ZyYjeEE7VGhnVlk4V0lsazdhVnM2TTczRVRKeHdyWjJzMFFFK3lGaWcvUzUxZG51NmRQVUcvZW5UZlFOaXZGZytxV2FMUiYjeEE7b1U1RkxKQVJyMTE4ZEZmdll4T2xNVXlTb2FHU1NaMnhjc0pjYjEvSXJ4NHF6aXRYTEhxZWVQS3BjVUdBdzJ6ZCYjeEE7VEhMNXNDamdHeWp5UEpKalJPQlZpenZ6dmoxdVhzbFoydXNaMnJkLytJNHZ3UGlZc0dJNVJoM2V3RGZ3eHFpOCYjeEE7R0k1YldpNURUVlpFTU5uVm1XV1JBckdacmhsMHBpYWNjNmpBbmlaSk9pbE1GNnNUS1JSWm0xRmFSU1N1SkN4YiYjeEE7dkNaVGl0RzdNd29rNHpqNVRFeWN6QkNXY3Y2LzV3YnZ0VGVaWTRuZVNFRTNzd0twcVpVYUpYS0d3aXlGNWJOVSYjeEE7aWV1MjRNWElDNE5vdGk2d0tscUsyRVJqUXAwMXJuQU8rZy9QanZBMXM0ZjRXdDQwNmxlSEJNQmxOUkQwakk2RiYjeEE7eG9XdjZxZW9JQ1l4WkpDa0kzeS9HS3lsdjYxMGhiTE0xL0gxb3lPV1NUUkxNQjJPbEN2TWhmdUVHMzFHTURtbyYjeEE7YTY0d2lKMmZpN3JCbUJhVkcrNGlPRjdpZkM3ZWQ4OTRTLzlBcWRkaTBwUFNYWTB6WFNEd1hiNWEyUjYvL2gzZiYjeEE7SkVxbURkRjJVQWh2THQzbnFzcmMyVFBVcFlnRnZOYTkyMmYzRC9PdHBWdHNtSjVXd2luQ0N2a1pwVVBKVDA5SCYjeEE7dTBXQnFSTlJ1ZkdPUXY1RlBEOFY3WU1xcUlkbThFSTdkTU11R0lhRGNBUlVPQUV6OEJ5OEJPZmdWWGdMM29aMyYjeEE7NEYxNEh6NkVqK0FpZkFLZndtVzRDdC9BdC9BOUxNQVBzQWpMOEJOY2g1dHdDMzZEUCtBMnFrWjFTRUhiVVEvYSYjeEE7alh6SWo0Sm9ESTJqWTBoSE5qcUZa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;" parent="1" vertex="1">
           <mxGeometry x="518" y="660" width="41.49" height="11.72" as="geometry" />
         </mxCell>
-        <mxCell id="hdwB_MQwIhiL4xS-3u5l-82" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABdxlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFTAAAAJCgAgAEAAAAAQAAADygAwAEAAAAAQAAADgAAAAAQVNDSUkAAABBQUFFMzNqYWJWTk5iQnRGRkg2ems2Wkoyc1NicEQ5cCtyY2xEcVF0TFVrYmFIRDVpZE0wYldqai9xeWRPSWtUCk0xNlA3YTNYdTJaM25OYTFJczBCdFFqQkFYRW85QURFRVlJaUJBWFJDaUVCUXJRRkZSVEFpUUFKQWVxcEY4U0IKQzBJVkVyTzJWUXJxakZiNzNwdDU4NzczelRleHJLRTdyTHQ3Q1VtNFpsbnQ4b2F3ZDRiYWptNlo0MTVpYXlsZAplRUV2czdKaHJ4VTdRVFhtdEFBNjgxcFU5Z1RVUXpSUDQvN3FwdS9xNm9PMlpUR08zcFczckZqWmVlOTlYVnUzCmJiOS94ODRISHR6N1NQL2dFNGVPSForWW5DWTBjU0tUWmJtUTE4d1p4bUpqazBkdTk0NEYxSjFwbW5jbXhMOWEKWk5TckdjUnhMalMzdEs1YXZXWnQyem91Y2N4citESmV5NWZ6T2w3UEd5NnMzN0J4MDJabHl6MGRmQVZmeVp1NApoemZ6ZHI2ZWIrU2J1QktPRVljYXVrbERtbVZZZGpCanhXbUk2Y3lnNGF4TlNTWm0wS2tNU1pwNlF0Y0lFKzBHCjQ0UlIwVmFNYU9ta2JlWE0rRDQzY2NLeGNyWkdnL1FVNjREcVdPenU4ZXphM1JzS3FNY1BERVFDYW5tam1pVWEKSGVwV3hBUVo4Y2JTUTN2NkhwNm90R0dTREExWFRPcU1WUk9LZmI1d1FEMVM3bGV1S1hrZWZlenhjVUdBdzJ6ZApUSEw1cURqQVAxRG1lU1RIaU1DcmxsZm0vZnZjdklxenVOOHpkT0RnOEcxZmdQRXpZY1Z5akRxOGhhL2pyVkc1CkZJbGJXaTVEVFZaR01OblRuV1ZUQldJelhUUG9iRU1rNTFDQlBVMlNkRktZTGxabnFsQm1iVmJwRkpHNGtyQnMKOFpsTUtVZnZ6Q2lRak9Qa016R3hNME5ZeXZuL21odTgyOXBramlYNnBncTZtUlZJVGExU0tKRXpGR1lwTEorbApTbHkzQlM5R1hoaEVzM1dCVmRGU3hDWWFFK3BzY0lWek9IQjBib1N2bWp2Q1YvTzIwWUE2SkFBdXFjR1FaM1FzClBDNThWVDlOQlRHSklZTWtIZUVIUkdNZC9WMlZLNVJsdm9hdkhSMnhUS0paZ3VuSVZQV0VZc1FuM09pVGdzbEIKWFhPRlFleDhNZW9HWTFwVWJybUQ0SGlGODJMY2Q5ZDRSLzlBcFZZcDZVbnByc2FaTGhENHIxeXJUYjU0UGM0MwppQ1BUaGlnN0tJUlhUUHRjVlptN2U0ZDZGREdCTjdwMys5VEJZYjdadmNWd2hLVW9JOVBiUk5MTXlhamNlbHNWCi82S2NuNG42b0E2YW9SMjhzQlYyd1I0WWhzTndERlE0Q2JQd05Ed0g1K0FWZUJQZWdyZmhIYmdJNzhNSGNCaysKaEkvZ0NseURMK0U2ZkEwTDhDMlVZQW0raHgvaEJ0eUUzK0FQdUlYcVVSTlMwSGJVaS9ZaVB3cWdFQnBENDJnYQo2Y2hHcDlFc09vT2VRYytqYytobGRCNjlpdDVEbDlBbjZDcGFRRCtobjlHdjZJWjBXZnBZK2xUNlRQcGN1aXA5CklTMUlQMGkvU0RlbDM2VS9wYitrVzlMZnVBYlhZeG0zNGpiY2lidndEanlBOStNSnJPRVV6dUk4TG1DT3orSm4KOFF2NEpYd2V6K0Y1L0RwK0ExL0VsL0JYRllZbFZIMlpwK0EvQTMvekQzcVhrcnc9NsYx2QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAACNtpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+MTwvdGlmZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0PC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xNDQ8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NjA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5BQUFFMzNqYWJWTk5iQnRGRkg2ems2Wkoyc1NicEQ5cCtyY2xEcVF0TFVrYmFIRDVpZE0wYldqai9xeWRPSWtUJiN4QTtNMTZQN2EzWHUyWjNuTmExSXMwQnRRakJBWEVvOUFERUVZSWlCQVhSQ2lFQlFyUUZGUlRBaVFBSkFlcXBGOFNCJiN4QTtDMElWRXJPMlZRcnFqRmI3M3B0NTg3NzN6VGV4cktFN3JMdDdDVW00WmxudDhvYXdkNGJham02WjQxNWlheWxkJiN4QTtlRUV2czdKaHJ4VTdRVFhtdEFBNjgxcFU5Z1RVUXpSUDQvN3FwdS9xNm9PMlpUR08zcFczckZqWmVlOTlYVnUzJiN4QTtiYjkveDg0SEh0ejdTUC9nRTRlT0haK1luQ1kwY1NLVFpibVExOHdaeG1KamswZHU5NDRGMUoxcG1uY214TDlhJiN4QTtaTlNyR2NSeExqUzN0SzVhdldadDJ6b3VjY3hyK0RKZXk1ZnpPbDdQR3k2czM3QngwMlpseXowZGZBVmZ5WnU0JiN4QTtoemZ6ZHI2ZWIrU2J1QktPRVljYXVrbERtbVZZZGpCanhXbUk2Y3lnNGF4TlNTWm0wS2tNU1pwNlF0Y0lFKzBHJiN4QTs0NFJSMFZhTWFPbWtiZVhNK0Q0M2NjS3hjclpHZy9RVTY0RHFXT3p1OGV6YTNSc0txTWNQREVRQ2FubWptaVVhJiN4QTtIZXBXeEFRWjhjYlNRM3Y2SHA2b3RHR1NEQTFYVE9xTVZST0tmYjV3UUQxUzdsZXVLWGtlZmV6eGNVR0F3MnpkJiN4QTtUSEw1cURqQVAxRG1lU1RIaU1DcmxsZm0vZnZjdklxenVOOHpkT0RnOEcxZmdQRXpZY1Z5akRxOGhhL2pyVkc1JiN4QTtGSWxiV2k1RFRWWkdNTm5UbldWVEJXSXpYVFBvYkVNazUxQ0JQVTJTZEZLWUxsWm5xbEJtYlZicEZKRzRrckJzJiN4QTs4WmxNS1VmdnpDaVFqT1BrTXpHeE0wTll5dm4vbWh1ODI5cGtqaVg2cGdxNm1SVklUYTFTS0pFekZHWXBMSitsJiN4QTtTbHkzQlM5R1hoaEVzM1dCVmRGU3hDWWFFK3BzY0lWek9IQjBib1N2bWp2Q1YvTzIwWUE2SkFBdXFjR1FaM1FzJiN4QTtQQzU4VlQ5TkJUR0pJWU1rSGVFSFJHTWQvVjJWSzVSbHZvYXZIUjJ4VEtKWmd1bklWUFdFWXNRbjNPaVRnc2xCJiN4QTtYWE9GUWV4OE1lb0dZMXBVYnJtRDRIaUY4MkxjZDlkNFIvOUFwVllwNlVucHJzYVpMaEQ0cjF5clRiNTRQYzQzJiN4QTtpQ1BUaGlnN0tJUlhUUHRjVlptN2U0ZDZGREdCTjdwMys5VEJZYjdadmNWd2hLVW9JOVBiUk5MTXlhamNlbHNWJiN4QTsvNktjbjRuNm9BNmFvUjI4c0JWMndSNFloc053REZRNENiUHdORHdINStBVmVCUGVncmZoSGJnSTc4TUhjQmsrJiN4QTtoSS9nQ2x5REwrRTZmQTBMOEMyVVlBbStoeC9oQnR5RTMrQVB1SVhxVVJOUzBIYlVpL1lpUHdxZ0VCcEQ0MmdhJiN4QTs2Y2hHcDlFc09vT2VRYytqYytobGRCNjlpdDVEbDlBbjZD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;" parent="1" vertex="1">
-          <mxGeometry x="328" y="619" width="12.93" height="12.07" as="geometry" />
-        </mxCell>
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-86" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABeRlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFVAAAAJCgAgAEAAAAAQAAAHSgAwAEAAAAAQAAAEAAAAAAQVNDSUkAAABBQUFFNjNqYWJWTnJiQlJWRkQ1M2JxRVBhSGZhOGlqbE5kaXRGaERjUXBXNitPaVdzbENoeTJOMnU5dDJ5M3AzCjl1N3VzTE16Njh6ZHdySnBjbjhZTUFaLytBc2hSRzBib3hqakswcU04UkVpb0RHbTBXMGpKa1FOdi9oai9PRWYKWTRpSmR4OUJOTXpOWk00NTk1NXp2dlBkYitJNVEzZVl4N09JSkZ5M1pHbDlVOFE5UlcxSHQ4d3hON0cxdEM2OApvSnRadVlqYmloK25HblBhQUoxK1BTYTdBdW9CV3FBSlgrM1FEdzJOUWR1eUdFZnZ5WnVXTGU5KzhLR2V6VnUyClByeHQreU9QN241aVlPaVpBMGVPams4Y0l6UjVQSnRqK1pEYnpCdkdRbk9MUys1MGh3UHE5Z3d0T09QaVcyc3kKNnRZTTRqaVhXdHZhVjZ4Y3RicGpEWmM0NW5WOENWL0s2M2tEYitSTmw5YXVXNzlobzdMcGdTNitqQy9uTGR6RgpXM2tuWDh2WDh3MWNpY1NKUXczZHBDSE5NaXc3bUxVU05NUjBadEJJenFZa0d6Zm9aSmFrVEQycGE0U0pjWU1KCndxZ1lLMDYwVE1xMjhtWmlUemx4M0xIeXRrYUQ5Q1RyZ3RxejRPbDE3ZGpaRndxb1IvY05SZ05xNWFDYUl4cjEKZXhTeFFFYTh1ZlRZcnY3SHg2dGptQ1JMSTFXVE91RmF3bXkvTnhKUUQxWG1sZXRLcmllZmVucE1FT0F3V3pkVApYRDRzQ3ZnR0t6eVA1QmtSZU5YS3pweHZUem12Nml6c2RmbjM3UisrNndzd1BpYXNlSjVSaDdmeE5idzlKcGVpCkNVdkxaNm5KS2dnbWVqMDVObGtrTnRNMWcwNDNSZk1PRmRnekpFVW5oRm5HNmt3V0s2eE5LOTBpa2xDU2xpMWUKa3ltVjZMMFpSWkoxbkVJMkxrNW1DVXM3Lzk4ckIrKzNONUZueWY3Sm9tN21CRkpUcXpaSzVnMkZXUW9yNUtpUwowRzNCaTFFUUJ0RnNYV0JWdERTeGljYUVPcHZLd2prWU9Ed3p3bGZNSE9JcmVjZG9RUFVMZ0l0cU1PUWFEVWZHCmhLL3FwNmdnSnVrM1NNb1Jma0FNMWpYUVU3MUNXZWFyK09yUkVjc2ttaVdZams3V0tzeEd2Y0tOUFN1WUhOSzEKc2pDSVhaaU5sWU54TFNhMzNVTndvc3I1Yk1KNzMzalh3R0MxVnlubFN1dGxqVE5kSVBCZHZWNS85bUo0QzE4bgpTbVlNMFhaSUNHODI0eTJyeXR6WjUrOVZ4QUxlWEw3YjUvWVA4NDNWVzJ5THNqUmxKQlpsUW9xQ09KMU5pd0pUCkoySnkrMTJGL0l0NGJpcm1oUVpvaFU1d3cyYllBYnRnR0E3Q0VWRGhCRXpEODNBV3pzR3I4QmE4RGUvQXUvQSsKZkFnZndXWDRCRDZGcTNBZHZvRnY0VHVZaCsraEJJdndJL3dFdCtBMi9BWi93QjNVaUZxUWdyYWlQclFiK1ZBQQpoVkFZamFGalNFYzJPb1dtMFduMEFub0puVVBuMFFYMEd2b0FmWXkrUU5mUVBMcUpma2Evb2x2U1plbHo2VXZwCml2U1ZkRTM2V3BxWGJraS9TTGVsMzZVL3BiK2tPOUxmdUE0M1lobTM0dzdjalh2d05qeUk5K0p4ck9FMHp1RUMKTG1LT3orQVg4Y3Y0Rlh3QnorQTUvQVorRTMrR3IrQWJWYllsVlB0TFQ4Si9Ibnp6SDZnbGx6cz11ijupAAAACXBIWXMAABYlAAAWJQFJUiTwAAAI5GlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp0aWZmPSJodHRwOi8vbnMuYWRvYmUuY29tL3RpZmYvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZXhpZj0iaHR0cDovL25zLmFkb2JlLmNvbS9leGlmLzEuMC8iPgogICAgICAgICA8dGlmZjpDb21wcmVzc2lvbj4xPC90aWZmOkNvbXByZXNzaW9uPgogICAgICAgICA8dGlmZjpSZXNvbHV0aW9uVW5pdD4yPC90aWZmOlJlc29sdXRpb25Vbml0PgogICAgICAgICA8dGlmZjpYUmVzb2x1dGlvbj4xNDQ8L3RpZmY6WFJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOllSZXNvbHV0aW9uPjE0NDwvdGlmZjpZUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4yPC90aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+CiAgICAgICAgIDx0aWZmOk9yaWVudGF0aW9uPjE8L3RpZmY6T3JpZW50YXRpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xMTY8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5BQUFFNjNqYWJWTnJiQlJWRkQ1M2JxRVBhSGZhOGlqbE5kaXRGaERjUXBXNitPaVdzbENoeTJOMnU5dDJ5M3AzJiN4QTs5dTd1c0xNejY4emR3ckpwY244WU1BWi8rQXNoUkcwYm94ampLMHFNOFJFaW9ER20wVzBqSmtRTnYvaGovT0VmJiN4QTtZNGlKZHg5Qk5Nek5aTTQ1OTU1enZ2UGRiK0k1UTNlWXg3T0lKRnkzWkdsOVU4UTlSVzFIdDh3eE43RzF0QzY4JiN4QTtvSnRadVlqYmloK25HblBhQUoxK1BTYTdBdW9CV3FBSlgrM1FEdzJOUWR1eUdFZnZ5WnVXTGU5KzhLR2V6VnUyJiN4QTtQcnh0K3lPUDduNWlZT2laQTBlT2prOGNJelI1UEp0aitaRGJ6QnZHUW5PTFMrNTBod1BxOWd3dE9PUGlXMnN5JiN4QTs2dFlNNGppWFd0dmFWNnhjdGJwakRaYzQ1blY4Q1YvSzYza0RiK1JObDlhdVc3OWhvN0xwZ1M2K2pDL25MZHpGJiN4QTtXM2tuWDh2WDh3MWNpY1NKUXczZHBDSE5NaXc3bUxVU05NUjBadEJJenFZa0d6Zm9aSmFrVEQycGE0U0pjWU1KJiN4QTt3cWdZSzA2MFRNcTI4bVppVHpseDNMSHl0a2FEOUNUcmd0cXo0T2wxN2RqWkZ3cW9SL2NOUmdOcTVhQ2FJeHIxJiN4QTtleFN4UUVhOHVmVFlydjdIeDZ0am1DUkxJMVdUT3VGYXdteS9OeEpRRDFYbWxldEtyaWVmZW5wTUVPQXdXemRUJiN4QTtYRDRzQ3ZnR0t6eVA1QmtSZU5YS3pweHZUem12Nml6c2RmbjM3UisrNndzd1BpYXNlSjVSaDdmeE5idzlKcGVpJiN4QTtDVXZMWjZuSktnZ21lajA1Tmxra050TTFnMDQzUmZNT0ZkZ3pKRVVuaEZuRzZrd1dLNnhOSzkwaWtsQ1NsaTFlJiN4QTtreW1WNkwwWlJaSjFuRUkyTGs1bUNVczcvOThyQisrM041Rm55ZjdKb203bUJGSlRxelpLNWcyRldRb3I1S2lTJiN4QTswRzNCaTFFUUJ0RnNYV0JWdERTeGljYUVPcHZLd2prWU9Ed3p3bGZNSE9JcmVjZG9RUFVMZ0l0cU1PUWFEVWZHJiN4QTtoSy9xcDZnZ0p1azNTTW9SZmtBTTFqWFFVNzFDV2VhcitPclJFY3NrbWlXWWprN1dLc3hHdmNLTlBTdVlITksxJiN4QTtzakNJWFppTmxZTnhMU2EzM1VOd29zcjViTUo3MzNqWHdHQzFWeW5sU3V0bGpUTmRJUEJkdlY1LzltSjRDMThuJiN4QTtTbVlNMFhaSUNHODI0eTJyeXR6WjUrOVZ4QUxlWEw3YjUvWVA4NDNWVzJ5THNqUmxKQlpsUW9xQ09KMU5pd0pUJiN4QTtKMkp5KzEyRi9JdDRiaXJtaFFab2hVNXd3MmJZQWJ0Z0dBN0NFVkRoQkV6RDgzQVd6c0dyOEJhOERlL0F1L0ErJiN4QTtmQWdmd1dYNEJENkZxM0Fkdm9GdjRUdVloKytoQkl2d0kvd0V0K0EyL0FaL3dCM1VpRnFRZ3JhaVByUWIrVkFBJiN4QTtoVkFZamFGalNFYzJPb1dtMFduMEFub0pu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;" parent="1" vertex="1">
-          <mxGeometry x="216" y="619.1" width="24.82" height="13.7" as="geometry" />
+          <mxGeometry x="226" y="630" width="24.82" height="13.7" as="geometry" />
         </mxCell>
         <mxCell id="hdwB_MQwIhiL4xS-3u5l-89" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,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nhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABdRlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFRAAAAJCgAgAEAAAAAQAAACKgAwAEAAAAAQAAADAAAAAAQVNDSUkAAABBQUFFMkhqYWJWTmRiQlJWRkQ1M2JvRzIwTzYwNWFlVXY4RnV0WWpnRnFyVTRrKzNsSVVLWFNpejIyNzNoL1h1CjdOM3QwTm1aZGVadVlXbWEzQWNEeHNpRFR3Z1BhTnNZclRINEV5WEdSSTJ4SURHbTBXMmpKa1lOVDd3WUgzd3gKaHBoNFozZURhSmlieVp4ejdqbjNmT2U3MzZUeWh1NHduMjhaU2JobXhjcFY5Ukh2SkxVZDNUTEh2TVRXeG5YaApoYnpNeWtlOFZ1b1UxWmpURE9qYzYwblpFMVNQMENKTis2dEozOVhXaFd6TFloeTlLMjlmdmFiandZYzZkenk4Cjg1RmR1eDk5YlArVGZRUFBIaGsrRVkyZEpEUnpLcGRuaGJEWExCakdVa09qUjI3empnYlYzUk8wNkVURnQ5cGsKeEtzWnhISG1tNXBiMXE1YnY2RjFJNWM0NWpWOEJWL0pWL0ZhWHNmcjV6ZHQzckoxbTdMOWdYYSttcS9oamR6RAptM2diMzhTMzhLMWNpYVNJUXczZHBHSE5NaXc3bExQU05NeDBadEJJM3FZa2x6Sm9Ja2V5cHA3Uk5jTEV1S0UwCllWU01sU0xhUk5hMkNtYjZnRnNZZGF5Q3JkRVFQY1Bhb2ZvcytibzhlL1oyaDRQcWlVUDk4YUJhVGxUelJLTUIKbnlJV3lJZzNsQjdmMS9ORXRES0dTWEkwVWpHcE0xb3RtTzNwalFUVlkrVjU1WnFTNTZtbm54a1RCRGpNMXMwcwpsNCtMQS96OVpaNkhDb3dJdkdwNVo4NS93SzJyT0VzSFBZRkRod2Z2K2dLTW53a3JWV0RVNGMxOEkyOUp5cVY0CjJ0SUtPV3F5TW9KWWx5L1BFbFBFWnJwbTBPbjZlTUdoQXZzRXlkS1lNRjJzVG1LcXpOcTAwaUVpYVNWajJlSTEKbVZLTzNsc3hSWEtPVTh5bFJHYU9zSEhuLzN0dThINTdzUUxMOUNTbWRETXZrSnBhcFZHbVlDak1VbGd4VDVXMApiZ3RlaktJd2lHYnJBcXVpalJPYmFFeW9zOTRWenRIZzhaa2h2bmJtR0YvSFcwZUNha0FBWEZaRFljL0lhR1JNCitLcCtsZ3BpTWdHRFpCM2hCOFZnN1gyZGxTdVVaYjZlYnhnWnNreWlXWUxwZUtKNndteThWN2pKNXdTVEE3cm0KQ29QWXhkbWtHMHhwU2JuNUhvTFRGYzVuMDczM2piZjM5VmQ2bGJLZWNkM1ZPTk1GQXYvQ0RjLzVDOTRZM3l5TwpuREJFMndFaHZObUpYbGRWNXQ3dVFKY2lGdkFHOTI2ZlB6ekl0N20zT0Z3VTJaT25rM0xMWFRuOEMyOXVNdGtMCnRkQUViZUNGSGJBSDlzRWdISVZoVU9FMFRNTUw4REpjaEN2d0Zyd043OEJWZUE4K2dBL2hHbndNbjhBQzNJQ2IKOERWOEE0dndMWlJnR2I2SEgrRVczSWJmNEErNGcrcFFJMUxRVHRTTjlpTS9DcUl3R2tWajZDVFNrWTNPb21sMApEcjJJTHFDTDZCSzZqRjVENzZPUDBHZm9PbHBFUDZHZjBhL29sblJOK2xUNlhQcEMrbEs2TG4wbExVby9TTDlJCnQ2WGZwVCtsdjZRNzB0KzRCdGRoR2JmZ1Z0eUJPL0V1M0k4UDRpalc4RGpPNHlLZXdoeWZ4eS9oVi9DcitES2UKd1hQNERmd21uc2RYOFVLRldnbFZmOGt6OEo4SDMvd0g4SE9QakE9PS1PM0UAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAjTaVRYdFhNTDpjb20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx0aWZmOkNvbXByZXNzaW9uPjE8L3RpZmY6Q29tcHJlc3Npb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDx0aWZmOlhSZXNvbHV0aW9uPjE0NDwvdGlmZjpYUmVzb2x1dGlvbj4KICAgICAgICAgPHRpZmY6WVJlc29sdXRpb24+MTQ0PC90aWZmOllSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPjI8L3RpZmY6UGhvdG9tZXRyaWNJbnRlcnByZXRhdGlvbj4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjM0PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+QUFBRTJIamFiVk5kYkJSVkZENTNib0cyME82MDVhZVV2OEZ1dFlqZ0ZxclU0ayszbElVS1hTaXoyMjczaC9YdSYjeEE7N04zdDBObVpkZVp1WVdtYTNBY0R4c2lEVHdnUGFOc1lyVEg0RXlYR1JJMnhJREdtMFcyakprWU5UN3dZSDN3eCYjeEE7aHBoNFozZURhSmlieVp4ejdqbjNmT2U3MzZUeWh1NHduMjhaU2JobXhjcFY5Ukh2SkxVZDNUTEh2TVRXeG5YaCYjeEE7aGJ6TXlrZThWdW9VMVpqVERPamM2MG5aRTFTUDBDSk4rNnRKMzlYV2hXekxZaHk5SzI5ZnZhYmp3WWM2ZHp5OCYjeEE7ODVGZHV4OTliUCtUZlFQUEhoaytFWTJkSkRSektwZG5oYkRYTEJqR1VrT2pSMjd6amdiVjNSTzA2RVRGdDlwayYjeEE7eEtzWnhISG1tNXBiMXE1YnY2RjFJNWM0NWpWOEJWL0pWL0ZhWHNmcjV6ZHQzckoxbTdMOWdYYSttcS9oamR6RCYjeEE7bTNnYjM4UzM4SzFjaWFTSVF3M2RwR0hOTWl3N2xMUFNOTXgwWnRCSTNxWWtsekpvSWtleXBwN1JOY0xFdUtFMCYjeEE7WVZTTWxTTGFSTmEyQ21iNmdGc1lkYXlDcmRFUVBjUGFvZm9zK2JvOGUvWjJoNFBxaVVQOThhQmFUbFR6UktNQiYjeEE7bnlJV3lJZzNsQjdmMS9ORXRES0dTWEkwVWpHcE0xb3RtTzNwalFUVlkrVjU1WnFTNTZtbm54a1RCRGpNMXMwcyYjeEE7bDQrTEEvejlaWjZIQ293SXZHcDVaODUvd0syck9Fc0hQWUZEaHdmditnS01ud2tyVldEVTRjMThJMjlKeXFWNCYjeEE7MnRJS09XcXlNb0pZbHkvUEVsUEVacnBtME9uNmVNR2hBdnNFeWRLWU1GMnNUbUtxek5xMDBpRWlhU1ZqMmVJMSYjeEE7bVZLTzNsc3hSWEtPVTh5bFJHYU9zSEhuLzN0dThINTdzUUxMOUNTbWRETXZrSnBhcFZHbVlDak1VbGd4VDVXMCYjeEE7Ymd0ZWpLSXdpR2JyQXF1aWpST2JhRXlvczk0Vnp0SGc4Wmtodm5ibUdGL0hXMGVDYWtBQVhGWkRZYy9JYUdSTSYjeEE7K0twK2xncGlNZ0dEWkIzaEI4Vmc3WDJkbFN1VVpiNmVieGdac2t5aVdZTHBlS0o2d215OFY3ako1d1NUQTdybSYjeEE7Q29QWXhkbWtHMHhwU2JuNUhvTFRGYzVuMDczM2piZjM5VmQ2bGJLZWNkM1ZPTk1GQXYvQ0RjLzVDOTRZM3l5TyYjeEE7bkRCRTJ3RWh2Tm1KWGxkVjV0N3VRSmNpRnZBRzkyNmZQenpJdDdtM09Gd1UyWk9uazNMTFhUbjhDMjl1TXRrTCYjeEE7dGRBRWJlQ0ZIYkFIOXNFZ0hJVmhVT0UwVE1NTDhESmNoQ3Z3RnJ3Tjc4QlZlQTgrZ0EvaEdud01uOEFDM0lDYiYjeEE7OERWOEE0dndMWlJnR2I2SEgrRVczSWJmNEErNGcrcFFJMUxRVHRTTjlpTS9DcUl3R2tWajZDVFNrWTNPb21sMCYjeEE7RHIySUxxQ0w2Qks2akY1RDc2T1AwR2ZvT2xwRVA2R2YwYS9vbG5STits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;" parent="1" vertex="1">
           <mxGeometry x="551" y="767" width="6.38" height="9" as="geometry" />
         </mxCell>
-        <mxCell id="BE7m5MwMy8wg7SoJYegb-1" value="MLE" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="699" y="641" width="70" height="30" as="geometry" />
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-1" value="MLE" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
+          <mxGeometry x="700" y="641" width="70" height="30" as="geometry" />
         </mxCell>
-        <mxCell id="BE7m5MwMy8wg7SoJYegb-2" value="PEM" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="699" y="677" width="70" height="30" as="geometry" />
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-2" value="PEM" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
+          <mxGeometry x="700" y="677" width="70" height="30" as="geometry" />
         </mxCell>
-        <mxCell id="BE7m5MwMy8wg7SoJYegb-4" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;" parent="1" edge="1">
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-4" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=0;entryDx=0;entryDy=0;strokeColor=#585858;" parent="1" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
             <mxPoint x="696" y="646" as="sourcePoint" />
             <mxPoint x="628" y="696" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="BE7m5MwMy8wg7SoJYegb-5" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;" parent="1" edge="1">
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-5" value="" style="endArrow=none;html=1;rounded=0;entryX=1;entryY=1;entryDx=0;entryDy=0;strokeColor=#585858;" parent="1" edge="1">
           <mxGeometry width="50" height="50" relative="1" as="geometry">
             <mxPoint x="695" y="780" as="sourcePoint" />
             <mxPoint x="628" y="728" as="targetPoint" />
           </mxGeometry>
         </mxCell>
-        <mxCell id="BE7m5MwMy8wg7SoJYegb-6" value="MAP" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="699" y="714" width="70" height="30" as="geometry" />
-        </mxCell>
-        <mxCell id="BE7m5MwMy8wg7SoJYegb-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;curved=1;endArrow=none;endFill=0;" parent="1" source="BE7m5MwMy8wg7SoJYegb-7" target="hdwB_MQwIhiL4xS-3u5l-2" edge="1">
-          <mxGeometry relative="1" as="geometry" />
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-6" value="MAP" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
+          <mxGeometry x="700" y="714" width="70" height="30" as="geometry" />
         </mxCell>
-        <mxCell id="BE7m5MwMy8wg7SoJYegb-7" value="gradient or non-gradient based.." style="rounded=0;whiteSpace=wrap;html=1;strokeColor=none;fillColor=none;" parent="1" vertex="1">
-          <mxGeometry x="682.5" y="567" width="103" height="60" as="geometry" />
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=1;entryY=0.5;entryDx=0;entryDy=0;curved=1;endArrow=none;endFill=0;strokeColor=#585858;" parent="1" target="hdwB_MQwIhiL4xS-3u5l-2" edge="1">
+          <mxGeometry relative="1" as="geometry">
+            <mxPoint x="675" y="598" as="sourcePoint" />
+          </mxGeometry>
         </mxCell>
-        <mxCell id="BE7m5MwMy8wg7SoJYegb-11" value="Design related" style="rounded=1;whiteSpace=wrap;html=1;" parent="1" vertex="1">
-          <mxGeometry x="699" y="751" width="70" height="30" as="geometry" />
+        <mxCell id="BE7m5MwMy8wg7SoJYegb-11" value="Design -related" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
+          <mxGeometry x="700" y="751" width="70" height="30" as="geometry" />
         </mxCell>
         <mxCell id="ilc09JGzDhpx_nHwKlJr-1" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=https://cdn.onlinewebfonts.com/svg/img_827.svg;flipV=1;" parent="1" vertex="1">
           <mxGeometry x="437" y="632.8" width="20" height="20" as="geometry" />
         </mxCell>
+        <mxCell id="gN4vE8bEkTlw2jWnqAIC-4" value="" style="shape=image;verticalLabelPosition=bottom;labelBackgroundColor=default;verticalAlign=top;aspect=fixed;imageAspect=0;image=data:image/png,iVBORw0KGgoAAAANSUhEUgAAADwAAAA4EAYAAADx/UcnAAAKqGlDQ1BJQ0MgUHJvZmlsZQAASImVlwdQU+kWgP9700NCS4h0Qm/SWwApIbTQpYOohCRAKCEGgogdWVyBtSAighVdEFFwVYosNkSxLQKKXRdkEVHWxYINlXeBIbj75r0378ycOd899/znP+ef+8+cCwBZniMSpcHyAKQLs8ShPh706JhYOm4YQEANEAAJQBxupogZEhIAEJm1f5f3d5BoRG6ZTeX69/f/VRR4/EwuAFAIwgm8TG46wqcQfcEVibMAQO1H/LrLs0RT3IEwVYwUiPC9KU6a4dEpTphmNJiOCQ9lIUwFAE/icMRJAJDoiJ+ezU1C8pDcEbYU8gRChEUIu6anZ/AQPo6wERKD+EhT+RkJ3+VJ+lvOBGlODidJyjO9TAveU5ApSuOs+D+P439Leppkdg8DREnJYt9QxCoiZ3YvNcNfysKEoOBZFvCm46c5WeIbMcvcTFbsLPM4nv7StWlBAbOcKPBmS/NkscNnmZ/pFTbL4oxQ6V6JYhZzljniuX0lqRFSfzKfLc2fmxweNcvZgsigWc5MDfOfi2FJ/WJJqLR+vtDHY25fb2nv6Znf9StgS9dmJYf7SnvnzNXPFzLncmZGS2vj8T295mIipPGiLA/pXqK0EGk8P81H6s/MDpOuzUI+yLm1IdIzTOH4hcwyYIEMkIaoGNBBAPLkCUAWPydrqhFWhmiFWJCUnEVnIjeMT2cLuebz6daW1jYATN3Xmc/hLW36HkK0a3O+vIMAuLhOTk62zfn8hwA4OQYA8fGczwg5I9leAK6UciXi7Bnf9F3CACKQA1SgAjSBLjACZsAa2ANn4A68gB8IBuEgBiwBXJAM0pHKl4NVYD0oAEVgK9gBKsA+cBAcBsfACdAM2sAFcBlcB92gDzwE/WAIvARj4D2YgCAIB5EhCqQCaUH6kClkDTEgV8gLCoBCoRgoHkqChJAEWgVtgIqgEqgCOgDVQr9Ap6EL0FWoB7oPDUAj0BvoM4yCSTAV1oANYAuYATNhfzgcXgwnwcvgXDgf3gyXw1XwUbgJvgBfh/vgfvglPI4CKBkUDaWNMkMxUCxUMCoWlYgSo9agClFlqCpUPaoV1Ym6hepHjaI+obFoCpqONkM7o33REWguehl6DboYXYE+jG5Cd6BvoQfQY+hvGDJGHWOKccKwMdGYJMxyTAGmDFONacRcwvRhhjDvsVgsDWuIdcD6YmOwKdiV2GLsHmwD9jy2BzuIHcfhcCo4U5wLLhjHwWXhCnC7cEdx53C9uCHcR7wMXgtvjffGx+KF+Dx8Gf4I/iy+Fz+MnyDIE/QJToRgAo+wgrCFcIjQSrhJGCJMEBWIhkQXYjgxhbieWE6sJ14iPiK+lZGR0ZFxlFkoI5BZJ1Muc1zmisyAzCeSIsmExCLFkSSkzaQa0nnSfdJbMplsQHYnx5KzyJvJteSL5Cfkj7IUWXNZtixPdq1spWyTbK/sKzmCnL4cU26JXK5cmdxJuZtyo/IEeQN5ljxHfo18pfxp+bvy4woUBSuFYIV0hWKFIwpXFZ4r4hQNFL0UeYr5igcVLyoOUlAUXQqLwqVsoByiXKIMUbFUQyqbmkItoh6jdlHHlBSVbJUilXKUKpXOKPXTUDQDGpuWRttCO0G7Q/s8T2Mecx5/3qZ59fN6531QVlN2V+YrFyo3KPcpf1ahq3ippKpsU2lWeayKVjVRXai6XHWv6iXVUTWqmrMaV61Q7YTaA3VY3UQ9VH2l+kH1G+rjGpoaPhoijV0aFzVGNWma7popmqWaZzVHtCharloCrVKtc1ov6Ep0Jj2NXk7voI9pq2v7aku0D2h3aU/oGOpE6OTpNOg81iXqMnQTdUt123XH9LT0AvVW6dXpPdAn6DP0k/V36nfqfzAwNIgy2GjQbPDcUNmQbZhrWGf4yIhs5Ga0zKjK6LYx1phhnGq8x7jbBDaxM0k2qTS5aQqb2psKTPeY9szHzHecL5xfNf+uGcmMaZZtVmc2YE4zDzDPM282f2WhZxFrsc2i0+KbpZ1lmuUhy4dWilZ+VnlWrVZvrE2sudaV1rdtyDbeNmttWmxe25ra8m332t6zo9gF2m20a7f7au9gL7avtx9x0HOId9jtcJdBZYQwihlXHDGOHo5rHdscPznZO2U5nXD6y9nMOdX5iPPzBYYL+AsOLRh00XHhuBxw6Xelu8a77nftd9N247hVuT1113XnuVe7DzONmSnMo8xXHpYeYo9Gjw8sJ9Zq1nlPlKePZ6Fnl5eiV4RXhdcTbx3vJO867zEfO5+VPud9Mb7+vtt877I12Fx2LXvMz8FvtV+HP8k/zL/C/2mASYA4oDUQDvQL3B74KEg/SBjUHAyC2cHbgx+HGIYsC/l1IXZhyMLKhc9CrUJXhXaGUcKWhh0Jex/uEb4l/GGEUYQkoj1SLjIusjbyQ5RnVElUf7RF9Oro6zGqMYKYllhcbGRsdez4Iq9FOxYNxdnFFcTdWWy4OGfx1SWqS9KWnFkqt5Sz9GQ8Jj4q/kj8F04wp4oznsBO2J0wxmVxd3Jf8tx5pbwRvgu/hD+c6JJYkvg8ySVpe9JIsltyWfKogCWoELxO8U3Zl/IhNTi1JnUyLSqtIR2fHp9+WqgoTBV2ZGhm5GT0iExFBaL+ZU7LdiwbE/uLqzOhzMWZLVlUZDC6ITGS/CAZyHbNrsz+uDxy+ckchRxhzo0VJis2rRjO9c79eSV6JXdl+yrtVetXDaxmrj6wBlqTsKZ9re7a/LVD63zWHV5PXJ+6/rc8y7ySvHcboja05mvkr8sf/MHnh7oC2QJxwd2Nzhv3/Yj+UfBj1yabTbs2fSvkFV4rsiwqK/pSzC2+9pPVT+U/TW5O3Ny1xX7L3q3YrcKtd7a5bTtcolCSWzK4PXB7Uym9tLD03Y6lO66W2Zbt20ncKdnZXx5Q3rJLb9fWXV8qkiv6Kj0qG3ar7960+8Me3p7eve576/dp7Cva93m/YP+9Az4HmqoMqsoOYg9mH3x2KPJQ58+Mn2urVauLqr/WCGv6D4ce7qh1qK09on5kSx1cJ6kbORp3tPuY57GWerP6Aw20hqLj4Ljk+Itf4n+5c8L/RPtJxsn6U/qndjdSGguboKYVTWPNyc39LTEtPaf9Tre3Orc2/mr+a02bdlvlGaUzW84Sz+afnTyXe278vOj86IWkC4PtS9sfXoy+eLtjYUfXJf9LVy57X77Yyew8d8XlSttVp6unrzGuNV+3v950w+5G4292vzV22Xc13XS42dLt2N3as6DnbK9b74Vbnrcu32bfvt4X1NdzJ+LOvbtxd/vv8e49v592//WD7AcTD9c9wjwqfCz/uOyJ+pOq341/b+i37z8z4Dlw42nY04eD3MGXf2T+8WUo/xn5Wdmw1nDtc+vnbSPeI90vFr0Yeil6OTFa8KfCn7tfGb069Zf7XzfGoseGXotfT74pfqvytuad7bv28ZDxJ+/T3098KPyo8vHwJ8anzs9Rn4cnln/BfSn/avy19Zv/t0eT6ZOTIo6YMz0KoBCFExMBeFMDADkGAEo3Mj8smpmnpwWa+QeYJvCfeGbmnhZ7AOoRMzUWsc4DcBxRA0TJiE6NROHuALaxkers7Ds9p08JFvlj2W87Rb20nHXgHzIzw39X9z8tmMo6vfxv9l8BhAf7uiw5BAAABdxlWElmTU0AKgAAAAgABgEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEaAAUAAAABAAAAVgEbAAUAAAABAAAAXgEoAAMAAAABAAIAAIdpAAQAAAABAAAAZgAAAAAAAACQAAAAAQAAAJAAAAABAAOShgAHAAAFTAAAAJCgAgAEAAAAAQAAADygAwAEAAAAAQAAADgAAAAAQVNDSUkAAABBQUFFMzNqYWJWTk5iQnRGRkg2ems2Wkoyc1NicEQ5cCtyY2xEcVF0TFVrYmFIRDVpZE0wYldqai9xeWRPSWtUCk0xNlA3YTNYdTJaM25OYTFJczBCdFFqQkFYRW85QURFRVlJaUJBWFJDaUVCUXJRRkZSVEFpUUFKQWVxcEY4U0IKQzBJVkVyTzJWUXJxakZiNzNwdDU4NzczelRleHJLRTdyTHQ3Q1VtNFpsbnQ4b2F3ZDRiYWptNlo0MTVpYXlsZAplRUV2czdKaHJ4VTdRVFhtdEFBNjgxcFU5Z1RVUXpSUDQvN3FwdS9xNm9PMlpUR08zcFczckZqWmVlOTlYVnUzCmJiOS94ODRISHR6N1NQL2dFNGVPSForWW5DWTBjU0tUWmJtUTE4d1p4bUpqazBkdTk0NEYxSjFwbW5jbXhMOWEKWk5TckdjUnhMalMzdEs1YXZXWnQyem91Y2N4citESmV5NWZ6T2w3UEd5NnMzN0J4MDJabHl6MGRmQVZmeVp1NApoemZ6ZHI2ZWIrU2J1QktPRVljYXVrbERtbVZZZGpCanhXbUk2Y3lnNGF4TlNTWm0wS2tNU1pwNlF0Y0lFKzBHCjQ0UlIwVmFNYU9ta2JlWE0rRDQzY2NLeGNyWkdnL1FVNjREcVdPenU4ZXphM1JzS3FNY1BERVFDYW5tam1pVWEKSGVwV3hBUVo4Y2JTUTN2NkhwNm90R0dTREExWFRPcU1WUk9LZmI1d1FEMVM3bGV1S1hrZWZlenhjVUdBdzJ6ZApUSEw1cURqQVAxRG1lU1RIaU1DcmxsZm0vZnZjdklxenVOOHpkT0RnOEcxZmdQRXpZY1Z5akRxOGhhL2pyVkc1CkZJbGJXaTVEVFZaR01OblRuV1ZUQldJelhUUG9iRU1rNTFDQlBVMlNkRktZTGxabnFsQm1iVmJwRkpHNGtyQnMKOFpsTUtVZnZ6Q2lRak9Qa016R3hNME5ZeXZuL21odTgyOXBramlYNnBncTZtUlZJVGExU0tKRXpGR1lwTEorbApTbHkzQlM5R1hoaEVzM1dCVmRGU3hDWWFFK3BzY0lWek9IQjBib1N2bWp2Q1YvTzIwWUE2SkFBdXFjR1FaM1FzClBDNThWVDlOQlRHSklZTWtIZUVIUkdNZC9WMlZLNVJsdm9hdkhSMnhUS0paZ3VuSVZQV0VZc1FuM09pVGdzbEIKWFhPRlFleDhNZW9HWTFwVWJybUQ0SGlGODJMY2Q5ZDRSLzlBcFZZcDZVbnByc2FaTGhENHIxeXJUYjU0UGM0MwppQ1BUaGlnN0tJUlhUUHRjVlptN2U0ZDZGREdCTjdwMys5VEJZYjdadmNWd2hLVW9JOVBiUk5MTXlhamNlbHNWCi82S2NuNG42b0E2YW9SMjhzQlYyd1I0WWhzTndERlE0Q2JQd05Ed0g1K0FWZUJQZWdyZmhIYmdJNzhNSGNCaysKaEkvZ0NseURMK0U2ZkEwTDhDMlVZQW0raHgvaEJ0eUUzK0FQdUlYcVVSTlMwSGJVaS9ZaVB3cWdFQnBENDJnYQo2Y2hHcDlFc09vT2VRYytqYytobGRCNjlpdDVEbDlBbjZDcGFRRCtobjlHdjZJWjBXZnBZK2xUNlRQcGN1aXA5CklTMUlQMGkvU0RlbDM2VS9wYitrVzlMZnVBYlhZeG0zNGpiY2lidndEanlBOStNSnJPRVV6dUk4TG1DT3orSm4KOFF2NEpYd2V6K0Y1L0RwK0ExL0VsL0JYRllZbFZIMlpwK0EvQTMvekQzcVhrcnc9NsYx2QAAAAlwSFlzAAAWJQAAFiUBSVIk8AAACNtpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IlhNUCBDb3JlIDYuMC4wIj4KICAgPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4KICAgICAgPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIKICAgICAgICAgICAgeG1sbnM6dGlmZj0iaHR0cDovL25zLmFkb2JlLmNvbS90aWZmLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vZXhpZi8xLjAvIj4KICAgICAgICAgPHRpZmY6Q29tcHJlc3Npb24+MTwvdGlmZjpDb21wcmVzc2lvbj4KICAgICAgICAgPHRpZmY6UmVzb2x1dGlvblVuaXQ+MjwvdGlmZjpSZXNvbHV0aW9uVW5pdD4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+MTQ0PC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj4xNDQ8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlBob3RvbWV0cmljSW50ZXJwcmV0YXRpb24+MjwvdGlmZjpQaG90b21ldHJpY0ludGVycHJldGF0aW9uPgogICAgICAgICA8dGlmZjpPcmllbnRhdGlvbj4xPC90aWZmOk9yaWVudGF0aW9uPgogICAgICAgICA8ZXhpZjpQaXhlbFhEaW1lbnNpb24+NjA8L2V4aWY6UGl4ZWxYRGltZW5zaW9uPgogICAgICAgICA8ZXhpZjpVc2VyQ29tbWVudD5BQUFFMzNqYWJWTk5iQnRGRkg2ems2Wkoyc1NicEQ5cCtyY2xEcVF0TFVrYmFIRDVpZE0wYldqai9xeWRPSWtUJiN4QTtNMTZQN2EzWHUyWjNuTmExSXMwQnRRakJBWEVvOUFERUVZSWlCQVhSQ2lFQlFyUUZGUlRBaVFBSkFlcXBGOFNCJiN4QTtDMElWRXJPMlZRcnFqRmI3M3B0NTg3NzN6VGV4cktFN3JMdDdDVW00WmxudDhvYXdkNGJham02WjQxNWlheWxkJiN4QTtlRUV2czdKaHJ4VTdRVFhtdEFBNjgxcFU5Z1RVUXpSUDQvN3FwdS9xNm9PMlpUR08zcFczckZqWmVlOTlYVnUzJiN4QTtiYjkveDg0SEh0ejdTUC9nRTRlT0haK1luQ1kwY1NLVFpibVExOHdaeG1KamswZHU5NDRGMUoxcG1uY214TDlhJiN4QTtaTlNyR2NSeExqUzN0SzVhdldadDJ6b3VjY3hyK0RKZXk1ZnpPbDdQR3k2czM3QngwMlpseXowZGZBVmZ5WnU0JiN4QTtoemZ6ZHI2ZWIrU2J1QktPRVljYXVrbERtbVZZZGpCanhXbUk2Y3lnNGF4TlNTWm0wS2tNU1pwNlF0Y0lFKzBHJiN4QTs0NFJSMFZhTWFPbWtiZVhNK0Q0M2NjS3hjclpHZy9RVTY0RHFXT3p1OGV6YTNSc0txTWNQREVRQ2FubWptaVVhJiN4QTtIZXBXeEFRWjhjYlNRM3Y2SHA2b3RHR1NEQTFYVE9xTVZST0tmYjV3UUQxUzdsZXVLWGtlZmV6eGNVR0F3MnpkJiN4QTtUSEw1cURqQVAxRG1lU1RIaU1DcmxsZm0vZnZjdklxenVOOHpkT0RnOEcxZmdQRXpZY1Z5akRxOGhhL2pyVkc1JiN4QTtGSWxiV2k1RFRWWkdNTm5UbldWVEJXSXpYVFBvYkVNazUxQ0JQVTJTZEZLWUxsWm5xbEJtYlZicEZKRzRrckJzJiN4QTs4WmxNS1VmdnpDaVFqT1BrTXpHeE0wTll5dm4vbWh1ODI5cGtqaVg2cGdxNm1SVklUYTFTS0pFekZHWXBMSitsJiN4QTtTbHkzQlM5R1hoaEVzM1dCVmRGU3hDWWFFK3BzY0lWek9IQjBib1N2bWp2Q1YvTzIwWUE2SkFBdXFjR1FaM1FzJiN4QTtQQzU4VlQ5TkJUR0pJWU1rSGVFSFJHTWQvVjJWSzVSbHZvYXZIUjJ4VEtKWmd1bklWUFdFWXNRbjNPaVRnc2xCJiN4QTtYWE9GUWV4OE1lb0dZMXBVYnJtRDRIaUY4MkxjZDlkNFIvOUFwVllwNlVucHJzYVpMaEQ0cjF5clRiNTRQYzQzJiN4QTtpQ1BUaGlnN0tJUlhUUHRjVlptN2U0ZDZGREdCTjdwMys5VEJZYjdadmNWd2hLVW9JOVBiUk5MTXlhamNlbHNWJiN4QTsvNktjbjRuNm9BNmFvUjI4c0JWMndSNFloc053REZRNENiUHdORHdINStBVmVCUGVncmZoSGJnSTc4TUhjQmsrJiN4QTtoSS9nQ2x5REwrRTZmQTBMOEMyVVlBbStoeC9oQnR5RTMrQVB1SVhxVVJOUzBIYlVpL1lpUHdxZ0VCcEQ0MmdhJiN4QTs2Y2hHcDlFc09vT2VRYytqYytobGRCNjlpdDVEbDlBbjZD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;" parent="1" vertex="1">
+          <mxGeometry x="481" y="548" width="12.93" height="12.07" as="geometry" />
+        </mxCell>
+        <mxCell id="gN4vE8bEkTlw2jWnqAIC-6" value="Excitation" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
+          <mxGeometry x="-10" y="677" width="70" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="gN4vE8bEkTlw2jWnqAIC-8" value="" style="endArrow=none;html=1;rounded=0;strokeColor=#585858;" parent="1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="108" y="725" as="sourcePoint" />
+            <mxPoint x="64" y="744" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="gN4vE8bEkTlw2jWnqAIC-9" value="Design Space" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
+          <mxGeometry x="-10" y="714" width="70" height="30" as="geometry" />
+        </mxCell>
+        <mxCell id="gN4vE8bEkTlw2jWnqAIC-10" value="" style="endArrow=none;html=1;rounded=0;strokeColor=#585858;" parent="1" edge="1">
+          <mxGeometry width="50" height="50" relative="1" as="geometry">
+            <mxPoint x="63" y="678" as="sourcePoint" />
+            <mxPoint x="107" y="696" as="targetPoint" />
+          </mxGeometry>
+        </mxCell>
+        <mxCell id="gN4vE8bEkTlw2jWnqAIC-11" value="Gradient or non-gradient based..." style="rounded=1;whiteSpace=wrap;html=1;strokeColor=#585858;" parent="1" vertex="1">
+          <mxGeometry x="679" y="578" width="104" height="42" as="geometry" />
+        </mxCell>
       </root>
     </mxGraphModel>
   </diagram>
diff --git a/assets/PyBOP_Architecture.png b/assets/PyBOP_Architecture.png
new file mode 100644
index 0000000000000000000000000000000000000000..25ea6d42fa4cc64b30a41e8806071681843cbf87
GIT binary patch
literal 147518
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

literal 0
HcmV?d00001


From f730427bfa14c9cf51643145d09b2eff4c859056 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 21 Sep 2023 14:23:36 +0100
Subject: [PATCH 078/210] Add release workflow for pypi + testpypi

---
 .github/workflows/release-action.yaml | 109 ++++++++++++++++++++++++++
 1 file changed, 109 insertions(+)
 create mode 100644 .github/workflows/release-action.yaml

diff --git a/.github/workflows/release-action.yaml b/.github/workflows/release-action.yaml
new file mode 100644
index 000000000..a8a846cbe
--- /dev/null
+++ b/.github/workflows/release-action.yaml
@@ -0,0 +1,109 @@
+name: Publish Python 🐍 distribution 📦 to PyPI and TestPyPI
+
+on: push
+
+jobs:
+  build:
+    name: Build distribution 📦
+    runs-on: ubuntu-latest
+
+    steps:
+    - uses: actions/checkout@v4
+    - name: Set up Python
+      uses: actions/setup-python@v4
+      with:
+        python-version: "3.8"
+    - name: Install pypa/build
+      run: >-
+        python3 -m
+        pip install
+        build
+        --user
+    - name: Build a binary wheel and a source tarball
+      run: python3 -m build
+    - name: Store the distribution packages
+      uses: actions/upload-artifact@v3
+      with:
+        name: python-package-distributions
+        path: dist/
+
+  publish-to-pypi:
+    name: >-
+      Publish Python 🐍 distribution 📦 to PyPI
+    if: startsWith(github.ref, 'refs/tags/')  # only publish to PyPI on tag pushes
+    needs:
+    - build
+    runs-on: ubuntu-latest
+    environment:
+      name: pypi
+      url: https://pypi.org/p/pybop 
+    permissions:
+      id-token: write  # IMPORTANT: mandatory for trusted publishing
+
+    steps:
+    - name: Download all the dists
+      uses: actions/download-artifact@v3
+      with:
+        name: python-package-distributions
+        path: dist/
+    - name: Publish distribution 📦 to PyPI
+      uses: pypa/gh-action-pypi-publish@release/v1
+
+  github-release:
+    name: >-
+      Sign the Python 🐍 distribution 📦 with Sigstore
+      and upload them to GitHub Release
+    needs:
+    - publish-to-pypi
+    runs-on: ubuntu-latest
+
+    permissions:
+      contents: write  # IMPORTANT: mandatory for making GitHub Releases
+      id-token: write  # IMPORTANT: mandatory for sigstore
+
+    steps:
+    - name: Download all the dists
+      uses: actions/download-artifact@v3
+      with:
+        name: python-package-distributions
+        path: dist/
+    - name: Sign the dists with Sigstore
+      uses: sigstore/gh-action-sigstore-python@v1.2.3
+      with:
+        inputs: >-
+          ./dist/*.tar.gz
+          ./dist/*.whl
+    - name: Upload artifact signatures to GitHub Release
+      env:
+        GITHUB_TOKEN: ${{ github.token }}
+      # Upload to GitHub Release using the `gh` CLI.
+      # `dist/` contains the built packages, and the
+      # sigstore-produced signatures and certificates.
+      run: >-
+        gh release upload
+        '${{ github.ref_name }}' dist/**
+        --repo '${{ github.repository }}'
+
+  publish-to-testpypi:
+    name: Publish Python 🐍 distribution 📦 to TestPyPI
+    needs:
+    - build
+    runs-on: ubuntu-latest
+
+    environment:
+      name: testpypi
+      url: https://test.pypi.org/p/<package-name>
+
+    permissions:
+      id-token: write  # IMPORTANT: mandatory for trusted publishing
+
+    steps:
+    - name: Download all the dists
+      uses: actions/download-artifact@v3
+      with:
+        name: python-package-distributions
+        path: dist/
+    - name: Publish distribution 📦 to TestPyPI
+      uses: pypa/gh-action-pypi-publish@release/v1
+      with:
+        repository-url: https://test.pypi.org/legacy/
\ No newline at end of file

From 008694328eaabcbf48bd51f6fdc711f4e5e1e6bc Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 22 Sep 2023 08:09:48 +0100
Subject: [PATCH 079/210] Add TestPyPI project hyperlink

---
 .github/workflows/release-action.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/release-action.yaml b/.github/workflows/release-action.yaml
index a8a846cbe..ce088f3d0 100644
--- a/.github/workflows/release-action.yaml
+++ b/.github/workflows/release-action.yaml
@@ -92,7 +92,7 @@ jobs:
 
     environment:
       name: testpypi
-      url: https://test.pypi.org/p/<package-name>
+      url: https://test.pypi.org/project/pybop/
 
     permissions:
       id-token: write  # IMPORTANT: mandatory for trusted publishing

From 66507e94dd353c6c47b2e7a00483d628c5d1016b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 22 Sep 2023 08:44:06 +0100
Subject: [PATCH 080/210] Modify TestPyPI for 'rc' tag dependancy

---
 .github/workflows/release-action.yaml | 1 +
 1 file changed, 1 insertion(+)

diff --git a/.github/workflows/release-action.yaml b/.github/workflows/release-action.yaml
index ce088f3d0..449464c97 100644
--- a/.github/workflows/release-action.yaml
+++ b/.github/workflows/release-action.yaml
@@ -86,6 +86,7 @@ jobs:
 
   publish-to-testpypi:
     name: Publish Python 🐍 distribution 📦 to TestPyPI
+    if: tags contains 'rc'  # only publish to TestPyPI on release candidate tags
     needs:
     - build
     runs-on: ubuntu-latest

From 1009ee7964b76cd9b5be7216996e9a4865b551b9 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 22 Sep 2023 09:40:23 +0100
Subject: [PATCH 081/210] Updt readme logo link for PyPI, Add estimation
 notebook, black format

---
 README.md                                  |   2 +-
 examples/notebooks/rmse-estimisation.ipynb | 302 +++++++++++++++++++++
 examples/{ => scripts}/Chen_example.csv    |   0
 examples/{ => scripts}/Initial_API.py      |   0
 noxfile.py                                 |  13 +-
 setup.py                                   |  29 +-
 6 files changed, 324 insertions(+), 22 deletions(-)
 create mode 100644 examples/notebooks/rmse-estimisation.ipynb
 rename examples/{ => scripts}/Chen_example.csv (100%)
 rename examples/{ => scripts}/Initial_API.py (100%)

diff --git a/README.md b/README.md
index 4c89bea8b..860d6e3cf 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,6 @@
 <div align="center">
 
-  <img src="assets/Temp_Logo.png" alt="logo" width="400" height="auto" />
+  <img src="https://raw.githubusercontent.com/pybop-team/PyBOP/develop/assets/Temp_Logo.png" alt="logo" width="400" height="auto" />
   <h1>Python Battery Optimisation and Parameterisation</h1>
 
 
diff --git a/examples/notebooks/rmse-estimisation.ipynb b/examples/notebooks/rmse-estimisation.ipynb
new file mode 100644
index 000000000..3f0dfcbf5
--- /dev/null
+++ b/examples/notebooks/rmse-estimisation.ipynb
@@ -0,0 +1,302 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## A NMC/Gr parameterisation example using PyBOP\n",
+    "\n",
+    "This notebook introduces a synthetic re-parameterisation of the single-particle model with corrupted observations. To start, we import the PyBOP package for parameterisation and the PyBaMM package to generate the initial synethic data,"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q \n",
+    "%pip install pybamm -q"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Next, we import the added packages plus any additional dependencies,"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "import pybop\n",
+    "import pybamm\n",
+    "import matplotlib.pyplot as plt\n",
+    "import numpy as np"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Generate Synthetic Data"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We need to generate the synthetic data required for later reparameterisation. To do this we will run the PyBaMM forward model and store the generated data. This will be integrated into PyBOP in a future release for fast synthetic generation. For now, we define the PyBaMM model with a default parameter set,"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "synthetic_model = pybamm.lithium_ion.SPM()\n",
+    "params = synthetic_model.default_parameter_values"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We can now modify individual parameters with the bespoke values and run the simulation."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "params.update(\n",
+    "    {\n",
+    "        \"Negative electrode active material volume fraction\": 0.52,\n",
+    "        \"Positive electrode active material volume fraction\": 0.63,\n",
+    "    }\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Define the experiment and run the forward model to capture the synthetic data."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "experiment = pybamm.Experiment(\n",
+    "    [\n",
+    "        (\n",
+    "            \"Discharge at 2C for 5 minutes (1 second period)\",\n",
+    "            \"Rest for 2 minutes (1 second period)\",\n",
+    "            \"Charge at 1C for 5 minutes (1 second period)\",\n",
+    "            \"Rest for 2 minutes (1 second period)\",\n",
+    "        ),\n",
+    "    ]\n",
+    "    * 2\n",
+    ")\n",
+    "sim = pybamm.Simulation(synthetic_model, experiment=experiment, parameter_values=params)\n",
+    "synthetic_sol = sim.solve()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Plot the synthetic data,"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "sim.plot()"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now, let's corrupt the synthetic data with 5mV of gaussian noise centered around zero,"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "corrupt_V = synthetic_sol[\"Terminal voltage [V]\"].data\n",
+    "corrupt_V += np.random.normal(0,0.005,len(corrupt_V))"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Identify the Parameters"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now, to blind fit the synthetic parameters we need to define the observation variables as well as update the forward model to be of PyBOP type (This composes PyBaMM's model class). For the observed voltage variable, we used the newly corrupted voltage array, "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "model = pybop.lithium_ion.SPM()\n",
+    "observations = [\n",
+    "            pybop.Observed(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
+    "            pybop.Observed(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
+    "            pybop.Observed(\"Voltage [V]\", corrupt_V),\n",
+    "        ]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Next, we define the targetted forward model parameters for estimation. Furthermore, PyBOP provides functionality to define a prior for the parameters. The initial parameters values used in the estimiation will be randomly drawn from the prior distribution."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "fit_params = [\n",
+    "    pybop.Parameter(\n",
+    "        \"Negative electrode active material volume fraction\",\n",
+    "        prior=pybop.Gaussian(0.5, 0.02),\n",
+    "        bounds=[0.375, 0.625],\n",
+    "    ),\n",
+    "    pybop.Parameter(\n",
+    "        \"Positive electrode active material volume fraction\",\n",
+    "        prior=pybop.Gaussian(0.65, 0.02),\n",
+    "        bounds=[0.525, 0.75],\n",
+    "    ),\n",
+    "]"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "We can now construct PyBOP's parameterisation class. This class provides the parameterisation methods needed to fit the forward model."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "parameterisation = pybop.Parameterisation(\n",
+    "    model, observations=observations, fit_parameters=fit_params\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Finally, we run the estimation algorithm. For this example, we use a root-mean square cost function with the BOBYQA algorithm implemented in NLOpt"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "results, last_optim, num_evals = parameterisation.rmse(\n",
+    "    signal=\"Voltage [V]\", method=\"nlopt\"\n",
+    ")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Plotting"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "First, run SPM forward model with the estimated parameters,"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "params.update(\n",
+    "        {\"Negative electrode active material volume fraction\": results[0], \n",
+    "        \"Positive electrode active material volume fraction\": results[1]}\n",
+    "        )\n",
+    "optsol = sim.solve()[\"Terminal voltage [V]\"].data"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Now, we plot the estimated forward model against the corrupted synthetic observation,"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "plt.plot(corrupt_V, label='Groundtruth')\n",
+    "plt.plot(optsol, label='Estimated')\n",
+    "plt.xlabel('Time (s)')\n",
+    "plt.ylabel('Voltage (V)')\n",
+    "plt.legend()"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "file_extension": ".jl",
+   "mimetype": "application/julia",
+   "name": "python",
+   "version": "3.10.12"
+  },
+  "orig_nbformat": 4
+ },
+ "nbformat": 4,
+ "nbformat_minor": 2
+}
diff --git a/examples/Chen_example.csv b/examples/scripts/Chen_example.csv
similarity index 100%
rename from examples/Chen_example.csv
rename to examples/scripts/Chen_example.csv
diff --git a/examples/Initial_API.py b/examples/scripts/Initial_API.py
similarity index 100%
rename from examples/Initial_API.py
rename to examples/scripts/Initial_API.py
diff --git a/noxfile.py b/noxfile.py
index b48348a9e..9117de5ba 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -11,12 +11,13 @@
 
 @nox.session
 def unit_test(session):
-    session.run_always('pip', 'install', '-e', '.')
-    session.install('pytest')
-    session.run('pytest')
+    session.run_always("pip", "install", "-e", ".")
+    session.install("pytest")
+    session.run("pytest")
+
 
 @nox.session
 def coverage(session):
-    session.run_always('pip', 'install', '-e', '.')
-    session.install('pytest-cov')
-    session.run('pytest', '--cov', '--cov-report=xml')
\ No newline at end of file
+    session.run_always("pip", "install", "-e", ".")
+    session.install("pytest-cov")
+    session.run("pytest", "--cov", "--cov-report=xml")
diff --git a/setup.py b/setup.py
index d08697bff..3e374ef47 100644
--- a/setup.py
+++ b/setup.py
@@ -5,29 +5,28 @@
 # User-friendly description from README.md
 current_directory = os.path.dirname(os.path.abspath(__file__))
 try:
-    with open(os.path.join(current_directory, 'README.md'), encoding='utf-8') as f:
+    with open(os.path.join(current_directory, "README.md"), encoding="utf-8") as f:
         long_description = f.read()
 except Exception:
-    long_description = ''
+    long_description = ""
 
 setup(
-	name='pybop',
-	packages=find_packages('.'),
-	version='0.0.1',
-	license='BSD-3-Clause',
-	description='Python Battery Optimisation and Parameterisation',
-	long_description=long_description,
-	long_description_content_type='text/markdown',
-	url='https://github.com/pybop-team/PyBOP',
-
-	install_requires=[
+    name="pybop",
+    packages=find_packages("."),
+    version="0.0.1",
+    license="BSD-3-Clause",
+    description="Python Battery Optimisation and Parameterisation",
+    long_description=long_description,
+    long_description_content_type="text/markdown",
+    url="https://github.com/pybop-team/PyBOP",
+    install_requires=[
         "pybamm>=23.1",
         "numpy>=1.16",
         "scipy>=1.3",
         "pandas>=1.0",
         "nlopt>=2.6",
-	],
-	# https://pypi.org/classifiers/ 
-	classifiers=[],
+    ],
+    # https://pypi.org/classifiers/
+    classifiers=[],
     python_requires=">=3.8,<=3.12",
 )

From 48c44ceca2230fe0e9618b08bd587bd0f7074b9e Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 22 Sep 2023 10:05:40 +0100
Subject: [PATCH 082/210] release-action.yaml trigger fix for TestPyPI

---
 .github/workflows/release-action.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/release-action.yaml b/.github/workflows/release-action.yaml
index 449464c97..8bfa74f15 100644
--- a/.github/workflows/release-action.yaml
+++ b/.github/workflows/release-action.yaml
@@ -86,7 +86,7 @@ jobs:
 
   publish-to-testpypi:
     name: Publish Python 🐍 distribution 📦 to TestPyPI
-    if: tags contains 'rc'  # only publish to TestPyPI on release candidate tags
+    if: contains(github.ref, 'rc')  # only publish to TestPyPI for rc tags
     needs:
     - build
     runs-on: ubuntu-latest

From 794d2e882e06bbd28256996c7b07b4d560a9890e Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Sun, 24 Sep 2023 16:42:03 +0100
Subject: [PATCH 083/210] Updt. contributors section, architecture hyperlink

---
 README.md | 28 ++++++++--------------------
 1 file changed, 8 insertions(+), 20 deletions(-)

diff --git a/README.md b/README.md
index 860d6e3cf..518393dfd 100644
--- a/README.md
+++ b/README.md
@@ -41,7 +41,7 @@ The figure below gives PyBOP's current conceptual structure. The living software
 
 
 <p align="center">
-    <img src="assets/PyBOP_Architecture.png" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
+    <img src="https://raw.githubusercontent.com/pybop-team/PyBOP/develop/assets/PyBOP_Architecture.png" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
 </p>
 
 <!-- Getting Started -->
@@ -84,7 +84,7 @@ Later, you can deactivate the environment and go back to your original system us
 deactivate
 ```
 
-Note that there are alternative packages which can be used to create and manage [virtual environments](https://realpython.com/python-virtual-environments-a-primer/), for example [pyenv](https://github.com/pyenv/pyenv#installation) and [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv#installation). In this case, follow the instructions to install these packages and then to create, activate and deactivate a virtual environment, use:
+Note that there are alternative packages that can be used to create and manage [virtual environments](https://realpython.com/python-virtual-environments-a-primer/), for example [pyenv](https://github.com/pyenv/pyenv#installation) and [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv#installation). In this case, follow the instructions to install these packages and then to create, activate and deactivate a virtual environment, use:
 
 ```bash
 pyenv virtualenv pybop-env
@@ -104,11 +104,11 @@ To alternatively install PyBOP from a local directory, use the following templat
 pip install -e "PATH_TO_PYBOP"
 ```
 
-Now, with PyBOP installed in your virtual environment, you can run Python scripts which import and use the functionality of this package.
+Now, with PyBOP installed in your virtual environment, you can run Python scripts that import and use the functionality of this package.
 
 <!-- Example Usage -->
 ### Usage
-PyBOP has two classes of intended use case:
+PyBOP has two classes of intended use cases:
 1. parameter estimation from battery test data
 2. design optimisation subject to battery manufacturing/usage constraints
 
@@ -204,8 +204,9 @@ learning from the success of the [PyBaMM](https://pybamm.org/) community. Our va
 
 
 <!-- Contributing -->
-## Contributing
-Thanks to all of our contributing members! [[emoji key](https://allcontributors.org/docs/en/emoji-key)]
+## Contributors ✨
+
+Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
 
 <!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
 <!-- prettier-ignore-start -->
@@ -226,17 +227,4 @@ Thanks to all of our contributing members! [[emoji key](https://allcontributors.
 
 <!-- ALL-CONTRIBUTORS-LIST:END -->
 
-Contributions are always welcome! See `contributing.md` for ways to get started.
-
-## Contributors ✨
-
-Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
-
-<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
-<!-- prettier-ignore-start -->
-<!-- markdownlint-disable -->
-<!-- markdownlint-restore -->
-<!-- prettier-ignore-end -->
-<!-- ALL-CONTRIBUTORS-LIST:END -->
-
-This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specifications. Contributions of any kind are welcome!
\ No newline at end of file
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specifications. Contributions of any kind are welcome! See `contributing.md` for ways to get started.
\ No newline at end of file

From 13d41b24c207b7bac16dcb2d3cf8172692eee066 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 25 Sep 2023 16:05:31 +0100
Subject: [PATCH 084/210] Add version.py functionality

---
 setup.py | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/setup.py b/setup.py
index 3e374ef47..ba81b7f8e 100644
--- a/setup.py
+++ b/setup.py
@@ -9,11 +9,16 @@
         long_description = f.read()
 except Exception:
     long_description = ""
+    
+# Defines __version__
+root = os.path.abspath(os.path.dirname(__file__))
+with open(os.path.join(root, "pybop", "version.py")) as f:
+    exec(f.read())
 
 setup(
     name="pybop",
     packages=find_packages("."),
-    version="0.0.1",
+    version=__version__,
     license="BSD-3-Clause",
     description="Python Battery Optimisation and Parameterisation",
     long_description=long_description,

From e45ae119e509b55da74221a38604009c230591f4 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 25 Sep 2023 16:06:01 +0100
Subject: [PATCH 085/210] python version requries

---
 setup.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/setup.py b/setup.py
index ba81b7f8e..a2804312c 100644
--- a/setup.py
+++ b/setup.py
@@ -33,5 +33,5 @@
     ],
     # https://pypi.org/classifiers/
     classifiers=[],
-    python_requires=">=3.8,<=3.12",
+    python_requires=">=3.8,<=3.11",
 )

From dbcb8380121f74f1c652593724b6db4bef930614 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 25 Sep 2023 16:17:05 +0100
Subject: [PATCH 086/210] revert python version change

---
 setup.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/setup.py b/setup.py
index a2804312c..ba81b7f8e 100644
--- a/setup.py
+++ b/setup.py
@@ -33,5 +33,5 @@
     ],
     # https://pypi.org/classifiers/
     classifiers=[],
-    python_requires=">=3.8,<=3.11",
+    python_requires=">=3.8,<=3.12",
 )

From 4d5cd3c1216aadd14aa438df8a4357ceb3627392 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 25 Sep 2023 16:53:40 +0100
Subject: [PATCH 087/210] Transfer pybamm model construction methods to
 BaseModel, Add pybamm SPMe class

---
 pybop/models/BaseModel.py                 | 143 +++++++++++++++-
 pybop/models/lithium_ion/__init__.py      |   2 +-
 pybop/models/lithium_ion/pybamm_models.py |  79 +++++++++
 pybop/models/lithium_ion/spm.py           | 188 ----------------------
 pybop/parameterisation.py                 |   2 +-
 5 files changed, 220 insertions(+), 194 deletions(-)
 create mode 100644 pybop/models/lithium_ion/pybamm_models.py
 delete mode 100644 pybop/models/lithium_ion/spm.py

diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 809a99e28..1c2c3a3f5 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -1,4 +1,5 @@
 import pybop
+import pybamm
 
 
 class BaseModel:
@@ -7,18 +8,152 @@ class BaseModel:
     """
 
     def __init__(self, name="Base Model"):
-        # self.pybamm_model = None
+        self.pybamm_model = None
         self.name = name
         # self.parameter_set = None
 
-    def build(self):
+    def build(
+            self,
+            observations,
+            fit_parameters,
+            check_model=True,
+            init_soc=None,
+        ):
+            """
+            Build the model (if not built already).
+            """
+            if init_soc is not None:
+                self.set_init_soc(init_soc)
+
+            if self._built_model:
+                return
+
+            elif self.pybamm_model.is_discretised:
+                self._model_with_set_params = self.pybamm_model
+                self._built_model = self.pybamm_model
+            else:
+                self.set_params(observations, fit_parameters)
+                self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
+                self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
+                self._built_model = self._disc.process_model(
+                    self._model_with_set_params, inplace=False, check_model=check_model
+                )
+                # Set t_eval
+                self.time_data = self._parameter_set["Current function [A]"].x[0]
+
+                # Clear solver
+                self._solver._model_set_up = {}
+
+    def set_init_soc(self, init_soc):
         """
-        Build the model
+        Set the initial state of charge.
         """
-        pass
+        if self._built_initial_soc != init_soc:
+            # reset
+            self._model_with_set_params = None
+            self._built_model = None
+            self.op_conds_to_built_models = None
+            self.op_conds_to_built_solvers = None
+
+        param = self.pybamm_model.param
+        self.parameter_set = (
+            self._unprocessed_parameter_set.set_initial_stoichiometries(
+                init_soc, param=param, inplace=False
+            )
+        )
+        # Save solved initial SOC in case we need to rebuild the model
+        self._built_initial_soc = init_soc
+
+    def set_params(self, observations, fit_parameters):
+        """
+        Set the parameters in the model.
+        """
+        if self.model_with_set_params:
+            return
+
+        try:
+            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
+                observations["Time [s]"].data,
+                observations["Current function [A]"].data,
+                pybamm.t,
+            )
+        except:
+            raise ValueError("Current function not supplied")
+
+        # set input parameters in parameter set from fitting parameters
+        for i in fit_parameters:
+            self.parameter_set[i] = "[input]"
+
+        self._model_with_set_params = self._parameter_set.process_model(
+            self._unprocessed_model, inplace=False
+        )
+        self._parameter_set.process_geometry(self.geometry)
+        self.pybamm_model = self._model_with_set_params
+
 
     def sim(self):
         """
         Simulate the model
         """
         pass
+    
+    @property
+    def built_model(self):
+        return self._built_model
+
+    @property
+    def parameter_set(self):
+        return self._parameter_set
+
+    @parameter_set.setter
+    def parameter_set(self, parameter_set):
+        self._parameter_set = parameter_set.copy()
+
+    @property
+    def model_with_set_params(self):
+        return self._model_with_set_params
+
+    @property
+    def geometry(self):
+        return self._geometry
+
+    @geometry.setter
+    def geometry(self, geometry):
+        self._geometry = geometry.copy()
+
+    @property
+    def submesh_types(self):
+        return self._submesh_types
+
+    @submesh_types.setter
+    def submesh_types(self, submesh_types):
+        self._submesh_types = submesh_types.copy()
+
+    @property
+    def mesh(self):
+        return self._mesh
+
+    @property
+    def var_pts(self):
+        return self._var_pts
+
+    @var_pts.setter
+    def var_pts(self, var_pts):
+        self._var_pts = var_pts.copy()
+
+    @property
+    def spatial_methods(self):
+        return self._spatial_methods
+
+    @spatial_methods.setter
+    def spatial_methods(self, spatial_methods):
+        self._spatial_methods = spatial_methods.copy()
+
+    @property
+    def solver(self):
+        return self._solver
+
+    @solver.setter
+    def solver(self, solver):
+        self._solver = solver.copy()
+
diff --git a/pybop/models/lithium_ion/__init__.py b/pybop/models/lithium_ion/__init__.py
index bd2bf037b..c7de73260 100644
--- a/pybop/models/lithium_ion/__init__.py
+++ b/pybop/models/lithium_ion/__init__.py
@@ -2,4 +2,4 @@
 # Import lithium ion based models
 #
 
-from .spm import SPM
+from .pybamm_models import SPM, SPMe
diff --git a/pybop/models/lithium_ion/pybamm_models.py b/pybop/models/lithium_ion/pybamm_models.py
new file mode 100644
index 000000000..fa391022b
--- /dev/null
+++ b/pybop/models/lithium_ion/pybamm_models.py
@@ -0,0 +1,79 @@
+import pybop
+import pybamm
+from ..BaseModel import BaseModel
+
+
+class SPM(BaseModel):
+    """
+    Composition of the SPM class in PyBaMM.
+    """
+
+    def __init__(
+        self,
+        name="Single Particle Model",
+        parameter_set=None,
+        geometry=None,
+        submesh_types=None,
+        var_pts=None,
+        spatial_methods=None,
+        solver=None,
+    ):
+        super().__init__()
+        self.pybamm_model = pybamm.lithium_ion.SPM()
+        self._unprocessed_model = self.pybamm_model
+        self.name = name
+
+        self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
+        self._unprocessed_parameter_set = self.parameter_set
+
+        self.geometry = geometry or self.pybamm_model.default_geometry
+        self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types
+        self.var_pts = var_pts or self.pybamm_model.default_var_pts
+        self.spatial_methods = (
+            spatial_methods or self.pybamm_model.default_spatial_methods
+        )
+        self.solver = solver or self.pybamm_model.default_solver
+
+        self._model_with_set_params = None
+        self._built_model = None
+        self._built_initial_soc = None
+        self._mesh = None
+        self._disc = None
+
+
+class SPMe(BaseModel):
+    """
+    Composition of the SPMe class in PyBaMM.
+    """
+
+    def __init__(
+        self,
+        name="Single Particle Model with Electrolyte",
+        parameter_set=None,
+        geometry=None,
+        submesh_types=None,
+        var_pts=None,
+        spatial_methods=None,
+        solver=None,
+    ):
+        super().__init__()
+        self.pybamm_model = pybamm.lithium_ion.SPMe()
+        self._unprocessed_model = self.pybamm_model
+        self.name = name
+
+        self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
+        self._unprocessed_parameter_set = self.parameter_set
+
+        self.geometry = geometry or self.pybamm_model.default_geometry
+        self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types
+        self.var_pts = var_pts or self.pybamm_model.default_var_pts
+        self.spatial_methods = (
+            spatial_methods or self.pybamm_model.default_spatial_methods
+        )
+        self.solver = solver or self.pybamm_model.default_solver
+
+        self._model_with_set_params = None
+        self._built_model = None
+        self._built_initial_soc = None
+        self._mesh = None
+        self._disc = None
\ No newline at end of file
diff --git a/pybop/models/lithium_ion/spm.py b/pybop/models/lithium_ion/spm.py
deleted file mode 100644
index 133a241b6..000000000
--- a/pybop/models/lithium_ion/spm.py
+++ /dev/null
@@ -1,188 +0,0 @@
-import pybop
-import pybamm
-from ..BaseModel import BaseModel
-
-
-class SPM(BaseModel):
-    """
-    Composition of the SPM class in PyBaMM.
-    """
-
-    def __init__(
-        self,
-        name="Single Particle Model",
-        parameter_set=None,
-        geometry=None,
-        submesh_types=None,
-        var_pts=None,
-        spatial_methods=None,
-        solver=None,
-    ):
-        super().__init__()
-        self.pybamm_model = pybamm.lithium_ion.SPM()
-        self._unprocessed_model = self.pybamm_model
-        self.name = name
-
-        self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
-        self._unprocessed_parameter_set = self.parameter_set
-
-        self.geometry = geometry or self.pybamm_model.default_geometry
-        self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types
-        self.var_pts = var_pts or self.pybamm_model.default_var_pts
-        self.spatial_methods = (
-            spatial_methods or self.pybamm_model.default_spatial_methods
-        )
-        self.solver = solver or self.pybamm_model.default_solver
-
-        self._model_with_set_params = None
-        self._built_model = None
-        self._built_initial_soc = None
-        self._mesh = None
-        self._disc = None
-
-    def build_model(
-        self,
-        observations,
-        fit_parameters,
-        check_model=True,
-        init_soc=None,
-    ):
-        """
-        Build the model (if not built already).
-        """
-        if init_soc is not None:
-            self.set_init_soc(init_soc)
-
-        if self._built_model:
-            return
-
-        elif self.pybamm_model.is_discretised:
-            self._model_with_set_params = self.pybamm_model
-            self._built_model = self.pybamm_model
-        else:
-            self.set_params(observations, fit_parameters)
-            self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
-            self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
-            self._built_model = self._disc.process_model(
-                self._model_with_set_params, inplace=False, check_model=check_model
-            )
-            # Set t_eval
-            self.time_data = self._parameter_set["Current function [A]"].x[0]
-
-            # Clear solver
-            self._solver._model_set_up = {}
-
-    def set_init_soc(self, init_soc):
-        """
-        Set the initial state of charge.
-        """
-        if self._built_initial_soc != init_soc:
-            # reset
-            self._model_with_set_params = None
-            self._built_model = None
-            self.op_conds_to_built_models = None
-            self.op_conds_to_built_solvers = None
-
-        param = self.pybamm_model.param
-        self.parameter_set = (
-            self._unprocessed_parameter_set.set_initial_stoichiometries(
-                init_soc, param=param, inplace=False
-            )
-        )
-        # Save solved initial SOC in case we need to rebuild the model
-        self._built_initial_soc = init_soc
-
-    def set_params(self, observations, fit_parameters):
-        """
-        Set the parameters in the model.
-        """
-        if self.model_with_set_params:
-            return
-
-        try:
-            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                observations["Time [s]"].data,
-                observations["Current function [A]"].data,
-                pybamm.t,
-            )
-        except:
-            raise ValueError("Current function not supplied")
-
-        # set input parameters in parameter set from fitting parameters
-        for i in fit_parameters:
-            self.parameter_set[i] = "[input]"
-
-        self._model_with_set_params = self._parameter_set.process_model(
-            self._unprocessed_model, inplace=False
-        )
-        self._parameter_set.process_geometry(self.geometry)
-        self.pybamm_model = self._model_with_set_params
-
-    def sim(self):
-        """
-        Simulate the model
-        """
-
-    @property
-    def built_model(self):
-        return self._built_model
-
-    @property
-    def parameter_set(self):
-        return self._parameter_set
-
-    @parameter_set.setter
-    def parameter_set(self, parameter_set):
-        self._parameter_set = parameter_set.copy()
-
-    @property
-    def model_with_set_params(self):
-        return self._model_with_set_params
-
-    @property
-    def built_model(self):
-        return self._built_model
-
-    @property
-    def geometry(self):
-        return self._geometry
-
-    @geometry.setter
-    def geometry(self, geometry):
-        self._geometry = geometry.copy()
-
-    @property
-    def submesh_types(self):
-        return self._submesh_types
-
-    @submesh_types.setter
-    def submesh_types(self, submesh_types):
-        self._submesh_types = submesh_types.copy()
-
-    @property
-    def mesh(self):
-        return self._mesh
-
-    @property
-    def var_pts(self):
-        return self._var_pts
-
-    @var_pts.setter
-    def var_pts(self, var_pts):
-        self._var_pts = var_pts.copy()
-
-    @property
-    def spatial_methods(self):
-        return self._spatial_methods
-
-    @spatial_methods.setter
-    def spatial_methods(self, spatial_methods):
-        self._spatial_methods = spatial_methods.copy()
-
-    @property
-    def solver(self):
-        return self._solver
-
-    @solver.setter
-    def solver(self, solver):
-        self._solver = solver.copy()
diff --git a/pybop/parameterisation.py b/pybop/parameterisation.py
index aa6828d3c..cbc802240 100644
--- a/pybop/parameterisation.py
+++ b/pybop/parameterisation.py
@@ -47,7 +47,7 @@ def __init__(
             self.fit_dict[j] = {j: self.x0[i]}
 
         # Build model with observations and fitting_parameters
-        self.model.build_model(
+        self.model.build(
             self.observations,
             self.fit_parameters,
             check_model=check_model,

From 1e79b47558e6fa767fd2da4e9d8fd7e9e5221e49 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 26 Sep 2023 14:34:03 +0100
Subject: [PATCH 088/210] Add sim method, bugfix data reference in example

---
 .../{Initial_API.py => rmse-estimisation.py}  |  6 +-
 pybop/models/BaseModel.py                     | 73 ++++++++++---------
 pybop/models/lithium_ion/pybamm_models.py     |  2 +-
 setup.py                                      |  2 +-
 4 files changed, 43 insertions(+), 40 deletions(-)
 rename examples/scripts/{Initial_API.py => rmse-estimisation.py} (85%)

diff --git a/examples/scripts/Initial_API.py b/examples/scripts/rmse-estimisation.py
similarity index 85%
rename from examples/scripts/Initial_API.py
rename to examples/scripts/rmse-estimisation.py
index 5a47e27aa..1e82d1df6 100644
--- a/examples/scripts/Initial_API.py
+++ b/examples/scripts/rmse-estimisation.py
@@ -3,7 +3,7 @@
 import numpy as np
 
 # Form observations
-Measurements = pd.read_csv("examples/Chen_example.csv", comment="#").to_numpy()
+Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
 observations = [
     pybop.Observed("Time [s]", Measurements[:, 0]),
     pybop.Observed("Current function [A]", Measurements[:, 1]),
@@ -11,8 +11,8 @@
 ]
 
 # Define model
-parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
-model = pybop.models.lithium_ion.SPM(parameter_set=parameter_set)
+# parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+model = pybop.models.lithium_ion.SPM()
 
 # Fitting parameters
 params = [
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 1c2c3a3f5..0e9fdca9c 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -13,36 +13,36 @@ def __init__(self, name="Base Model"):
         # self.parameter_set = None
 
     def build(
-            self,
-            observations,
-            fit_parameters,
-            check_model=True,
-            init_soc=None,
-        ):
-            """
-            Build the model (if not built already).
-            """
-            if init_soc is not None:
-                self.set_init_soc(init_soc)
-
-            if self._built_model:
-                return
-
-            elif self.pybamm_model.is_discretised:
-                self._model_with_set_params = self.pybamm_model
-                self._built_model = self.pybamm_model
-            else:
-                self.set_params(observations, fit_parameters)
-                self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
-                self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
-                self._built_model = self._disc.process_model(
-                    self._model_with_set_params, inplace=False, check_model=check_model
-                )
-                # Set t_eval
-                self.time_data = self._parameter_set["Current function [A]"].x[0]
-
-                # Clear solver
-                self._solver._model_set_up = {}
+        self,
+        observations,
+        fit_parameters,
+        check_model=True,
+        init_soc=None,
+    ):
+        """
+        Build the model (if not built already).
+        """
+        if init_soc is not None:
+            self.set_init_soc(init_soc)
+
+        if self._built_model:
+            return
+
+        elif self.pybamm_model.is_discretised:
+            self._model_with_set_params = self.pybamm_model
+            self._built_model = self.pybamm_model
+        else:
+            self.set_params(observations, fit_parameters)
+            self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
+            self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
+            self._built_model = self._disc.process_model(
+                self._model_with_set_params, inplace=False, check_model=check_model
+            )
+            # Set t_eval
+            self.time_data = self._parameter_set["Current function [A]"].x[0]
+
+            # Clear solver
+            self._solver._model_set_up = {}
 
     def set_init_soc(self, init_soc):
         """
@@ -90,13 +90,17 @@ def set_params(self, observations, fit_parameters):
         self._parameter_set.process_geometry(self.geometry)
         self.pybamm_model = self._model_with_set_params
 
-
-    def sim(self):
+    def sim(self, experiment=None, parameter_set=None):
         """
         Simulate the model
         """
-        pass
-    
+        self.parameter_set = parameter_set or self.parameter_set
+        return pybamm.Simulation(
+            self._built_model,
+            experiment=experiment,
+            parameter_values=self.parameter_set,
+        )
+
     @property
     def built_model(self):
         return self._built_model
@@ -156,4 +160,3 @@ def solver(self):
     @solver.setter
     def solver(self, solver):
         self._solver = solver.copy()
-
diff --git a/pybop/models/lithium_ion/pybamm_models.py b/pybop/models/lithium_ion/pybamm_models.py
index fa391022b..9914cc837 100644
--- a/pybop/models/lithium_ion/pybamm_models.py
+++ b/pybop/models/lithium_ion/pybamm_models.py
@@ -76,4 +76,4 @@ def __init__(
         self._built_model = None
         self._built_initial_soc = None
         self._mesh = None
-        self._disc = None
\ No newline at end of file
+        self._disc = None
diff --git a/setup.py b/setup.py
index ba81b7f8e..28900d55e 100644
--- a/setup.py
+++ b/setup.py
@@ -9,7 +9,7 @@
         long_description = f.read()
 except Exception:
     long_description = ""
-    
+
 # Defines __version__
 root = os.path.abspath(os.path.dirname(__file__))
 with open(os.path.join(root, "pybop", "version.py")) as f:

From 49b39f1fd3c0562076cbe44c12075b17eae5c74e Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 26 Sep 2023 15:19:06 +0100
Subject: [PATCH 089/210] Add entry logic for sim method, Add SPMe
 parameterisation testcase

---
 pybop/models/BaseModel.py           | 15 +++++---
 tests/unit/test_parameterisation.py | 59 ++++++++++++++++++++++++-----
 2 files changed, 59 insertions(+), 15 deletions(-)

diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 0e9fdca9c..ecaed6f3e 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -94,12 +94,15 @@ def sim(self, experiment=None, parameter_set=None):
         """
         Simulate the model
         """
-        self.parameter_set = parameter_set or self.parameter_set
-        return pybamm.Simulation(
-            self._built_model,
-            experiment=experiment,
-            parameter_values=self.parameter_set,
-        )
+        if self.pybamm_model is not None:
+            self.parameter_set = parameter_set or self.parameter_set
+            return pybamm.Simulation(
+                self.pybamm_model,
+                experiment=experiment,
+                parameter_values=self.parameter_set,
+            )
+        else:
+            raise ValueError("Sim currently only supports PyBaMM models")
 
     @property
     def built_model(self):
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index 40d2b7f3d..f9f821f90 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -1,15 +1,13 @@
 import pybop
 import pybamm
-import pytest
 import numpy as np
 
 
 class TestParameterisation:
-    def getdata(self, x0):
-        model = pybamm.lithium_ion.SPM()
-        params = model.default_parameter_values
+    def getdata(self, model, x0):
+        model.parameter_set = model.pybamm_model.default_parameter_values
 
-        params.update(
+        model.parameter_set.update(
             {
                 "Negative electrode active material volume fraction": x0[0],
                 "Positive electrode active material volume fraction": x0[1],
@@ -26,13 +24,18 @@ def getdata(self, x0):
             ]
             * 2
         )
-        sim = pybamm.Simulation(model, experiment=experiment, parameter_values=params)
+        sim = model.sim(experiment=experiment)
         return sim.solve()
 
-    def test_rmse(self):
+    def test_spm(self):
+
+        # Define model
+        model = pybop.lithium_ion.SPM()
+        model.parameter_set = model.pybamm_model.default_parameter_values
+
         # Form observations
         x0 = np.array([0.52, 0.63])
-        solution = self.getdata(x0)
+        solution = self.getdata(model, x0)
 
         observations = [
             pybop.Observed("Time [s]", solution["Time [s]"].data),
@@ -40,10 +43,48 @@ def test_rmse(self):
             pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
+        # Fitting parameters
+        params = [
+            pybop.Parameter(
+                "Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.5, 0.02),
+                bounds=[0.375, 0.625],
+            ),
+            pybop.Parameter(
+                "Positive electrode active material volume fraction",
+                prior=pybop.Gaussian(0.65, 0.02),
+                bounds=[0.525, 0.75],
+            ),
+        ]
+
+        parameterisation = pybop.Parameterisation(
+            model, observations=observations, fit_parameters=params
+        )
+
+        # get RMSE estimate using NLOpt
+        results, last_optim, num_evals = parameterisation.rmse(
+            signal="Voltage [V]", method="nlopt"
+        )
+        # Assertions
+        np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
+        np.testing.assert_allclose(results, x0, atol=1e-1)
+
+    def test_spme(self):
+
         # Define model
-        model = pybop.models.lithium_ion.SPM()
+        model = pybop.lithium_ion.SPMe()
         model.parameter_set = model.pybamm_model.default_parameter_values
 
+        # Form observations
+        x0 = np.array([0.52, 0.63])
+        solution = self.getdata(model, x0)
+
+        observations = [
+            pybop.Observed("Time [s]", solution["Time [s]"].data),
+            pybop.Observed("Current function [A]", solution["Current [A]"].data),
+            pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
+        ]
+
         # Fitting parameters
         params = [
             pybop.Parameter(

From bab4b374315662123178f77c548d51972ee67f9d Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 26 Sep 2023 15:42:57 +0100
Subject: [PATCH 090/210] Tidy __init__, Updt. model directory names, Updt.
 BaseModel sim error message

---
 pybop/__init__.py                                  | 14 +++-----------
 pybop/models/BaseModel.py                          |  2 +-
 pybop/models/lithium_ion/__init__.py               |  2 +-
 .../lithium_ion/{pybamm_models.py => pybamm.py}    |  0
 4 files changed, 5 insertions(+), 13 deletions(-)
 rename pybop/models/lithium_ion/{pybamm_models.py => pybamm.py} (100%)

diff --git a/pybop/__init__.py b/pybop/__init__.py
index ad678ba42..1b71c1d46 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -2,20 +2,18 @@
 # Root of the pybop module.
 # Provides access to all shared functionality (models, solvers, etc.).
 #
-# The code in this file is adapted from Pints
+# This file is adapted from Pints
 # (see https://github.com/pints-team/pints)
 #
 
 import sys
 import os
 
-
 #
 # Version info
 #
 from pybop.version import __version__
 
-
 #
 # Constants
 #
@@ -28,19 +26,13 @@
 #
 # Model Classes
 #
-from .models import BaseModel
-from .models import lithium_ion
+from .models import BaseModel, lithium_ion
 
 #
 # Parameterisation class
 #
-from .parameter_sets import ParameterSet
-
-#
-# Parameterisation class
-#
-
 from .parameterisation import Parameterisation
+from .parameter_sets import ParameterSet
 from .parameters import Parameter
 
 #
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index ecaed6f3e..697900f7a 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -102,7 +102,7 @@ def sim(self, experiment=None, parameter_set=None):
                 parameter_values=self.parameter_set,
             )
         else:
-            raise ValueError("Sim currently only supports PyBaMM models")
+            raise ValueError("This sim method currently only supports PyBaMM models")
 
     @property
     def built_model(self):
diff --git a/pybop/models/lithium_ion/__init__.py b/pybop/models/lithium_ion/__init__.py
index c7de73260..43b78b32e 100644
--- a/pybop/models/lithium_ion/__init__.py
+++ b/pybop/models/lithium_ion/__init__.py
@@ -2,4 +2,4 @@
 # Import lithium ion based models
 #
 
-from .pybamm_models import SPM, SPMe
+from .pybamm import SPM, SPMe
diff --git a/pybop/models/lithium_ion/pybamm_models.py b/pybop/models/lithium_ion/pybamm.py
similarity index 100%
rename from pybop/models/lithium_ion/pybamm_models.py
rename to pybop/models/lithium_ion/pybamm.py

From 6646078b62cd8048f87aadbaa4f171bf76906b02 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 2 Oct 2023 18:20:18 +0100
Subject: [PATCH 091/210] Bump version for initial release

---
 pybop/version.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pybop/version.py b/pybop/version.py
index f102a9cad..41a1fa8c0 100644
--- a/pybop/version.py
+++ b/pybop/version.py
@@ -1 +1 @@
-__version__ = "0.0.1"
+__version__ = "23.09"

From 99c00954338ad795e2d03dc79263fcfa94f1b68b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 3 Oct 2023 13:08:46 +0100
Subject: [PATCH 092/210] Updt contributing.md for recommendation on source
 citation

---
 CONTRIBUTING.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 2a34360f1..30d2fe59f 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -68,7 +68,7 @@ Class names are CamelCase, and start with an upper case letter, for example `MyO
 While it's a bad idea for developers to "reinvent the wheel", it's important for users to get a _reasonably sized download and an easy install_. In addition, external libraries can sometimes cease to be supported, and when they contain bugs it might take a while before fixes become available as automatic downloads to PyBOP users.
 For these reasons, all dependencies in PyBOP should be thought about carefully and discussed on GitHub.
 
-Direct inclusion of code from other packages is possible, as long as their license permits it and is compatible with ours, but again should be considered carefully and discussed in the group. Snippets from blogs and [stackoverflow](https://stackoverflow.com/) can often be included without attribution, but if they solve a particularly nasty problem (or are very hard to read) it's often a good idea to attribute (and document) them, by commenting with a link in the source code.
+Direct inclusion of code from other packages is possible, as long as their license permits it and is compatible with ours, but again should be considered carefully and discussed in the group. Snippets from blogs and [stackoverflow](https://stackoverflow.com/) can often be included but must include attribution to the original by commenting with a link in the source code.
 
 ### Separating dependencies
 

From 37f512b6cd44d81ec90633c5dd35842f1f3cdfa6 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 4 Oct 2023 11:26:44 +0100
Subject: [PATCH 093/210] Add identified parameters

---
 examples/notebooks/rmse-estimisation.ipynb | 192 ++++++++++++++++++---
 1 file changed, 166 insertions(+), 26 deletions(-)

diff --git a/examples/notebooks/rmse-estimisation.ipynb b/examples/notebooks/rmse-estimisation.ipynb
index 3f0dfcbf5..f8fa02219 100644
--- a/examples/notebooks/rmse-estimisation.ipynb
+++ b/examples/notebooks/rmse-estimisation.ipynb
@@ -11,12 +11,21 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 1,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Note: you may need to restart the kernel to use updated packages.\n",
+      "Note: you may need to restart the kernel to use updated packages.\n"
+     ]
+    }
+   ],
    "source": [
-    "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q \n",
-    "%pip install pybamm -q"
+    "%pip install --upgrade pip ipywidgets pybamm -q\n",
+    "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q "
    ]
   },
   {
@@ -28,7 +37,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 2,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -54,7 +63,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 3,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -71,7 +80,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 4,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -92,7 +101,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 5,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -120,9 +129,44 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 6,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "image/png": "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S2VdBQDA2LFjtRq8H1UTXQUAwLvvvot33323whgiIiIiIiIiopfRggULMGbMGIwYMQIAEB0djbi4OCxfvhyfffZZmfjVq1drzS9duhQbN25EcnIyAgICpOVyubzKY9IVFBSgoKBAmtdoNAAAQ0PDau8PEVFtqfad6ERERERERERE9HwrLCxEeno6vL29pWV6enrw9vZGWlpaleq4c+cOioqKYGlpqbU8NTUVTZo0gZOTE8aPH48bN26UW0dERATMzc2lyc7O7vF2iIioFrERnYiIiIiIiIiojvnnn39QXFwMKysrreVWVlZQq9VVquPTTz+Fra2tVkO8r68vVq5cieTkZHz99dfYuXMn/Pz8UFxcrLOOsLAw5ObmStOVK1cAACUlJY+5Z0REzx4b0YmIiIiI6pAlS5bAxcUFCoUCCoUCnp6e+PXXXwEAN2/exEcffQQnJycYGxujWbNmmDBhAnJzc7XqeHTAOJlMhrVr12rFpKamokOHDpDL5WjRogViY2PL5FKdweyIiOj5Mnv2bKxduxabN2+GkZGRtHzQoEF488030a5dO/j7+2P79u04dOgQUlNTddYjl8ul76TSCQDu3r37LHaDiKhGsBGdiIiIiKgOadq0KWbPno309HQcPnwYPXv2RP/+/XHy5Elcu3YN165dw7x583DixAnExsYiPj4eo0aNKlNPTEyM1qBx/v7+UllmZib69u2LHj16QKVSISQkBKNHj0ZCQoIUU93B7IiIqGY1atQI+vr6yM7O1lqenZ1daX/m8+bNw+zZs5GYmAgXF5cKY5s3b45GjRrh/PnzT5wzEdHzqtoDixIRERER0fOrX79+WvNffvkllixZgv3792PUqFHYuHGjVPbqq6/iyy+/xPvvv4/79++jXr3//XlgYWFRbiNLdHQ0HB0dMX/+fABAmzZtsGfPHixcuBBKpRJA9QezK1XeAHRERFQ9hoaGcHd3R3JysvRDaElJCZKTkxEcHFzuenPmzMGXX36JhIQEdOzYsdLtXL16FTdu3ICNjU1NpU5E9NzhnehERERERHVUcXEx1q5di/z8fHh6euqMyc3NhUKh0GpAB4CgoCA0atQInTp1wvLlyyGEkMrS0tK0+scFAKVSKQ1U9ySD2XEAOiKimhMaGooffvgBK1aswOnTpzF+/Hjk5+dLP3AGBAQgLCxMiv/666/xxRdf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F/t1IqLah307EREVZ8KECfjpp58wfPhwfPnllzA0NMTdu3exfft2/Pzzz1BVVS1TOYcOHcL9+/fRs2dP1K9fH7///jvy8vJgZWVVyS2gmogj0anO+frrr5GSkoI1a9Zg5syZePfdd/HFF1+Uq4zIyEgAwNq1a3Hnzh388ccfcHd3B5B/w09ERFWH/ToRUe3Dvp2IiIpjZmaGM2fOIDc3F46OjmjXrh2mTJkCAwMDqKiUPdRpYGCAPXv24MMPP0SrVq0QEBCAX3/9FW3atKnE2lNNxZHoVKeEhYVh1apVOH78OORyOQBg69at6NChA/z9/TF+/PgylRMZGQknJyfcv38f7dq1Q+vWrfHtt99i/PjxWLNmDbZu3VqZzSAiov/Hfp2IqPZh305EVPN5eHjAw8OjUHpgYKDCflhYWKE8RU3hJYRQ2G/ZsiX27NnzFjUEunfvXuT1iYrCIDrVKb1790Z2drZCmqWlJVJSUspVztWrV9G1a1d89913CumfffaZ9O83/SIgIqKyY79ORFT7sG8nIqLKkJKSAl1dXUyYMAGLFy8uNf+4cePwyy+/VEHNqCbgdC5EZfDDDz9AV1cXUVFRAPJvyNu1a1cp1xo3bhx0dXUrpWwiIsrHfp2IqPZh305ERMUZNGgQ7ty5g8jISMyYMaNM58ybNw+RkZG4c+cOPvroo0quIVV3MsGf1IlK9PjxY7x8+RIA0KRJEyQlJcHU1BQ3btxA69atK/x6iYmJSE1NBQCYmpqWe2VpIiIqGft1IqLah307ERERVSYG0YmIiIiIiIiIiIiIisHpXIiIiIiIiIiIiIiIisEgOhERERERERERERFRMRhEJyIiIiIiIiIiIiIqBoPoRERERERERERERETFYBCdiIiIiIiIiIiIiKgYDKITERERERERERERERWDQXQiIiIiIiIiIiIiomIwiE5EREREREREREREVAwG0YmIiIiIiIiIiIiIisEgOhERERERERERERFRMRhEJyIiIiIiIiIiIiIqBoPoRERERERERERERETFYBCdiIiIiIiIiIiIiKgYDKITERERERERERERERWDQXQiIiIiIiIiIiIiomIwiE5EREREREREREREVAwG0ancLC0tsWrVKqXWITAwEAYGBkqtQ3lVh9dNGXx9fdGxY8dynSOTybBv375ij/fu3RsymQwymQyRkZHl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Z49+/PFHbdq0SSNHjlRhYWG529m4caMWLFig1NRU/fLLL1q9erWKiorUrl27KowetVXVP7YcqGEuXryooUOH6t5771W7du00evRo7d+/X97e3uVuIy0tTRcuXJCfn5+lLCkpScePHy820wUAULUY1wGg7mFsBwCUxs/PT19++aWeeuop9enTR3l5eWrZsqUiIiJkZ1f++cJubm56//33NWPGDF24cEFt27bVf/7zH11//fVVGD1qK5LoqHeeeeYZnTlzRgsWLFCjRo306aef6sEHH9TGjRvL3UZqaqokaeHChXrsscd05MgRyxOcL168WBVhAwBKwbgOAHUPYzsA1G4jRozQiBEjipWvXLnSan/btm3F6pT06SOTyWS137ZtW73//vtXEaEUGhpa4vWBkrCcC+qVbdu2af78+XrzzTdlNBplZ2enN998U1988YWWLFlS7nZSU1MVHh6un376SR07dtQzzzyjZ599VkajUQsWLKjCHgAA/opxHQDqHsZ2AEBVOHPmjBo1aqSnnnqqXPUfeughNWrUqIqjQm3BTHTUKz179lR+fr5VWatWrXTmzJkrauebb77RTTfdpOeee86q/P7777d8X9F3UwEA5ce4DgB1D2M7AKCy3XXXXQoNDZVkXsalPGbOnKl///vfkqRmzZpVVWioJZiJDpTD4sWL1ahRI+3fv1+S+QV5x44dq+RavNMJAFWPcR0A6h7GdgBAaRo3bqw2bdqoTZs28vT0LNc53t7elnMaNmxYxRGipjOYeEsdKNPx48d1/vx5SVKLFi2UmZmpZs2a6eDBg+rQoUOlXy8jI0PZ2dmSzO90MlADQOViXAeAuoexHQAAVCWS6AAAAAAAAAAAlILlXAAAAAAAAAAAKAVJdAAAAAAAAAAASkESHQAAAAAAAACAUpBEBwAAAAAAAACgFCTRAQAAAAAAAAAoBUl0AAAAAAAAAABKQRIdAAAAAAAAAIBSkEQHAAAAAAAAAKAUJNEBAAAAAAAAACgFSXQAAAAAAAAAAErx/wG5zswtkpVtsAAAAABJRU5ErkJggg==",
+      "text/plain": [
+       "<Figure size 1500x700 with 8 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "application/vnd.jupyter.widget-view+json": {
+       "model_id": "733a23c5511b4df7be43966d0fcc268b",
+       "version_major": 2,
+       "version_minor": 0
+      },
+      "text/plain": [
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=1680.0, step=16.8), Output()), _dom_classes=…"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    },
+    {
+     "data": {
+      "text/plain": [
+       "<pybamm.plotting.quick_plot.QuickPlot at 0x7fd9141a5f50>"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
    "source": [
     "sim.plot()"
    ]
@@ -136,7 +180,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 7,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -160,7 +204,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 8,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -181,7 +225,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 9,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -208,7 +252,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 10,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -226,15 +270,85 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 11,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "Last Voltage Values: 3.7996611982185766 3.7975057810794395\n",
+      "Last Voltage Values: 3.7998126133693533 3.7975057810794395\n",
+      "Last Voltage Values: 3.8031854726522285 3.7975057810794395\n",
+      "Last Voltage Values: 3.799468931833036 3.7975057810794395\n",
+      "Last Voltage Values: 3.795602883298669 3.7975057810794395\n",
+      "Last Voltage Values: 3.799699771891773 3.7975057810794395\n",
+      "Last Voltage Values: 3.7996774395763646 3.7975057810794395\n",
+      "Last Voltage Values: 3.799593518890104 3.7975057810794395\n",
+      "Last Voltage Values: 3.799509395374853 3.7975057810794395\n",
+      "Last Voltage Values: 3.799536439260354 3.7975057810794395\n",
+      "Last Voltage Values: 3.799500287332914 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995753351359633 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995384590593297 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995486528904316 3.7975057810794395\n",
+      "Last Voltage Values: 3.799516169359653 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995185726290273 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995203555320374 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995147509521265 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995176549369756 3.7975057810794395\n",
+      "Last Voltage Values: 3.79951475648217 3.7975057810794395\n",
+      "Last Voltage Values: 3.799511594116657 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995343783536892 3.7975057810794395\n",
+      "Last Voltage Values: 3.799509412527155 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995128802129674 3.7975057810794395\n",
+      "Last Voltage Values: 3.799512401383983 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995112796265267 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995122788212523 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995113814292405 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995114700840316 3.7975057810794395\n",
+      "Last Voltage Values: 3.799511298272937 3.7975057810794395\n",
+      "Last Voltage Values: 3.799511135780194 3.7975057810794395\n",
+      "Last Voltage Values: 3.799510972324501 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995318559387594 3.7975057810794395\n",
+      "Last Voltage Values: 3.799510973343803 3.7975057810794395\n",
+      "Last Voltage Values: 3.799511115021574 3.7975057810794395\n",
+      "Last Voltage Values: 3.7995110103732177 3.7975057810794395\n"
+     ]
+    }
+   ],
    "source": [
     "results, last_optim, num_evals = parameterisation.rmse(\n",
     "    signal=\"Voltage [V]\", method=\"nlopt\"\n",
     ")"
    ]
   },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Let's view the identified parameters:"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "array([0.49301982, 0.63682677])"
+      ]
+     },
+     "execution_count": 12,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "results"
+   ]
+  },
   {
    "cell_type": "markdown",
    "metadata": {},
@@ -251,7 +365,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -271,9 +385,30 @@
   },
   {
    "cell_type": "code",
-   "execution_count": null,
+   "execution_count": 14,
    "metadata": {},
-   "outputs": [],
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "<matplotlib.legend.Legend at 0x7fd910dc2290>"
+      ]
+     },
+     "execution_count": 14,
+     "metadata": {},
+     "output_type": "execute_result"
+    },
+    {
+     "data": {
+      "image/png": "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",
+      "text/plain": [
+       "<Figure size 640x480 with 1 Axes>"
+      ]
+     },
+     "metadata": {},
+     "output_type": "display_data"
+    }
+   ],
    "source": [
     "plt.plot(corrupt_V, label='Groundtruth')\n",
     "plt.plot(optsol, label='Estimated')\n",
@@ -285,18 +420,23 @@
  ],
  "metadata": {
   "kernelspec": {
-   "display_name": "Python 3",
+   "display_name": "Python 3 (ipykernel)",
    "language": "python",
    "name": "python3"
   },
   "language_info": {
-   "file_extension": ".jl",
-   "mimetype": "application/julia",
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
    "name": "python",
-   "version": "3.10.12"
-  },
-  "orig_nbformat": 4
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.11.4"
+  }
  },
  "nbformat": 4,
- "nbformat_minor": 2
+ "nbformat_minor": 4
 }

From a5c8f479d6fb08ed5440263b080f5649419783f7 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 6 Oct 2023 18:21:54 +0100
Subject: [PATCH 094/210] Updt. object tree & directory, Add pints forwardmodel
 methods

---
 examples/notebooks/rmse-estimisation.ipynb    | 28 ++++-----
 pybop/__init__.py                             |  9 +--
 pybop/costs/mle.py                            | 10 ++++
 pybop/identification/__init__.py              |  4 ++
 pybop/{ => identification}/observations.py    |  0
 .../parameter.py}                             |  0
 .../parameter_set.py}                         |  0
 .../{ => identification}/parameterisation.py  |  2 +
 pybop/models/BaseModel.py                     | 57 +++++++++++++------
 pybop/models/lithium_ion/__init__.py          |  2 +-
 .../lithium_ion/{pybamm.py => base_echem.py}  |  6 +-
 tests/unit/test_parameterisation.py           |  6 +-
 12 files changed, 79 insertions(+), 45 deletions(-)
 create mode 100644 pybop/costs/mle.py
 create mode 100644 pybop/identification/__init__.py
 rename pybop/{ => identification}/observations.py (100%)
 rename pybop/{parameters.py => identification/parameter.py} (100%)
 rename pybop/{parameter_sets.py => identification/parameter_set.py} (100%)
 rename pybop/{ => identification}/parameterisation.py (98%)
 rename pybop/models/lithium_ion/{pybamm.py => base_echem.py} (90%)

diff --git a/examples/notebooks/rmse-estimisation.ipynb b/examples/notebooks/rmse-estimisation.ipynb
index f8fa02219..c4104d7be 100644
--- a/examples/notebooks/rmse-estimisation.ipynb
+++ b/examples/notebooks/rmse-estimisation.ipynb
@@ -25,7 +25,7 @@
    ],
    "source": [
     "%pip install --upgrade pip ipywidgets pybamm -q\n",
-    "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q "
+    "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q"
    ]
   },
   {
@@ -185,7 +185,7 @@
    "outputs": [],
    "source": [
     "corrupt_V = synthetic_sol[\"Terminal voltage [V]\"].data\n",
-    "corrupt_V += np.random.normal(0,0.005,len(corrupt_V))"
+    "corrupt_V += np.random.normal(0, 0.005, len(corrupt_V))"
    ]
   },
   {
@@ -210,10 +210,10 @@
    "source": [
     "model = pybop.lithium_ion.SPM()\n",
     "observations = [\n",
-    "            pybop.Observed(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
-    "            pybop.Observed(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
-    "            pybop.Observed(\"Voltage [V]\", corrupt_V),\n",
-    "        ]"
+    "    pybop.Observed(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
+    "    pybop.Observed(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
+    "    pybop.Observed(\"Voltage [V]\", corrupt_V),\n",
+    "]"
    ]
   },
   {
@@ -370,9 +370,11 @@
    "outputs": [],
    "source": [
     "params.update(\n",
-    "        {\"Negative electrode active material volume fraction\": results[0], \n",
-    "        \"Positive electrode active material volume fraction\": results[1]}\n",
-    "        )\n",
+    "    {\n",
+    "        \"Negative electrode active material volume fraction\": results[0],\n",
+    "        \"Positive electrode active material volume fraction\": results[1],\n",
+    "    }\n",
+    ")\n",
     "optsol = sim.solve()[\"Terminal voltage [V]\"].data"
    ]
   },
@@ -410,10 +412,10 @@
     }
    ],
    "source": [
-    "plt.plot(corrupt_V, label='Groundtruth')\n",
-    "plt.plot(optsol, label='Estimated')\n",
-    "plt.xlabel('Time (s)')\n",
-    "plt.ylabel('Voltage (V)')\n",
+    "plt.plot(corrupt_V, label=\"Groundtruth\")\n",
+    "plt.plot(optsol, label=\"Estimated\")\n",
+    "plt.xlabel(\"Time (s)\")\n",
+    "plt.ylabel(\"Voltage (V)\")\n",
     "plt.legend()"
    ]
   }
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 1b71c1d46..6b5cfe509 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -31,14 +31,7 @@
 #
 # Parameterisation class
 #
-from .parameterisation import Parameterisation
-from .parameter_sets import ParameterSet
-from .parameters import Parameter
-
-#
-# Observation class
-#
-from .observations import Observed
+from .identification import Parameterisation, ParameterSet, Parameter, Observed
 
 #
 # Priors class
diff --git a/pybop/costs/mle.py b/pybop/costs/mle.py
new file mode 100644
index 000000000..a177b4e4f
--- /dev/null
+++ b/pybop/costs/mle.py
@@ -0,0 +1,10 @@
+import pybop
+import pints
+
+
+class MLE:
+    def __init__(model, x0, method):
+        self.model = model
+        self.x0 = x0
+        self.method = method
+        self.problem = pints.SingleOutputProblem(model, x0)
diff --git a/pybop/identification/__init__.py b/pybop/identification/__init__.py
new file mode 100644
index 000000000..0951af26c
--- /dev/null
+++ b/pybop/identification/__init__.py
@@ -0,0 +1,4 @@
+from .parameter_set import ParameterSet
+from .parameter import Parameter
+from .observations import Observed
+from .parameterisation import Parameterisation
\ No newline at end of file
diff --git a/pybop/observations.py b/pybop/identification/observations.py
similarity index 100%
rename from pybop/observations.py
rename to pybop/identification/observations.py
diff --git a/pybop/parameters.py b/pybop/identification/parameter.py
similarity index 100%
rename from pybop/parameters.py
rename to pybop/identification/parameter.py
diff --git a/pybop/parameter_sets.py b/pybop/identification/parameter_set.py
similarity index 100%
rename from pybop/parameter_sets.py
rename to pybop/identification/parameter_set.py
diff --git a/pybop/parameterisation.py b/pybop/identification/parameterisation.py
similarity index 98%
rename from pybop/parameterisation.py
rename to pybop/identification/parameterisation.py
index cbc802240..00154de1d 100644
--- a/pybop/parameterisation.py
+++ b/pybop/identification/parameterisation.py
@@ -22,6 +22,7 @@ def __init__(
         self.fit_dict = {}
         self.fit_parameters = {o.name: o for o in fit_parameters}
         self.observations = {o.name: o for o in observations}
+        self.model.n_parameters = len(self.fit_dict)
 
         # Check that the observations contain time and current
         for name in ["Time [s]", "Current function [A]"]:
@@ -53,6 +54,7 @@ def __init__(
             check_model=check_model,
             init_soc=init_soc,
         )
+        
 
     def step(self, signal, x, grad):
         for i, p in enumerate(self.fit_dict):
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 697900f7a..f819f43af 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -8,14 +8,13 @@ class BaseModel:
     """
 
     def __init__(self, name="Base Model"):
-        self.pybamm_model = None
         self.name = name
-        # self.parameter_set = None
+        self.pybamm_model = None
 
     def build(
         self,
-        observations,
-        fit_parameters,
+        observations=None,
+        fit_parameters=None,
         check_model=True,
         init_soc=None,
     ):
@@ -38,8 +37,7 @@ def build(
             self._built_model = self._disc.process_model(
                 self._model_with_set_params, inplace=False, check_model=check_model
             )
-            # Set t_eval
-            self.time_data = self._parameter_set["Current function [A]"].x[0]
+            
 
             # Clear solver
             self._solver._model_set_up = {}
@@ -71,18 +69,19 @@ def set_params(self, observations, fit_parameters):
         if self.model_with_set_params:
             return
 
-        try:
+        if fit_parameters is not None:
+            # set input parameters in parameter set from fitting parameters
+            for i in fit_parameters:
+                self.parameter_set[i] = "[input]"
+
+        if observations is not None and fit_parameters is not None:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
                 observations["Time [s]"].data,
                 observations["Current function [A]"].data,
                 pybamm.t,
             )
-        except:
-            raise ValueError("Current function not supplied")
-
-        # set input parameters in parameter set from fitting parameters
-        for i in fit_parameters:
-            self.parameter_set[i] = "[input]"
+            # Set t_eval
+            self.time_data = self._parameter_set["Current function [A]"].x[0]
 
         self._model_with_set_params = self._parameter_set.process_model(
             self._unprocessed_model, inplace=False
@@ -90,20 +89,44 @@ def set_params(self, observations, fit_parameters):
         self._parameter_set.process_geometry(self.geometry)
         self.pybamm_model = self._model_with_set_params
 
-    def sim(self, experiment=None, parameter_set=None):
+    def simulate(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
+        """
+        Run the forward model and return the result in Numpy array format 
+        aligning with Pints' ForwardModel simulate method.
+        """
+        parameter_set = parameter_set or self.parameter_set
+        if inputs is None:
+            return self._simulate(parameter_set, experiment).solve(t_eval=t_eval)
+        else:
+            return self.solver.solve(inputs=inputs, t_eval=t_eval)
+    
+
+    def _simulate(self, parameter_set=None, experiment=None):
         """
-        Simulate the model
+        Create a PyBaMM simulation object and return it.
         """
         if self.pybamm_model is not None:
-            self.parameter_set = parameter_set or self.parameter_set
             return pybamm.Simulation(
                 self.pybamm_model,
                 experiment=experiment,
-                parameter_values=self.parameter_set,
+                parameter_values=parameter_set,
             )
         else:
             raise ValueError("This sim method currently only supports PyBaMM models")
 
+    def n_parameters(self):
+        """
+        Returns the dimension of the parameter space.
+        """
+        raise NotImplementedError
+    
+    def n_outputs(self):
+        """
+        Returns the number of outputs this model has. The default is 1.
+        """
+        raise NotImplementedError
+
+
     @property
     def built_model(self):
         return self._built_model
diff --git a/pybop/models/lithium_ion/__init__.py b/pybop/models/lithium_ion/__init__.py
index 43b78b32e..50f61b1e9 100644
--- a/pybop/models/lithium_ion/__init__.py
+++ b/pybop/models/lithium_ion/__init__.py
@@ -2,4 +2,4 @@
 # Import lithium ion based models
 #
 
-from .pybamm import SPM, SPMe
+from .base_echem import SPM, SPMe
diff --git a/pybop/models/lithium_ion/pybamm.py b/pybop/models/lithium_ion/base_echem.py
similarity index 90%
rename from pybop/models/lithium_ion/pybamm.py
rename to pybop/models/lithium_ion/base_echem.py
index 9914cc837..0989dc623 100644
--- a/pybop/models/lithium_ion/pybamm.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -5,7 +5,7 @@
 
 class SPM(BaseModel):
     """
-    Composition of the SPM class in PyBaMM.
+    Composition of the PyBaMM SPM class.
     """
 
     def __init__(
@@ -23,6 +23,7 @@ def __init__(
         self._unprocessed_model = self.pybamm_model
         self.name = name
 
+        self.default_parameter_values = self.pybamm_model.default_parameter_values
         self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
         self._unprocessed_parameter_set = self.parameter_set
 
@@ -43,7 +44,7 @@ def __init__(
 
 class SPMe(BaseModel):
     """
-    Composition of the SPMe class in PyBaMM.
+    Composition of the PyBaMM SPMe class.
     """
 
     def __init__(
@@ -61,6 +62,7 @@ def __init__(
         self._unprocessed_model = self.pybamm_model
         self.name = name
 
+        self.default_parameter_values = self.pybamm_model.default_parameter_values
         self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
         self._unprocessed_parameter_set = self.parameter_set
 
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index f9f821f90..5cbadf84a 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -24,11 +24,10 @@ def getdata(self, model, x0):
             ]
             * 2
         )
-        sim = model.sim(experiment=experiment)
-        return sim.solve()
+        sim = model.simulate(experiment=experiment)
+        return sim
 
     def test_spm(self):
-
         # Define model
         model = pybop.lithium_ion.SPM()
         model.parameter_set = model.pybamm_model.default_parameter_values
@@ -70,7 +69,6 @@ def test_spm(self):
         np.testing.assert_allclose(results, x0, atol=1e-1)
 
     def test_spme(self):
-
         # Define model
         model = pybop.lithium_ion.SPMe()
         model.parameter_set = model.pybamm_model.default_parameter_values

From 9497ff8f6ccb040de73c0bd8ded4e480d3745863 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Tue, 10 Oct 2023 14:32:15 +0100
Subject: [PATCH 095/210] Rename model file to base_echem

---
 pybop/models/lithium_ion/__init__.py                  | 2 +-
 pybop/models/lithium_ion/{pybamm.py => base_echem.py} | 0
 2 files changed, 1 insertion(+), 1 deletion(-)
 rename pybop/models/lithium_ion/{pybamm.py => base_echem.py} (100%)

diff --git a/pybop/models/lithium_ion/__init__.py b/pybop/models/lithium_ion/__init__.py
index 43b78b32e..50f61b1e9 100644
--- a/pybop/models/lithium_ion/__init__.py
+++ b/pybop/models/lithium_ion/__init__.py
@@ -2,4 +2,4 @@
 # Import lithium ion based models
 #
 
-from .pybamm import SPM, SPMe
+from .base_echem import SPM, SPMe
diff --git a/pybop/models/lithium_ion/pybamm.py b/pybop/models/lithium_ion/base_echem.py
similarity index 100%
rename from pybop/models/lithium_ion/pybamm.py
rename to pybop/models/lithium_ion/base_echem.py

From 653a88dcc37cc62c0b91ffc4ae2876de351e4477 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 11 Oct 2023 10:13:46 +0100
Subject: [PATCH 096/210] Initial Pints MLE, Updates to BaseModel for Pints,
 build()

---
 noxfile.py                             |  2 +-
 pybop/costs/mle.py                     | 23 ++++++++++++++++------
 pybop/models/BaseModel.py              | 27 ++++++++++++++++----------
 pybop/models/lithium_ion/base_echem.py |  4 ++--
 4 files changed, 37 insertions(+), 19 deletions(-)

diff --git a/noxfile.py b/noxfile.py
index 9117de5ba..7a39e8338 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -10,7 +10,7 @@
 
 
 @nox.session
-def unit_test(session):
+def unit(session):
     session.run_always("pip", "install", "-e", ".")
     session.install("pytest")
     session.run("pytest")
diff --git a/pybop/costs/mle.py b/pybop/costs/mle.py
index a177b4e4f..7f9075a82 100644
--- a/pybop/costs/mle.py
+++ b/pybop/costs/mle.py
@@ -1,10 +1,21 @@
 import pybop
 import pints
+import numpy as np
 
+model = pybop.lithium_ion.SPM()
 
-class MLE:
-    def __init__(model, x0, method):
-        self.model = model
-        self.x0 = x0
-        self.method = method
-        self.problem = pints.SingleOutputProblem(model, x0)
+inputs = {
+        "Negative electrode active material volume fraction": 0.5,
+        "Positive electrode active material volume fraction": 0.5,
+        "Current function [A]": 1,
+    }
+t_eval = [0, 1800]
+
+values = model.simulate(inputs=inputs, t_eval=t_eval)
+V = values["Terminal voltage [V]"].data
+T = values["Time [s]"].data
+
+sigma = 0.05
+CorruptValues = V + np.random.normal(0, sigma, len(V))
+
+problem = pints.SingleOutputProblem(model, T, CorruptValues)
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index f819f43af..021caf32d 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -10,6 +10,8 @@ class BaseModel:
     def __init__(self, name="Base Model"):
         self.name = name
         self.pybamm_model = None
+        self.fit_parameters = None
+        self.observations = None
 
     def build(
         self,
@@ -21,6 +23,9 @@ def build(
         """
         Build the model (if not built already).
         """
+        self.fit_parameters = fit_parameters
+        self.observations = observations
+
         if init_soc is not None:
             self.set_init_soc(init_soc)
 
@@ -31,7 +36,7 @@ def build(
             self._model_with_set_params = self.pybamm_model
             self._built_model = self.pybamm_model
         else:
-            self.set_params(observations, fit_parameters)
+            self.set_params()
             self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
             self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
             self._built_model = self._disc.process_model(
@@ -62,22 +67,22 @@ def set_init_soc(self, init_soc):
         # Save solved initial SOC in case we need to rebuild the model
         self._built_initial_soc = init_soc
 
-    def set_params(self, observations, fit_parameters):
+    def set_params(self):
         """
         Set the parameters in the model.
         """
         if self.model_with_set_params:
             return
 
-        if fit_parameters is not None:
+        if self.fit_parameters is not None:
             # set input parameters in parameter set from fitting parameters
-            for i in fit_parameters:
+            for i in self.fit_parameters:
                 self.parameter_set[i] = "[input]"
 
-        if observations is not None and fit_parameters is not None:
+        if self.observations is not None and self.fit_parameters is not None:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                observations["Time [s]"].data,
-                observations["Current function [A]"].data,
+                self.observations["Time [s]"].data,
+                self.observations["Current function [A]"].data,
                 pybamm.t,
             )
             # Set t_eval
@@ -98,7 +103,9 @@ def simulate(self, inputs=None, t_eval=None, parameter_set=None, experiment=None
         if inputs is None:
             return self._simulate(parameter_set, experiment).solve(t_eval=t_eval)
         else:
-            return self.solver.solve(inputs=inputs, t_eval=t_eval)
+            if self._built_model is None:
+                self.build(fit_parameters=inputs.keys())            
+                return self.solver.solve(self.built_model,inputs=inputs, t_eval=t_eval)
     
 
     def _simulate(self, parameter_set=None, experiment=None):
@@ -118,13 +125,13 @@ def n_parameters(self):
         """
         Returns the dimension of the parameter space.
         """
-        raise NotImplementedError
+        return len(self.fit_parameters)
     
     def n_outputs(self):
         """
         Returns the number of outputs this model has. The default is 1.
         """
-        raise NotImplementedError
+        return 1
 
 
     @property
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index 0989dc623..7cd00a021 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -5,7 +5,7 @@
 
 class SPM(BaseModel):
     """
-    Composition of the PyBaMM SPM class.
+    Composition of the PyBaMM Single Particle Model class.
     """
 
     def __init__(
@@ -44,7 +44,7 @@ def __init__(
 
 class SPMe(BaseModel):
     """
-    Composition of the PyBaMM SPMe class.
+    Composition of the PyBaMM Single Particle Model with Electrolyte class.
     """
 
     def __init__(

From 65ec80d0d398bee26113cf3fdda847a3478f23c8 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 11 Oct 2023 11:38:10 +0100
Subject: [PATCH 097/210] Update workflow for rename of nox unit session

---
 .github/workflows/test_on_push.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index 4f4d0b8a6..977fbba12 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -34,7 +34,7 @@ jobs:
           pip install -e .
       - name: Unit tests with nox
         run: |
-          nox -s unit_test
+          nox -s unit
 
   # Runs only on Ubuntu with Python 3.11
   check_coverage:
@@ -60,7 +60,7 @@ jobs:
           pip install --upgrade pip nox
           pip install -e .
 
-      - name: Run unit tests for Ubuntu with Python 3.11 and generate coverage report
+      - name: Run coverage tests for Ubuntu with Python 3.11 and generate report
         run: nox -s coverage
 
       - name: Upload coverage report

From e285c422ba1ce10731ce976d9faf0c853c4b2097 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 11 Oct 2023 11:55:08 +0100
Subject: [PATCH 098/210] Remove initial MLE.py, Add black format

---
 pybop/costs/mle.py                       | 21 ---------------------
 pybop/identification/__init__.py         |  2 +-
 pybop/identification/parameterisation.py |  1 -
 pybop/models/BaseModel.py                | 11 ++++-------
 pybop/models/lithium_ion/base_echem.py   |  1 -
 5 files changed, 5 insertions(+), 31 deletions(-)
 delete mode 100644 pybop/costs/mle.py

diff --git a/pybop/costs/mle.py b/pybop/costs/mle.py
deleted file mode 100644
index 7f9075a82..000000000
--- a/pybop/costs/mle.py
+++ /dev/null
@@ -1,21 +0,0 @@
-import pybop
-import pints
-import numpy as np
-
-model = pybop.lithium_ion.SPM()
-
-inputs = {
-        "Negative electrode active material volume fraction": 0.5,
-        "Positive electrode active material volume fraction": 0.5,
-        "Current function [A]": 1,
-    }
-t_eval = [0, 1800]
-
-values = model.simulate(inputs=inputs, t_eval=t_eval)
-V = values["Terminal voltage [V]"].data
-T = values["Time [s]"].data
-
-sigma = 0.05
-CorruptValues = V + np.random.normal(0, sigma, len(V))
-
-problem = pints.SingleOutputProblem(model, T, CorruptValues)
diff --git a/pybop/identification/__init__.py b/pybop/identification/__init__.py
index 0951af26c..4bcb89c1d 100644
--- a/pybop/identification/__init__.py
+++ b/pybop/identification/__init__.py
@@ -1,4 +1,4 @@
 from .parameter_set import ParameterSet
 from .parameter import Parameter
 from .observations import Observed
-from .parameterisation import Parameterisation
\ No newline at end of file
+from .parameterisation import Parameterisation
diff --git a/pybop/identification/parameterisation.py b/pybop/identification/parameterisation.py
index 00154de1d..4a2cee9d5 100644
--- a/pybop/identification/parameterisation.py
+++ b/pybop/identification/parameterisation.py
@@ -54,7 +54,6 @@ def __init__(
             check_model=check_model,
             init_soc=init_soc,
         )
-        
 
     def step(self, signal, x, grad):
         for i, p in enumerate(self.fit_dict):
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 021caf32d..7d529b3cf 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -42,7 +42,6 @@ def build(
             self._built_model = self._disc.process_model(
                 self._model_with_set_params, inplace=False, check_model=check_model
             )
-            
 
             # Clear solver
             self._solver._model_set_up = {}
@@ -96,7 +95,7 @@ def set_params(self):
 
     def simulate(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
         """
-        Run the forward model and return the result in Numpy array format 
+        Run the forward model and return the result in Numpy array format
         aligning with Pints' ForwardModel simulate method.
         """
         parameter_set = parameter_set or self.parameter_set
@@ -104,9 +103,8 @@ def simulate(self, inputs=None, t_eval=None, parameter_set=None, experiment=None
             return self._simulate(parameter_set, experiment).solve(t_eval=t_eval)
         else:
             if self._built_model is None:
-                self.build(fit_parameters=inputs.keys())            
-                return self.solver.solve(self.built_model,inputs=inputs, t_eval=t_eval)
-    
+                self.build(fit_parameters=inputs.keys())
+                return self.solver.solve(self.built_model, inputs=inputs, t_eval=t_eval)
 
     def _simulate(self, parameter_set=None, experiment=None):
         """
@@ -126,14 +124,13 @@ def n_parameters(self):
         Returns the dimension of the parameter space.
         """
         return len(self.fit_parameters)
-    
+
     def n_outputs(self):
         """
         Returns the number of outputs this model has. The default is 1.
         """
         return 1
 
-
     @property
     def built_model(self):
         return self._built_model
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index d998d3c7a..25f6526c9 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -24,7 +24,6 @@ def __init__(
         self._unprocessed_model = self.pybamm_model
         self.name = name
 
-
         self.default_parameter_values = self.pybamm_model.default_parameter_values
         self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
         self._unprocessed_parameter_set = self.parameter_set

From 396a83faff53dee8db7145d93a6571d78ea56c84 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 13 Oct 2023 09:20:09 +0100
Subject: [PATCH 099/210] Split Simulate(), Prediction(), Add initial Pints
 integration

---
 examples/scripts/mle.py   | 29 +++++++++++++++++++++++++++++
 pybop/models/BaseModel.py | 39 ++++++++++++++++++++++++---------------
 2 files changed, 53 insertions(+), 15 deletions(-)
 create mode 100644 examples/scripts/mle.py

diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
new file mode 100644
index 000000000..e52f2a9a7
--- /dev/null
+++ b/examples/scripts/mle.py
@@ -0,0 +1,29 @@
+import pybop
+import pints
+import numpy as np
+
+model = pybop.lithium_ion.SPM()
+model.parameter_set["Current function [A]"] = 2
+
+inputs = {
+        "Negative electrode active material volume fraction": 0.5,
+        "Positive electrode active material volume fraction": 0.5,
+    }
+t_eval = [0, 900]
+model.build(fit_parameters=inputs)
+
+values = model.predict(inputs=inputs, t_eval=t_eval)
+V = values["Terminal voltage [V]"].data
+T = values["Time [s]"].data
+
+sigma = 0.01
+CorruptValues = V + np.random.normal(0, sigma, len(V))
+
+problem = pints.SingleOutputProblem(model, T, CorruptValues)
+
+cost = pints.SumOfSquaresError(problem)
+boundaries = pints.RectangularBoundaries([0.4, 0.4], [0.6, 0.6])
+
+x0 = np.array([0.52, 0.47])
+op = pints.OptimisationController(cost, x0, boundaries=boundaries, method=pints.CMAES)
+x1, f1 = op.run()
\ No newline at end of file
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 7d529b3cf..4faf3c814 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -75,7 +75,7 @@ def set_params(self):
 
         if self.fit_parameters is not None:
             # set input parameters in parameter set from fitting parameters
-            for i in self.fit_parameters:
+            for i in self.fit_parameters.keys():
                 self.parameter_set[i] = "[input]"
 
         if self.observations is not None and self.fit_parameters is not None:
@@ -93,29 +93,38 @@ def set_params(self):
         self._parameter_set.process_geometry(self.geometry)
         self.pybamm_model = self._model_with_set_params
 
-    def simulate(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
+    def simulate(self, inputs=None, t_eval=None):
         """
         Run the forward model and return the result in Numpy array format
         aligning with Pints' ForwardModel simulate method.
         """
-        parameter_set = parameter_set or self.parameter_set
-        if inputs is None:
-            return self._simulate(parameter_set, experiment).solve(t_eval=t_eval)
+        if self._built_model is None:
+            ValueError("Model must be built before calling simulate")
         else:
-            if self._built_model is None:
-                self.build(fit_parameters=inputs.keys())
-                return self.solver.solve(self.built_model, inputs=inputs, t_eval=t_eval)
+            if type(inputs) is not dict:
+                inputs_dict = {key: inputs[i] for i, key in enumerate(self.fit_parameters)}
+                print(inputs_dict)
+            return self.solver.solve(self.built_model, inputs=inputs_dict, t_eval=t_eval)["Terminal voltage [V]"].data
 
-    def _simulate(self, parameter_set=None, experiment=None):
+    def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
         """
         Create a PyBaMM simulation object and return it.
         """
-        if self.pybamm_model is not None:
-            return pybamm.Simulation(
-                self.pybamm_model,
-                experiment=experiment,
-                parameter_values=parameter_set,
-            )
+        parameter_set = parameter_set or self.parameter_set
+        if inputs is not None:
+            parameter_set.update(inputs)
+        if self._unprocessed_model is not None:
+            if experiment is None:
+                return pybamm.Simulation(
+                    self._unprocessed_model,
+                    parameter_values=parameter_set,
+                ).solve(t_eval=t_eval)
+            else:
+                return pybamm.Simulation(
+                    self._unprocessed_model,
+                    experiment=experiment,
+                    parameter_values=parameter_set,
+                ).solve()
         else:
             raise ValueError("This sim method currently only supports PyBaMM models")
 

From 22c24cc8909c5f0580a4d6aa981b6fb04d752925 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 13 Oct 2023 09:39:35 +0100
Subject: [PATCH 100/210] Fix tests, black format, update mle example

---
 examples/scripts/mle.py             | 44 +++++++++++++++++++++++------
 pybop/models/BaseModel.py           |  8 ++++--
 tests/unit/test_parameterisation.py |  2 +-
 3 files changed, 42 insertions(+), 12 deletions(-)

diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index e52f2a9a7..eee7b5eae 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -1,15 +1,16 @@
 import pybop
 import pints
 import numpy as np
+import matplotlib.pyplot as plt
 
 model = pybop.lithium_ion.SPM()
 model.parameter_set["Current function [A]"] = 2
 
 inputs = {
-        "Negative electrode active material volume fraction": 0.5,
-        "Positive electrode active material volume fraction": 0.5,
-    }
-t_eval = [0, 900]
+    "Negative electrode active material volume fraction": 0.5,
+    "Positive electrode active material volume fraction": 0.5,
+}
+t_eval = np.arange(0, 900, 2)
 model.build(fit_parameters=inputs)
 
 values = model.predict(inputs=inputs, t_eval=t_eval)
@@ -18,12 +19,37 @@
 
 sigma = 0.01
 CorruptValues = V + np.random.normal(0, sigma, len(V))
+# Show the generated data
+plt.figure()
+plt.xlabel("Time")
+plt.ylabel("Values")
+plt.plot(T, CorruptValues)
+plt.plot(T, V)
+plt.show()
+
 
 problem = pints.SingleOutputProblem(model, T, CorruptValues)
+# cost = pints.SumOfSquaresError(problem)
+
+log_likelihood = pints.GaussianLogLikelihood(problem)
+boundaries = pints.RectangularBoundaries([0.4, 0.4, 1e-5], [0.6, 0.6, 1e-1])
+
+x0 = np.array([0.52, 0.47, 1e-3])
+op = pints.OptimisationController(
+    log_likelihood, x0, boundaries=boundaries, method=pints.CMAES
+)
+x1, f1 = op.run()
+print("Estimated parameters:")
+print(x1)
+
 
-cost = pints.SumOfSquaresError(problem)
-boundaries = pints.RectangularBoundaries([0.4, 0.4], [0.6, 0.6])
+# Show the generated data
+simulated_values = problem.evaluate(x1[:2])
 
-x0 = np.array([0.52, 0.47])
-op = pints.OptimisationController(cost, x0, boundaries=boundaries, method=pints.CMAES)
-x1, f1 = op.run()
\ No newline at end of file
+plt.figure()
+plt.xlabel("Time")
+plt.ylabel("Values")
+plt.plot(T, CorruptValues)
+plt.fill_between(T, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
+plt.plot(T, simulated_values)
+plt.show()
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 4faf3c814..6b93b1711 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -102,9 +102,13 @@ def simulate(self, inputs=None, t_eval=None):
             ValueError("Model must be built before calling simulate")
         else:
             if type(inputs) is not dict:
-                inputs_dict = {key: inputs[i] for i, key in enumerate(self.fit_parameters)}
+                inputs_dict = {
+                    key: inputs[i] for i, key in enumerate(self.fit_parameters)
+                }
                 print(inputs_dict)
-            return self.solver.solve(self.built_model, inputs=inputs_dict, t_eval=t_eval)["Terminal voltage [V]"].data
+            return self.solver.solve(
+                self.built_model, inputs=inputs_dict, t_eval=t_eval
+            )["Terminal voltage [V]"].data
 
     def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
         """
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index 5cbadf84a..effaa4cec 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -24,7 +24,7 @@ def getdata(self, model, x0):
             ]
             * 2
         )
-        sim = model.simulate(experiment=experiment)
+        sim = model.predict(experiment=experiment)
         return sim
 
     def test_spm(self):

From b9751fa3c92cd0afa72a4410ba7e558403d1e7f6 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 13 Oct 2023 12:05:08 +0100
Subject: [PATCH 101/210] Add pytest marker functionality, updt mle,
 doc-strings for BaseModel

---
 conftest.py                         | 21 ++++++++++++
 examples/scripts/mle.py             | 25 +++++++-------
 noxfile.py                          |  2 +-
 pybop/models/BaseModel.py           |  7 ++--
 tests/unit/test_parameterisation.py | 53 ++++++++++++++++-------------
 5 files changed, 67 insertions(+), 41 deletions(-)
 create mode 100644 conftest.py

diff --git a/conftest.py b/conftest.py
new file mode 100644
index 000000000..0e07ebe5e
--- /dev/null
+++ b/conftest.py
@@ -0,0 +1,21 @@
+import pytest
+
+
+def pytest_addoption(parser):
+    parser.addoption(
+        "--unit", action="store_true", default=False, help="run unit tests"
+    )
+
+
+def pytest_configure(config):
+    config.addinivalue_line("markers", "unit: mark test as a unit test")
+
+
+def pytest_collection_modifyitems(config, items):
+    if config.getoption("--unit"):
+        # --unit given in cli: do not skip unit tests
+        return
+    skip_unit = pytest.mark.skip(reason="need --unit option to run")
+    for item in items:
+        if "unit" in item.keywords:
+            item.add_marker(skip_unit)
\ No newline at end of file
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index eee7b5eae..9118e0b4b 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -3,34 +3,33 @@
 import numpy as np
 import matplotlib.pyplot as plt
 
-model = pybop.lithium_ion.SPM()
+model = pybop.lithium_ion.SPMe()
 model.parameter_set["Current function [A]"] = 2
 
 inputs = {
     "Negative electrode active material volume fraction": 0.5,
-    "Positive electrode active material volume fraction": 0.5,
+    "Positive electrode active material volume fraction": 0.6,
 }
 t_eval = np.arange(0, 900, 2)
 model.build(fit_parameters=inputs)
 
 values = model.predict(inputs=inputs, t_eval=t_eval)
-V = values["Terminal voltage [V]"].data
-T = values["Time [s]"].data
+voltage = values["Terminal voltage [V]"].data
+time = values["Time [s]"].data
 
 sigma = 0.01
-CorruptValues = V + np.random.normal(0, sigma, len(V))
+CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
+
 # Show the generated data
 plt.figure()
 plt.xlabel("Time")
 plt.ylabel("Values")
-plt.plot(T, CorruptValues)
-plt.plot(T, V)
+plt.plot(time, CorruptValues)
+plt.plot(time, voltage)
 plt.show()
 
 
-problem = pints.SingleOutputProblem(model, T, CorruptValues)
-# cost = pints.SumOfSquaresError(problem)
-
+problem = pints.SingleOutputProblem(model, time, CorruptValues)
 log_likelihood = pints.GaussianLogLikelihood(problem)
 boundaries = pints.RectangularBoundaries([0.4, 0.4, 1e-5], [0.6, 0.6, 1e-1])
 
@@ -49,7 +48,7 @@
 plt.figure()
 plt.xlabel("Time")
 plt.ylabel("Values")
-plt.plot(T, CorruptValues)
-plt.fill_between(T, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
-plt.plot(T, simulated_values)
+plt.plot(time, CorruptValues)
+plt.fill_between(time, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
+plt.plot(time, simulated_values)
 plt.show()
diff --git a/noxfile.py b/noxfile.py
index 7a39e8338..f9af6fac0 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -13,7 +13,7 @@
 def unit(session):
     session.run_always("pip", "install", "-e", ".")
     session.install("pytest")
-    session.run("pytest")
+    session.run("pytest", "--unit")
 
 
 @nox.session
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 6b93b1711..5f6ce0c43 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -21,7 +21,9 @@ def build(
         init_soc=None,
     ):
         """
-        Build the model (if not built already).
+        Build the PyBOP model (if not built already).
+        For PyBaMM forward models, this method follwos a 
+        similar process to pybamm.Simulation.build().
         """
         self.fit_parameters = fit_parameters
         self.observations = observations
@@ -105,14 +107,13 @@ def simulate(self, inputs=None, t_eval=None):
                 inputs_dict = {
                     key: inputs[i] for i, key in enumerate(self.fit_parameters)
                 }
-                print(inputs_dict)
             return self.solver.solve(
                 self.built_model, inputs=inputs_dict, t_eval=t_eval
             )["Terminal voltage [V]"].data
 
     def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
         """
-        Create a PyBaMM simulation object and return it.
+        Create a PyBaMM simulation object, solve it, and return a solution object.
         """
         parameter_set = parameter_set or self.parameter_set
         if inputs is not None:
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index effaa4cec..db6d2b89a 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -1,32 +1,11 @@
 import pybop
 import pybamm
 import numpy as np
+import pytest
 
 
 class TestParameterisation:
-    def getdata(self, model, x0):
-        model.parameter_set = model.pybamm_model.default_parameter_values
-
-        model.parameter_set.update(
-            {
-                "Negative electrode active material volume fraction": x0[0],
-                "Positive electrode active material volume fraction": x0[1],
-            }
-        )
-        experiment = pybamm.Experiment(
-            [
-                (
-                    "Discharge at 2C for 5 minutes (1 second period)",
-                    "Rest for 2 minutes (1 second period)",
-                    "Charge at 1C for 5 minutes (1 second period)",
-                    "Rest for 2 minutes (1 second period)",
-                ),
-            ]
-            * 2
-        )
-        sim = model.predict(experiment=experiment)
-        return sim
-
+    @pytest.mark.unit
     def test_spm(self):
         # Define model
         model = pybop.lithium_ion.SPM()
@@ -67,7 +46,8 @@ def test_spm(self):
         # Assertions
         np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
         np.testing.assert_allclose(results, x0, atol=1e-1)
-
+        
+    @pytest.mark.unit
     def test_spme(self):
         # Define model
         model = pybop.lithium_ion.SPMe()
@@ -108,3 +88,28 @@ def test_spme(self):
         # Assertions
         np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
         np.testing.assert_allclose(results, x0, atol=1e-1)
+
+    def getdata(self, model, x0):
+        model.parameter_set = model.pybamm_model.default_parameter_values
+
+        model.parameter_set.update(
+            {
+                "Negative electrode active material volume fraction": x0[0],
+                "Positive electrode active material volume fraction": x0[1],
+            }
+        )
+        experiment = pybamm.Experiment(
+            [
+                (
+                    "Discharge at 2C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                    "Charge at 1C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                ),
+            ]
+            * 2
+        )
+        sim = model.predict(experiment=experiment)
+        return sim
+    
+

From feec21d8a7d394f49f711cc36495b14d07dcb194 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 13 Oct 2023 12:30:24 +0100
Subject: [PATCH 102/210] Fix coverage session, add tests, Updt
 model.simulate() args

---
 noxfile.py                          |  2 +-
 pybop/models/BaseModel.py           |  4 ++--
 tests/unit/test_parameterisation.py | 10 ++++++++++
 3 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/noxfile.py b/noxfile.py
index f9af6fac0..a2719e3bd 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -20,4 +20,4 @@ def unit(session):
 def coverage(session):
     session.run_always("pip", "install", "-e", ".")
     session.install("pytest-cov")
-    session.run("pytest", "--cov", "--cov-report=xml")
+    session.run("pytest","--unit", "--cov", "--cov-report=xml")
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 5f6ce0c43..648f40c18 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -95,13 +95,13 @@ def set_params(self):
         self._parameter_set.process_geometry(self.geometry)
         self.pybamm_model = self._model_with_set_params
 
-    def simulate(self, inputs=None, t_eval=None):
+    def simulate(self, inputs, t_eval):
         """
         Run the forward model and return the result in Numpy array format
         aligning with Pints' ForwardModel simulate method.
         """
         if self._built_model is None:
-            ValueError("Model must be built before calling simulate")
+            raise ValueError("Model must be built before calling simulate")
         else:
             if type(inputs) is not dict:
                 inputs_dict = {
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index db6d2b89a..7b9393c17 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -112,4 +112,14 @@ def getdata(self, model, x0):
         sim = model.predict(experiment=experiment)
         return sim
     
+    @pytest.mark.unit
+    def test_simulate_without_build_model(self):
+        # Define model
+        model = pybop.lithium_ion.SPM()
+
+        with pytest.raises(ValueError, match="Model must be built before calling simulate"):
+            model.simulate(None, None)
+
+
+    
 

From fbe6b4c53f79ba6a07b2f03c95d89c1796d6b3d4 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 13 Oct 2023 14:10:22 +0100
Subject: [PATCH 103/210] ruff & black

---
 conftest.py                            |  2 +-
 examples/scripts/rmse-estimisation.py  |  1 -
 noxfile.py                             |  2 +-
 pybop/identification/observations.py   |  2 --
 pybop/identification/parameter.py      |  5 -----
 pybop/identification/parameter_set.py  |  1 -
 pybop/models/BaseModel.py              |  5 ++---
 pybop/models/lithium_ion/base_echem.py |  1 -
 pybop/optimisation/BaseOptimisation.py |  3 ---
 pybop/optimisation/NLoptOptimize.py    |  1 -
 pybop/optimisation/SciPyMinimize.py    |  1 -
 pybop/plotting/quick_plot.py           |  5 -----
 pybop/priors.py                        |  2 --
 setup.py                               |  2 +-
 tests/unit/test_parameterisation.py    | 12 +++++-------
 15 files changed, 10 insertions(+), 35 deletions(-)

diff --git a/conftest.py b/conftest.py
index 0e07ebe5e..033168440 100644
--- a/conftest.py
+++ b/conftest.py
@@ -18,4 +18,4 @@ def pytest_collection_modifyitems(config, items):
     skip_unit = pytest.mark.skip(reason="need --unit option to run")
     for item in items:
         if "unit" in item.keywords:
-            item.add_marker(skip_unit)
\ No newline at end of file
+            item.add_marker(skip_unit)
diff --git a/examples/scripts/rmse-estimisation.py b/examples/scripts/rmse-estimisation.py
index 1e82d1df6..30c5159a3 100644
--- a/examples/scripts/rmse-estimisation.py
+++ b/examples/scripts/rmse-estimisation.py
@@ -1,6 +1,5 @@
 import pybop
 import pandas as pd
-import numpy as np
 
 # Form observations
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
diff --git a/noxfile.py b/noxfile.py
index a2719e3bd..87c9cacdd 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -20,4 +20,4 @@ def unit(session):
 def coverage(session):
     session.run_always("pip", "install", "-e", ".")
     session.install("pytest-cov")
-    session.run("pytest","--unit", "--cov", "--cov-report=xml")
+    session.run("pytest", "--unit", "--cov", "--cov-report=xml")
diff --git a/pybop/identification/observations.py b/pybop/identification/observations.py
index e6db914bf..417a9b876 100644
--- a/pybop/identification/observations.py
+++ b/pybop/identification/observations.py
@@ -1,6 +1,4 @@
-import pybop
 import pybamm
-import numpy as np
 
 
 class Observed:
diff --git a/pybop/identification/parameter.py b/pybop/identification/parameter.py
index e0933a6c0..f15bdfea5 100644
--- a/pybop/identification/parameter.py
+++ b/pybop/identification/parameter.py
@@ -1,8 +1,3 @@
-from typing import Any
-import pybop
-import pybamm
-
-
 class Parameter:
     """ ""
     Class for creating parameters in pybop.
diff --git a/pybop/identification/parameter_set.py b/pybop/identification/parameter_set.py
index eb84b9da1..60d9b6a9e 100644
--- a/pybop/identification/parameter_set.py
+++ b/pybop/identification/parameter_set.py
@@ -1,5 +1,4 @@
 import pybamm
-import pybop
 
 
 class ParameterSet:
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 648f40c18..d23d60f2f 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -1,4 +1,3 @@
-import pybop
 import pybamm
 
 
@@ -22,7 +21,7 @@ def build(
     ):
         """
         Build the PyBOP model (if not built already).
-        For PyBaMM forward models, this method follwos a 
+        For PyBaMM forward models, this method follows a
         similar process to pybamm.Simulation.build().
         """
         self.fit_parameters = fit_parameters
@@ -103,7 +102,7 @@ def simulate(self, inputs, t_eval):
         if self._built_model is None:
             raise ValueError("Model must be built before calling simulate")
         else:
-            if type(inputs) is not dict:
+            if inputs is isinstance(dict):
                 inputs_dict = {
                     key: inputs[i] for i, key in enumerate(self.fit_parameters)
                 }
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index 25f6526c9..542d6a399 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -1,4 +1,3 @@
-import pybop
 import pybamm
 from ..BaseModel import BaseModel
 
diff --git a/pybop/optimisation/BaseOptimisation.py b/pybop/optimisation/BaseOptimisation.py
index 14364a787..1663375f8 100644
--- a/pybop/optimisation/BaseOptimisation.py
+++ b/pybop/optimisation/BaseOptimisation.py
@@ -1,6 +1,3 @@
-import pybop
-
-
 class BaseOptimisation:
     """
 
diff --git a/pybop/optimisation/NLoptOptimize.py b/pybop/optimisation/NLoptOptimize.py
index 6d0f5ba87..c8040645a 100644
--- a/pybop/optimisation/NLoptOptimize.py
+++ b/pybop/optimisation/NLoptOptimize.py
@@ -1,4 +1,3 @@
-import pybop
 import nlopt
 from .BaseOptimisation import BaseOptimisation
 
diff --git a/pybop/optimisation/SciPyMinimize.py b/pybop/optimisation/SciPyMinimize.py
index ee4c57067..122d4d749 100644
--- a/pybop/optimisation/SciPyMinimize.py
+++ b/pybop/optimisation/SciPyMinimize.py
@@ -1,4 +1,3 @@
-import pybop
 from scipy.optimize import minimize
 from .BaseOptimisation import BaseOptimisation
 
diff --git a/pybop/plotting/quick_plot.py b/pybop/plotting/quick_plot.py
index e36bed225..5acbb2626 100644
--- a/pybop/plotting/quick_plot.py
+++ b/pybop/plotting/quick_plot.py
@@ -1,8 +1,3 @@
-import os
-import numpy
-import matplotlib
-
-
 class QuickPlot:
     """
 
diff --git a/pybop/priors.py b/pybop/priors.py
index b23f2c38e..7224b58a7 100644
--- a/pybop/priors.py
+++ b/pybop/priors.py
@@ -1,5 +1,3 @@
-import pybop
-import numpy as np
 import scipy.stats as stats
 
 
diff --git a/setup.py b/setup.py
index 28900d55e..c0a885538 100644
--- a/setup.py
+++ b/setup.py
@@ -18,7 +18,7 @@
 setup(
     name="pybop",
     packages=find_packages("."),
-    version=__version__,
+    version=__version__,  # noqa F821
     license="BSD-3-Clause",
     description="Python Battery Optimisation and Parameterisation",
     long_description=long_description,
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index 7b9393c17..b584ca08c 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -46,7 +46,7 @@ def test_spm(self):
         # Assertions
         np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
         np.testing.assert_allclose(results, x0, atol=1e-1)
-        
+
     @pytest.mark.unit
     def test_spme(self):
         # Define model
@@ -111,15 +111,13 @@ def getdata(self, model, x0):
         )
         sim = model.predict(experiment=experiment)
         return sim
-    
+
     @pytest.mark.unit
     def test_simulate_without_build_model(self):
         # Define model
         model = pybop.lithium_ion.SPM()
 
-        with pytest.raises(ValueError, match="Model must be built before calling simulate"):
+        with pytest.raises(
+            ValueError, match="Model must be built before calling simulate"
+        ):
             model.simulate(None, None)
-
-
-    
-

From b66b807ad95c5e8952d9c06f43664b0243daf8ae Mon Sep 17 00:00:00 2001
From: Brady Planden <55357039+BradyPlanden@users.noreply.github.com>
Date: Fri, 13 Oct 2023 14:54:51 +0100
Subject: [PATCH 104/210] First Repository Clean + Initial model alignment with
 Pints (#53)

* Update object tree & directory, Add pints forwardmodel methods

* Initial Pints MLE, Updates to BaseModel for Pints, build()

* Update workflow for rename of nox unit session

* Remove initial MLE.py, Add black format
---
 .github/workflows/test_on_push.yaml           |  4 +-
 examples/notebooks/rmse-estimisation.ipynb    | 28 ++++----
 noxfile.py                                    |  2 +-
 pybop/__init__.py                             |  9 +--
 pybop/identification/__init__.py              |  4 ++
 pybop/{ => identification}/observations.py    |  0
 .../parameter.py}                             |  0
 .../parameter_set.py}                         |  0
 .../{ => identification}/parameterisation.py  |  1 +
 pybop/models/BaseModel.py                     | 69 +++++++++++++------
 pybop/models/lithium_ion/base_echem.py        |  8 ++-
 tests/unit/test_parameterisation.py           |  6 +-
 12 files changed, 80 insertions(+), 51 deletions(-)
 create mode 100644 pybop/identification/__init__.py
 rename pybop/{ => identification}/observations.py (100%)
 rename pybop/{parameters.py => identification/parameter.py} (100%)
 rename pybop/{parameter_sets.py => identification/parameter_set.py} (100%)
 rename pybop/{ => identification}/parameterisation.py (98%)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index 4f4d0b8a6..977fbba12 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -34,7 +34,7 @@ jobs:
           pip install -e .
       - name: Unit tests with nox
         run: |
-          nox -s unit_test
+          nox -s unit
 
   # Runs only on Ubuntu with Python 3.11
   check_coverage:
@@ -60,7 +60,7 @@ jobs:
           pip install --upgrade pip nox
           pip install -e .
 
-      - name: Run unit tests for Ubuntu with Python 3.11 and generate coverage report
+      - name: Run coverage tests for Ubuntu with Python 3.11 and generate report
         run: nox -s coverage
 
       - name: Upload coverage report
diff --git a/examples/notebooks/rmse-estimisation.ipynb b/examples/notebooks/rmse-estimisation.ipynb
index f8fa02219..c4104d7be 100644
--- a/examples/notebooks/rmse-estimisation.ipynb
+++ b/examples/notebooks/rmse-estimisation.ipynb
@@ -25,7 +25,7 @@
    ],
    "source": [
     "%pip install --upgrade pip ipywidgets pybamm -q\n",
-    "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q "
+    "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q"
    ]
   },
   {
@@ -185,7 +185,7 @@
    "outputs": [],
    "source": [
     "corrupt_V = synthetic_sol[\"Terminal voltage [V]\"].data\n",
-    "corrupt_V += np.random.normal(0,0.005,len(corrupt_V))"
+    "corrupt_V += np.random.normal(0, 0.005, len(corrupt_V))"
    ]
   },
   {
@@ -210,10 +210,10 @@
    "source": [
     "model = pybop.lithium_ion.SPM()\n",
     "observations = [\n",
-    "            pybop.Observed(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
-    "            pybop.Observed(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
-    "            pybop.Observed(\"Voltage [V]\", corrupt_V),\n",
-    "        ]"
+    "    pybop.Observed(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
+    "    pybop.Observed(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
+    "    pybop.Observed(\"Voltage [V]\", corrupt_V),\n",
+    "]"
    ]
   },
   {
@@ -370,9 +370,11 @@
    "outputs": [],
    "source": [
     "params.update(\n",
-    "        {\"Negative electrode active material volume fraction\": results[0], \n",
-    "        \"Positive electrode active material volume fraction\": results[1]}\n",
-    "        )\n",
+    "    {\n",
+    "        \"Negative electrode active material volume fraction\": results[0],\n",
+    "        \"Positive electrode active material volume fraction\": results[1],\n",
+    "    }\n",
+    ")\n",
     "optsol = sim.solve()[\"Terminal voltage [V]\"].data"
    ]
   },
@@ -410,10 +412,10 @@
     }
    ],
    "source": [
-    "plt.plot(corrupt_V, label='Groundtruth')\n",
-    "plt.plot(optsol, label='Estimated')\n",
-    "plt.xlabel('Time (s)')\n",
-    "plt.ylabel('Voltage (V)')\n",
+    "plt.plot(corrupt_V, label=\"Groundtruth\")\n",
+    "plt.plot(optsol, label=\"Estimated\")\n",
+    "plt.xlabel(\"Time (s)\")\n",
+    "plt.ylabel(\"Voltage (V)\")\n",
     "plt.legend()"
    ]
   }
diff --git a/noxfile.py b/noxfile.py
index 9117de5ba..7a39e8338 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -10,7 +10,7 @@
 
 
 @nox.session
-def unit_test(session):
+def unit(session):
     session.run_always("pip", "install", "-e", ".")
     session.install("pytest")
     session.run("pytest")
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 1b71c1d46..6b5cfe509 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -31,14 +31,7 @@
 #
 # Parameterisation class
 #
-from .parameterisation import Parameterisation
-from .parameter_sets import ParameterSet
-from .parameters import Parameter
-
-#
-# Observation class
-#
-from .observations import Observed
+from .identification import Parameterisation, ParameterSet, Parameter, Observed
 
 #
 # Priors class
diff --git a/pybop/identification/__init__.py b/pybop/identification/__init__.py
new file mode 100644
index 000000000..4bcb89c1d
--- /dev/null
+++ b/pybop/identification/__init__.py
@@ -0,0 +1,4 @@
+from .parameter_set import ParameterSet
+from .parameter import Parameter
+from .observations import Observed
+from .parameterisation import Parameterisation
diff --git a/pybop/observations.py b/pybop/identification/observations.py
similarity index 100%
rename from pybop/observations.py
rename to pybop/identification/observations.py
diff --git a/pybop/parameters.py b/pybop/identification/parameter.py
similarity index 100%
rename from pybop/parameters.py
rename to pybop/identification/parameter.py
diff --git a/pybop/parameter_sets.py b/pybop/identification/parameter_set.py
similarity index 100%
rename from pybop/parameter_sets.py
rename to pybop/identification/parameter_set.py
diff --git a/pybop/parameterisation.py b/pybop/identification/parameterisation.py
similarity index 98%
rename from pybop/parameterisation.py
rename to pybop/identification/parameterisation.py
index cbc802240..4a2cee9d5 100644
--- a/pybop/parameterisation.py
+++ b/pybop/identification/parameterisation.py
@@ -22,6 +22,7 @@ def __init__(
         self.fit_dict = {}
         self.fit_parameters = {o.name: o for o in fit_parameters}
         self.observations = {o.name: o for o in observations}
+        self.model.n_parameters = len(self.fit_dict)
 
         # Check that the observations contain time and current
         for name in ["Time [s]", "Current function [A]"]:
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 697900f7a..7d529b3cf 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -8,20 +8,24 @@ class BaseModel:
     """
 
     def __init__(self, name="Base Model"):
-        self.pybamm_model = None
         self.name = name
-        # self.parameter_set = None
+        self.pybamm_model = None
+        self.fit_parameters = None
+        self.observations = None
 
     def build(
         self,
-        observations,
-        fit_parameters,
+        observations=None,
+        fit_parameters=None,
         check_model=True,
         init_soc=None,
     ):
         """
         Build the model (if not built already).
         """
+        self.fit_parameters = fit_parameters
+        self.observations = observations
+
         if init_soc is not None:
             self.set_init_soc(init_soc)
 
@@ -32,14 +36,12 @@ def build(
             self._model_with_set_params = self.pybamm_model
             self._built_model = self.pybamm_model
         else:
-            self.set_params(observations, fit_parameters)
+            self.set_params()
             self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
             self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
             self._built_model = self._disc.process_model(
                 self._model_with_set_params, inplace=False, check_model=check_model
             )
-            # Set t_eval
-            self.time_data = self._parameter_set["Current function [A]"].x[0]
 
             # Clear solver
             self._solver._model_set_up = {}
@@ -64,25 +66,26 @@ def set_init_soc(self, init_soc):
         # Save solved initial SOC in case we need to rebuild the model
         self._built_initial_soc = init_soc
 
-    def set_params(self, observations, fit_parameters):
+    def set_params(self):
         """
         Set the parameters in the model.
         """
         if self.model_with_set_params:
             return
 
-        try:
+        if self.fit_parameters is not None:
+            # set input parameters in parameter set from fitting parameters
+            for i in self.fit_parameters:
+                self.parameter_set[i] = "[input]"
+
+        if self.observations is not None and self.fit_parameters is not None:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                observations["Time [s]"].data,
-                observations["Current function [A]"].data,
+                self.observations["Time [s]"].data,
+                self.observations["Current function [A]"].data,
                 pybamm.t,
             )
-        except:
-            raise ValueError("Current function not supplied")
-
-        # set input parameters in parameter set from fitting parameters
-        for i in fit_parameters:
-            self.parameter_set[i] = "[input]"
+            # Set t_eval
+            self.time_data = self._parameter_set["Current function [A]"].x[0]
 
         self._model_with_set_params = self._parameter_set.process_model(
             self._unprocessed_model, inplace=False
@@ -90,20 +93,44 @@ def set_params(self, observations, fit_parameters):
         self._parameter_set.process_geometry(self.geometry)
         self.pybamm_model = self._model_with_set_params
 
-    def sim(self, experiment=None, parameter_set=None):
+    def simulate(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
         """
-        Simulate the model
+        Run the forward model and return the result in Numpy array format
+        aligning with Pints' ForwardModel simulate method.
+        """
+        parameter_set = parameter_set or self.parameter_set
+        if inputs is None:
+            return self._simulate(parameter_set, experiment).solve(t_eval=t_eval)
+        else:
+            if self._built_model is None:
+                self.build(fit_parameters=inputs.keys())
+                return self.solver.solve(self.built_model, inputs=inputs, t_eval=t_eval)
+
+    def _simulate(self, parameter_set=None, experiment=None):
+        """
+        Create a PyBaMM simulation object and return it.
         """
         if self.pybamm_model is not None:
-            self.parameter_set = parameter_set or self.parameter_set
             return pybamm.Simulation(
                 self.pybamm_model,
                 experiment=experiment,
-                parameter_values=self.parameter_set,
+                parameter_values=parameter_set,
             )
         else:
             raise ValueError("This sim method currently only supports PyBaMM models")
 
+    def n_parameters(self):
+        """
+        Returns the dimension of the parameter space.
+        """
+        return len(self.fit_parameters)
+
+    def n_outputs(self):
+        """
+        Returns the number of outputs this model has. The default is 1.
+        """
+        return 1
+
     @property
     def built_model(self):
         return self._built_model
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index 9914cc837..25f6526c9 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -5,7 +5,8 @@
 
 class SPM(BaseModel):
     """
-    Composition of the SPM class in PyBaMM.
+    Composition of the PyBaMM Single Particle Model class.
+
     """
 
     def __init__(
@@ -23,6 +24,7 @@ def __init__(
         self._unprocessed_model = self.pybamm_model
         self.name = name
 
+        self.default_parameter_values = self.pybamm_model.default_parameter_values
         self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
         self._unprocessed_parameter_set = self.parameter_set
 
@@ -43,7 +45,8 @@ def __init__(
 
 class SPMe(BaseModel):
     """
-    Composition of the SPMe class in PyBaMM.
+    Composition of the PyBaMM Single Particle Model with Electrolyte class.
+
     """
 
     def __init__(
@@ -61,6 +64,7 @@ def __init__(
         self._unprocessed_model = self.pybamm_model
         self.name = name
 
+        self.default_parameter_values = self.pybamm_model.default_parameter_values
         self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
         self._unprocessed_parameter_set = self.parameter_set
 
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index f9f821f90..5cbadf84a 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -24,11 +24,10 @@ def getdata(self, model, x0):
             ]
             * 2
         )
-        sim = model.sim(experiment=experiment)
-        return sim.solve()
+        sim = model.simulate(experiment=experiment)
+        return sim
 
     def test_spm(self):
-
         # Define model
         model = pybop.lithium_ion.SPM()
         model.parameter_set = model.pybamm_model.default_parameter_values
@@ -70,7 +69,6 @@ def test_spm(self):
         np.testing.assert_allclose(results, x0, atol=1e-1)
 
     def test_spme(self):
-
         # Define model
         model = pybop.lithium_ion.SPMe()
         model.parameter_set = model.pybamm_model.default_parameter_values

From f5378c9ce77b3e852cc75662f738398ab1520b63 Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Fri, 13 Oct 2023 15:35:24 +0000
Subject: [PATCH 105/210] docs: update README.md [skip ci]

---
 README.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/README.md b/README.md
index 518393dfd..128da7964 100644
--- a/README.md
+++ b/README.md
@@ -215,7 +215,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
   <tbody>
     <tr>
       <td align="center" valign="top" width="14.28%"><a href="http://bradyplanden.github.io"><img src="https://avatars.githubusercontent.com/u/55357039?v=4?s=100" width="100px;" alt="Brady Planden"/><br /><sub><b>Brady Planden</b></sub></a><br /><a href="#infra-BradyPlanden" title="Infrastructure (Hosting, Build-Tools, etc)">🚇</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Tests">⚠️</a> <a href="https://github.com/pybop-team/PyBOP/commits?author=BradyPlanden" title="Code">💻</a> <a href="#example-BradyPlanden" title="Examples">💡</a></td>
-      <td align="center" valign="top" width="14.28%"><a href="https://github.com/NicolaCourtier"><img src="https://avatars.githubusercontent.com/u/45851982?v=4?s=100" width="100px;" alt="NicolaCourtier"/><br /><sub><b>NicolaCourtier</b></sub></a><br /><a href="https://github.com/pybop-team/PyBOP/commits?author=NicolaCourtier" title="Code">💻</a></td>
+      <td align="center" valign="top" width="14.28%"><a href="https://github.com/NicolaCourtier"><img src="https://avatars.githubusercontent.com/u/45851982?v=4?s=100" width="100px;" alt="NicolaCourtier"/><br /><sub><b>NicolaCourtier</b></sub></a><br /><a href="https://github.com/pybop-team/PyBOP/commits?author=NicolaCourtier" title="Code">💻</a> <a href="https://github.com/pybop-team/PyBOP/pulls?q=is%3Apr+reviewed-by%3ANicolaCourtier" title="Reviewed Pull Requests">👀</a></td>
       <td align="center" valign="top" width="14.28%"><a href="http://howey.eng.ox.ac.uk"><img src="https://avatars.githubusercontent.com/u/2247552?v=4?s=100" width="100px;" alt="David Howey"/><br /><sub><b>David Howey</b></sub></a><br /><a href="#ideas-davidhowey" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-davidhowey" title="Mentoring">🧑‍🏫</a></td>
       <td align="center" valign="top" width="14.28%"><a href="http://www.rse.ox.ac.uk"><img src="https://avatars.githubusercontent.com/u/1148404?v=4?s=100" width="100px;" alt="Martin Robinson"/><br /><sub><b>Martin Robinson</b></sub></a><br /><a href="#ideas-martinjrobins" title="Ideas, Planning, & Feedback">🤔</a> <a href="#mentoring-martinjrobins" title="Mentoring">🧑‍🏫</a></td>
     </tr>

From 468de32cf229cfc9675a96244510515e7e7a479e Mon Sep 17 00:00:00 2001
From: "allcontributors[bot]"
 <46447321+allcontributors[bot]@users.noreply.github.com>
Date: Fri, 13 Oct 2023 15:35:25 +0000
Subject: [PATCH 106/210] docs: update .all-contributorsrc [skip ci]

---
 .all-contributorsrc | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/.all-contributorsrc b/.all-contributorsrc
index 920bf1dde..2be30620d 100644
--- a/.all-contributorsrc
+++ b/.all-contributorsrc
@@ -25,7 +25,8 @@
       "avatar_url": "https://avatars.githubusercontent.com/u/45851982?v=4",
       "profile": "https://github.com/NicolaCourtier",
       "contributions": [
-        "code"
+        "code",
+        "review"
       ]
     },
     {

From ce56923797706f7d82d50765553a65feaee70ce1 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 13 Oct 2023 17:26:58 +0100
Subject: [PATCH 107/210] Add prior and parameter_set tests, remove redundant
 catch in parameter_set

---
 pybop/identification/parameter_set.py |  3 ---
 tests/unit/test_parameterisation.py   | 23 +++++++++++++++++++++++
 2 files changed, 23 insertions(+), 3 deletions(-)

diff --git a/pybop/identification/parameter_set.py b/pybop/identification/parameter_set.py
index 60d9b6a9e..261c84fa2 100644
--- a/pybop/identification/parameter_set.py
+++ b/pybop/identification/parameter_set.py
@@ -8,9 +8,6 @@ class ParameterSet:
 
     def __new__(cls, method, name):
         if method.casefold() == "pybamm":
-            try:
                 return pybamm.ParameterValues(name).copy()
-            except:
-                raise ValueError("Parameter set not found")
         else:
             raise ValueError("Only PybaMM parameter sets are currently implemented")
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index b584ca08c..3549e489e 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -121,3 +121,26 @@ def test_simulate_without_build_model(self):
             ValueError, match="Model must be built before calling simulate"
         ):
             model.simulate(None, None)
+
+    @pytest.mark.unit
+    def test_priors(self):
+        # Tests priors
+        Gaussian = pybop.Gaussian(0.5, 1)
+        Uniform = pybop.Uniform(0, 1)
+        Exponential = pybop.Exponential(1)
+
+        np.testing.assert_allclose(Gaussian.pdf(0.5), 0.3989422804014327, atol=1e-4)
+        np.testing.assert_allclose(Uniform.pdf(0.5), 1, atol=1e-4)
+        np.testing.assert_allclose(Exponential.pdf(1), 0.36787944117144233, atol=1e-4)
+
+    @pytest.mark.unit
+    def test_parameter_set(self):
+        # Tests parameter set creation
+        with pytest.raises(ValueError):
+            pybop.ParameterSet("pybamms", "Chen2020")
+
+        parameter_test = pybop.ParameterSet("pybamm", "Chen2020")
+        np.testing.assert_allclose(
+            parameter_test["Negative electrode active material volume fraction"], 0.75
+        )
+

From 5168e068304f279b6809e3a83e1e200806485e0d Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 23 Oct 2023 09:46:59 +0100
Subject: [PATCH 108/210] Add periodic tests w/ self-hosted, Updt. dependency
 install, Updt. workflow names

---
 .github/workflows/scheduled_tests.yaml | 68 ++++++++++++++++++++++++++
 .github/workflows/test_on_push.yaml    | 11 ++---
 2 files changed, 71 insertions(+), 8 deletions(-)
 create mode 100644 .github/workflows/scheduled_tests.yaml

diff --git a/.github/workflows/scheduled_tests.yaml b/.github/workflows/scheduled_tests.yaml
new file mode 100644
index 000000000..02caaaafd
--- /dev/null
+++ b/.github/workflows/scheduled_tests.yaml
@@ -0,0 +1,68 @@
+name: Scheduled
+
+on:
+  workflow_dispatch:
+  pull_request:
+    branches:
+      - main
+
+  # runs every day at 09:00 UTC
+  schedule:
+    - cron: '0 9 * * *'
+
+jobs:
+  build:
+    runs-on: ubuntu-latest
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ["3.8", "3.9", "3.10", "3.11"]
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Set up Python ${{ matrix.python-version }}
+        uses: actions/setup-python@v4
+        with:
+          python-version: ${{ matrix.python-version }}
+      - name: Install dependencies
+        run: |
+          python -m pip install --upgrade pip nox
+      - name: Unit tests with nox
+        run: |
+          nox -s unit
+  
+    #M-series Mac Mini
+  build-apple-mseries:
+    needs: style
+    runs-on: [self-hosted, macOS, ARM64]
+    env:
+      GITHUB_PATH: ${PYENV_ROOT/bin:$PATH}
+    strategy:
+      fail-fast: false
+      matrix:
+        python-version: ["3.8", "3.9", "3.10", "3.11"]
+
+    steps:
+      - uses: actions/checkout@v4
+      - name: Install python & create virtualenv
+        shell: bash
+        run: |
+          eval "$(pyenv init -)"
+          pyenv install ${{ matrix.python-version }} -s
+          pyenv virtualenv ${{ matrix.python-version }} pybop-${{ matrix.python-version }}
+
+      - name: Install dependencies & run unit tests for Windows and MacOS
+        shell: bash
+        run: |
+          eval "$(pyenv init -)"
+          pyenv activate pybop-${{ matrix.python-version }}
+          python -m pip install --upgrade pip nox
+          python -m nox -s unit
+
+      - name: Uninstall pyenv-virtualenv & python
+        if: always()
+        shell: bash
+        run: |
+          eval "$(pyenv init -)"
+          pyenv activate pybop-${{ matrix.python-version }}
+          pyenv uninstall -f $( python --version )
\ No newline at end of file
diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index 977fbba12..02c71bcdd 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -1,4 +1,4 @@
-name: PyBOP
+name: test_on_push
 
 on:
   push:
@@ -29,9 +29,7 @@ jobs:
           python-version: ${{ matrix.python-version }}
       - name: Install dependencies
         run: |
-          python -m pip install --upgrade pip
-          pip install --upgrade pip nox
-          pip install -e .
+          python -m pip install --upgrade pip nox
       - name: Unit tests with nox
         run: |
           nox -s unit
@@ -56,10 +54,7 @@ jobs:
 
       - name: Install dependencies
         run: |
-          python -m pip install --upgrade pip
-          pip install --upgrade pip nox
-          pip install -e .
-
+          python -m pip install --upgrade pip nox
       - name: Run coverage tests for Ubuntu with Python 3.11 and generate report
         run: nox -s coverage
 

From 393067f1cc55a065ae753615c71da251c2123747 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 23 Oct 2023 10:18:52 +0100
Subject: [PATCH 109/210] Modify trigger to register workflow

---
 .github/workflows/scheduled_tests.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/scheduled_tests.yaml b/.github/workflows/scheduled_tests.yaml
index 02caaaafd..44be78644 100644
--- a/.github/workflows/scheduled_tests.yaml
+++ b/.github/workflows/scheduled_tests.yaml
@@ -3,8 +3,8 @@ name: Scheduled
 on:
   workflow_dispatch:
   pull_request:
-    branches:
-      - main
+    # branches:
+    #   - main
 
   # runs every day at 09:00 UTC
   schedule:

From c0650e25af80150d7227eecdf5f67a5c91714a16 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 23 Oct 2023 10:24:59 +0100
Subject: [PATCH 110/210] Updt trigger, remove style requirement, align nox
 call

---
 .github/workflows/scheduled_tests.yaml | 7 +++----
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/.github/workflows/scheduled_tests.yaml b/.github/workflows/scheduled_tests.yaml
index 44be78644..32a9c3ddb 100644
--- a/.github/workflows/scheduled_tests.yaml
+++ b/.github/workflows/scheduled_tests.yaml
@@ -3,8 +3,8 @@ name: Scheduled
 on:
   workflow_dispatch:
   pull_request:
-    # branches:
-    #   - main
+    branches:
+      - main
 
   # runs every day at 09:00 UTC
   schedule:
@@ -29,11 +29,10 @@ jobs:
           python -m pip install --upgrade pip nox
       - name: Unit tests with nox
         run: |
-          nox -s unit
+          python -m nox -s unit
   
     #M-series Mac Mini
   build-apple-mseries:
-    needs: style
     runs-on: [self-hosted, macOS, ARM64]
     env:
       GITHUB_PATH: ${PYENV_ROOT/bin:$PATH}

From bd3b1a3c1c24a9de84489d6d5d466a4fce774eb7 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 23 Oct 2023 10:40:08 +0100
Subject: [PATCH 111/210] Add wheel dependency

---
 .github/workflows/scheduled_tests.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.github/workflows/scheduled_tests.yaml b/.github/workflows/scheduled_tests.yaml
index 32a9c3ddb..e2903bbf9 100644
--- a/.github/workflows/scheduled_tests.yaml
+++ b/.github/workflows/scheduled_tests.yaml
@@ -50,12 +50,12 @@ jobs:
           pyenv install ${{ matrix.python-version }} -s
           pyenv virtualenv ${{ matrix.python-version }} pybop-${{ matrix.python-version }}
 
-      - name: Install dependencies & run unit tests for Windows and MacOS
+      - name: Install dependencies & run unit tests
         shell: bash
         run: |
           eval "$(pyenv init -)"
           pyenv activate pybop-${{ matrix.python-version }}
-          python -m pip install --upgrade pip nox
+          python -m pip install --upgrade pip nox wheel
           python -m nox -s unit
 
       - name: Uninstall pyenv-virtualenv & python

From d10804cfd6868b3ac491a579c9213e783b281455 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 23 Oct 2023 10:44:33 +0100
Subject: [PATCH 112/210] Add setuptools dependency

---
 .github/workflows/scheduled_tests.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/scheduled_tests.yaml b/.github/workflows/scheduled_tests.yaml
index e2903bbf9..9ee2c0cde 100644
--- a/.github/workflows/scheduled_tests.yaml
+++ b/.github/workflows/scheduled_tests.yaml
@@ -55,7 +55,7 @@ jobs:
         run: |
           eval "$(pyenv init -)"
           pyenv activate pybop-${{ matrix.python-version }}
-          python -m pip install --upgrade pip nox wheel
+          python -m pip install --upgrade pip wheel setuptools nox
           python -m nox -s unit
 
       - name: Uninstall pyenv-virtualenv & python

From 60d9a9e799c8cbd637a9130fa42a43298d01ac11 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 23 Oct 2023 13:23:31 +0100
Subject: [PATCH 113/210] Remove python matrix, 3.10 support only

---
 .github/workflows/scheduled_tests.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.github/workflows/scheduled_tests.yaml b/.github/workflows/scheduled_tests.yaml
index 9ee2c0cde..5e1e66887 100644
--- a/.github/workflows/scheduled_tests.yaml
+++ b/.github/workflows/scheduled_tests.yaml
@@ -39,7 +39,7 @@ jobs:
     strategy:
       fail-fast: false
       matrix:
-        python-version: ["3.8", "3.9", "3.10", "3.11"]
+        python-version: ["3.10"]
 
     steps:
       - uses: actions/checkout@v4

From d2403990bee8788e271de0ff30d3e21fb99e56da Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 23 Oct 2023 13:36:37 +0100
Subject: [PATCH 114/210] Updt testing badge for scheduled workflow

---
 README.md | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 128da7964..9b4f4a267 100644
--- a/README.md
+++ b/README.md
@@ -3,10 +3,9 @@
   <img src="https://raw.githubusercontent.com/pybop-team/PyBOP/develop/assets/Temp_Logo.png" alt="logo" width="400" height="auto" />
   <h1>Python Battery Optimisation and Parameterisation</h1>
 
-
 <p>
-  <a href="https://github.com/pybop-team/PyBOP/actions/workflows/test_on_push.yaml">
-    <img src="https://img.shields.io/github/actions/workflow/status/pybop-team/PyBOP/test_on_push.yaml?label=Build%20Status" alt="build" />
+  <a href="https://github.com/pybop-team/PyBOP/actions/workflows/scheduled_tests.yaml">
+    <img src="https://github.com/pybop-team/PyBOP/actions/workflows/scheduled_tests.yaml/badge.svg" alt="Scheduled" />
   </a>
   <a href="https://github.com/pybop-team/PyBOP/graphs/contributors">
     <img src="https://img.shields.io/github/contributors/pybop-team/PyBOP" alt="contributors" />

From e085a7f88ae0c549a0a3d4c2a14deff470a955aa Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 24 Oct 2023 17:45:06 +0100
Subject: [PATCH 115/210] Add pre-commit config and run on repo

---
 .github/ISSUE_TEMPLATE/feature_request.yml |  2 +-
 .github/workflows/release-action.yaml      |  4 +-
 .github/workflows/test_on_push.yaml        |  2 +-
 .pre-commit-config.yaml                    | 43 ++++++++++++++++++++++
 CONTRIBUTING.md                            |  2 +-
 README.md                                  |  6 +--
 examples/notebooks/rmse-estimisation.ipynb |  2 +-
 tests/unit/test_parameterisation.py        |  1 -
 8 files changed, 52 insertions(+), 10 deletions(-)
 create mode 100644 .pre-commit-config.yaml

diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
index 84ffca5d8..5821d4f5c 100644
--- a/.github/ISSUE_TEMPLATE/feature_request.yml
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -27,4 +27,4 @@ body:
     id: context
     attributes:
       label: Additional context
-      description: Add any additional context about the feature request.
\ No newline at end of file
+      description: Add any additional context about the feature request.
diff --git a/.github/workflows/release-action.yaml b/.github/workflows/release-action.yaml
index 8bfa74f15..c2cd834b2 100644
--- a/.github/workflows/release-action.yaml
+++ b/.github/workflows/release-action.yaml
@@ -36,7 +36,7 @@ jobs:
     runs-on: ubuntu-latest
     environment:
       name: pypi
-      url: https://pypi.org/p/pybop 
+      url: https://pypi.org/p/pybop
     permissions:
       id-token: write  # IMPORTANT: mandatory for trusted publishing
 
@@ -107,4 +107,4 @@ jobs:
     - name: Publish distribution 📦 to TestPyPI
       uses: pypa/gh-action-pypi-publish@release/v1
       with:
-        repository-url: https://test.pypi.org/legacy/
\ No newline at end of file
+        repository-url: https://test.pypi.org/legacy/
diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index 977fbba12..f5ee3b37d 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -66,4 +66,4 @@ jobs:
       - name: Upload coverage report
         uses: codecov/codecov-action@v3
         env:
-          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
\ No newline at end of file
+          CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
new file mode 100644
index 000000000..d4a98ef4e
--- /dev/null
+++ b/.pre-commit-config.yaml
@@ -0,0 +1,43 @@
+ci:
+  autoupdate_commit_msg: "chore: update pre-commit hooks"
+  autofix_commit_msg: "style: pre-commit fixes"
+
+repos:
+  - repo: https://github.com/astral-sh/ruff-pre-commit
+    rev: "v0.0.292"
+    hooks:
+      - id: ruff
+        args: [--fix, --ignore=E741, --exclude=__init__.py]
+
+  - repo: https://github.com/nbQA-dev/nbQA
+    rev: 1.7.0
+    hooks:
+      - id: nbqa-ruff
+        additional_dependencies: [ruff==0.0.284]
+        args: ["--fix","--ignore=E501,E402"]
+
+  # - repo: https://github.com/adamchainz/blacken-docs
+  #   rev: "1.16.0"
+  #   hooks:
+  #      - id: blacken-docs
+  #        additional_dependencies: [black==22.12.0]
+
+  - repo: https://github.com/pre-commit/pre-commit-hooks
+    rev: v4.4.0
+    hooks:
+        - id: check-added-large-files
+        - id: check-case-conflict
+        - id: check-merge-conflict
+        - id: check-yaml
+        - id: debug-statements
+        - id: end-of-file-fixer
+        - id: mixed-line-ending
+        - id: trailing-whitespace
+
+  - repo: https://github.com/pre-commit/pygrep-hooks
+    rev: v1.10.0
+    hooks:
+        - id: python-check-blanket-type-ignore
+        - id: rst-backticks
+        - id: rst-directive-colons
+        - id: rst-inline-touching-normal
diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 30d2fe59f..fab971445 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -279,4 +279,4 @@ GitHub does some magic with particular filenames. In particular:
 ## Acknowledgements
 
 This CONTRIBUTING.md file, along with large sections of the code infrastructure,
-was copied from the excellent [Pints repo](https://github.com/pints-team/pints), and [PyBaMM repo](https://github.com/pybamm-team/PyBaMM)
\ No newline at end of file
+was copied from the excellent [Pints repo](https://github.com/pints-team/pints), and [PyBaMM repo](https://github.com/pybamm-team/PyBaMM)
diff --git a/README.md b/README.md
index 128da7964..65bbe9c68 100644
--- a/README.md
+++ b/README.md
@@ -152,7 +152,7 @@ def getdata(x0):
 x0 = np.array([0.55, 0.63])
 solution = getdata(x0)
 ```
-Next, the observed variables are defined, with the model construction and parameter definitions following. Finally, the parameterisation class is constructed and parameter fitting is completed. 
+Next, the observed variables are defined, with the model construction and parameter definitions following. Finally, the parameterisation class is constructed and parameter fitting is completed.
 ```python
 observations = [
     pybop.Observed("Time [s]", solution["Time [s]"].data),
@@ -198,7 +198,7 @@ learning from the success of the [PyBaMM](https://pybamm.org/) community. Our va
 
 -   Inclusivity and fairness (those who want to contribute may do so, and their input is appropriately recognised)
 
--   Inter-operability (aiming for modularity to enable maximum impact and inclusivity)
+-   Interoperability (aiming for modularity to enable maximum impact and inclusivity)
 
 -   User-friendliness (putting user requirements first, thinking about user-assistance & workflows)
 
@@ -227,4 +227,4 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
 
 <!-- ALL-CONTRIBUTORS-LIST:END -->
 
-This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specifications. Contributions of any kind are welcome! See `contributing.md` for ways to get started.
\ No newline at end of file
+This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specifications. Contributions of any kind are welcome! See `contributing.md` for ways to get started.
diff --git a/examples/notebooks/rmse-estimisation.ipynb b/examples/notebooks/rmse-estimisation.ipynb
index c4104d7be..ff7b47771 100644
--- a/examples/notebooks/rmse-estimisation.ipynb
+++ b/examples/notebooks/rmse-estimisation.ipynb
@@ -220,7 +220,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Next, we define the targetted forward model parameters for estimation. Furthermore, PyBOP provides functionality to define a prior for the parameters. The initial parameters values used in the estimiation will be randomly drawn from the prior distribution."
+    "Next, we define the targeted forward model parameters for estimation. Furthermore, PyBOP provides functionality to define a prior for the parameters. The initial parameters values used in the estimiation will be randomly drawn from the prior distribution."
    ]
   },
   {
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
index 3549e489e..aa5499076 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisation.py
@@ -143,4 +143,3 @@ def test_parameter_set(self):
         np.testing.assert_allclose(
             parameter_test["Negative electrode active material volume fraction"], 0.75
         )
-

From 0f11fb46ad02e4dd62c0e4e60c752c70a3c7d1a8 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 25 Oct 2023 10:44:12 +0100
Subject: [PATCH 116/210] Add pre-commit format check

---
 .github/workflows/test_on_push.yaml | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/.github/workflows/test_on_push.yaml b/.github/workflows/test_on_push.yaml
index f5ee3b37d..9fb2b2c37 100644
--- a/.github/workflows/test_on_push.yaml
+++ b/.github/workflows/test_on_push.yaml
@@ -14,6 +14,21 @@ concurrency:
   cancel-in-progress: true
 
 jobs:
+  style:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4
+      - name: Setup Python
+        uses: actions/setup-python@v4
+        with:
+          python-version: 3.11
+
+      - name: Check formatting with pre-commit
+        run: |
+          python -m pip install pre-commit
+          pre-commit run ruff
+
+
   build:
     runs-on: ubuntu-latest
     strategy:

From 5fd104f37d0f92852bb09de6b6fdd983125ba007 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 25 Oct 2023 10:49:56 +0100
Subject: [PATCH 117/210] Add pre-commit to CONTRIBUTING

---
 CONTRIBUTING.md | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index fab971445..f65361cd2 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -8,6 +8,22 @@ Before you commit any code, please perform the following checks:
 
 - [All tests pass](#testing): `$ nox -s unit_test`
 
+### Installing and using pre-commit
+
+`PyBOP` uses a set of `pre-commit` hooks and the `pre-commit` bot to format and prettify the codebase. The hooks can be installed locally using -
+
+```bash
+pip install pre-commit
+pre-commit install
+```
+
+This would run the checks every time a commit is created locally. The checks will only run on the files modified by that commit, but the checks can be triggered for all the files using -
+
+```bash
+pre-commit run --all-files
+```
+
+If you would like to skip the failing checks and push the code for further discussion, use the `--no-verify` option with `git commit`.
 
 ## Workflow
 

From 00403cb479ded9daaf9304a8d951c75676a2acd2 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 25 Oct 2023 13:42:50 +0100
Subject: [PATCH 118/210] hotfix for model.simulate()

---
 pybop/models/BaseModel.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index d23d60f2f..21e48ebe3 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -102,7 +102,7 @@ def simulate(self, inputs, t_eval):
         if self._built_model is None:
             raise ValueError("Model must be built before calling simulate")
         else:
-            if inputs is isinstance(dict):
+            if not isinstance(inputs, dict):
                 inputs_dict = {
                     key: inputs[i] for i, key in enumerate(self.fit_parameters)
                 }

From 3251332c2d9d1ad5570ccd8caa92f4051901b6c6 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Wed, 25 Oct 2023 17:12:20 +0100
Subject: [PATCH 119/210] Run example scripts as tests (#65)

* Run example scripts as tests

* Add Pints to setup

* Remove Matlibplot test rendering, split tests with descripts, add BaseModel() tests

---------

Co-authored-by: Brady Planden <brady.planden@gmail.com>
---
 conftest.py                                   |  3 ++
 examples/scripts/mle.py                       |  1 -
 ...mse-estimisation.py => rmse_estimation.py} |  1 +
 pybop/__init__.py                             |  7 +--
 pybop/identification/observations.py          |  1 +
 pybop/identification/parameter_set.py         |  3 +-
 pybop/models/BaseModel.py                     |  2 +-
 setup.py                                      |  1 +
 tests/unit/test_examples.py                   | 20 ++++++++
 tests/unit/test_models.py                     | 34 +++++++++++++
 tests/unit/test_parameter_sets.py             | 22 ++++++++
 ...erisation.py => test_parameterisations.py} | 51 +++++--------------
 tests/unit/test_priors.py                     | 22 ++++++++
 13 files changed, 124 insertions(+), 44 deletions(-)
 rename examples/scripts/{rmse-estimisation.py => rmse_estimation.py} (98%)
 create mode 100644 tests/unit/test_examples.py
 create mode 100644 tests/unit/test_models.py
 create mode 100644 tests/unit/test_parameter_sets.py
 rename tests/unit/{test_parameterisation.py => test_parameterisations.py} (72%)
 create mode 100644 tests/unit/test_priors.py

diff --git a/conftest.py b/conftest.py
index 033168440..b37cbd0f5 100644
--- a/conftest.py
+++ b/conftest.py
@@ -1,4 +1,7 @@
 import pytest
+import matplotlib
+
+matplotlib.use("Template")
 
 
 def pytest_addoption(parser):
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index 9118e0b4b..1385a8ccd 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -41,7 +41,6 @@
 print("Estimated parameters:")
 print(x1)
 
-
 # Show the generated data
 simulated_values = problem.evaluate(x1[:2])
 
diff --git a/examples/scripts/rmse-estimisation.py b/examples/scripts/rmse_estimation.py
similarity index 98%
rename from examples/scripts/rmse-estimisation.py
rename to examples/scripts/rmse_estimation.py
index 30c5159a3..1e82d1df6 100644
--- a/examples/scripts/rmse-estimisation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -1,5 +1,6 @@
 import pybop
 import pandas as pd
+import numpy as np
 
 # Form observations
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 6b5cfe509..84dde9555 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -20,13 +20,14 @@
 # Float format: a float can be converted to a 17 digit decimal and back without
 # loss of information
 FLOAT_FORMAT = "{: .17e}"
-# Absolute path to the PyBOP repo
-script_path = os.path.abspath(__file__)
+# Absolute path to the pybop module
+script_path = os.path.dirname(__file__)
 
 #
 # Model Classes
 #
-from .models import BaseModel, lithium_ion
+from .models import lithium_ion
+from .models.BaseModel import BaseModel
 
 #
 # Parameterisation class
diff --git a/pybop/identification/observations.py b/pybop/identification/observations.py
index bd824af17..417a9b876 100644
--- a/pybop/identification/observations.py
+++ b/pybop/identification/observations.py
@@ -1,5 +1,6 @@
 import pybamm
 
+
 class Observed:
     """
     Class for experimental Observations.
diff --git a/pybop/identification/parameter_set.py b/pybop/identification/parameter_set.py
index d5fc930e8..1e1dc23ec 100644
--- a/pybop/identification/parameter_set.py
+++ b/pybop/identification/parameter_set.py
@@ -1,5 +1,6 @@
 import pybamm
 
+
 class ParameterSet:
     """
     Class for creating parameter sets in pybop.
@@ -7,6 +8,6 @@ class ParameterSet:
 
     def __new__(cls, method, name):
         if method.casefold() == "pybamm":
-                return pybamm.ParameterValues(name).copy()
+            return pybamm.ParameterValues(name).copy()
         else:
             raise ValueError("Only PybaMM parameter sets are currently implemented")
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 21e48ebe3..313f5b71b 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -1,7 +1,7 @@
 import pybamm
 
 
-class BaseModel:
+class BaseModel():
     """
     Base class for PyBOP models
     """
diff --git a/setup.py b/setup.py
index c0a885538..4d6b63a65 100644
--- a/setup.py
+++ b/setup.py
@@ -30,6 +30,7 @@
         "scipy>=1.3",
         "pandas>=1.0",
         "nlopt>=2.6",
+        "pints>=0.5",
     ],
     # https://pypi.org/classifiers/
     classifiers=[],
diff --git a/tests/unit/test_examples.py b/tests/unit/test_examples.py
new file mode 100644
index 000000000..60d1a5fe9
--- /dev/null
+++ b/tests/unit/test_examples.py
@@ -0,0 +1,20 @@
+import pybop
+import numpy as np
+import pytest
+import runpy
+import os
+
+
+class TestExamples:
+    """
+    A class to test the example scripts.
+    """
+
+    @pytest.mark.unit
+    def test_example_scripts(self):
+        path_to_example_scripts = os.path.join(
+            pybop.script_path, "..", "examples", "scripts"
+        )
+        for example in os.listdir(path_to_example_scripts):
+            if example.endswith(".py"):
+                runpy.run_path(os.path.join(path_to_example_scripts, example))
\ No newline at end of file
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
new file mode 100644
index 000000000..839c832d3
--- /dev/null
+++ b/tests/unit/test_models.py
@@ -0,0 +1,34 @@
+import pybop
+import numpy as np
+import pytest
+import runpy
+import os
+
+
+class TestModels:
+    """
+    A class to test the models.
+    """
+
+    @pytest.mark.unit
+    def test_simulate_without_build_model(self):
+        # Define model
+        model = pybop.lithium_ion.SPM()
+
+        with pytest.raises(
+            ValueError, match="Model must be built before calling simulate"
+        ):
+            model.simulate(None, None)
+
+    @pytest.mark.unit
+    def test_build(self):
+        model = pybop.lithium_ion.SPM()
+        model.build()
+        assert model.built_model is not None
+
+    @pytest.mark.unit
+    def test_n_parameters(self):
+        model = pybop.BaseModel()
+        n = model.n_outputs()
+        assert isinstance(n, int)
+
diff --git a/tests/unit/test_parameter_sets.py b/tests/unit/test_parameter_sets.py
new file mode 100644
index 000000000..fc58eac6b
--- /dev/null
+++ b/tests/unit/test_parameter_sets.py
@@ -0,0 +1,22 @@
+import pybop
+import numpy as np
+import pytest
+import runpy
+import os
+
+
+class TestParameterSets:
+    """
+    A class to test parameter sets.
+    """
+
+    @pytest.mark.unit
+    def test_parameter_set(self):
+        # Tests parameter set creation
+        with pytest.raises(ValueError):
+            pybop.ParameterSet("pybamms", "Chen2020")
+
+        parameter_test = pybop.ParameterSet("pybamm", "Chen2020")
+        np.testing.assert_allclose(
+            parameter_test["Negative electrode active material volume fraction"], 0.75
+        )
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisations.py
similarity index 72%
rename from tests/unit/test_parameterisation.py
rename to tests/unit/test_parameterisations.py
index 3549e489e..70c8b776b 100644
--- a/tests/unit/test_parameterisation.py
+++ b/tests/unit/test_parameterisations.py
@@ -1,10 +1,14 @@
 import pybop
 import pybamm
-import numpy as np
 import pytest
+import numpy as np
 
 
-class TestParameterisation:
+class TestModelParameterisation:
+    """
+    A class to test the model parameterisation methods.
+    """
+
     @pytest.mark.unit
     def test_spm(self):
         # Define model
@@ -43,8 +47,9 @@ def test_spm(self):
         results, last_optim, num_evals = parameterisation.rmse(
             signal="Voltage [V]", method="nlopt"
         )
-        # Assertions
-        np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
+
+        # Assertions (for testing purposes only)
+        np.testing.assert_allclose(last_optim, 0, atol=1e-2)
         np.testing.assert_allclose(results, x0, atol=1e-1)
 
     @pytest.mark.unit
@@ -85,9 +90,10 @@ def test_spme(self):
         results, last_optim, num_evals = parameterisation.rmse(
             signal="Voltage [V]", method="nlopt"
         )
-        # Assertions
-        np.testing.assert_allclose(last_optim, 1e-3, atol=1e-2)
-        np.testing.assert_allclose(results, x0, atol=1e-1)
+
+        # Assertions (for testing purposes only)
+        np.testing.assert_allclose(last_optim, 0, atol=1e-2)
+        np.testing.assert_allclose(results, x0, rtol=1e-1)
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values
@@ -112,35 +118,4 @@ def getdata(self, model, x0):
         sim = model.predict(experiment=experiment)
         return sim
 
-    @pytest.mark.unit
-    def test_simulate_without_build_model(self):
-        # Define model
-        model = pybop.lithium_ion.SPM()
-
-        with pytest.raises(
-            ValueError, match="Model must be built before calling simulate"
-        ):
-            model.simulate(None, None)
-
-    @pytest.mark.unit
-    def test_priors(self):
-        # Tests priors
-        Gaussian = pybop.Gaussian(0.5, 1)
-        Uniform = pybop.Uniform(0, 1)
-        Exponential = pybop.Exponential(1)
-
-        np.testing.assert_allclose(Gaussian.pdf(0.5), 0.3989422804014327, atol=1e-4)
-        np.testing.assert_allclose(Uniform.pdf(0.5), 1, atol=1e-4)
-        np.testing.assert_allclose(Exponential.pdf(1), 0.36787944117144233, atol=1e-4)
-
-    @pytest.mark.unit
-    def test_parameter_set(self):
-        # Tests parameter set creation
-        with pytest.raises(ValueError):
-            pybop.ParameterSet("pybamms", "Chen2020")
-
-        parameter_test = pybop.ParameterSet("pybamm", "Chen2020")
-        np.testing.assert_allclose(
-            parameter_test["Negative electrode active material volume fraction"], 0.75
-        )
 
diff --git a/tests/unit/test_priors.py b/tests/unit/test_priors.py
new file mode 100644
index 000000000..d7ba2d748
--- /dev/null
+++ b/tests/unit/test_priors.py
@@ -0,0 +1,22 @@
+import pybop
+import numpy as np
+import pytest
+import runpy
+import os
+
+
+class TestPriors:
+    """
+    A class to test the priors.
+    """
+
+    @pytest.mark.unit
+    def test_priors(self):
+        # Tests priors
+        Gaussian = pybop.Gaussian(0.5, 1)
+        Uniform = pybop.Uniform(0, 1)
+        Exponential = pybop.Exponential(1)
+
+        np.testing.assert_allclose(Gaussian.pdf(0.5), 0.3989422804014327, atol=1e-4)
+        np.testing.assert_allclose(Uniform.pdf(0.5), 1, atol=1e-4)
+        np.testing.assert_allclose(Exponential.pdf(1), 0.36787944117144233, atol=1e-4)

From 019718b2e35fffc0765314d2401530f644307c56 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Wed, 25 Oct 2023 17:25:09 +0100
Subject: [PATCH 120/210] Folder restructure into components of optimisation

No change to the code other than file locations. Aiming to represent the components of the architecture diagram in the structure of the code.
---
 pybop/__init__.py                                   | 13 ++++++++-----
 pybop/{optimisation => costs}/__init__.py           |  0
 pybop/datasets/__init__.py                          |  0
 pybop/{identification => datasets}/observations.py  |  0
 pybop/identification/__init__.py                    |  4 ----
 .../BaseOptimisation.py                             |  0
 pybop/{optimisation => optimisers}/NLoptOptimize.py |  0
 pybop/{optimisation => optimisers}/SciPyMinimize.py |  0
 pybop/optimisers/__init__.py                        |  0
 pybop/{identification => }/parameterisation.py      |  0
 pybop/parameters/__init__.py                        |  0
 pybop/{identification => parameters}/parameter.py   |  0
 .../{identification => parameters}/parameter_set.py |  0
 pybop/{ => parameters}/priors.py                    |  0
 14 files changed, 8 insertions(+), 9 deletions(-)
 rename pybop/{optimisation => costs}/__init__.py (100%)
 create mode 100644 pybop/datasets/__init__.py
 rename pybop/{identification => datasets}/observations.py (100%)
 delete mode 100644 pybop/identification/__init__.py
 rename pybop/{optimisation => optimisers}/BaseOptimisation.py (100%)
 rename pybop/{optimisation => optimisers}/NLoptOptimize.py (100%)
 rename pybop/{optimisation => optimisers}/SciPyMinimize.py (100%)
 create mode 100644 pybop/optimisers/__init__.py
 rename pybop/{identification => }/parameterisation.py (100%)
 create mode 100644 pybop/parameters/__init__.py
 rename pybop/{identification => parameters}/parameter.py (100%)
 rename pybop/{identification => parameters}/parameter_set.py (100%)
 rename pybop/{ => parameters}/priors.py (100%)

diff --git a/pybop/__init__.py b/pybop/__init__.py
index 84dde9555..a946b38ca 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -32,19 +32,22 @@
 #
 # Parameterisation class
 #
-from .identification import Parameterisation, ParameterSet, Parameter, Observed
+from .parameters.parameter_set import ParameterSet
+from .parameters.parameter import Parameter
+from .datasets.observations import Observed
+from .parameterisation import Parameterisation
 
 #
 # Priors class
 #
-from .priors import Gaussian, Uniform, Exponential
+from .parameters.priors import Gaussian, Uniform, Exponential
 
 #
 # Optimisation class
 #
-from .optimisation import BaseOptimisation
-from .optimisation.NLoptOptimize import NLoptOptimize
-from .optimisation.SciPyMinimize import SciPyMinimize
+from .optimisers import BaseOptimisation
+from .optimisers.NLoptOptimize import NLoptOptimize
+from .optimisers.SciPyMinimize import SciPyMinimize
 
 #
 # Remove any imported modules, so we don't expose them as part of pybop
diff --git a/pybop/optimisation/__init__.py b/pybop/costs/__init__.py
similarity index 100%
rename from pybop/optimisation/__init__.py
rename to pybop/costs/__init__.py
diff --git a/pybop/datasets/__init__.py b/pybop/datasets/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/pybop/identification/observations.py b/pybop/datasets/observations.py
similarity index 100%
rename from pybop/identification/observations.py
rename to pybop/datasets/observations.py
diff --git a/pybop/identification/__init__.py b/pybop/identification/__init__.py
deleted file mode 100644
index 4bcb89c1d..000000000
--- a/pybop/identification/__init__.py
+++ /dev/null
@@ -1,4 +0,0 @@
-from .parameter_set import ParameterSet
-from .parameter import Parameter
-from .observations import Observed
-from .parameterisation import Parameterisation
diff --git a/pybop/optimisation/BaseOptimisation.py b/pybop/optimisers/BaseOptimisation.py
similarity index 100%
rename from pybop/optimisation/BaseOptimisation.py
rename to pybop/optimisers/BaseOptimisation.py
diff --git a/pybop/optimisation/NLoptOptimize.py b/pybop/optimisers/NLoptOptimize.py
similarity index 100%
rename from pybop/optimisation/NLoptOptimize.py
rename to pybop/optimisers/NLoptOptimize.py
diff --git a/pybop/optimisation/SciPyMinimize.py b/pybop/optimisers/SciPyMinimize.py
similarity index 100%
rename from pybop/optimisation/SciPyMinimize.py
rename to pybop/optimisers/SciPyMinimize.py
diff --git a/pybop/optimisers/__init__.py b/pybop/optimisers/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/pybop/identification/parameterisation.py b/pybop/parameterisation.py
similarity index 100%
rename from pybop/identification/parameterisation.py
rename to pybop/parameterisation.py
diff --git a/pybop/parameters/__init__.py b/pybop/parameters/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/pybop/identification/parameter.py b/pybop/parameters/parameter.py
similarity index 100%
rename from pybop/identification/parameter.py
rename to pybop/parameters/parameter.py
diff --git a/pybop/identification/parameter_set.py b/pybop/parameters/parameter_set.py
similarity index 100%
rename from pybop/identification/parameter_set.py
rename to pybop/parameters/parameter_set.py
diff --git a/pybop/priors.py b/pybop/parameters/priors.py
similarity index 100%
rename from pybop/priors.py
rename to pybop/parameters/priors.py

From 25d2f656214eeeccd0b3cbced9bfc9b2100fcffa Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Wed, 25 Oct 2023 18:09:12 +0100
Subject: [PATCH 121/210] Rename optimisation/optimiser objects

Rename BaseOptimisation to BaseOptimiser for clarity of its purpose, and rename Parameterisation to Optimisation.
---
 examples/scripts/rmse_estimation.py                       | 2 +-
 pybop/__init__.py                                         | 4 ++--
 pybop/{parameterisation.py => optimisation.py}            | 4 ++--
 .../optimisers/{BaseOptimisation.py => BaseOptimiser.py}  | 4 ++--
 pybop/optimisers/NLoptOptimize.py                         | 8 ++++----
 pybop/optimisers/SciPyMinimize.py                         | 8 ++++----
 tests/unit/test_parameterisations.py                      | 4 ++--
 7 files changed, 17 insertions(+), 17 deletions(-)
 rename pybop/{parameterisation.py => optimisation.py} (98%)
 rename pybop/optimisers/{BaseOptimisation.py => BaseOptimiser.py} (91%)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 1e82d1df6..cb857baf0 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -28,7 +28,7 @@
     ),
 ]
 
-parameterisation = pybop.Parameterisation(
+parameterisation = pybop.Optimisation(
     model, observations=observations, fit_parameters=params
 )
 
diff --git a/pybop/__init__.py b/pybop/__init__.py
index a946b38ca..072276283 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -35,7 +35,6 @@
 from .parameters.parameter_set import ParameterSet
 from .parameters.parameter import Parameter
 from .datasets.observations import Observed
-from .parameterisation import Parameterisation
 
 #
 # Priors class
@@ -45,7 +44,8 @@
 #
 # Optimisation class
 #
-from .optimisers import BaseOptimisation
+from .optimisation import Optimisation
+from .optimisers import BaseOptimiser
 from .optimisers.NLoptOptimize import NLoptOptimize
 from .optimisers.SciPyMinimize import SciPyMinimize
 
diff --git a/pybop/parameterisation.py b/pybop/optimisation.py
similarity index 98%
rename from pybop/parameterisation.py
rename to pybop/optimisation.py
index 4a2cee9d5..d63fbec68 100644
--- a/pybop/parameterisation.py
+++ b/pybop/optimisation.py
@@ -2,9 +2,9 @@
 import numpy as np
 
 
-class Parameterisation:
+class Optimisation:
     """
-    Parameterisation class for pybop.
+    Optimisation class for PyBOP.
     """
 
     def __init__(
diff --git a/pybop/optimisers/BaseOptimisation.py b/pybop/optimisers/BaseOptimiser.py
similarity index 91%
rename from pybop/optimisers/BaseOptimisation.py
rename to pybop/optimisers/BaseOptimiser.py
index 1663375f8..130ac5299 100644
--- a/pybop/optimisers/BaseOptimisation.py
+++ b/pybop/optimisers/BaseOptimiser.py
@@ -1,4 +1,4 @@
-class BaseOptimisation:
+class BaseOptimiser:
     """
 
     Base class for the optimisation methods.
@@ -6,7 +6,7 @@ class BaseOptimisation:
     """
 
     def __init__(self):
-        self.name = "Base Optimisation"
+        self.name = "Base Optimiser"
 
     def optimise(self, cost_function, x0, bounds, method=None):
         """
diff --git a/pybop/optimisers/NLoptOptimize.py b/pybop/optimisers/NLoptOptimize.py
index c8040645a..e1c88f696 100644
--- a/pybop/optimisers/NLoptOptimize.py
+++ b/pybop/optimisers/NLoptOptimize.py
@@ -1,15 +1,15 @@
 import nlopt
-from .BaseOptimisation import BaseOptimisation
+from .BaseOptimiser import BaseOptimiser
 
 
-class NLoptOptimize(BaseOptimisation):
+class NLoptOptimize(BaseOptimiser):
     """
-    Wrapper class for the NLOpt optimisation class. Extends the BaseOptimisation class.
+    Wrapper class for the NLOpt optimisation class. Extends the BaseOptimiser class.
     """
 
     def __init__(self, method=None, x0=None, xtol=None):
         super().__init__()
-        self.name = "NLOpt Optimisation"
+        self.name = "NLOpt Optimiser"
 
         if method is not None:
             self.opt = nlopt.opt(method, len(x0))
diff --git a/pybop/optimisers/SciPyMinimize.py b/pybop/optimisers/SciPyMinimize.py
index 122d4d749..cd831e9b2 100644
--- a/pybop/optimisers/SciPyMinimize.py
+++ b/pybop/optimisers/SciPyMinimize.py
@@ -1,10 +1,10 @@
 from scipy.optimize import minimize
-from .BaseOptimisation import BaseOptimisation
+from .BaseOptimiser import BaseOptimiser
 
 
-class SciPyMinimize(BaseOptimisation):
+class SciPyMinimize(BaseOptimiser):
     """
-    Wrapper class for the Scipy optimisation class. Extends the BaseOptimisation class.
+    Wrapper class for the Scipy optimisation class. Extends the BaseOptimiser class.
     """
 
     def __init__(self, cost_function, x0, bounds=None, options=None):
@@ -14,7 +14,7 @@ def __init__(self, cost_function, x0, bounds=None, options=None):
         self.x0 = x0 or cost_function.x0
         self.bounds = bounds
         self.options = options
-        self.name = "Scipy Optimisation"
+        self.name = "Scipy Optimiser"
 
     def _runoptimise(self):
         """
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 70c8b776b..b542b0c96 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -39,7 +39,7 @@ def test_spm(self):
             ),
         ]
 
-        parameterisation = pybop.Parameterisation(
+        parameterisation = pybop.Optimisation(
             model, observations=observations, fit_parameters=params
         )
 
@@ -82,7 +82,7 @@ def test_spme(self):
             ),
         ]
 
-        parameterisation = pybop.Parameterisation(
+        parameterisation = pybop.Optimisation(
             model, observations=observations, fit_parameters=params
         )
 

From a6f1a193c25f72a87bc89832bccc9e22454d7957 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 26 Oct 2023 10:07:33 +0100
Subject: [PATCH 122/210] Add options to echem_classes, Updt example to show
 submodel usage

---
 examples/scripts/rmse_estimation.py    | 2 +-
 pybop/models/lithium_ion/base_echem.py | 6 ++++--
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index cb857baf0..000796f2d 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -12,7 +12,7 @@
 
 # Define model
 # parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
-model = pybop.models.lithium_ion.SPM()
+model = pybop.models.lithium_ion.SPM(options = {"thermal": "lumped"})
 
 # Fitting parameters
 params = [
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index 542d6a399..7f8efc202 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -17,9 +17,10 @@ def __init__(
         var_pts=None,
         spatial_methods=None,
         solver=None,
+        options=None,
     ):
         super().__init__()
-        self.pybamm_model = pybamm.lithium_ion.SPM()
+        self.pybamm_model = pybamm.lithium_ion.SPM(options=options)
         self._unprocessed_model = self.pybamm_model
         self.name = name
 
@@ -57,9 +58,10 @@ def __init__(
         var_pts=None,
         spatial_methods=None,
         solver=None,
+        options=None,
     ):
         super().__init__()
-        self.pybamm_model = pybamm.lithium_ion.SPMe()
+        self.pybamm_model = pybamm.lithium_ion.SPMe(options=options)
         self._unprocessed_model = self.pybamm_model
         self.name = name
 

From dd58d24c406f9a4b56982ea42be5bbfe0b2644e4 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 26 Oct 2023 10:10:16 +0100
Subject: [PATCH 123/210] black format

---
 examples/scripts/rmse_estimation.py  | 2 +-
 pybop/models/BaseModel.py            | 2 +-
 tests/unit/test_examples.py          | 2 +-
 tests/unit/test_models.py            | 1 -
 tests/unit/test_parameterisations.py | 2 --
 5 files changed, 3 insertions(+), 6 deletions(-)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 000796f2d..2c7f41eca 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -12,7 +12,7 @@
 
 # Define model
 # parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
-model = pybop.models.lithium_ion.SPM(options = {"thermal": "lumped"})
+model = pybop.models.lithium_ion.SPM(options={"thermal": "lumped"})
 
 # Fitting parameters
 params = [
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 313f5b71b..21e48ebe3 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -1,7 +1,7 @@
 import pybamm
 
 
-class BaseModel():
+class BaseModel:
     """
     Base class for PyBOP models
     """
diff --git a/tests/unit/test_examples.py b/tests/unit/test_examples.py
index 60d1a5fe9..807a577e3 100644
--- a/tests/unit/test_examples.py
+++ b/tests/unit/test_examples.py
@@ -17,4 +17,4 @@ def test_example_scripts(self):
         )
         for example in os.listdir(path_to_example_scripts):
             if example.endswith(".py"):
-                runpy.run_path(os.path.join(path_to_example_scripts, example))
\ No newline at end of file
+                runpy.run_path(os.path.join(path_to_example_scripts, example))
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index 839c832d3..9c746f992 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -31,4 +31,3 @@ def test_n_parameters(self):
         model = pybop.BaseModel()
         n = model.n_outputs()
         assert isinstance(n, int)
-
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index b542b0c96..4f6a60ce7 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -117,5 +117,3 @@ def getdata(self, model, x0):
         )
         sim = model.predict(experiment=experiment)
         return sim
-
-

From 486e2fc07cc0b07569922fd0ee1220a0aed7368b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 26 Oct 2023 10:54:42 +0100
Subject: [PATCH 124/210] Add boundary constraints on the prior sampling,
 bugfix for test assertion

---
 examples/scripts/rmse_estimation.py  |  2 +-
 pybop/models/BaseModel.py            |  2 +-
 pybop/optimisation.py                | 10 +++++++---
 tests/unit/test_examples.py          |  2 +-
 tests/unit/test_models.py            |  1 -
 tests/unit/test_parameterisations.py |  8 +++-----
 6 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index cb857baf0..71b378c1f 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -19,7 +19,7 @@
     pybop.Parameter(
         "Negative electrode active material volume fraction",
         prior=pybop.Gaussian(0.75, 0.05),
-        bounds=[0.65, 0.85],
+        bounds=[0.73, 0.77],
     ),
     pybop.Parameter(
         "Positive electrode active material volume fraction",
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 313f5b71b..21e48ebe3 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -1,7 +1,7 @@
 import pybamm
 
 
-class BaseModel():
+class BaseModel:
     """
     Base class for PyBOP models
     """
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index d63fbec68..a367d9fdb 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -39,9 +39,13 @@ def __init__(
         if x0 is None:
             self.x0 = np.zeros(len(self.fit_parameters))
             for i, j in enumerate(self.fit_parameters):
-                self.x0[i] = self.fit_parameters[j].prior.rvs(1)[
-                    0
-                ]  # Updt to capture dimensions per parameter
+                sample = self.fit_parameters[j].prior.rvs(1)[0]
+                if sample < self.fit_parameters[j].bounds[0]:
+                    self.x0[i] = self.fit_parameters[j].bounds[0]
+                elif sample > self.fit_parameters[j].bounds[1]:
+                    self.x0[i] = self.fit_parameters[j].bounds[1]
+                else:
+                    self.x0[i] = sample  # Updt to capture dimensions per parameter
 
         # Align initial guess with sample from prior
         for i, j in enumerate(self.fit_parameters):
diff --git a/tests/unit/test_examples.py b/tests/unit/test_examples.py
index 60d1a5fe9..807a577e3 100644
--- a/tests/unit/test_examples.py
+++ b/tests/unit/test_examples.py
@@ -17,4 +17,4 @@ def test_example_scripts(self):
         )
         for example in os.listdir(path_to_example_scripts):
             if example.endswith(".py"):
-                runpy.run_path(os.path.join(path_to_example_scripts, example))
\ No newline at end of file
+                runpy.run_path(os.path.join(path_to_example_scripts, example))
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index 839c832d3..9c746f992 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -31,4 +31,3 @@ def test_n_parameters(self):
         model = pybop.BaseModel()
         n = model.n_outputs()
         assert isinstance(n, int)
-
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index b542b0c96..942347d6c 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -48,7 +48,7 @@ def test_spm(self):
             signal="Voltage [V]", method="nlopt"
         )
 
-        # Assertions (for testing purposes only)
+        # Assertions
         np.testing.assert_allclose(last_optim, 0, atol=1e-2)
         np.testing.assert_allclose(results, x0, atol=1e-1)
 
@@ -91,9 +91,9 @@ def test_spme(self):
             signal="Voltage [V]", method="nlopt"
         )
 
-        # Assertions (for testing purposes only)
+        # Assertions
         np.testing.assert_allclose(last_optim, 0, atol=1e-2)
-        np.testing.assert_allclose(results, x0, rtol=1e-1)
+        np.testing.assert_allclose(results, x0, atol=1e-1)
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values
@@ -117,5 +117,3 @@ def getdata(self, model, x0):
         )
         sim = model.predict(experiment=experiment)
         return sim
-
-

From ab4ab1db5fd8342caa74d6ed8ea8b5b64863fcd5 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 26 Oct 2023 11:30:35 +0100
Subject: [PATCH 125/210] Add tests for optimisation class, prior bound
 sampling

---
 tests/unit/test_optimisation.py | 34 +++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
 create mode 100644 tests/unit/test_optimisation.py

diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
new file mode 100644
index 000000000..6d3c9d0ef
--- /dev/null
+++ b/tests/unit/test_optimisation.py
@@ -0,0 +1,34 @@
+import pybop
+import numpy as np
+import pytest
+
+
+class TestOptimisation:
+    """
+    A class to test the optimisation class.
+    """
+
+    @pytest.mark.unit
+    def test_prior_sampling(self):
+        # Tests prior sampling
+        model = pybop.lithium_ion.SPM()
+
+        observations = [
+            pybop.Observed("Time [s]", np.linspace(0, 3600, 100)),
+            pybop.Observed("Current function [A]", np.zeros(100)),
+            pybop.Observed("Terminal voltage [V]", np.ones(100)),
+        ]
+
+        param = [
+            pybop.Parameter(
+                "Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.75, 0.05),
+                bounds=[0.73, 0.77],
+            )
+        ]
+
+        for i in range(10):
+            opt = pybop.Optimisation(
+                model, observations=observations, fit_parameters=param
+            )
+            assert opt.x0 <= 0.77 and opt.x0 >= 0.73

From 426baf8c7dcdd7c5c5ae31a81439d263960706a5 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 26 Oct 2023 17:23:08 +0100
Subject: [PATCH 126/210] Fix model parameterisation, parameterize tests & add
 test for incorrect parameter_set

---
 examples/scripts/mle.py                |  1 +
 examples/scripts/rmse_estimation.py    | 10 +--
 pybop/models/BaseModel.py              | 23 ++++---
 pybop/models/lithium_ion/base_echem.py | 12 ++--
 tests/unit/test_examples.py            |  2 +-
 tests/unit/test_models.py              |  1 -
 tests/unit/test_parameterisations.py   | 84 ++++++++++++++++++++------
 7 files changed, 95 insertions(+), 38 deletions(-)

diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index 1385a8ccd..8ccdff464 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -37,6 +37,7 @@
 op = pints.OptimisationController(
     log_likelihood, x0, boundaries=boundaries, method=pints.CMAES
 )
+op.set_max_unchanged_iterations(20)  # default 200
 x1, f1 = op.run()
 print("Estimated parameters:")
 print(x1)
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index cb857baf0..5ddddf33a 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -11,25 +11,25 @@
 ]
 
 # Define model
-# parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
-model = pybop.models.lithium_ion.SPM()
+parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+model = pybop.models.lithium_ion.SPM(parameter_set=parameter_set)
 
 # Fitting parameters
 params = [
     pybop.Parameter(
         "Negative electrode active material volume fraction",
         prior=pybop.Gaussian(0.75, 0.05),
-        bounds=[0.65, 0.85],
+        bounds=[0.6, 0.9],
     ),
     pybop.Parameter(
         "Positive electrode active material volume fraction",
         prior=pybop.Gaussian(0.65, 0.05),
-        bounds=[0.55, 0.75],
+        bounds=[0.5, 0.8],
     ),
 ]
 
 parameterisation = pybop.Optimisation(
-    model, observations=observations, fit_parameters=params
+    model, init_soc=0.97, observations=observations, fit_parameters=params
 )
 
 # get RMSE estimate using NLOpt
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 313f5b71b..ccc2f5d9b 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -1,7 +1,7 @@
 import pybamm
 
 
-class BaseModel():
+class BaseModel:
     """
     Base class for PyBOP models
     """
@@ -59,7 +59,7 @@ def set_init_soc(self, init_soc):
             self.op_conds_to_built_solvers = None
 
         param = self.pybamm_model.param
-        self.parameter_set = (
+        self._parameter_set = (
             self._unprocessed_parameter_set.set_initial_stoichiometries(
                 init_soc, param=param, inplace=False
             )
@@ -77,10 +77,10 @@ def set_params(self):
         if self.fit_parameters is not None:
             # set input parameters in parameter set from fitting parameters
             for i in self.fit_parameters.keys():
-                self.parameter_set[i] = "[input]"
+                self._parameter_set[i] = "[input]"
 
         if self.observations is not None and self.fit_parameters is not None:
-            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
+            self._parameter_set["Current function [A]"] = pybamm.Interpolant(
                 self.observations["Time [s]"].data,
                 self.observations["Current function [A]"].data,
                 pybamm.t,
@@ -110,11 +110,18 @@ def simulate(self, inputs, t_eval):
                 self.built_model, inputs=inputs_dict, t_eval=t_eval
             )["Terminal voltage [V]"].data
 
-    def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
+    def predict(
+        self,
+        inputs=None,
+        t_eval=None,
+        parameter_set=None,
+        experiment=None,
+        init_soc=None,
+    ):
         """
         Create a PyBaMM simulation object, solve it, and return a solution object.
         """
-        parameter_set = parameter_set or self.parameter_set
+        parameter_set = parameter_set or self._parameter_set
         if inputs is not None:
             parameter_set.update(inputs)
         if self._unprocessed_model is not None:
@@ -122,13 +129,13 @@ def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None)
                 return pybamm.Simulation(
                     self._unprocessed_model,
                     parameter_values=parameter_set,
-                ).solve(t_eval=t_eval)
+                ).solve(t_eval=t_eval, initial_soc=init_soc)
             else:
                 return pybamm.Simulation(
                     self._unprocessed_model,
                     experiment=experiment,
                     parameter_values=parameter_set,
-                ).solve()
+                ).solve(initial_soc=init_soc)
         else:
             raise ValueError("This sim method currently only supports PyBaMM models")
 
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index 542d6a399..57ab718a8 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -24,8 +24,10 @@ def __init__(
         self.name = name
 
         self.default_parameter_values = self.pybamm_model.default_parameter_values
-        self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
-        self._unprocessed_parameter_set = self.parameter_set
+        self._parameter_set = (
+            parameter_set or self.pybamm_model.default_parameter_values
+        )
+        self._unprocessed_parameter_set = self._parameter_set
 
         self.geometry = geometry or self.pybamm_model.default_geometry
         self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types
@@ -64,8 +66,10 @@ def __init__(
         self.name = name
 
         self.default_parameter_values = self.pybamm_model.default_parameter_values
-        self.parameter_set = parameter_set or self.pybamm_model.default_parameter_values
-        self._unprocessed_parameter_set = self.parameter_set
+        self._parameter_set = (
+            parameter_set or self.pybamm_model.default_parameter_values
+        )
+        self._unprocessed_parameter_set = self._parameter_set
 
         self.geometry = geometry or self.pybamm_model.default_geometry
         self.submesh_types = submesh_types or self.pybamm_model.default_submesh_types
diff --git a/tests/unit/test_examples.py b/tests/unit/test_examples.py
index 60d1a5fe9..807a577e3 100644
--- a/tests/unit/test_examples.py
+++ b/tests/unit/test_examples.py
@@ -17,4 +17,4 @@ def test_example_scripts(self):
         )
         for example in os.listdir(path_to_example_scripts):
             if example.endswith(".py"):
-                runpy.run_path(os.path.join(path_to_example_scripts, example))
\ No newline at end of file
+                runpy.run_path(os.path.join(path_to_example_scripts, example))
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index 839c832d3..9c746f992 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -31,4 +31,3 @@ def test_n_parameters(self):
         model = pybop.BaseModel()
         n = model.n_outputs()
         assert isinstance(n, int)
-
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index b542b0c96..11e1daad1 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -9,15 +9,16 @@ class TestModelParameterisation:
     A class to test the model parameterisation methods.
     """
 
+    @pytest.mark.parametrize("init_soc", [0.3, 0.5, 0.8])
     @pytest.mark.unit
-    def test_spm(self):
+    def test_spm(self, init_soc):
         # Define model
-        model = pybop.lithium_ion.SPM()
-        model.parameter_set = model.pybamm_model.default_parameter_values
+        parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+        model = pybop.lithium_ion.SPM(parameter_set=parameter_set)
 
         # Form observations
         x0 = np.array([0.52, 0.63])
-        solution = self.getdata(model, x0)
+        solution = self.getdata(model, x0, init_soc)
 
         observations = [
             pybop.Observed("Time [s]", solution["Time [s]"].data),
@@ -40,7 +41,7 @@ def test_spm(self):
         ]
 
         parameterisation = pybop.Optimisation(
-            model, observations=observations, fit_parameters=params
+            model, observations=observations, fit_parameters=params, init_soc=init_soc
         )
 
         # get RMSE estimate using NLOpt
@@ -50,17 +51,18 @@ def test_spm(self):
 
         # Assertions (for testing purposes only)
         np.testing.assert_allclose(last_optim, 0, atol=1e-2)
-        np.testing.assert_allclose(results, x0, atol=1e-1)
+        np.testing.assert_allclose(results, x0, atol=5e-2)
 
+    @pytest.mark.parametrize("init_soc", [0.3, 0.5, 0.8])
     @pytest.mark.unit
-    def test_spme(self):
+    def test_spme(self, init_soc):
         # Define model
-        model = pybop.lithium_ion.SPMe()
-        model.parameter_set = model.pybamm_model.default_parameter_values
+        parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+        model = pybop.lithium_ion.SPMe(parameter_set=parameter_set)
 
         # Form observations
         x0 = np.array([0.52, 0.63])
-        solution = self.getdata(model, x0)
+        solution = self.getdata(model, x0, init_soc)
 
         observations = [
             pybop.Observed("Time [s]", solution["Time [s]"].data),
@@ -83,7 +85,7 @@ def test_spme(self):
         ]
 
         parameterisation = pybop.Optimisation(
-            model, observations=observations, fit_parameters=params
+            model, observations=observations, fit_parameters=params, init_soc=init_soc
         )
 
         # get RMSE estimate using NLOpt
@@ -93,11 +95,57 @@ def test_spme(self):
 
         # Assertions (for testing purposes only)
         np.testing.assert_allclose(last_optim, 0, atol=1e-2)
-        np.testing.assert_allclose(results, x0, rtol=1e-1)
+        np.testing.assert_allclose(results, x0, rtol=5e-2)
 
-    def getdata(self, model, x0):
-        model.parameter_set = model.pybamm_model.default_parameter_values
+    @pytest.mark.parametrize("init_soc", [0.3, 0.5, 0.8])
+    @pytest.mark.unit
+    def test_model_misparameterisation(self, init_soc):
+        # Define model
+        parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+        model = pybop.lithium_ion.SPM(parameter_set=parameter_set)
+
+        second_parameter_set = pybop.ParameterSet("pybamm", "Ecker2015")
+        second_model = pybop.lithium_ion.SPM(parameter_set=second_parameter_set)
+
+        # Form observations
+        x0 = np.array([0.52, 0.63])
+        solution = self.getdata(second_model, x0, init_soc)
+
+        observations = [
+            pybop.Observed("Time [s]", solution["Time [s]"].data),
+            pybop.Observed("Current function [A]", solution["Current [A]"].data),
+            pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
+        ]
+
+        # Fitting parameters
+        params = [
+            pybop.Parameter(
+                "Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.5, 0.02),
+                bounds=[0.375, 0.625],
+            ),
+            pybop.Parameter(
+                "Positive electrode active material volume fraction",
+                prior=pybop.Gaussian(0.65, 0.02),
+                bounds=[0.525, 0.75],
+            ),
+        ]
+
+        parameterisation = pybop.Optimisation(
+            model, observations=observations, fit_parameters=params, init_soc=init_soc
+        )
 
+        # get RMSE estimate using NLOpt
+        results, last_optim, num_evals = parameterisation.rmse(
+            signal="Voltage [V]", method="nlopt"
+        )
+
+        # Assertions (for testing purposes only)
+        with np.testing.assert_raises(AssertionError):
+            np.testing.assert_allclose(last_optim, 0, atol=1e-2)
+            np.testing.assert_allclose(results, x0, rtol=5e-1)
+
+    def getdata(self, model, x0, init_soc):
         model.parameter_set.update(
             {
                 "Negative electrode active material volume fraction": x0[0],
@@ -107,15 +155,13 @@ def getdata(self, model, x0):
         experiment = pybamm.Experiment(
             [
                 (
-                    "Discharge at 2C for 5 minutes (1 second period)",
+                    "Discharge at 1C for 3 minutes (1 second period)",
                     "Rest for 2 minutes (1 second period)",
-                    "Charge at 1C for 5 minutes (1 second period)",
+                    "Charge at 1C for 3 minutes (1 second period)",
                     "Rest for 2 minutes (1 second period)",
                 ),
             ]
             * 2
         )
-        sim = model.predict(experiment=experiment)
+        sim = model.predict(init_soc=init_soc, experiment=experiment)
         return sim
-
-

From 344e85fa7ad906b67794ac2a4e99b8d1a9551464 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 26 Oct 2023 17:26:27 +0100
Subject: [PATCH 127/210] Remove commented blacken repo, black format

---
 .pre-commit-config.yaml               | 6 ------
 pybop/identification/observations.py  | 1 +
 pybop/identification/parameter_set.py | 3 ++-
 3 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index d4a98ef4e..9791b659e 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -16,12 +16,6 @@ repos:
         additional_dependencies: [ruff==0.0.284]
         args: ["--fix","--ignore=E501,E402"]
 
-  # - repo: https://github.com/adamchainz/blacken-docs
-  #   rev: "1.16.0"
-  #   hooks:
-  #      - id: blacken-docs
-  #        additional_dependencies: [black==22.12.0]
-
   - repo: https://github.com/pre-commit/pre-commit-hooks
     rev: v4.4.0
     hooks:
diff --git a/pybop/identification/observations.py b/pybop/identification/observations.py
index bd824af17..417a9b876 100644
--- a/pybop/identification/observations.py
+++ b/pybop/identification/observations.py
@@ -1,5 +1,6 @@
 import pybamm
 
+
 class Observed:
     """
     Class for experimental Observations.
diff --git a/pybop/identification/parameter_set.py b/pybop/identification/parameter_set.py
index d5fc930e8..1e1dc23ec 100644
--- a/pybop/identification/parameter_set.py
+++ b/pybop/identification/parameter_set.py
@@ -1,5 +1,6 @@
 import pybamm
 
+
 class ParameterSet:
     """
     Class for creating parameter sets in pybop.
@@ -7,6 +8,6 @@ class ParameterSet:
 
     def __new__(cls, method, name):
         if method.casefold() == "pybamm":
-                return pybamm.ParameterValues(name).copy()
+            return pybamm.ParameterValues(name).copy()
         else:
             raise ValueError("Only PybaMM parameter sets are currently implemented")

From 3b1571e7fdcadba087a2a6157ee426782c191d66 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 27 Oct 2023 16:14:32 +0100
Subject: [PATCH 128/210] Add gradient support to BaseModel class, Add Pints
 gradient descent example

---
 examples/scripts/grad_descent.py | 58 ++++++++++++++++++++++++++++++++
 examples/scripts/mle.py          |  4 +--
 pybop/models/BaseModel.py        | 39 ++++++++++++++++++++-
 tests/unit/test_examples.py      |  2 +-
 tests/unit/test_models.py        |  1 -
 5 files changed, 99 insertions(+), 5 deletions(-)
 create mode 100644 examples/scripts/grad_descent.py

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
new file mode 100644
index 000000000..5c83ade0c
--- /dev/null
+++ b/examples/scripts/grad_descent.py
@@ -0,0 +1,58 @@
+import pybop
+import pints
+import numpy as np
+import matplotlib.pyplot as plt
+
+model = pybop.lithium_ion.SPMe()
+model.parameter_set["Current function [A]"] = 1
+
+inputs = {
+    "Negative electrode active material volume fraction": 0.587,
+    "Positive electrode active material volume fraction": 0.44,
+}
+t_eval = np.arange(0, 900, 2)
+model.build(fit_parameters=inputs)
+
+values = model.predict(inputs=inputs, t_eval=t_eval)
+voltage = values["Terminal voltage [V]"].data
+time = values["Time [s]"].data
+
+sigma = 0.0
+CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
+
+# Show the generated data
+plt.figure()
+plt.xlabel("Time")
+plt.ylabel("Values")
+plt.plot(time, CorruptValues)
+plt.plot(time, voltage)
+plt.show()
+
+
+problem = pints.SingleOutputProblem(model, time, CorruptValues)
+
+# Select a score function
+score = pints.SumOfSquaresError(problem)
+
+x0 = np.array([0.5, 0.5])
+opt = pints.OptimisationController(score, x0, method=pints.GradientDescent)
+
+opt.optimiser().set_learning_rate(0.025)
+opt.set_max_unchanged_iterations(250)
+opt.set_max_iterations(500)
+
+
+x1, f1 = opt.run()
+print("Estimated parameters:")
+print(x1)
+
+# Show the generated data
+simulated_values = problem.evaluate(x1[:2])
+
+plt.figure()
+plt.xlabel("Time")
+plt.ylabel("Values")
+plt.plot(time, CorruptValues)
+plt.fill_between(time, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
+plt.plot(time, simulated_values)
+plt.show()
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index 1385a8ccd..730263863 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -7,8 +7,8 @@
 model.parameter_set["Current function [A]"] = 2
 
 inputs = {
-    "Negative electrode active material volume fraction": 0.5,
-    "Positive electrode active material volume fraction": 0.6,
+    "Negative electrode active material volume fraction": 0.587,
+    "Positive electrode active material volume fraction": 0.44,
 }
 t_eval = np.arange(0, 900, 2)
 model.build(fit_parameters=inputs)
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 313f5b71b..380ef60b5 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -1,7 +1,8 @@
 import pybamm
+import numpy as np
 
 
-class BaseModel():
+class BaseModel:
     """
     Base class for PyBOP models
     """
@@ -26,6 +27,7 @@ def build(
         """
         self.fit_parameters = fit_parameters
         self.observations = observations
+        self.fit_keys = list(self.fit_parameters.keys())
 
         if init_soc is not None:
             self.set_init_soc(init_soc)
@@ -110,6 +112,41 @@ def simulate(self, inputs, t_eval):
                 self.built_model, inputs=inputs_dict, t_eval=t_eval
             )["Terminal voltage [V]"].data
 
+    def simulateS1(self, inputs, t_eval):
+        """
+        Run the forward model and return the function evaulation and it's gradient
+        aligning with Pints' ForwardModel simulateS1 method.
+        """
+        if self._built_model is None:
+            raise ValueError("Model must be built before calling simulate")
+        else:
+            if not isinstance(inputs, dict):
+                inputs_dict = {
+                    key: inputs[i] for i, key in enumerate(self.fit_parameters)
+                }
+            sol = self.solver.solve(
+                self.built_model,
+                inputs=inputs_dict,
+                t_eval=t_eval,
+                calculate_sensitivities=True,
+            )
+
+            # print(inputs_dict)
+            out = np.array(
+                [
+                    sol["Terminal voltage [V]"]
+                    .sensitivities[self.fit_keys[0]]
+                    .toarray(),
+                    sol["Terminal voltage [V]"]
+                    .sensitivities[self.fit_keys[0]]
+                    .toarray(),
+                ]
+            )
+
+            return sol["Terminal voltage [V]"].data, out.reshape(
+                (out.shape[1], out.shape[0])
+            )
+
     def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
         """
         Create a PyBaMM simulation object, solve it, and return a solution object.
diff --git a/tests/unit/test_examples.py b/tests/unit/test_examples.py
index 60d1a5fe9..807a577e3 100644
--- a/tests/unit/test_examples.py
+++ b/tests/unit/test_examples.py
@@ -17,4 +17,4 @@ def test_example_scripts(self):
         )
         for example in os.listdir(path_to_example_scripts):
             if example.endswith(".py"):
-                runpy.run_path(os.path.join(path_to_example_scripts, example))
\ No newline at end of file
+                runpy.run_path(os.path.join(path_to_example_scripts, example))
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index 839c832d3..9c746f992 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -31,4 +31,3 @@ def test_n_parameters(self):
         model = pybop.BaseModel()
         n = model.n_outputs()
         assert isinstance(n, int)
-

From 4e06bccc03e2a057a149dabdad9b912b0b18f9f7 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 27 Oct 2023 16:39:46 +0100
Subject: [PATCH 129/210] revert mle parameterisation

---
 examples/scripts/mle.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index 730263863..1385a8ccd 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -7,8 +7,8 @@
 model.parameter_set["Current function [A]"] = 2
 
 inputs = {
-    "Negative electrode active material volume fraction": 0.587,
-    "Positive electrode active material volume fraction": 0.44,
+    "Negative electrode active material volume fraction": 0.5,
+    "Positive electrode active material volume fraction": 0.6,
 }
 t_eval = np.arange(0, 900, 2)
 model.build(fit_parameters=inputs)

From c8404672e6a1b34c9611b9e233a5a2ebcc927c0c Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 27 Oct 2023 20:09:40 +0100
Subject: [PATCH 130/210] Bugfix for BaseModel, reduce grad_descent runtime

---
 examples/scripts/grad_descent.py | 4 ++--
 pybop/models/BaseModel.py        | 3 ++-
 2 files changed, 4 insertions(+), 3 deletions(-)

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 5c83ade0c..e8d866745 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -38,8 +38,8 @@
 opt = pints.OptimisationController(score, x0, method=pints.GradientDescent)
 
 opt.optimiser().set_learning_rate(0.025)
-opt.set_max_unchanged_iterations(250)
-opt.set_max_iterations(500)
+opt.set_max_unchanged_iterations(50)
+opt.set_max_iterations(100)
 
 
 x1, f1 = opt.run()
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 380ef60b5..a61efcb5b 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -27,7 +27,8 @@ def build(
         """
         self.fit_parameters = fit_parameters
         self.observations = observations
-        self.fit_keys = list(self.fit_parameters.keys())
+        if self.fit_parameters is not None:
+            self.fit_keys = list(self.fit_parameters.keys())
 
         if init_soc is not None:
             self.set_init_soc(init_soc)

From 4df240428d8dbac2bb8dd852fb6296905b7163d5 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 30 Oct 2023 17:20:01 +0000
Subject: [PATCH 131/210] Updt senstitivity inferface in simulateS1(), aligned
 parameterisation examples

---
 examples/scripts/grad_descent.py | 15 ++++++-----
 examples/scripts/mle.py          | 23 +++++++++--------
 pybop/models/BaseModel.py        | 43 ++++++++++++++++----------------
 3 files changed, 42 insertions(+), 39 deletions(-)

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index e8d866745..115b23258 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -4,20 +4,20 @@
 import matplotlib.pyplot as plt
 
 model = pybop.lithium_ion.SPMe()
-model.parameter_set["Current function [A]"] = 1
 
 inputs = {
-    "Negative electrode active material volume fraction": 0.587,
+    "Negative electrode active material volume fraction": 0.58,
     "Positive electrode active material volume fraction": 0.44,
+    "Current function [A]": 1,
 }
-t_eval = np.arange(0, 900, 2)
+t_eval = np.arange(0, 1200, 2)
 model.build(fit_parameters=inputs)
 
 values = model.predict(inputs=inputs, t_eval=t_eval)
 voltage = values["Terminal voltage [V]"].data
 time = values["Time [s]"].data
 
-sigma = 0.0
+sigma = 0.001
 CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
 
 # Show the generated data
@@ -34,20 +34,19 @@
 # Select a score function
 score = pints.SumOfSquaresError(problem)
 
-x0 = np.array([0.5, 0.5])
+x0 = np.array([0.48, 0.55, 1.4])
 opt = pints.OptimisationController(score, x0, method=pints.GradientDescent)
 
 opt.optimiser().set_learning_rate(0.025)
 opt.set_max_unchanged_iterations(50)
-opt.set_max_iterations(100)
-
+opt.set_max_iterations(200)
 
 x1, f1 = opt.run()
 print("Estimated parameters:")
 print(x1)
 
 # Show the generated data
-simulated_values = problem.evaluate(x1[:2])
+simulated_values = problem.evaluate(x1[:3])
 
 plt.figure()
 plt.xlabel("Time")
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index 1385a8ccd..e20ccf55b 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -4,20 +4,20 @@
 import matplotlib.pyplot as plt
 
 model = pybop.lithium_ion.SPMe()
-model.parameter_set["Current function [A]"] = 2
 
 inputs = {
-    "Negative electrode active material volume fraction": 0.5,
-    "Positive electrode active material volume fraction": 0.6,
+    "Negative electrode active material volume fraction": 0.58,
+    "Positive electrode active material volume fraction": 0.44,
+    "Current function [A]": 1,
 }
-t_eval = np.arange(0, 900, 2)
+t_eval = np.arange(0, 1200, 2)
 model.build(fit_parameters=inputs)
 
 values = model.predict(inputs=inputs, t_eval=t_eval)
 voltage = values["Terminal voltage [V]"].data
 time = values["Time [s]"].data
 
-sigma = 0.01
+sigma = 0.001
 CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
 
 # Show the generated data
@@ -31,18 +31,21 @@
 
 problem = pints.SingleOutputProblem(model, time, CorruptValues)
 log_likelihood = pints.GaussianLogLikelihood(problem)
-boundaries = pints.RectangularBoundaries([0.4, 0.4, 1e-5], [0.6, 0.6, 1e-1])
+boundaries = pints.RectangularBoundaries([0.4, 0.4, 0.7, 1e-5], [0.6, 0.6, 2.1, 1e-1])
 
-x0 = np.array([0.52, 0.47, 1e-3])
-op = pints.OptimisationController(
+x0 = np.array([0.48, 0.55, 1.4, 1e-3])
+opt = pints.OptimisationController(
     log_likelihood, x0, boundaries=boundaries, method=pints.CMAES
 )
-x1, f1 = op.run()
+opt.set_max_unchanged_iterations(50)
+opt.set_max_iterations(200)
+
+x1, f1 = opt.run()
 print("Estimated parameters:")
 print(x1)
 
 # Show the generated data
-simulated_values = problem.evaluate(x1[:2])
+simulated_values = problem.evaluate(x1[:3])
 
 plt.figure()
 plt.xlabel("Time")
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index a61efcb5b..184acc2f6 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -125,27 +125,28 @@ def simulateS1(self, inputs, t_eval):
                 inputs_dict = {
                     key: inputs[i] for i, key in enumerate(self.fit_parameters)
                 }
-            sol = self.solver.solve(
-                self.built_model,
-                inputs=inputs_dict,
-                t_eval=t_eval,
-                calculate_sensitivities=True,
-            )
-
-            # print(inputs_dict)
-            out = np.array(
-                [
-                    sol["Terminal voltage [V]"]
-                    .sensitivities[self.fit_keys[0]]
-                    .toarray(),
-                    sol["Terminal voltage [V]"]
-                    .sensitivities[self.fit_keys[0]]
-                    .toarray(),
-                ]
-            )
-
-            return sol["Terminal voltage [V]"].data, out.reshape(
-                (out.shape[1], out.shape[0])
+                sol = self.solver.solve(
+                    self.built_model,
+                    inputs=inputs_dict,
+                    t_eval=t_eval,
+                    calculate_sensitivities=True,
+                )
+            else:
+                sol = self.solver.solve(
+                    self.built_model,
+                    inputs=inputs,
+                    t_eval=t_eval,
+                    calculate_sensitivities=True,
+                )
+
+            return (
+                sol["Terminal voltage [V]"].data,
+                np.array(
+                    [
+                        sol["Terminal voltage [V]"].sensitivities[key].toarray()
+                        for key in self.fit_keys
+                    ]
+                ).T,
             )
 
     def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):

From 0dfad2f32e4ebe85894ad0464f40a2d3c36bb1c5 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 30 Oct 2023 18:00:59 +0000
Subject: [PATCH 132/210] ruff fixes, black formatting

---
 .github/workflows/scheduled_tests.yaml |  4 ++--
 .pre-commit-config.yaml                |  2 +-
 examples/scripts/rmse_estimation.py    |  1 -
 pybop/optimisation.py                  | 13 +++++++------
 tests/unit/test_examples.py            |  1 -
 tests/unit/test_models.py              |  3 ---
 tests/unit/test_parameter_sets.py      |  2 --
 tests/unit/test_priors.py              |  2 --
 8 files changed, 10 insertions(+), 18 deletions(-)

diff --git a/.github/workflows/scheduled_tests.yaml b/.github/workflows/scheduled_tests.yaml
index 5e1e66887..cb730f66e 100644
--- a/.github/workflows/scheduled_tests.yaml
+++ b/.github/workflows/scheduled_tests.yaml
@@ -30,7 +30,7 @@ jobs:
       - name: Unit tests with nox
         run: |
           python -m nox -s unit
-  
+
     #M-series Mac Mini
   build-apple-mseries:
     runs-on: [self-hosted, macOS, ARM64]
@@ -64,4 +64,4 @@ jobs:
         run: |
           eval "$(pyenv init -)"
           pyenv activate pybop-${{ matrix.python-version }}
-          pyenv uninstall -f $( python --version )
\ No newline at end of file
+          pyenv uninstall -f $( python --version )
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 9791b659e..784e58cca 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -7,7 +7,7 @@ repos:
     rev: "v0.0.292"
     hooks:
       - id: ruff
-        args: [--fix, --ignore=E741, --exclude=__init__.py]
+        args: ["--fix", "--ignore=E501,E402,E741", "--exclude=__init__.py"]
 
   - repo: https://github.com/nbQA-dev/nbQA
     rev: 1.7.0
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index cb857baf0..1e8ea68b3 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -1,6 +1,5 @@
 import pybop
 import pandas as pd
-import numpy as np
 
 # Form observations
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index d63fbec68..beebbec2c 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -77,15 +77,16 @@ def step(self, signal, x, grad):
                 "Measurement and simulated data length mismatch, potentially due to reaching a voltage cut-off"
             )
 
-        try:
-            res = np.sqrt(np.mean((self.observations["Voltage [V]"].data - y_hat) ** 2))
-        except:
-            print("Error in RMSE calculation")
-
         if self.verbose:
             print(self.fit_dict)
 
-        return res
+        try:
+            return np.sqrt(
+                np.mean((self.observations["Voltage [V]"].data - y_hat) ** 2)
+            )
+        except Exception as e:
+            print(f"Error in RMSE calculation: {e}")
+            return None
 
     def map(self, x0):
         """
diff --git a/tests/unit/test_examples.py b/tests/unit/test_examples.py
index 807a577e3..6e8fc09e0 100644
--- a/tests/unit/test_examples.py
+++ b/tests/unit/test_examples.py
@@ -1,5 +1,4 @@
 import pybop
-import numpy as np
 import pytest
 import runpy
 import os
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index 9c746f992..09c47d730 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -1,8 +1,5 @@
 import pybop
-import numpy as np
 import pytest
-import runpy
-import os
 
 
 class TestModels:
diff --git a/tests/unit/test_parameter_sets.py b/tests/unit/test_parameter_sets.py
index fc58eac6b..9cc478525 100644
--- a/tests/unit/test_parameter_sets.py
+++ b/tests/unit/test_parameter_sets.py
@@ -1,8 +1,6 @@
 import pybop
 import numpy as np
 import pytest
-import runpy
-import os
 
 
 class TestParameterSets:
diff --git a/tests/unit/test_priors.py b/tests/unit/test_priors.py
index d7ba2d748..cfb544cdf 100644
--- a/tests/unit/test_priors.py
+++ b/tests/unit/test_priors.py
@@ -1,8 +1,6 @@
 import pybop
 import numpy as np
 import pytest
-import runpy
-import os
 
 
 class TestPriors:

From ad31282b877ac01677745b2493f885eacb8f5527 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 31 Oct 2023 10:07:05 +0000
Subject: [PATCH 133/210] Add citation.cff

---
 CITATION.cff                | 17 +++++++++++++++++
 pybop/models/BaseModel.py   |  2 +-
 tests/unit/test_examples.py |  3 +--
 tests/unit/test_models.py   |  4 ----
 4 files changed, 19 insertions(+), 7 deletions(-)
 create mode 100644 CITATION.cff

diff --git a/CITATION.cff b/CITATION.cff
new file mode 100644
index 000000000..69dc095b4
--- /dev/null
+++ b/CITATION.cff
@@ -0,0 +1,17 @@
+cff-version: 1.2.0
+title: PyBOP
+message: >-
+  If you use this software, please cite it using the
+  metadata from this file.
+type: software
+authors:
+  - given-names: Brady
+    family-names: Planden
+  - given-names: Nicola
+    family-names: Courtier
+  - given-names: David
+    family-names: Howey
+identifiers:
+  - type: doi
+    value: 10.3452/zenodo.4321
+repository-code: 'https://www.github.com/pybop-team/pybop'
diff --git a/pybop/models/BaseModel.py b/pybop/models/BaseModel.py
index 313f5b71b..21e48ebe3 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/BaseModel.py
@@ -1,7 +1,7 @@
 import pybamm
 
 
-class BaseModel():
+class BaseModel:
     """
     Base class for PyBOP models
     """
diff --git a/tests/unit/test_examples.py b/tests/unit/test_examples.py
index 60d1a5fe9..6e8fc09e0 100644
--- a/tests/unit/test_examples.py
+++ b/tests/unit/test_examples.py
@@ -1,5 +1,4 @@
 import pybop
-import numpy as np
 import pytest
 import runpy
 import os
@@ -17,4 +16,4 @@ def test_example_scripts(self):
         )
         for example in os.listdir(path_to_example_scripts):
             if example.endswith(".py"):
-                runpy.run_path(os.path.join(path_to_example_scripts, example))
\ No newline at end of file
+                runpy.run_path(os.path.join(path_to_example_scripts, example))
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index 839c832d3..09c47d730 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -1,8 +1,5 @@
 import pybop
-import numpy as np
 import pytest
-import runpy
-import os
 
 
 class TestModels:
@@ -31,4 +28,3 @@ def test_n_parameters(self):
         model = pybop.BaseModel()
         n = model.n_outputs()
         assert isinstance(n, int)
-

From 4465aee5ecc962d5ecba7bbec69ad1ec60a8f6af Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 31 Oct 2023 10:13:27 +0000
Subject: [PATCH 134/210] Remove sample DOI

---
 CITATION.cff | 3 ---
 1 file changed, 3 deletions(-)

diff --git a/CITATION.cff b/CITATION.cff
index 69dc095b4..de4b2302a 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -11,7 +11,4 @@ authors:
     family-names: Courtier
   - given-names: David
     family-names: Howey
-identifiers:
-  - type: doi
-    value: 10.3452/zenodo.4321
 repository-code: 'https://www.github.com/pybop-team/pybop'

From c23be13b5818ea5ec3d8493aedf8cc0d0a3f92cc Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 31 Oct 2023 10:42:07 +0000
Subject: [PATCH 135/210] Updt. Title

---
 CITATION.cff | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/CITATION.cff b/CITATION.cff
index de4b2302a..e1efab891 100644
--- a/CITATION.cff
+++ b/CITATION.cff
@@ -1,5 +1,5 @@
 cff-version: 1.2.0
-title: PyBOP
+title: 'Python Battery Optimisation and Parameterisation (PyBOP)'
 message: >-
   If you use this software, please cite it using the
   metadata from this file.

From d03c21a428437d3e246619127de71208e901b6e5 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 31 Oct 2023 11:13:43 +0000
Subject: [PATCH 136/210] refactor for readability

---
 pybop/optimisation.py | 18 ++++++++++++------
 1 file changed, 12 insertions(+), 6 deletions(-)

diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index a367d9fdb..b993be720 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -38,12 +38,18 @@ def __init__(
         # Sample from prior for x0
         if x0 is None:
             self.x0 = np.zeros(len(self.fit_parameters))
-            for i, j in enumerate(self.fit_parameters):
-                sample = self.fit_parameters[j].prior.rvs(1)[0]
-                if sample < self.fit_parameters[j].bounds[0]:
-                    self.x0[i] = self.fit_parameters[j].bounds[0]
-                elif sample > self.fit_parameters[j].bounds[1]:
-                    self.x0[i] = self.fit_parameters[j].bounds[1]
+
+            for i, param in enumerate(self.fit_parameters):
+                parameter = self.fit_parameters[param]
+                sample = parameter.prior.rvs(1)[0]
+
+                lower_bound = parameter.bounds[0]
+                upper_bound = parameter.bounds[1]
+
+                if sample < lower_bound:
+                    self.x0[i] = lower_bound
+                elif sample > upper_bound:
+                    self.x0[i] = upper_bound
                 else:
                     self.x0[i] = sample  # Updt to capture dimensions per parameter
 

From 6fe2dca9fb0e5ee2f550ec79fcc9c54fb5932c6e Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Tue, 31 Oct 2023 12:25:33 +0000
Subject: [PATCH 137/210] Consistent filenames

---
 examples/scripts/rmse_estimation.py           |  6 +-
 pybop/__init__.py                             | 14 +--
 pybop/costs/error_costs.py                    | 93 +++++++++++++++++++
 .../{observations.py => base_dataset.py}      |  2 +-
 pybop/models/{BaseModel.py => base_model.py}  |  0
 pybop/models/lithium_ion/base_echem.py        |  2 +-
 .../{BaseOptimiser.py => base_optimiser.py}   |  0
 .../{NLoptOptimize.py => nlopt_optimize.py}   |  2 +-
 .../{SciPyMinimize.py => scipy_minimize.py}   |  2 +-
 .../{parameter.py => base_parameter.py}       |  0
 ...parameter_set.py => base_parameter_set.py} |  0
 tests/unit/test_parameterisations.py          | 18 ++--
 12 files changed, 118 insertions(+), 21 deletions(-)
 create mode 100644 pybop/costs/error_costs.py
 rename pybop/datasets/{observations.py => base_dataset.py} (96%)
 rename pybop/models/{BaseModel.py => base_model.py} (100%)
 rename pybop/optimisers/{BaseOptimiser.py => base_optimiser.py} (100%)
 rename pybop/optimisers/{NLoptOptimize.py => nlopt_optimize.py} (96%)
 rename pybop/optimisers/{SciPyMinimize.py => scipy_minimize.py} (96%)
 rename pybop/parameters/{parameter.py => base_parameter.py} (100%)
 rename pybop/parameters/{parameter_set.py => base_parameter_set.py} (100%)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index cb857baf0..dd0360350 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -5,9 +5,9 @@
 # Form observations
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
 observations = [
-    pybop.Observed("Time [s]", Measurements[:, 0]),
-    pybop.Observed("Current function [A]", Measurements[:, 1]),
-    pybop.Observed("Voltage [V]", Measurements[:, 2]),
+    pybop.Dataset("Time [s]", Measurements[:, 0]),
+    pybop.Dataset("Current function [A]", Measurements[:, 1]),
+    pybop.Dataset("Voltage [V]", Measurements[:, 2]),
 ]
 
 # Define model
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 072276283..e5fa88254 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -27,14 +27,14 @@
 # Model Classes
 #
 from .models import lithium_ion
-from .models.BaseModel import BaseModel
+from .models.base_model import BaseModel
 
 #
 # Parameterisation class
 #
-from .parameters.parameter_set import ParameterSet
-from .parameters.parameter import Parameter
-from .datasets.observations import Observed
+from .parameters.base_parameter_set import ParameterSet
+from .parameters.base_parameter import Parameter
+from .datasets.base_dataset import Dataset
 
 #
 # Priors class
@@ -45,9 +45,9 @@
 # Optimisation class
 #
 from .optimisation import Optimisation
-from .optimisers import BaseOptimiser
-from .optimisers.NLoptOptimize import NLoptOptimize
-from .optimisers.SciPyMinimize import SciPyMinimize
+from .optimisers import base_optimiser
+from .optimisers.nlopt_optimize import NLoptOptimize
+from .optimisers.scipy_minimize import SciPyMinimize
 
 #
 # Remove any imported modules, so we don't expose them as part of pybop
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
new file mode 100644
index 000000000..42b5c8bed
--- /dev/null
+++ b/pybop/costs/error_costs.py
@@ -0,0 +1,93 @@
+import pybop
+import numpy as np
+
+
+class RMSE:
+    """
+    Defines the root mean square error cost function.
+    """
+
+    def __init__(self):
+        self.name = "RMSE"
+
+    def compute(self, prediction, target):
+        # Check compatibility
+        if len(prediction) != len(target):
+            print(
+                "Length of vectors:",
+                len(prediction),
+                len(target),
+            )
+            raise ValueError(
+                "Measurement and simulated data length mismatch, potentially due to reaching a voltage cut-off"
+            )
+
+        print("Last Values:", prediction[-1], target[-1])
+
+        # Compute the cost
+        try:
+            cost = np.sqrt(np.mean((prediction - target) ** 2))
+        except:
+            print("Error in RMSE calculation")
+
+        return cost
+
+
+class MLE:
+    """
+    Defines the cost function for maximum likelihood estimation.
+    """
+
+    def __init__(self):
+        self.name = "MLE"
+
+    def compute(self, prediction, target):
+        # Compute the cost
+        try:
+            cost = 0  # update with MLE residual
+        except:
+            print("Error in MLE calculation")
+
+        return cost
+
+
+class PEM:
+    """
+    Defines the cost function for prediction error minimisation.
+    """
+
+    def __init__(self):
+        self.name = "PEM"
+
+    def compute(self, prediction, target):
+        # Compute the cost
+        try:
+            cost = 0  # update with MLE residual
+        except:
+            print("Error in PEM calculation")
+
+        return cost
+
+
+class MAP:
+    """
+    Defines the cost function for maximum a posteriori estimation.
+    """
+
+    def __init__(self):
+        self.name = "MAP"
+
+    def compute(self, prediction, target):
+        # Compute the cost
+        try:
+            cost = 0  # update with MLE residual
+        except:
+            print("Error in MAP calculation")
+
+        return cost
+
+    def sample(self, n_chains):
+        """
+        Sample from the posterior distribution.
+        """
+        pass
diff --git a/pybop/datasets/observations.py b/pybop/datasets/base_dataset.py
similarity index 96%
rename from pybop/datasets/observations.py
rename to pybop/datasets/base_dataset.py
index 417a9b876..41ee89060 100644
--- a/pybop/datasets/observations.py
+++ b/pybop/datasets/base_dataset.py
@@ -1,7 +1,7 @@
 import pybamm
 
 
-class Observed:
+class Dataset:
     """
     Class for experimental Observations.
     """
diff --git a/pybop/models/BaseModel.py b/pybop/models/base_model.py
similarity index 100%
rename from pybop/models/BaseModel.py
rename to pybop/models/base_model.py
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index 542d6a399..ffa3b5775 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -1,5 +1,5 @@
 import pybamm
-from ..BaseModel import BaseModel
+from ..base_model import BaseModel
 
 
 class SPM(BaseModel):
diff --git a/pybop/optimisers/BaseOptimiser.py b/pybop/optimisers/base_optimiser.py
similarity index 100%
rename from pybop/optimisers/BaseOptimiser.py
rename to pybop/optimisers/base_optimiser.py
diff --git a/pybop/optimisers/NLoptOptimize.py b/pybop/optimisers/nlopt_optimize.py
similarity index 96%
rename from pybop/optimisers/NLoptOptimize.py
rename to pybop/optimisers/nlopt_optimize.py
index e1c88f696..50552898e 100644
--- a/pybop/optimisers/NLoptOptimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -1,5 +1,5 @@
 import nlopt
-from .BaseOptimiser import BaseOptimiser
+from .base_optimiser import BaseOptimiser
 
 
 class NLoptOptimize(BaseOptimiser):
diff --git a/pybop/optimisers/SciPyMinimize.py b/pybop/optimisers/scipy_minimize.py
similarity index 96%
rename from pybop/optimisers/SciPyMinimize.py
rename to pybop/optimisers/scipy_minimize.py
index cd831e9b2..2c8a0e651 100644
--- a/pybop/optimisers/SciPyMinimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -1,5 +1,5 @@
 from scipy.optimize import minimize
-from .BaseOptimiser import BaseOptimiser
+from .base_optimiser import BaseOptimiser
 
 
 class SciPyMinimize(BaseOptimiser):
diff --git a/pybop/parameters/parameter.py b/pybop/parameters/base_parameter.py
similarity index 100%
rename from pybop/parameters/parameter.py
rename to pybop/parameters/base_parameter.py
diff --git a/pybop/parameters/parameter_set.py b/pybop/parameters/base_parameter_set.py
similarity index 100%
rename from pybop/parameters/parameter_set.py
rename to pybop/parameters/base_parameter_set.py
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 047e41847..d68b3debc 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -2,9 +2,10 @@
 import pybamm
 import pytest
 import numpy as np
+import unittest
 
 
-class TestModelParameterisation:
+class TestModelParameterisation(unittest.TestCase):
     """
     A class to test the model parameterisation methods.
     """
@@ -20,9 +21,9 @@ def test_spm(self):
         solution = self.getdata(model, x0)
 
         observations = [
-            pybop.Observed("Time [s]", solution["Time [s]"].data),
-            pybop.Observed("Current function [A]", solution["Current [A]"].data),
-            pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
+            pybop.Dataset("Time [s]", solution["Time [s]"].data),
+            pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
         # Fitting parameters
@@ -63,9 +64,9 @@ def test_spme(self):
         solution = self.getdata(model, x0)
 
         observations = [
-            pybop.Observed("Time [s]", solution["Time [s]"].data),
-            pybop.Observed("Current function [A]", solution["Current [A]"].data),
-            pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
+            pybop.Dataset("Time [s]", solution["Time [s]"].data),
+            pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
         # Fitting parameters
@@ -149,3 +150,6 @@ def test_parameter_set(self):
         np.testing.assert_allclose(
             parameter_test["Negative electrode active material volume fraction"], 0.75
         )
+
+if __name__ == "__main__":
+    unittest.main()

From 80e136b9478f583012e83d5d3b89fce6ea5c21f8 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Tue, 31 Oct 2023 13:19:31 +0000
Subject: [PATCH 138/210] Consistent formatting

---
 pybop/__init__.py                      | 34 ++++++++++++++++++--------
 pybop/datasets/base_dataset.py         |  4 +--
 pybop/models/base_model.py             |  2 +-
 pybop/models/lithium_ion/__init__.py   |  1 -
 pybop/optimisers/base_optimiser.py     |  3 +--
 pybop/optimisers/nlopt_optimize.py     |  2 +-
 pybop/optimisers/scipy_minimize.py     |  2 +-
 pybop/parameters/base_parameter.py     |  9 ++++---
 pybop/parameters/base_parameter_set.py |  7 ++++--
 pybop/parameters/priors.py             |  2 +-
 10 files changed, 42 insertions(+), 24 deletions(-)

diff --git a/pybop/__init__.py b/pybop/__init__.py
index e5fa88254..f06a38fdf 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -24,31 +24,45 @@
 script_path = os.path.dirname(__file__)
 
 #
-# Model Classes
+# Cost function class
 #
-from .models import lithium_ion
-from .models.base_model import BaseModel
+from .costs.error_costs import RMSE
 
 #
-# Parameterisation class
+# Dataset class
 #
-from .parameters.base_parameter_set import ParameterSet
-from .parameters.base_parameter import Parameter
 from .datasets.base_dataset import Dataset
 
 #
-# Priors class
+# Model classes
 #
-from .parameters.priors import Gaussian, Uniform, Exponential
+from .models.base_model import BaseModel
+from .models import lithium_ion
 
 #
-# Optimisation class
+# Main optimisation class
 #
 from .optimisation import Optimisation
-from .optimisers import base_optimiser
+
+#
+# Optimiser class
+#
+from .optimisers.base_optimiser import BaseOptimiser
 from .optimisers.nlopt_optimize import NLoptOptimize
 from .optimisers.scipy_minimize import SciPyMinimize
 
+#
+# Parameter classes
+#
+from .parameters.base_parameter import Parameter
+from .parameters.base_parameter_set import ParameterSet
+from .parameters.priors import Gaussian, Uniform, Exponential
+
+#
+# Plotting class
+#
+from .plotting.quick_plot import QuickPlot
+
 #
 # Remove any imported modules, so we don't expose them as part of pybop
 #
diff --git a/pybop/datasets/base_dataset.py b/pybop/datasets/base_dataset.py
index 41ee89060..ed194ae48 100644
--- a/pybop/datasets/base_dataset.py
+++ b/pybop/datasets/base_dataset.py
@@ -3,7 +3,7 @@
 
 class Dataset:
     """
-    Class for experimental Observations.
+    Class for experimental observations.
     """
 
     def __init__(self, name, data):
@@ -11,7 +11,7 @@ def __init__(self, name, data):
         self.data = data
 
     def __repr__(self):
-        return f"Observation: {self.name} \n Data: {self.data}"
+        return f"Dataset: {self.name} \n Data: {self.data}"
 
     def Interpolant(self):
         if self.variable == "time":
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 21e48ebe3..cce1aa8db 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -3,7 +3,7 @@
 
 class BaseModel:
     """
-    Base class for PyBOP models
+    Base class for pybop models.
     """
 
     def __init__(self, name="Base Model"):
diff --git a/pybop/models/lithium_ion/__init__.py b/pybop/models/lithium_ion/__init__.py
index 50f61b1e9..69b51653b 100644
--- a/pybop/models/lithium_ion/__init__.py
+++ b/pybop/models/lithium_ion/__init__.py
@@ -1,5 +1,4 @@
 #
 # Import lithium ion based models
 #
-
 from .base_echem import SPM, SPMe
diff --git a/pybop/optimisers/base_optimiser.py b/pybop/optimisers/base_optimiser.py
index 130ac5299..df6e253e5 100644
--- a/pybop/optimisers/base_optimiser.py
+++ b/pybop/optimisers/base_optimiser.py
@@ -10,10 +10,9 @@ def __init__(self):
 
     def optimise(self, cost_function, x0, bounds, method=None):
         """
-        Optimise method to be overloaded by child classes.
+        Optimisiation method to be overloaded by child classes.
 
         """
-        # Set up optimisation
         self.cost_function = cost_function
         self.x0 = x0
         self.method = method
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index 50552898e..5af0dbab2 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -4,7 +4,7 @@
 
 class NLoptOptimize(BaseOptimiser):
     """
-    Wrapper class for the NLOpt optimisation class. Extends the BaseOptimiser class.
+    Wrapper class for the NLOpt optimiser class. Extends the BaseOptimiser class.
     """
 
     def __init__(self, method=None, x0=None, xtol=None):
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index 2c8a0e651..bb9500135 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -4,7 +4,7 @@
 
 class SciPyMinimize(BaseOptimiser):
     """
-    Wrapper class for the Scipy optimisation class. Extends the BaseOptimiser class.
+    Wrapper class for the Scipy optimiser class. Extends the BaseOptimiser class.
     """
 
     def __init__(self, cost_function, x0, bounds=None, options=None):
diff --git a/pybop/parameters/base_parameter.py b/pybop/parameters/base_parameter.py
index f15bdfea5..c6b2e6cdf 100644
--- a/pybop/parameters/base_parameter.py
+++ b/pybop/parameters/base_parameter.py
@@ -3,8 +3,8 @@ class Parameter:
     Class for creating parameters in pybop.
     """
 
-    def __init__(self, param, value=None, prior=None, bounds=None):
-        self.name = param
+    def __init__(self, name, value=None, prior=None, bounds=None):
+        self.name = name
         self.prior = prior
         self.value = value
         self.bounds = bounds
@@ -15,5 +15,8 @@ def __init__(self, param, value=None, prior=None, bounds=None):
         # bounds checks and set defaults
         # implement methods to assign and retrieve parameters
 
+    def update(self, value):
+        self.value = value
+
     def __repr__(self):
-        return f"Parameter: {self.name} \n Prior: {self.prior} \n Bounds: {self.bounds}"
+        return f"Parameter: {self.name} \n Prior: {self.prior} \n Bounds: {self.bounds} \n Value: {self.value}"
diff --git a/pybop/parameters/base_parameter_set.py b/pybop/parameters/base_parameter_set.py
index 1e1dc23ec..e67b175ce 100644
--- a/pybop/parameters/base_parameter_set.py
+++ b/pybop/parameters/base_parameter_set.py
@@ -8,6 +8,9 @@ class ParameterSet:
 
     def __new__(cls, method, name):
         if method.casefold() == "pybamm":
-            return pybamm.ParameterValues(name).copy()
+            try:
+                return pybamm.ParameterValues(name).copy()
+            except:
+                raise ValueError("Parameter set not found")
         else:
-            raise ValueError("Only PybaMM parameter sets are currently implemented")
+            raise ValueError("Only PyBaMM parameter sets are currently implemented")
diff --git a/pybop/parameters/priors.py b/pybop/parameters/priors.py
index 7224b58a7..f98e9b767 100644
--- a/pybop/parameters/priors.py
+++ b/pybop/parameters/priors.py
@@ -57,7 +57,7 @@ def __repr__(self):
 
 class Exponential:
     """
-    exponential prior class.
+    Exponential prior class.
     """
 
     def __init__(self, scale):

From d27173389ce4602c076abc5072ed395a9295fe6b Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Tue, 31 Oct 2023 13:23:01 +0000
Subject: [PATCH 139/210] Update gitattributes and gitignore

---
 .gitattributes | 2 ++
 .gitignore     | 3 +++
 2 files changed, 5 insertions(+)
 create mode 100644 .gitattributes

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..dfe077042
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/.gitignore b/.gitignore
index 7978daaa3..838f372b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -301,3 +301,6 @@ $RECYCLE.BIN/
 *.lnk
 
 # End of https://www.toptal.com/developers/gitignore/api/python,macos,windows,linux,c
+
+# Visual Studio Code settings
+.vscode/*

From 0f91baba88b65e59c7525d500b7bb9a7e1b91a1e Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 31 Oct 2023 14:03:14 +0000
Subject: [PATCH 140/210] Squashed merge of #54

---
 .gitattributes                                |  2 +
 .gitignore                                    |  3 +
 CITATION.cff                                  | 14 +++
 examples/scripts/rmse_estimation.py           |  6 +-
 pybop/__init__.py                             | 38 +++++---
 pybop/costs/error_costs.py                    | 92 +++++++++++++++++++
 .../{observations.py => base_dataset.py}      |  6 +-
 pybop/models/{BaseModel.py => base_model.py}  |  2 +-
 pybop/models/lithium_ion/__init__.py          |  1 -
 pybop/models/lithium_ion/base_echem.py        |  2 +-
 .../{BaseOptimiser.py => base_optimiser.py}   |  3 +-
 .../{NLoptOptimize.py => nlopt_optimize.py}   |  4 +-
 .../{SciPyMinimize.py => scipy_minimize.py}   |  4 +-
 .../{parameter.py => base_parameter.py}       |  9 +-
 pybop/parameters/base_parameter_set.py        | 16 ++++
 pybop/parameters/parameter_set.py             | 13 ---
 pybop/parameters/priors.py                    |  2 +-
 tests/unit/test_parameterisations.py          | 19 ++--
 18 files changed, 185 insertions(+), 51 deletions(-)
 create mode 100644 .gitattributes
 create mode 100644 CITATION.cff
 create mode 100644 pybop/costs/error_costs.py
 rename pybop/datasets/{observations.py => base_dataset.py} (75%)
 rename pybop/models/{BaseModel.py => base_model.py} (99%)
 rename pybop/optimisers/{BaseOptimiser.py => base_optimiser.py} (87%)
 rename pybop/optimisers/{NLoptOptimize.py => nlopt_optimize.py} (89%)
 rename pybop/optimisers/{SciPyMinimize.py => scipy_minimize.py} (89%)
 rename pybop/parameters/{parameter.py => base_parameter.py} (68%)
 create mode 100644 pybop/parameters/base_parameter_set.py
 delete mode 100644 pybop/parameters/parameter_set.py

diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 000000000..dfe077042
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/.gitignore b/.gitignore
index 7978daaa3..838f372b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -301,3 +301,6 @@ $RECYCLE.BIN/
 *.lnk
 
 # End of https://www.toptal.com/developers/gitignore/api/python,macos,windows,linux,c
+
+# Visual Studio Code settings
+.vscode/*
diff --git a/CITATION.cff b/CITATION.cff
new file mode 100644
index 000000000..e1efab891
--- /dev/null
+++ b/CITATION.cff
@@ -0,0 +1,14 @@
+cff-version: 1.2.0
+title: 'Python Battery Optimisation and Parameterisation (PyBOP)'
+message: >-
+  If you use this software, please cite it using the
+  metadata from this file.
+type: software
+authors:
+  - given-names: Brady
+    family-names: Planden
+  - given-names: Nicola
+    family-names: Courtier
+  - given-names: David
+    family-names: Howey
+repository-code: 'https://www.github.com/pybop-team/pybop'
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 1e8ea68b3..358b3a5c2 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -4,9 +4,9 @@
 # Form observations
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
 observations = [
-    pybop.Observed("Time [s]", Measurements[:, 0]),
-    pybop.Observed("Current function [A]", Measurements[:, 1]),
-    pybop.Observed("Voltage [V]", Measurements[:, 2]),
+    pybop.Dataset("Time [s]", Measurements[:, 0]),
+    pybop.Dataset("Current function [A]", Measurements[:, 1]),
+    pybop.Dataset("Voltage [V]", Measurements[:, 2]),
 ]
 
 # Define model
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 072276283..f06a38fdf 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -24,30 +24,44 @@
 script_path = os.path.dirname(__file__)
 
 #
-# Model Classes
+# Cost function class
 #
+from .costs.error_costs import RMSE
+
+#
+# Dataset class
+#
+from .datasets.base_dataset import Dataset
+
+#
+# Model classes
+#
+from .models.base_model import BaseModel
 from .models import lithium_ion
-from .models.BaseModel import BaseModel
 
 #
-# Parameterisation class
+# Main optimisation class
 #
-from .parameters.parameter_set import ParameterSet
-from .parameters.parameter import Parameter
-from .datasets.observations import Observed
+from .optimisation import Optimisation
 
 #
-# Priors class
+# Optimiser class
+#
+from .optimisers.base_optimiser import BaseOptimiser
+from .optimisers.nlopt_optimize import NLoptOptimize
+from .optimisers.scipy_minimize import SciPyMinimize
+
 #
+# Parameter classes
+#
+from .parameters.base_parameter import Parameter
+from .parameters.base_parameter_set import ParameterSet
 from .parameters.priors import Gaussian, Uniform, Exponential
 
 #
-# Optimisation class
+# Plotting class
 #
-from .optimisation import Optimisation
-from .optimisers import BaseOptimiser
-from .optimisers.NLoptOptimize import NLoptOptimize
-from .optimisers.SciPyMinimize import SciPyMinimize
+from .plotting.quick_plot import QuickPlot
 
 #
 # Remove any imported modules, so we don't expose them as part of pybop
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
new file mode 100644
index 000000000..66bc28af8
--- /dev/null
+++ b/pybop/costs/error_costs.py
@@ -0,0 +1,92 @@
+import numpy as np
+
+
+class RMSE:
+    """
+    Defines the root mean square error cost function.
+    """
+
+    def __init__(self):
+        self.name = "RMSE"
+
+    def compute(self, prediction, target):
+        # Check compatibility
+        if len(prediction) != len(target):
+            print(
+                "Length of vectors:",
+                len(prediction),
+                len(target),
+            )
+            raise ValueError(
+                "Measurement and simulated data length mismatch, potentially due to reaching a voltage cut-off"
+            )
+
+        print("Last Values:", prediction[-1], target[-1])
+
+        # Compute the cost
+        try:
+            return np.sqrt(np.mean((prediction - target) ** 2))
+
+        except Exception as e:
+            print(f"Error in RMSE calculation: {e}")
+            return None
+
+
+class MLE:
+    """
+    Defines the cost function for maximum likelihood estimation.
+    """
+
+    def __init__(self):
+        self.name = "MLE"
+
+    def compute(self, prediction, target):
+        # Compute the cost
+        try:
+            return 0  # update with MLE residual
+
+        except Exception as e:
+            print(f"Error in RMSE calculation: {e}")
+            return None
+
+
+class PEM:
+    """
+    Defines the cost function for prediction error minimisation.
+    """
+
+    def __init__(self):
+        self.name = "PEM"
+
+    def compute(self, prediction, target):
+        # Compute the cost
+        try:
+            return 0  # update with MLE residual
+
+        except Exception as e:
+            print(f"Error in RMSE calculation: {e}")
+            return None
+
+
+class MAP:
+    """
+    Defines the cost function for maximum a posteriori estimation.
+    """
+
+    def __init__(self):
+        self.name = "MAP"
+
+    def compute(self, prediction, target):
+        # Compute the cost
+        try:
+            return 0  # update with MLE residual
+
+        except Exception as e:
+            print(f"Error in RMSE calculation: {e}")
+            return None
+
+    def sample(self, n_chains):
+        """
+        Sample from the posterior distribution.
+        """
+        pass
diff --git a/pybop/datasets/observations.py b/pybop/datasets/base_dataset.py
similarity index 75%
rename from pybop/datasets/observations.py
rename to pybop/datasets/base_dataset.py
index 417a9b876..ed194ae48 100644
--- a/pybop/datasets/observations.py
+++ b/pybop/datasets/base_dataset.py
@@ -1,9 +1,9 @@
 import pybamm
 
 
-class Observed:
+class Dataset:
     """
-    Class for experimental Observations.
+    Class for experimental observations.
     """
 
     def __init__(self, name, data):
@@ -11,7 +11,7 @@ def __init__(self, name, data):
         self.data = data
 
     def __repr__(self):
-        return f"Observation: {self.name} \n Data: {self.data}"
+        return f"Dataset: {self.name} \n Data: {self.data}"
 
     def Interpolant(self):
         if self.variable == "time":
diff --git a/pybop/models/BaseModel.py b/pybop/models/base_model.py
similarity index 99%
rename from pybop/models/BaseModel.py
rename to pybop/models/base_model.py
index 184acc2f6..4ad8a2076 100644
--- a/pybop/models/BaseModel.py
+++ b/pybop/models/base_model.py
@@ -4,7 +4,7 @@
 
 class BaseModel:
     """
-    Base class for PyBOP models
+    Base class for pybop models.
     """
 
     def __init__(self, name="Base Model"):
diff --git a/pybop/models/lithium_ion/__init__.py b/pybop/models/lithium_ion/__init__.py
index 50f61b1e9..69b51653b 100644
--- a/pybop/models/lithium_ion/__init__.py
+++ b/pybop/models/lithium_ion/__init__.py
@@ -1,5 +1,4 @@
 #
 # Import lithium ion based models
 #
-
 from .base_echem import SPM, SPMe
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index 542d6a399..ffa3b5775 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -1,5 +1,5 @@
 import pybamm
-from ..BaseModel import BaseModel
+from ..base_model import BaseModel
 
 
 class SPM(BaseModel):
diff --git a/pybop/optimisers/BaseOptimiser.py b/pybop/optimisers/base_optimiser.py
similarity index 87%
rename from pybop/optimisers/BaseOptimiser.py
rename to pybop/optimisers/base_optimiser.py
index 130ac5299..df6e253e5 100644
--- a/pybop/optimisers/BaseOptimiser.py
+++ b/pybop/optimisers/base_optimiser.py
@@ -10,10 +10,9 @@ def __init__(self):
 
     def optimise(self, cost_function, x0, bounds, method=None):
         """
-        Optimise method to be overloaded by child classes.
+        Optimisiation method to be overloaded by child classes.
 
         """
-        # Set up optimisation
         self.cost_function = cost_function
         self.x0 = x0
         self.method = method
diff --git a/pybop/optimisers/NLoptOptimize.py b/pybop/optimisers/nlopt_optimize.py
similarity index 89%
rename from pybop/optimisers/NLoptOptimize.py
rename to pybop/optimisers/nlopt_optimize.py
index e1c88f696..5af0dbab2 100644
--- a/pybop/optimisers/NLoptOptimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -1,10 +1,10 @@
 import nlopt
-from .BaseOptimiser import BaseOptimiser
+from .base_optimiser import BaseOptimiser
 
 
 class NLoptOptimize(BaseOptimiser):
     """
-    Wrapper class for the NLOpt optimisation class. Extends the BaseOptimiser class.
+    Wrapper class for the NLOpt optimiser class. Extends the BaseOptimiser class.
     """
 
     def __init__(self, method=None, x0=None, xtol=None):
diff --git a/pybop/optimisers/SciPyMinimize.py b/pybop/optimisers/scipy_minimize.py
similarity index 89%
rename from pybop/optimisers/SciPyMinimize.py
rename to pybop/optimisers/scipy_minimize.py
index cd831e9b2..bb9500135 100644
--- a/pybop/optimisers/SciPyMinimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -1,10 +1,10 @@
 from scipy.optimize import minimize
-from .BaseOptimiser import BaseOptimiser
+from .base_optimiser import BaseOptimiser
 
 
 class SciPyMinimize(BaseOptimiser):
     """
-    Wrapper class for the Scipy optimisation class. Extends the BaseOptimiser class.
+    Wrapper class for the Scipy optimiser class. Extends the BaseOptimiser class.
     """
 
     def __init__(self, cost_function, x0, bounds=None, options=None):
diff --git a/pybop/parameters/parameter.py b/pybop/parameters/base_parameter.py
similarity index 68%
rename from pybop/parameters/parameter.py
rename to pybop/parameters/base_parameter.py
index f15bdfea5..c6b2e6cdf 100644
--- a/pybop/parameters/parameter.py
+++ b/pybop/parameters/base_parameter.py
@@ -3,8 +3,8 @@ class Parameter:
     Class for creating parameters in pybop.
     """
 
-    def __init__(self, param, value=None, prior=None, bounds=None):
-        self.name = param
+    def __init__(self, name, value=None, prior=None, bounds=None):
+        self.name = name
         self.prior = prior
         self.value = value
         self.bounds = bounds
@@ -15,5 +15,8 @@ def __init__(self, param, value=None, prior=None, bounds=None):
         # bounds checks and set defaults
         # implement methods to assign and retrieve parameters
 
+    def update(self, value):
+        self.value = value
+
     def __repr__(self):
-        return f"Parameter: {self.name} \n Prior: {self.prior} \n Bounds: {self.bounds}"
+        return f"Parameter: {self.name} \n Prior: {self.prior} \n Bounds: {self.bounds} \n Value: {self.value}"
diff --git a/pybop/parameters/base_parameter_set.py b/pybop/parameters/base_parameter_set.py
new file mode 100644
index 000000000..e67b175ce
--- /dev/null
+++ b/pybop/parameters/base_parameter_set.py
@@ -0,0 +1,16 @@
+import pybamm
+
+
+class ParameterSet:
+    """
+    Class for creating parameter sets in pybop.
+    """
+
+    def __new__(cls, method, name):
+        if method.casefold() == "pybamm":
+            try:
+                return pybamm.ParameterValues(name).copy()
+            except:
+                raise ValueError("Parameter set not found")
+        else:
+            raise ValueError("Only PyBaMM parameter sets are currently implemented")
diff --git a/pybop/parameters/parameter_set.py b/pybop/parameters/parameter_set.py
deleted file mode 100644
index 1e1dc23ec..000000000
--- a/pybop/parameters/parameter_set.py
+++ /dev/null
@@ -1,13 +0,0 @@
-import pybamm
-
-
-class ParameterSet:
-    """
-    Class for creating parameter sets in pybop.
-    """
-
-    def __new__(cls, method, name):
-        if method.casefold() == "pybamm":
-            return pybamm.ParameterValues(name).copy()
-        else:
-            raise ValueError("Only PybaMM parameter sets are currently implemented")
diff --git a/pybop/parameters/priors.py b/pybop/parameters/priors.py
index 7224b58a7..f98e9b767 100644
--- a/pybop/parameters/priors.py
+++ b/pybop/parameters/priors.py
@@ -57,7 +57,7 @@ def __repr__(self):
 
 class Exponential:
     """
-    exponential prior class.
+    Exponential prior class.
     """
 
     def __init__(self, scale):
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 047e41847..8c72a6608 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -2,9 +2,10 @@
 import pybamm
 import pytest
 import numpy as np
+import unittest
 
 
-class TestModelParameterisation:
+class TestModelParameterisation(unittest.TestCase):
     """
     A class to test the model parameterisation methods.
     """
@@ -20,9 +21,9 @@ def test_spm(self):
         solution = self.getdata(model, x0)
 
         observations = [
-            pybop.Observed("Time [s]", solution["Time [s]"].data),
-            pybop.Observed("Current function [A]", solution["Current [A]"].data),
-            pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
+            pybop.Dataset("Time [s]", solution["Time [s]"].data),
+            pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
         # Fitting parameters
@@ -63,9 +64,9 @@ def test_spme(self):
         solution = self.getdata(model, x0)
 
         observations = [
-            pybop.Observed("Time [s]", solution["Time [s]"].data),
-            pybop.Observed("Current function [A]", solution["Current [A]"].data),
-            pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
+            pybop.Dataset("Time [s]", solution["Time [s]"].data),
+            pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
         # Fitting parameters
@@ -149,3 +150,7 @@ def test_parameter_set(self):
         np.testing.assert_allclose(
             parameter_test["Negative electrode active material volume fraction"], 0.75
         )
+
+
+if __name__ == "__main__":
+    unittest.main()

From a6e59b0d1543ffbbd7c1310ba9cd25b53acda278 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 31 Oct 2023 17:50:55 +0000
Subject: [PATCH 141/210] Squashed commit of #54 - optimisation.py changes &
 dependancies

---
 examples/scripts/rmse_estimation.py  |  26 +++--
 pybop/models/base_model.py           |  21 ++--
 pybop/optimisation.py                | 140 +++++++++++----------------
 tests/unit/test_parameterisations.py |  83 +++++++---------
 4 files changed, 124 insertions(+), 146 deletions(-)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 358b3a5c2..b63cf9428 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -1,9 +1,10 @@
 import pybop
 import pandas as pd
+import numpy as np
 
 # Form observations
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
-observations = [
+dataset = [
     pybop.Dataset("Time [s]", Measurements[:, 0]),
     pybop.Dataset("Current function [A]", Measurements[:, 1]),
     pybop.Dataset("Voltage [V]", Measurements[:, 2]),
@@ -14,7 +15,7 @@
 model = pybop.models.lithium_ion.SPM()
 
 # Fitting parameters
-params = [
+parameters = [
     pybop.Parameter(
         "Negative electrode active material volume fraction",
         prior=pybop.Gaussian(0.75, 0.05),
@@ -27,14 +28,25 @@
     ),
 ]
 
+x0 = np.array([0.52, 0.63])
+# Define the cost to optimise
+cost = pybop.RMSE()
+signal = "Voltage [V]"
+
+
+# Build the optimisation problem
 parameterisation = pybop.Optimisation(
-    model, observations=observations, fit_parameters=params
+    cost=cost,
+    model=model,
+    optimiser=pybop.NLoptOptimize(x0=x0),
+    parameters=parameters,
+    dataset=dataset,
+    signal=signal,
 )
 
-# get RMSE estimate using NLOpt
-results, last_optim, num_evals = parameterisation.rmse(
-    signal="Voltage [V]", method="nlopt"
-)
+# Run the optimisation problem
+results, last_optim, num_evals = parameterisation.run()
+
 
 # get MAP estimate, starting at a random initial point in parameter space
 # parameterisation.map(x0=[p.sample() for p in params])
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 4ad8a2076..3ddd904c1 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -11,11 +11,11 @@ def __init__(self, name="Base Model"):
         self.name = name
         self.pybamm_model = None
         self.fit_parameters = None
-        self.observations = None
+        self.dataset = None
 
     def build(
         self,
-        observations=None,
+        dataset=None,
         fit_parameters=None,
         check_model=True,
         init_soc=None,
@@ -26,7 +26,7 @@ def build(
         similar process to pybamm.Simulation.build().
         """
         self.fit_parameters = fit_parameters
-        self.observations = observations
+        self.dataset = dataset
         if self.fit_parameters is not None:
             self.fit_keys = list(self.fit_parameters.keys())
 
@@ -82,10 +82,10 @@ def set_params(self):
             for i in self.fit_parameters.keys():
                 self.parameter_set[i] = "[input]"
 
-        if self.observations is not None and self.fit_parameters is not None:
+        if self.dataset is not None and self.fit_parameters is not None:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                self.observations["Time [s]"].data,
-                self.observations["Current function [A]"].data,
+                self.dataset["Time [s]"].data,
+                self.dataset["Current function [A]"].data,
                 pybamm.t,
             )
             # Set t_eval
@@ -109,9 +109,11 @@ def simulate(self, inputs, t_eval):
                 inputs_dict = {
                     key: inputs[i] for i, key in enumerate(self.fit_parameters)
                 }
-            return self.solver.solve(
-                self.built_model, inputs=inputs_dict, t_eval=t_eval
-            )["Terminal voltage [V]"].data
+                return self.solver.solve(
+                    self.built_model, inputs=inputs_dict, t_eval=t_eval
+                )["Terminal voltage [V]"].data
+            else:
+                return self.solver.solve(self.built_model, inputs=inputs, t_eval=t_eval)
 
     def simulateS1(self, inputs, t_eval):
         """
@@ -125,6 +127,7 @@ def simulateS1(self, inputs, t_eval):
                 inputs_dict = {
                     key: inputs[i] for i, key in enumerate(self.fit_parameters)
                 }
+
                 sol = self.solver.solve(
                     self.built_model,
                     inputs=inputs_dict,
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index beebbec2c..aef3be7e2 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -1,4 +1,3 @@
-import pybop
 import numpy as np
 
 
@@ -9,121 +8,96 @@ class Optimisation:
 
     def __init__(
         self,
+        cost,
         model,
-        observations,
-        fit_parameters,
+        optimiser,
+        parameters,
         x0=None,
+        dataset=None,
+        signal=None,
         check_model=True,
         init_soc=None,
         verbose=False,
     ):
+        self.cost = cost
         self.model = model
+        self.optimiser = optimiser
+        self.parameters = parameters
+        self.x0 = x0
+        self.dataset = {o.name: o for o in dataset}
+        self.fit_parameters = {o.name: o for o in parameters}
+        self.signal = signal
+        self.n_parameters = len(self.parameters)
         self.verbose = verbose
-        self.fit_dict = {}
-        self.fit_parameters = {o.name: o for o in fit_parameters}
-        self.observations = {o.name: o for o in observations}
-        self.model.n_parameters = len(self.fit_dict)
 
-        # Check that the observations contain time and current
+        # Check that the dataset contains time and current
         for name in ["Time [s]", "Current function [A]"]:
-            if name not in self.observations:
-                raise ValueError(f"expected {name} in list of observations")
+            if name not in self.dataset:
+                raise ValueError(f"expected {name} in list of dataset")
 
         # Set bounds
         self.bounds = dict(
-            lower=[self.fit_parameters[p].bounds[0] for p in self.fit_parameters],
-            upper=[self.fit_parameters[p].bounds[1] for p in self.fit_parameters],
+            lower=[Param.bounds[0] for Param in self.parameters],
+            upper=[Param.bounds[1] for Param in self.parameters],
         )
 
         # Sample from prior for x0
         if x0 is None:
-            self.x0 = np.zeros(len(self.fit_parameters))
-            for i, j in enumerate(self.fit_parameters):
-                self.x0[i] = self.fit_parameters[j].prior.rvs(1)[
-                    0
-                ]  # Updt to capture dimensions per parameter
+            self.x0 = np.zeros(self.n_parameters)
+            for i, Param in enumerate(self.parameters):
+                self.x0[i] = Param.prior.rvs(1)[0]
+                # Update to capture dimensions per parameter
 
-        # Align initial guess with sample from prior
-        for i, j in enumerate(self.fit_parameters):
-            self.fit_dict[j] = {j: self.x0[i]}
+        # Add the initial values to the parameter definitions
+        for i, Param in enumerate(self.parameters):
+            Param.update(value=self.x0[i])
 
-        # Build model with observations and fitting_parameters
+        # Build model with dataset and fitting parameters
         self.model.build(
-            self.observations,
-            self.fit_parameters,
+            dataset=self.dataset,
+            fit_parameters=self.fit_parameters,
             check_model=check_model,
             init_soc=init_soc,
         )
 
-    def step(self, signal, x, grad):
-        for i, p in enumerate(self.fit_dict):
-            self.fit_dict[p] = x[i]
-
-        y_hat = self.model.solver.solve(
-            self.model.built_model, self.model.time_data, inputs=self.fit_dict
-        )[signal].data
+    def run(self):
+        """
+        Run the optimisation algorithm.
+        """
 
-        print(
-            "Last Voltage Values:", y_hat[-1], self.observations["Voltage [V]"].data[-1]
+        results = self.optimiser.optimise(
+            cost_function=self.cost_function,  # lambda x, grad: self.cost_function(x, grad),
+            x0=self.x0,
+            bounds=self.bounds,
         )
 
-        if len(y_hat) != len(self.observations["Voltage [V]"].data):
-            print(
-                "len of vectors:",
-                len(y_hat),
-                len(self.observations["Voltage [V]"].data),
-            )
-            raise ValueError(
-                "Measurement and simulated data length mismatch, potentially due to reaching a voltage cut-off"
-            )
-
-        if self.verbose:
-            print(self.fit_dict)
-
-        try:
-            return np.sqrt(
-                np.mean((self.observations["Voltage [V]"].data - y_hat) ** 2)
-            )
-        except Exception as e:
-            print(f"Error in RMSE calculation: {e}")
-            return None
+        return results
 
-    def map(self, x0):
+    def cost_function(self, x, grad=None):
         """
-        Maximum a posteriori estimation.
+        Compute a model prediction and associated value of the cost.
         """
-        pass
 
-    def sample(self, n_chains):
-        """
-        Sample from the posterior distribution.
-        """
-        pass
+        # Unpack the target dataset
+        target = self.dataset[self.signal].data
 
-    def pem(self, method=None):
-        """
-        Predictive error minimisation.
-        """
-        pass
+        # Update the parameter dictionary
+        inputs_dict = {key: x[i] for i, key in enumerate(self.fit_parameters)}
 
-    def rmse(self, signal, method=None):
-        """
-        Calculate the root mean squared error.
-        """
+        # for i, Param in enumerate(self.parameters):
+        #     Param.update(value=x[i])
 
-        if method == "nlopt":
-            optim = pybop.NLoptOptimize(x0=self.x0)
-            results = optim.optimise(
-                lambda x, grad: self.step(signal, x, grad), self.x0, self.bounds
-            )
+        # Make prediction
+        prediction = self.model.simulate(
+            inputs=inputs_dict, t_eval=self.model.time_data
+        )[self.signal].data
 
-        else:
-            optim = pybop.NLoptOptimize(method)
-            results = optim.optimise(self.step, self.x0, self.bounds)
-        return results
+        # Add simulation error handling here
 
-    def mle(self, method=None):
-        """
-        Maximum likelihood estimation.
-        """
-        pass
+        # Compute cost
+        res = self.cost.compute(prediction, target)
+
+        if self.verbose:
+            print("Parameter estimates: ", self.parameters.value, "\n")
+
+        return res
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 8c72a6608..73078ec1d 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -20,14 +20,14 @@ def test_spm(self):
         x0 = np.array([0.52, 0.63])
         solution = self.getdata(model, x0)
 
-        observations = [
+        dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
         # Fitting parameters
-        params = [
+        parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
                 prior=pybop.Gaussian(0.5, 0.02),
@@ -40,14 +40,25 @@ def test_spm(self):
             ),
         ]
 
+        # Define the cost to optimise
+        cost = pybop.RMSE()
+        signal = "Voltage [V]"
+
+        # Select optimiser
+        optimiser = pybop.NLoptOptimize(x0=x0)
+
+        # Build the optimisation problem
         parameterisation = pybop.Optimisation(
-            model, observations=observations, fit_parameters=params
+            cost=cost,
+            model=model,
+            optimiser=optimiser,
+            parameters=parameters,
+            dataset=dataset,
+            signal=signal,
         )
 
-        # get RMSE estimate using NLOpt
-        results, last_optim, num_evals = parameterisation.rmse(
-            signal="Voltage [V]", method="nlopt"
-        )
+        # Run the optimisation problem
+        results, last_optim, num_evals = parameterisation.run()
 
         # Assertions (for testing purposes only)
         np.testing.assert_allclose(last_optim, 0, atol=1e-2)
@@ -63,14 +74,14 @@ def test_spme(self):
         x0 = np.array([0.52, 0.63])
         solution = self.getdata(model, x0)
 
-        observations = [
+        dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
         # Fitting parameters
-        params = [
+        parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
                 prior=pybop.Gaussian(0.5, 0.02),
@@ -83,15 +94,25 @@ def test_spme(self):
             ),
         ]
 
-        parameterisation = pybop.Optimisation(
-            model, observations=observations, fit_parameters=params
-        )
+        # Define the cost to optimise
+        cost = pybop.RMSE()
+        signal = "Voltage [V]"
 
-        # get RMSE estimate using NLOpt
-        results, last_optim, num_evals = parameterisation.rmse(
-            signal="Voltage [V]", method="nlopt"
+        # Select optimiser
+        optimiser = pybop.NLoptOptimize(x0=x0)
+
+        # Build the optimisation problem
+        parameterisation = pybop.Optimisation(
+            cost=cost,
+            model=model,
+            optimiser=optimiser,
+            parameters=parameters,
+            dataset=dataset,
+            signal=signal,
         )
 
+        # Run the optimisation problem
+        results, last_optim, num_evals = parameterisation.run()
         # Assertions (for testing purposes only)
         np.testing.assert_allclose(last_optim, 0, atol=1e-2)
         np.testing.assert_allclose(results, x0, rtol=1e-1)
@@ -119,38 +140,6 @@ def getdata(self, model, x0):
         sim = model.predict(experiment=experiment)
         return sim
 
-    @pytest.mark.unit
-    def test_simulate_without_build_model(self):
-        # Define model
-        model = pybop.lithium_ion.SPM()
-
-        with pytest.raises(
-            ValueError, match="Model must be built before calling simulate"
-        ):
-            model.simulate(None, None)
-
-    @pytest.mark.unit
-    def test_priors(self):
-        # Tests priors
-        Gaussian = pybop.Gaussian(0.5, 1)
-        Uniform = pybop.Uniform(0, 1)
-        Exponential = pybop.Exponential(1)
-
-        np.testing.assert_allclose(Gaussian.pdf(0.5), 0.3989422804014327, atol=1e-4)
-        np.testing.assert_allclose(Uniform.pdf(0.5), 1, atol=1e-4)
-        np.testing.assert_allclose(Exponential.pdf(1), 0.36787944117144233, atol=1e-4)
-
-    @pytest.mark.unit
-    def test_parameter_set(self):
-        # Tests parameter set creation
-        with pytest.raises(ValueError):
-            pybop.ParameterSet("pybamms", "Chen2020")
-
-        parameter_test = pybop.ParameterSet("pybamm", "Chen2020")
-        np.testing.assert_allclose(
-            parameter_test["Negative electrode active material volume fraction"], 0.75
-        )
-
 
 if __name__ == "__main__":
     unittest.main()

From fe5446cd2508be3a56447b69600eff54847b89ca Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Wed, 1 Nov 2023 03:02:27 +0000
Subject: [PATCH 142/210] Separate cost and optimiser from optimisation

---
 examples/scripts/rmse_estimation.py  |  25 ++++--
 pybop/models/base_model.py           |  12 +--
 pybop/optimisation.py                | 117 +++++++++++----------------
 pybop/optimisers/nlopt_optimize.py   |  19 +++--
 pybop/optimisers/scipy_minimize.py   |  40 ++++++---
 tests/unit/test_parameterisations.py |  58 ++++++++-----
 6 files changed, 149 insertions(+), 122 deletions(-)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index dd0360350..65a5a8a83 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -2,9 +2,9 @@
 import pandas as pd
 import numpy as np
 
-# Form observations
+# Form dataset
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
-observations = [
+dataset = [
     pybop.Dataset("Time [s]", Measurements[:, 0]),
     pybop.Dataset("Current function [A]", Measurements[:, 1]),
     pybop.Dataset("Voltage [V]", Measurements[:, 2]),
@@ -28,14 +28,25 @@
     ),
 ]
 
+# Define the cost to optimise
+cost = pybop.RMSE()
+signal = "Voltage [V]"
+
+# Select optimiser
+optimiser = pybop.NLoptOptimize(x0=params)
+
+# Construct the optimisation problem
 parameterisation = pybop.Optimisation(
-    model, observations=observations, fit_parameters=params
+    cost=cost,
+    model=model,
+    optimiser=optimiser,
+    fit_parameters=params,
+    dataset=dataset,
+    signal=signal,
 )
 
-# get RMSE estimate using NLOpt
-results, last_optim, num_evals = parameterisation.rmse(
-    signal="Voltage [V]", method="nlopt"
-)
+ # Run the optimisation problem
+x, output, final_cost, num_evals = parameterisation.run()
 
 # get MAP estimate, starting at a random initial point in parameter space
 # parameterisation.map(x0=[p.sample() for p in params])
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index cce1aa8db..8dc5652d7 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -10,11 +10,11 @@ def __init__(self, name="Base Model"):
         self.name = name
         self.pybamm_model = None
         self.fit_parameters = None
-        self.observations = None
+        self.dataset = None
 
     def build(
         self,
-        observations=None,
+        dataset=None,
         fit_parameters=None,
         check_model=True,
         init_soc=None,
@@ -25,7 +25,7 @@ def build(
         similar process to pybamm.Simulation.build().
         """
         self.fit_parameters = fit_parameters
-        self.observations = observations
+        self.dataset = dataset
 
         if init_soc is not None:
             self.set_init_soc(init_soc)
@@ -79,10 +79,10 @@ def set_params(self):
             for i in self.fit_parameters.keys():
                 self.parameter_set[i] = "[input]"
 
-        if self.observations is not None and self.fit_parameters is not None:
+        if self.dataset is not None and self.fit_parameters is not None:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                self.observations["Time [s]"].data,
-                self.observations["Current function [A]"].data,
+                self.dataset["Time [s]"].data,
+                self.dataset["Current function [A]"].data,
                 pybamm.t,
             )
             # Set t_eval
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index d63fbec68..75786ffb9 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -9,30 +9,37 @@ class Optimisation:
 
     def __init__(
         self,
+        cost,
         model,
-        observations,
+        optimiser,
         fit_parameters,
         x0=None,
+        dataset=None,
+        signal=None,
         check_model=True,
         init_soc=None,
         verbose=False,
     ):
+        self.cost = cost
         self.model = model
+        self.optimiser = optimiser
+        self.x0 = x0
+        self.dataset = {o.name: o for o in dataset}
+        self.signal = signal
         self.verbose = verbose
         self.fit_dict = {}
         self.fit_parameters = {o.name: o for o in fit_parameters}
-        self.observations = {o.name: o for o in observations}
         self.model.n_parameters = len(self.fit_dict)
 
-        # Check that the observations contain time and current
+        # Check that the dataset contains time and current
         for name in ["Time [s]", "Current function [A]"]:
-            if name not in self.observations:
-                raise ValueError(f"expected {name} in list of observations")
+            if name not in self.dataset:
+                raise ValueError(f"expected {name} in list of dataset")
 
         # Set bounds
         self.bounds = dict(
-            lower=[self.fit_parameters[p].bounds[0] for p in self.fit_parameters],
-            upper=[self.fit_parameters[p].bounds[1] for p in self.fit_parameters],
+            lower=[self.fit_parameters[param].bounds[0] for param in self.fit_parameters],
+            upper=[self.fit_parameters[param].bounds[1] for param in self.fit_parameters],
         )
 
         # Sample from prior for x0
@@ -43,86 +50,52 @@ def __init__(
                     0
                 ]  # Updt to capture dimensions per parameter
 
-        # Align initial guess with sample from prior
-        for i, j in enumerate(self.fit_parameters):
-            self.fit_dict[j] = {j: self.x0[i]}
+        # Add the initial values to the parameter definitions
+        for i, param in enumerate(self.fit_parameters):
+            self.fit_dict[param] = {param: self.x0[i]}
 
-        # Build model with observations and fitting_parameters
+        # Build model with dataset and fitting parameters
         self.model.build(
-            self.observations,
-            self.fit_parameters,
+            dataset=self.dataset,
+            fit_parameters=self.fit_parameters,
             check_model=check_model,
             init_soc=init_soc,
         )
 
-    def step(self, signal, x, grad):
-        for i, p in enumerate(self.fit_dict):
-            self.fit_dict[p] = x[i]
-
-        y_hat = self.model.solver.solve(
-            self.model.built_model, self.model.time_data, inputs=self.fit_dict
-        )[signal].data
+    def run(self):
+        """
+        Run the optimisation algorithm.
+        """
 
-        print(
-            "Last Voltage Values:", y_hat[-1], self.observations["Voltage [V]"].data[-1]
+        results = self.optimiser.optimise(
+            self.cost_function,  # lambda x, grad: self.cost_function(x, grad),
+            self.x0,
+            self.bounds,
         )
 
-        if len(y_hat) != len(self.observations["Voltage [V]"].data):
-            print(
-                "len of vectors:",
-                len(y_hat),
-                len(self.observations["Voltage [V]"].data),
-            )
-            raise ValueError(
-                "Measurement and simulated data length mismatch, potentially due to reaching a voltage cut-off"
-            )
-
-        try:
-            res = np.sqrt(np.mean((self.observations["Voltage [V]"].data - y_hat) ** 2))
-        except:
-            print("Error in RMSE calculation")
-
-        if self.verbose:
-            print(self.fit_dict)
-
-        return res
+        return results
 
-    def map(self, x0):
+    def cost_function(self, x, grad=None):
         """
-        Maximum a posteriori estimation.
+        Compute a model prediction and associated value of the cost.
         """
-        pass
 
-    def sample(self, n_chains):
-        """
-        Sample from the posterior distribution.
-        """
-        pass
+        # Unpack the target dataset
+        target = self.dataset[self.signal].data
 
-    def pem(self, method=None):
-        """
-        Predictive error minimisation.
-        """
-        pass
+        # Update the parameter dictionary
+        for i, param in enumerate(self.fit_dict):
+            self.fit_dict[param] = x[i]
 
-    def rmse(self, signal, method=None):
-        """
-        Calculate the root mean squared error.
-        """
+        # Make prediction
+        prediction = self.model.predict(inputs=self.fit_dict)[self.signal].data
 
-        if method == "nlopt":
-            optim = pybop.NLoptOptimize(x0=self.x0)
-            results = optim.optimise(
-                lambda x, grad: self.step(signal, x, grad), self.x0, self.bounds
-            )
+        # Add simulation error handling here
 
-        else:
-            optim = pybop.NLoptOptimize(method)
-            results = optim.optimise(self.step, self.x0, self.bounds)
-        return results
+        # Compute cost
+        res = self.cost.compute(prediction, target)
 
-    def mle(self, method=None):
-        """
-        Maximum likelihood estimation.
-        """
-        pass
+        if self.verbose:
+            print("Parameter estimates: ", self.parameters.value, "\n")
+
+        return res
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index 5af0dbab2..d766f376a 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -1,3 +1,4 @@
+import pybop
 import nlopt
 from .base_optimiser import BaseOptimiser
 
@@ -23,20 +24,26 @@ def __init__(self, method=None, x0=None, xtol=None):
 
     def _runoptimise(self, cost_function, x0, bounds):
         """
-        Run the NLOpt opt method.
+        Run the NLOpt optimisation method.
 
-        Parameters
+        Inputs
         ----------
         cost_function: function for optimising
-        method: optimisation method
-        x0: Initialisation array
+        method: optimisation algorithm
+        x0: initialisation array
         bounds: bounds array
         """
 
         self.opt.set_min_objective(cost_function)
         self.opt.set_lower_bounds(bounds["lower"])
         self.opt.set_upper_bounds(bounds["upper"])
-        results = self.opt.optimize(x0)
+
+        # Run the optimser
+        x = self.opt.optimize(x0)
+
+        # Get performance statistics
+        output = self.opt
+        final_cost = self.opt.last_optimum_value()
         num_evals = self.opt.get_numevals()
 
-        return results, self.opt.last_optimum_value(), num_evals
+        return x, output, final_cost, num_evals
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index bb9500135..b9a282839 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -1,10 +1,11 @@
+import pybop
 from scipy.optimize import minimize
 from .base_optimiser import BaseOptimiser
 
 
 class SciPyMinimize(BaseOptimiser):
     """
-    Wrapper class for the Scipy optimiser class. Extends the BaseOptimiser class.
+    Wrapper class for the SciPy optimisation class. Extends the BaseOptimiser class.
     """
 
     def __init__(self, cost_function, x0, bounds=None, options=None):
@@ -18,24 +19,37 @@ def __init__(self, cost_function, x0, bounds=None, options=None):
 
     def _runoptimise(self):
         """
-        Run the Scipy opt method.
+        Run the SciPy optimisation method.
 
-        Parameters
+        Inputs
         ----------
         cost_function: function for optimising
-        method: optimisation method
-        x0: Initialisation array
-        options: options dictionary
+        method: optimisation algorithm
+        x0: initialisation array
         bounds: bounds array
         """
 
-        if self.method is not None and self.bounds is not None:
-            opt = minimize(
-                self.cost_function, self.x0, method=self.method, bounds=self.bounds
-            )
-        elif self.method is not None:
-            opt = minimize(self.cost_function, self.x0, method=self.method)
+        if self.method is not None:
+            method=self.method
         else:
             opt = minimize(self.cost_function, self.x0, method="BFGS")
 
-        return opt
+        # Reformat bounds
+        bounds = (
+            (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"])
+        )
+
+        # Run the optimser
+        if self.bounds is not None:
+            output = minimize(
+                self.cost_function, self.x0, method=method, bounds=self.bounds, tol=self.xtol
+            )
+        else:
+            output = minimize(self.cost_function, self.x0, method=method, tol=self.xtol)
+
+        # Get performance statistics
+        x = output.x
+        final_cost = output.fun
+        num_evals = output.nfev
+
+        return x, output, final_cost, num_evals
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index d68b3debc..b47ccdb5b 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -16,11 +16,11 @@ def test_spm(self):
         model = pybop.lithium_ion.SPM()
         model.parameter_set = model.pybamm_model.default_parameter_values
 
-        # Form observations
+        # Form dataset
         x0 = np.array([0.52, 0.63])
         solution = self.getdata(model, x0)
 
-        observations = [
+        dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
@@ -40,18 +40,29 @@ def test_spm(self):
             ),
         ]
 
+        # Define the cost to optimise
+        cost = pybop.RMSE()
+        signal = "Voltage [V]"
+
+        # Select optimiser
+        optimiser = pybop.NLoptOptimize(x0=x0)
+
+        # Build the optimisation problem
         parameterisation = pybop.Optimisation(
-            model, observations=observations, fit_parameters=params
+            cost=cost,
+            model=model,
+            optimiser=optimiser,
+            fit_parameters=params,
+            dataset=dataset,
+            signal=signal,
         )
 
-        # get RMSE estimate using NLOpt
-        results, last_optim, num_evals = parameterisation.rmse(
-            signal="Voltage [V]", method="nlopt"
-        )
+        # Run the optimisation problem
+        x, output, final_cost, num_evals = parameterisation.run()
 
         # Assertions (for testing purposes only)
-        np.testing.assert_allclose(last_optim, 0, atol=1e-2)
-        np.testing.assert_allclose(results, x0, atol=1e-1)
+        np.testing.assert_allclose(final_cost, 0, atol=1e-2)
+        np.testing.assert_allclose(x, x0, atol=1e-1)
 
     @pytest.mark.unit
     def test_spme(self):
@@ -59,11 +70,11 @@ def test_spme(self):
         model = pybop.lithium_ion.SPMe()
         model.parameter_set = model.pybamm_model.default_parameter_values
 
-        # Form observations
+        # Form dataset
         x0 = np.array([0.52, 0.63])
         solution = self.getdata(model, x0)
 
-        observations = [
+        dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
@@ -83,18 +94,29 @@ def test_spme(self):
             ),
         ]
 
+        # Define the cost to optimise
+        cost = pybop.RMSE()
+        signal = "Voltage [V]"
+
+        # Select optimiser
+        optimiser = pybop.NLoptOptimize(x0=x0)
+
+        # Build the optimisation problem
         parameterisation = pybop.Optimisation(
-            model, observations=observations, fit_parameters=params
+            cost=cost,
+            model=model,
+            optimiser=optimiser,
+            fit_parameters=params,
+            dataset=dataset,
+            signal=signal,
         )
 
-        # get RMSE estimate using NLOpt
-        results, last_optim, num_evals = parameterisation.rmse(
-            signal="Voltage [V]", method="nlopt"
-        )
+        # Run the optimisation problem
+        x, output, final_cost, num_evals = parameterisation.run()
 
         # Assertions (for testing purposes only)
-        np.testing.assert_allclose(last_optim, 0, atol=1e-2)
-        np.testing.assert_allclose(results, x0, rtol=1e-1)
+        np.testing.assert_allclose(final_cost, 0, atol=1e-2)
+        np.testing.assert_allclose(x, x0, rtol=1e-1)
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From e4e161d9c9e6d07872b9330aecb74ceb3e2f49e1 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 1 Nov 2023 10:46:48 +0000
Subject: [PATCH 143/210] Squashed commit of #54 - Add Optimisers

---
 examples/scripts/rmse_estimation.py    |   2 +-
 pybop/__init__.py                      |  11 +-
 pybop/optimisers/base_optimiser.py     |   3 +-
 pybop/optimisers/nlopt_optimize.py     |  37 +++---
 pybop/optimisers/pints_optimiser.py    | 158 +++++++++++++++++++++++++
 pybop/optimisers/scipy_minimize.py     |  56 +++++----
 pybop/parameters/base_parameter.py     |   2 +-
 pybop/parameters/base_parameter_set.py |   2 +-
 tests/unit/test_parameterisations.py   |  12 +-
 9 files changed, 230 insertions(+), 53 deletions(-)
 create mode 100644 pybop/optimisers/pints_optimiser.py

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index b63cf9428..987e899a0 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -45,7 +45,7 @@
 )
 
 # Run the optimisation problem
-results, last_optim, num_evals = parameterisation.run()
+x, output, final_cost, num_evals = parameterisation.run()
 
 
 # get MAP estimate, starting at a random initial point in parameter space
diff --git a/pybop/__init__.py b/pybop/__init__.py
index f06a38fdf..e00e3d3c1 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -1,5 +1,5 @@
 #
-# Root of the pybop module.
+# Root of the PyBOP module.
 # Provides access to all shared functionality (models, solvers, etc.).
 #
 # This file is adapted from Pints
@@ -7,7 +7,7 @@
 #
 
 import sys
-import os
+from os import path
 
 #
 # Version info
@@ -20,8 +20,8 @@
 # Float format: a float can be converted to a 17 digit decimal and back without
 # loss of information
 FLOAT_FORMAT = "{: .17e}"
-# Absolute path to the pybop module
-script_path = os.path.dirname(__file__)
+# Absolute path to the PyBOP repo
+script_path = path.dirname(__file__)
 
 #
 # Cost function class
@@ -50,6 +50,7 @@
 from .optimisers.base_optimiser import BaseOptimiser
 from .optimisers.nlopt_optimize import NLoptOptimize
 from .optimisers.scipy_minimize import SciPyMinimize
+from .optimisers.pints_optimiser import PintsOptimiser, PintsError, PintsBoundaries
 
 #
 # Parameter classes
@@ -64,6 +65,6 @@
 from .plotting.quick_plot import QuickPlot
 
 #
-# Remove any imported modules, so we don't expose them as part of pybop
+# Remove any imported modules, so we don't expose them as part of PyBOP
 #
 del sys
diff --git a/pybop/optimisers/base_optimiser.py b/pybop/optimisers/base_optimiser.py
index df6e253e5..dec1495f6 100644
--- a/pybop/optimisers/base_optimiser.py
+++ b/pybop/optimisers/base_optimiser.py
@@ -8,14 +8,13 @@ class BaseOptimiser:
     def __init__(self):
         self.name = "Base Optimiser"
 
-    def optimise(self, cost_function, x0, bounds, method=None):
+    def optimise(self, cost_function, x0, bounds):
         """
         Optimisiation method to be overloaded by child classes.
 
         """
         self.cost_function = cost_function
         self.x0 = x0
-        self.method = method
         self.bounds = bounds
 
         # Run optimisation
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index 5af0dbab2..8e7fd9c4a 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -7,36 +7,43 @@ class NLoptOptimize(BaseOptimiser):
     Wrapper class for the NLOpt optimiser class. Extends the BaseOptimiser class.
     """
 
-    def __init__(self, method=None, x0=None, xtol=None):
+    def __init__(self, x0, xtol=None, method=None):
         super().__init__()
         self.name = "NLOpt Optimiser"
 
         if method is not None:
-            self.opt = nlopt.opt(method, len(x0))
+            self.optim = nlopt.opt(method, len(x0))
         else:
-            self.opt = nlopt.opt(nlopt.LN_BOBYQA, len(x0))
+            self.optim = nlopt.opt(nlopt.LN_BOBYQA, len(x0))
 
         if xtol is not None:
-            self.opt.set_xtol_rel(xtol)
+            self.optim.set_xtol_rel(xtol)
         else:
-            self.opt.set_xtol_rel(1e-5)
+            self.optim.set_xtol_rel(1e-5)
 
     def _runoptimise(self, cost_function, x0, bounds):
         """
-        Run the NLOpt opt method.
+        Run the NLOpt optimisation method.
 
-        Parameters
+        Inputs
         ----------
         cost_function: function for optimising
-        method: optimisation method
-        x0: Initialisation array
+        method: optimisation algorithm
+        x0: initialisation array
         bounds: bounds array
         """
 
-        self.opt.set_min_objective(cost_function)
-        self.opt.set_lower_bounds(bounds["lower"])
-        self.opt.set_upper_bounds(bounds["upper"])
-        results = self.opt.optimize(x0)
-        num_evals = self.opt.get_numevals()
+        # Pass settings to the optimiser
+        self.optim.set_min_objective(cost_function)
+        self.optim.set_lower_bounds(bounds["lower"])
+        self.optim.set_upper_bounds(bounds["upper"])
 
-        return results, self.opt.last_optimum_value(), num_evals
+        # Run the optimser
+        x = self.optim.optimize(x0)
+
+        # Get performance statistics
+        output = self.optim
+        final_cost = self.optim.last_optimum_value()
+        num_evals = self.optim.get_numevals()
+
+        return x, output, final_cost, num_evals
diff --git a/pybop/optimisers/pints_optimiser.py b/pybop/optimisers/pints_optimiser.py
new file mode 100644
index 000000000..a36f93856
--- /dev/null
+++ b/pybop/optimisers/pints_optimiser.py
@@ -0,0 +1,158 @@
+import pybop
+import pints
+from pybop.optimisers.base_optimiser import BaseOptimiser
+from pints import ErrorMeasure
+
+
+class PintsOptimiser(BaseOptimiser):
+    """
+    Wrapper class for the PINTS optimisation class. Extends the BaseOptimiser class.
+    """
+
+    def __init__(self, x0, xtol=None, method=None):
+        super().__init__()
+        self.name = "PINTS Optimiser"
+
+        if method is not None:
+            self.method = method
+        else:
+            self.method = pints.PSO
+
+    def _runoptimise(self, cost_function, x0, bounds):
+        """
+        Run the PINTS optimisation method.
+
+        Inputs
+        ----------
+        cost_function: function for optimising
+        method: optimisation algorithm
+        x0: initialisation array
+        bounds: bounds array
+        """
+
+        # Wrap bounds
+        boundaries = pybop.PintsBoundaries(bounds, x0)
+
+        # Wrap error measure
+        error = pybop.PintsError(cost_function, x0)
+
+        # Set up optimisation controller
+        controller = pints.OptimisationController(
+            error, x0, boundaries=boundaries, method=self.method
+        )
+        controller.set_max_unchanged_iterations(20)  # default 200
+
+        # Run the optimser
+        x, final_cost = controller.run()
+
+        # Get performance statistics
+        # output = *pass all output*
+        # final_cost
+        # num_evals
+        output = None
+        num_evals = None
+
+        return x, output, final_cost, num_evals
+
+
+class PintsError(ErrorMeasure):
+    """
+    An interface class for PyBOP that extends the PINTS ErrorMeasure class.
+
+    From PINTS:
+    Abstract base class for objects that calculate some scalar measure of
+    goodness-of-fit (for a model and a data set), such that a smaller value
+    means a better fit.
+
+    ErrorMeasures are callable objects: If ``e`` is an instance of an
+    :class:`ErrorMeasure` class you can calculate the error by calling ``e(p)``
+    where ``p`` is a point in parameter space.
+    """
+
+    def __init__(self, cost_function, x0):
+        self.cost_function = cost_function
+        self.x0 = x0
+
+    def __call__(self, x):
+        cost = self.cost_function(x)
+
+        return cost
+
+    def evaluateS1(self, x):
+        """
+        Evaluates this error measure, and returns the result plus the partial
+        derivatives of the result with respect to the parameters.
+
+        The returned data has the shape ``(e, e')`` where ``e`` is a scalar
+        value and ``e'`` is a sequence of length ``n_parameters``.
+
+        *This is an optional method that is not always implemented.*
+        """
+        raise NotImplementedError
+
+    def n_parameters(self):
+        """
+        Returns the dimension of the parameter space this measure is defined
+        over.
+        """
+        return len(self.x0)
+
+
+class PintsBoundaries(object):
+    """
+    An interface class for PyBOP that extends the PINTS ErrorMeasure class.
+
+    From PINTS:
+    Abstract class representing boundaries on a parameter space.
+    """
+
+    def __init__(self, bounds, x0):
+        self.bounds = bounds
+        self.x0 = x0
+
+    def check(self, parameters):
+        """
+        Returns ``True`` if and only if the given point in parameter space is
+        within the boundaries.
+
+        Parameters
+        ----------
+        parameters
+            A point in parameter space
+        """
+        result = False
+        if (
+            parameters[0] >= self.bounds["lower"][0]
+            and parameters[1] >= self.bounds["lower"][1]
+            and parameters[0] <= self.bounds["upper"][0]
+            and parameters[1] <= self.bounds["upper"][1]
+        ):
+            result = True
+
+        return result
+
+    def n_parameters(self):
+        """
+        Returns the dimension of the parameter space these boundaries are
+        defined on.
+        """
+        return len(self.x0)
+
+    def sample(self, n=1):
+        """
+        Returns ``n`` random samples from within the boundaries, for example to
+        use as starting points for an optimisation.
+
+        The returned value is a NumPy array with shape ``(n, d)`` where ``n``
+        is the requested number of samples, and ``d`` is the dimension of the
+        parameter space these boundaries are defined on.
+
+        *Note that implementing :meth:`sample()` is optional, so some boundary
+        types may not support it.*
+
+        Parameters
+        ----------
+        n : int
+            The number of points to sample
+        """
+        raise NotImplementedError
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index bb9500135..d8b19e7c6 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -4,38 +4,50 @@
 
 class SciPyMinimize(BaseOptimiser):
     """
-    Wrapper class for the Scipy optimiser class. Extends the BaseOptimiser class.
+    Wrapper class for the SciPy optimisation class. Extends the BaseOptimiser class.
     """
 
-    def __init__(self, cost_function, x0, bounds=None, options=None):
+    def __init__(self, x0, xtol=None, method=None, options=None):
         super().__init__()
-        self.cost_function = cost_function
-        self.method = options.optmethod
-        self.x0 = x0 or cost_function.x0
-        self.bounds = bounds
-        self.options = options
         self.name = "Scipy Optimiser"
 
-    def _runoptimise(self):
+        if method is None:
+            self.method = method
+        else:
+            self.method = "BFGS"
+
+        if xtol is not None:
+            self.xtol = xtol
+        else:
+            self.xtol = 1e-5
+
+        self.options = options
+
+    def _runoptimise(self, cost_function, x0, bounds):
         """
-        Run the Scipy opt method.
+        Run the SciPy optimisation method.
 
-        Parameters
+        Inputs
         ----------
         cost_function: function for optimising
-        method: optimisation method
-        x0: Initialisation array
-        options: options dictionary
+        method: optimisation algorithm
+        x0: initialisation array
         bounds: bounds array
         """
 
-        if self.method is not None and self.bounds is not None:
-            opt = minimize(
-                self.cost_function, self.x0, method=self.method, bounds=self.bounds
-            )
-        elif self.method is not None:
-            opt = minimize(self.cost_function, self.x0, method=self.method)
-        else:
-            opt = minimize(self.cost_function, self.x0, method="BFGS")
+        # Reformat bounds
+        bounds = (
+            (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"])
+        )
+
+        # Run the optimser
+        output = minimize(
+            cost_function, x0, method=self.method, bounds=bounds, tol=self.xtol
+        )
+
+        # Get performance statistics
+        x = output.x
+        final_cost = output.fun
+        num_evals = output.nfev
 
-        return opt
+        return x, output, final_cost, num_evals
diff --git a/pybop/parameters/base_parameter.py b/pybop/parameters/base_parameter.py
index c6b2e6cdf..b1fafb857 100644
--- a/pybop/parameters/base_parameter.py
+++ b/pybop/parameters/base_parameter.py
@@ -1,6 +1,6 @@
 class Parameter:
     """ ""
-    Class for creating parameters in pybop.
+    Class for creating parameters in PyBOP.
     """
 
     def __init__(self, name, value=None, prior=None, bounds=None):
diff --git a/pybop/parameters/base_parameter_set.py b/pybop/parameters/base_parameter_set.py
index e67b175ce..59172b3ba 100644
--- a/pybop/parameters/base_parameter_set.py
+++ b/pybop/parameters/base_parameter_set.py
@@ -3,7 +3,7 @@
 
 class ParameterSet:
     """
-    Class for creating parameter sets in pybop.
+    Class for creating parameter sets in PyBOP.
     """
 
     def __new__(cls, method, name):
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 73078ec1d..5ea901583 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -58,11 +58,11 @@ def test_spm(self):
         )
 
         # Run the optimisation problem
-        results, last_optim, num_evals = parameterisation.run()
+        x, _, final_cost, _ = parameterisation.run()
 
         # Assertions (for testing purposes only)
-        np.testing.assert_allclose(last_optim, 0, atol=1e-2)
-        np.testing.assert_allclose(results, x0, atol=1e-1)
+        np.testing.assert_allclose(final_cost, 0, atol=1e-2)
+        np.testing.assert_allclose(x, x0, atol=1e-1)
 
     @pytest.mark.unit
     def test_spme(self):
@@ -112,10 +112,10 @@ def test_spme(self):
         )
 
         # Run the optimisation problem
-        results, last_optim, num_evals = parameterisation.run()
+        x, _, final_cost, _ = parameterisation.run()
         # Assertions (for testing purposes only)
-        np.testing.assert_allclose(last_optim, 0, atol=1e-2)
-        np.testing.assert_allclose(results, x0, rtol=1e-1)
+        np.testing.assert_allclose(final_cost, 0, atol=1e-2)
+        np.testing.assert_allclose(x, x0, rtol=1e-1)
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From cee66641c1a0cbdfe9695d8b3e9b2aa7f06a93e1 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Wed, 1 Nov 2023 11:41:52 +0000
Subject: [PATCH 144/210] Rename fit_parameters to parameters

---
 examples/scripts/mle.py              |  2 +-
 examples/scripts/rmse_estimation.py  |  8 ++++----
 pybop/models/base_model.py           | 16 ++++++++--------
 pybop/optimisation.py                | 18 +++++++++---------
 tests/unit/test_parameterisations.py |  8 ++++----
 5 files changed, 26 insertions(+), 26 deletions(-)

diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index 1385a8ccd..d440b2767 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -11,7 +11,7 @@
     "Positive electrode active material volume fraction": 0.6,
 }
 t_eval = np.arange(0, 900, 2)
-model.build(fit_parameters=inputs)
+model.build(parameters=inputs)
 
 values = model.predict(inputs=inputs, t_eval=t_eval)
 voltage = values["Terminal voltage [V]"].data
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 65a5a8a83..ed00ecfc1 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -15,7 +15,7 @@
 model = pybop.models.lithium_ion.SPM()
 
 # Fitting parameters
-params = [
+parameters = [
     pybop.Parameter(
         "Negative electrode active material volume fraction",
         prior=pybop.Gaussian(0.75, 0.05),
@@ -33,14 +33,14 @@
 signal = "Voltage [V]"
 
 # Select optimiser
-optimiser = pybop.NLoptOptimize(x0=params)
+optimiser = pybop.NLoptOptimize(x0=parameters)
 
 # Construct the optimisation problem
 parameterisation = pybop.Optimisation(
     cost=cost,
     model=model,
     optimiser=optimiser,
-    fit_parameters=params,
+    parameters=parameters,
     dataset=dataset,
     signal=signal,
 )
@@ -49,7 +49,7 @@
 x, output, final_cost, num_evals = parameterisation.run()
 
 # get MAP estimate, starting at a random initial point in parameter space
-# parameterisation.map(x0=[p.sample() for p in params])
+# parameterisation.map(x0=[p.sample() for p in parameters])
 
 # or sample from posterior
 # parameterisation.sample(1000, n_chains=4, ....)
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 8dc5652d7..8f76a7483 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -9,13 +9,13 @@ class BaseModel:
     def __init__(self, name="Base Model"):
         self.name = name
         self.pybamm_model = None
-        self.fit_parameters = None
+        self.parameters = None
         self.dataset = None
 
     def build(
         self,
         dataset=None,
-        fit_parameters=None,
+        parameters=None,
         check_model=True,
         init_soc=None,
     ):
@@ -24,7 +24,7 @@ def build(
         For PyBaMM forward models, this method follows a
         similar process to pybamm.Simulation.build().
         """
-        self.fit_parameters = fit_parameters
+        self.parameters = parameters
         self.dataset = dataset
 
         if init_soc is not None:
@@ -74,12 +74,12 @@ def set_params(self):
         if self.model_with_set_params:
             return
 
-        if self.fit_parameters is not None:
+        if self.parameters is not None:
             # set input parameters in parameter set from fitting parameters
-            for i in self.fit_parameters.keys():
+            for i in self.parameters.keys():
                 self.parameter_set[i] = "[input]"
 
-        if self.dataset is not None and self.fit_parameters is not None:
+        if self.dataset is not None and self.parameters is not None:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
                 self.dataset["Time [s]"].data,
                 self.dataset["Current function [A]"].data,
@@ -104,7 +104,7 @@ def simulate(self, inputs, t_eval):
         else:
             if not isinstance(inputs, dict):
                 inputs_dict = {
-                    key: inputs[i] for i, key in enumerate(self.fit_parameters)
+                    key: inputs[i] for i, key in enumerate(self.parameters)
                 }
             return self.solver.solve(
                 self.built_model, inputs=inputs_dict, t_eval=t_eval
@@ -136,7 +136,7 @@ def n_parameters(self):
         """
         Returns the dimension of the parameter space.
         """
-        return len(self.fit_parameters)
+        return len(self.parameters)
 
     def n_outputs(self):
         """
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index 75786ffb9..19c35cdd4 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -12,7 +12,7 @@ def __init__(
         cost,
         model,
         optimiser,
-        fit_parameters,
+        parameters,
         x0=None,
         dataset=None,
         signal=None,
@@ -28,7 +28,7 @@ def __init__(
         self.signal = signal
         self.verbose = verbose
         self.fit_dict = {}
-        self.fit_parameters = {o.name: o for o in fit_parameters}
+        self.parameters = {o.name: o for o in parameters}
         self.model.n_parameters = len(self.fit_dict)
 
         # Check that the dataset contains time and current
@@ -38,26 +38,26 @@ def __init__(
 
         # Set bounds
         self.bounds = dict(
-            lower=[self.fit_parameters[param].bounds[0] for param in self.fit_parameters],
-            upper=[self.fit_parameters[param].bounds[1] for param in self.fit_parameters],
+            lower=[self.parameters[param].bounds[0] for param in self.parameters],
+            upper=[self.parameters[param].bounds[1] for param in self.parameters],
         )
 
         # Sample from prior for x0
         if x0 is None:
-            self.x0 = np.zeros(len(self.fit_parameters))
-            for i, j in enumerate(self.fit_parameters):
-                self.x0[i] = self.fit_parameters[j].prior.rvs(1)[
+            self.x0 = np.zeros(len(self.parameters))
+            for i, j in enumerate(self.parameters):
+                self.x0[i] = self.parameters[j].prior.rvs(1)[
                     0
                 ]  # Updt to capture dimensions per parameter
 
         # Add the initial values to the parameter definitions
-        for i, param in enumerate(self.fit_parameters):
+        for i, param in enumerate(self.parameters):
             self.fit_dict[param] = {param: self.x0[i]}
 
         # Build model with dataset and fitting parameters
         self.model.build(
             dataset=self.dataset,
-            fit_parameters=self.fit_parameters,
+            parameters=self.parameters,
             check_model=check_model,
             init_soc=init_soc,
         )
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index b47ccdb5b..9d4db3c88 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -27,7 +27,7 @@ def test_spm(self):
         ]
 
         # Fitting parameters
-        params = [
+        parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
                 prior=pybop.Gaussian(0.5, 0.02),
@@ -52,7 +52,7 @@ def test_spm(self):
             cost=cost,
             model=model,
             optimiser=optimiser,
-            fit_parameters=params,
+            parameters=parameters,
             dataset=dataset,
             signal=signal,
         )
@@ -81,7 +81,7 @@ def test_spme(self):
         ]
 
         # Fitting parameters
-        params = [
+        parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
                 prior=pybop.Gaussian(0.5, 0.02),
@@ -106,7 +106,7 @@ def test_spme(self):
             cost=cost,
             model=model,
             optimiser=optimiser,
-            fit_parameters=params,
+            parameters=parameters,
             dataset=dataset,
             signal=signal,
         )

From 6ca9bfba07d2b7b64ffd999ce139add1c236d293 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Wed, 1 Nov 2023 12:19:26 +0000
Subject: [PATCH 145/210] Separate PyBaMM from BaseModel

---
 pybop/models/base_model.py             | 146 +-----------------
 pybop/models/lithium_ion/base_echem.py |   6 +-
 pybop/models/pybamm_model.py           | 206 +++++++++++++++++++++++++
 3 files changed, 217 insertions(+), 141 deletions(-)
 create mode 100644 pybop/models/pybamm_model.py

diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 8f76a7483..19a69c5fa 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -1,4 +1,4 @@
-import pybamm
+import pybop
 
 
 class BaseModel:
@@ -8,7 +8,6 @@ class BaseModel:
 
     def __init__(self, name="Base Model"):
         self.name = name
-        self.pybamm_model = None
         self.parameters = None
         self.dataset = None
 
@@ -20,117 +19,32 @@ def build(
         init_soc=None,
     ):
         """
-        Build the PyBOP model (if not built already).
-        For PyBaMM forward models, this method follows a
-        similar process to pybamm.Simulation.build().
+        Build the pybop model (if not built already).
         """
         self.parameters = parameters
         self.dataset = dataset
 
-        if init_soc is not None:
-            self.set_init_soc(init_soc)
-
-        if self._built_model:
-            return
-
-        elif self.pybamm_model.is_discretised:
-            self._model_with_set_params = self.pybamm_model
-            self._built_model = self.pybamm_model
-        else:
-            self.set_params()
-            self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
-            self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
-            self._built_model = self._disc.process_model(
-                self._model_with_set_params, inplace=False, check_model=check_model
-            )
-
-            # Clear solver
-            self._solver._model_set_up = {}
+        raise ValueError("Not yet implemented")
 
     def set_init_soc(self, init_soc):
         """
         Set the initial state of charge.
         """
-        if self._built_initial_soc != init_soc:
-            # reset
-            self._model_with_set_params = None
-            self._built_model = None
-            self.op_conds_to_built_models = None
-            self.op_conds_to_built_solvers = None
-
-        param = self.pybamm_model.param
-        self.parameter_set = (
-            self._unprocessed_parameter_set.set_initial_stoichiometries(
-                init_soc, param=param, inplace=False
-            )
-        )
-        # Save solved initial SOC in case we need to rebuild the model
-        self._built_initial_soc = init_soc
+        raise ValueError("Not yet implemented")
 
     def set_params(self):
         """
-        Set the parameters in the model.
+        Set each parameter in the model either equal to its value
+        or mark it as an input.
         """
-        if self.model_with_set_params:
-            return
-
-        if self.parameters is not None:
-            # set input parameters in parameter set from fitting parameters
-            for i in self.parameters.keys():
-                self.parameter_set[i] = "[input]"
-
-        if self.dataset is not None and self.parameters is not None:
-            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                self.dataset["Time [s]"].data,
-                self.dataset["Current function [A]"].data,
-                pybamm.t,
-            )
-            # Set t_eval
-            self.time_data = self._parameter_set["Current function [A]"].x[0]
-
-        self._model_with_set_params = self._parameter_set.process_model(
-            self._unprocessed_model, inplace=False
-        )
-        self._parameter_set.process_geometry(self.geometry)
-        self.pybamm_model = self._model_with_set_params
+        raise ValueError("Not yet implemented")
 
     def simulate(self, inputs, t_eval):
         """
         Run the forward model and return the result in Numpy array format
         aligning with Pints' ForwardModel simulate method.
         """
-        if self._built_model is None:
-            raise ValueError("Model must be built before calling simulate")
-        else:
-            if not isinstance(inputs, dict):
-                inputs_dict = {
-                    key: inputs[i] for i, key in enumerate(self.parameters)
-                }
-            return self.solver.solve(
-                self.built_model, inputs=inputs_dict, t_eval=t_eval
-            )["Terminal voltage [V]"].data
-
-    def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
-        """
-        Create a PyBaMM simulation object, solve it, and return a solution object.
-        """
-        parameter_set = parameter_set or self.parameter_set
-        if inputs is not None:
-            parameter_set.update(inputs)
-        if self._unprocessed_model is not None:
-            if experiment is None:
-                return pybamm.Simulation(
-                    self._unprocessed_model,
-                    parameter_values=parameter_set,
-                ).solve(t_eval=t_eval)
-            else:
-                return pybamm.Simulation(
-                    self._unprocessed_model,
-                    experiment=experiment,
-                    parameter_values=parameter_set,
-                ).solve()
-        else:
-            raise ValueError("This sim method currently only supports PyBaMM models")
+        raise ValueError("Not yet implemented")
 
     def n_parameters(self):
         """
@@ -159,47 +73,3 @@ def parameter_set(self, parameter_set):
     @property
     def model_with_set_params(self):
         return self._model_with_set_params
-
-    @property
-    def geometry(self):
-        return self._geometry
-
-    @geometry.setter
-    def geometry(self, geometry):
-        self._geometry = geometry.copy()
-
-    @property
-    def submesh_types(self):
-        return self._submesh_types
-
-    @submesh_types.setter
-    def submesh_types(self, submesh_types):
-        self._submesh_types = submesh_types.copy()
-
-    @property
-    def mesh(self):
-        return self._mesh
-
-    @property
-    def var_pts(self):
-        return self._var_pts
-
-    @var_pts.setter
-    def var_pts(self, var_pts):
-        self._var_pts = var_pts.copy()
-
-    @property
-    def spatial_methods(self):
-        return self._spatial_methods
-
-    @spatial_methods.setter
-    def spatial_methods(self, spatial_methods):
-        self._spatial_methods = spatial_methods.copy()
-
-    @property
-    def solver(self):
-        return self._solver
-
-    @solver.setter
-    def solver(self, solver):
-        self._solver = solver.copy()
diff --git a/pybop/models/lithium_ion/base_echem.py b/pybop/models/lithium_ion/base_echem.py
index ffa3b5775..fe5b44d87 100644
--- a/pybop/models/lithium_ion/base_echem.py
+++ b/pybop/models/lithium_ion/base_echem.py
@@ -1,8 +1,8 @@
 import pybamm
-from ..base_model import BaseModel
+from ..pybamm_model import PybammModel
 
 
-class SPM(BaseModel):
+class SPM(PybammModel):
     """
     Composition of the PyBaMM Single Particle Model class.
 
@@ -42,7 +42,7 @@ def __init__(
         self._disc = None
 
 
-class SPMe(BaseModel):
+class SPMe(PybammModel):
     """
     Composition of the PyBaMM Single Particle Model with Electrolyte class.
 
diff --git a/pybop/models/pybamm_model.py b/pybop/models/pybamm_model.py
new file mode 100644
index 000000000..35c7c2276
--- /dev/null
+++ b/pybop/models/pybamm_model.py
@@ -0,0 +1,206 @@
+import pybop
+import pybamm
+from pybop import BaseModel
+
+
+class PybammModel(BaseModel):
+    """
+    Wrapper class for PyBaMM model classes. Extends the BaseModel class.
+
+    """
+
+    def __init__(self):
+        super().__init__()
+        self.pybamm_model = None
+
+    def build(
+        self,
+        dataset=None,
+        parameters=None,
+        check_model=True,
+        init_soc=None,
+    ):
+        """
+        Build the PyBOP model (if not built already).
+        For PyBaMM forward models, this method follows a
+        similar process to pybamm.Simulation.build().
+        """
+        self.parameters = parameters
+        self.dataset = dataset
+
+        if init_soc is not None:
+            self.set_init_soc(init_soc)
+
+        if self._built_model:
+            return
+
+        elif self.pybamm_model.is_discretised:
+            self._model_with_set_params = self.pybamm_model
+            self._built_model = self.pybamm_model
+        else:
+            self.set_params()
+            self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
+            self._disc = pybamm.Discretisation(self.mesh, self.spatial_methods)
+            self._built_model = self._disc.process_model(
+                self._model_with_set_params, inplace=False, check_model=check_model
+            )
+
+            # Clear solver
+            self._solver._model_set_up = {}
+
+    def set_init_soc(self, init_soc):
+        """
+        Set the initial state of charge.
+        """
+        if self._built_initial_soc != init_soc:
+            # reset
+            self._model_with_set_params = None
+            self._built_model = None
+            self.op_conds_to_built_models = None
+            self.op_conds_to_built_solvers = None
+
+        param = self.pybamm_model.param
+        self.parameter_set = (
+            self._unprocessed_parameter_set.set_initial_stoichiometries(
+                init_soc, param=param, inplace=False
+            )
+        )
+        # Save solved initial SOC in case we need to rebuild the model
+        self._built_initial_soc = init_soc
+
+    def set_params(self):
+        """
+        Set the parameters in the model.
+        """
+        if self.model_with_set_params:
+            return
+
+        if self.parameters is not None:
+            # set input parameters in parameter set from fitting parameters
+            for i in self.parameters.keys():
+                self.parameter_set[i] = "[input]"
+
+        if self.dataset is not None and self.parameters is not None:
+            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
+                self.dataset["Time [s]"].data,
+                self.dataset["Current function [A]"].data,
+                pybamm.t,
+            )
+            # Set t_eval
+            self.time_data = self._parameter_set["Current function [A]"].x[0]
+
+        self._model_with_set_params = self._parameter_set.process_model(
+            self._unprocessed_model, inplace=False
+        )
+        self._parameter_set.process_geometry(self.geometry)
+        self.pybamm_model = self._model_with_set_params
+
+    def simulate(self, inputs, t_eval):
+        """
+        Run the forward model and return the result in Numpy array format
+        aligning with Pints' ForwardModel simulate method.
+        """
+        if self._built_model is None:
+            raise ValueError("Model must be built before calling simulate")
+        else:
+            if not isinstance(inputs, dict):
+                inputs_dict = {
+                    key: inputs[i] for i, key in enumerate(self.parameters)
+                }
+            return self.solver.solve(
+                self.built_model, inputs=inputs_dict, t_eval=t_eval
+            )["Terminal voltage [V]"].data
+
+    def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
+        """
+        Create a PyBaMM simulation object, solve it, and return a solution object.
+        """
+        parameter_set = parameter_set or self.parameter_set
+        if inputs is not None:
+            parameter_set.update(inputs)
+        if self._unprocessed_model is not None:
+            if experiment is None:
+                return pybamm.Simulation(
+                    self._unprocessed_model,
+                    parameter_values=parameter_set,
+                ).solve(t_eval=t_eval)
+            else:
+                return pybamm.Simulation(
+                    self._unprocessed_model,
+                    experiment=experiment,
+                    parameter_values=parameter_set,
+                ).solve()
+        else:
+            raise ValueError("This sim method currently only supports PyBaMM models")
+
+    def n_parameters(self):
+        """
+        Returns the dimension of the parameter space.
+        """
+        return len(self.parameters)
+
+    def n_outputs(self):
+        """
+        Returns the number of outputs this model has. The default is 1.
+        """
+        return 1
+
+    @property
+    def built_model(self):
+        return self._built_model
+
+    @property
+    def parameter_set(self):
+        return self._parameter_set
+
+    @parameter_set.setter
+    def parameter_set(self, parameter_set):
+        self._parameter_set = parameter_set.copy()
+
+    @property
+    def model_with_set_params(self):
+        return self._model_with_set_params
+
+    @property
+    def geometry(self):
+        return self._geometry
+
+    @geometry.setter
+    def geometry(self, geometry):
+        self._geometry = geometry.copy()
+
+    @property
+    def submesh_types(self):
+        return self._submesh_types
+
+    @submesh_types.setter
+    def submesh_types(self, submesh_types):
+        self._submesh_types = submesh_types.copy()
+
+    @property
+    def mesh(self):
+        return self._mesh
+
+    @property
+    def var_pts(self):
+        return self._var_pts
+
+    @var_pts.setter
+    def var_pts(self, var_pts):
+        self._var_pts = var_pts.copy()
+
+    @property
+    def spatial_methods(self):
+        return self._spatial_methods
+
+    @spatial_methods.setter
+    def spatial_methods(self, spatial_methods):
+        self._spatial_methods = spatial_methods.copy()
+
+    @property
+    def solver(self):
+        return self._solver
+
+    @solver.setter
+    def solver(self, solver):
+        self._solver = solver.copy()

From 05a45d5bb4decbeec385fd604cd2cdd3575a9ffa Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Wed, 1 Nov 2023 13:16:41 +0000
Subject: [PATCH 146/210] Rename opt to optim

To avoid potential confusion with 'options'.
---
 pybop/optimisers/nlopt_optimize.py | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index d766f376a..e40aa2bf7 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -13,14 +13,14 @@ def __init__(self, method=None, x0=None, xtol=None):
         self.name = "NLOpt Optimiser"
 
         if method is not None:
-            self.opt = nlopt.opt(method, len(x0))
+            self.optim = nlopt.opt(method, len(x0))
         else:
-            self.opt = nlopt.opt(nlopt.LN_BOBYQA, len(x0))
+            self.optim = nlopt.opt(nlopt.LN_BOBYQA, len(x0))
 
         if xtol is not None:
-            self.opt.set_xtol_rel(xtol)
+            self.optim.set_xtol_rel(xtol)
         else:
-            self.opt.set_xtol_rel(1e-5)
+            self.optim.set_xtol_rel(1e-5)
 
     def _runoptimise(self, cost_function, x0, bounds):
         """
@@ -34,16 +34,16 @@ def _runoptimise(self, cost_function, x0, bounds):
         bounds: bounds array
         """
 
-        self.opt.set_min_objective(cost_function)
-        self.opt.set_lower_bounds(bounds["lower"])
-        self.opt.set_upper_bounds(bounds["upper"])
+        self.optim.set_min_objective(cost_function)
+        self.optim.set_lower_bounds(bounds["lower"])
+        self.optim.set_upper_bounds(bounds["upper"])
 
         # Run the optimser
-        x = self.opt.optimize(x0)
+        x = self.optim.optimize(x0)
 
         # Get performance statistics
-        output = self.opt
-        final_cost = self.opt.last_optimum_value()
-        num_evals = self.opt.get_numevals()
+        output = self.optim
+        final_cost = self.optim.last_optimum_value()
+        num_evals = self.optim.get_numevals()
 
         return x, output, final_cost, num_evals

From 79b1907cefe4837606cacd41941c9ae7dae06351 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 1 Nov 2023 14:58:06 +0000
Subject: [PATCH 147/210] Updt nlopt initialisation args, Updt default pints
 method

---
 examples/scripts/rmse_estimation.py  | 4 +---
 pybop/optimisers/base_optimiser.py   | 4 ++--
 pybop/optimisers/nlopt_optimize.py   | 6 +++---
 pybop/optimisers/pints_optimiser.py  | 9 +++++----
 tests/unit/test_parameterisations.py | 4 ++--
 5 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 987e899a0..49d134fe6 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -1,6 +1,5 @@
 import pybop
 import pandas as pd
-import numpy as np
 
 # Form observations
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
@@ -28,7 +27,6 @@
     ),
 ]
 
-x0 = np.array([0.52, 0.63])
 # Define the cost to optimise
 cost = pybop.RMSE()
 signal = "Voltage [V]"
@@ -38,7 +36,7 @@
 parameterisation = pybop.Optimisation(
     cost=cost,
     model=model,
-    optimiser=pybop.NLoptOptimize(x0=x0),
+    optimiser=pybop.NLoptOptimize(n_param=len(parameters)),
     parameters=parameters,
     dataset=dataset,
     signal=signal,
diff --git a/pybop/optimisers/base_optimiser.py b/pybop/optimisers/base_optimiser.py
index dec1495f6..43d8a891f 100644
--- a/pybop/optimisers/base_optimiser.py
+++ b/pybop/optimisers/base_optimiser.py
@@ -8,7 +8,7 @@ class BaseOptimiser:
     def __init__(self):
         self.name = "Base Optimiser"
 
-    def optimise(self, cost_function, x0, bounds):
+    def optimise(self, cost_function, x0=None, bounds=None):
         """
         Optimisiation method to be overloaded by child classes.
 
@@ -22,7 +22,7 @@ def optimise(self, cost_function, x0, bounds):
 
         return result
 
-    def _runoptimise(self, cost_function, x0, bounds):
+    def _runoptimise(self, cost_function, x0=None, bounds=None):
         """
         Run optimisation method, to be overloaded by child classes.
 
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index 8e7fd9c4a..83c62d051 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -7,14 +7,14 @@ class NLoptOptimize(BaseOptimiser):
     Wrapper class for the NLOpt optimiser class. Extends the BaseOptimiser class.
     """
 
-    def __init__(self, x0, xtol=None, method=None):
+    def __init__(self, n_param, xtol=None, method=None):
         super().__init__()
         self.name = "NLOpt Optimiser"
 
         if method is not None:
-            self.optim = nlopt.opt(method, len(x0))
+            self.optim = nlopt.opt(method, n_param)
         else:
-            self.optim = nlopt.opt(nlopt.LN_BOBYQA, len(x0))
+            self.optim = nlopt.opt(nlopt.LN_BOBYQA, n_param)
 
         if xtol is not None:
             self.optim.set_xtol_rel(xtol)
diff --git a/pybop/optimisers/pints_optimiser.py b/pybop/optimisers/pints_optimiser.py
index a36f93856..4aa52d746 100644
--- a/pybop/optimisers/pints_optimiser.py
+++ b/pybop/optimisers/pints_optimiser.py
@@ -6,19 +6,19 @@
 
 class PintsOptimiser(BaseOptimiser):
     """
-    Wrapper class for the PINTS optimisation class. Extends the BaseOptimiser class.
+    Class for the PINTS optimisation. Extends the BaseOptimiser class.
     """
 
-    def __init__(self, x0, xtol=None, method=None):
+    def __init__(self, x0=None, xtol=None, method=None):
         super().__init__()
         self.name = "PINTS Optimiser"
 
         if method is not None:
             self.method = method
         else:
-            self.method = pints.PSO
+            self.method = pints.CMAES
 
-    def _runoptimise(self, cost_function, x0, bounds):
+    def _runoptimise(self, cost_function, x0, bounds=None):
         """
         Run the PINTS optimisation method.
 
@@ -40,6 +40,7 @@ def _runoptimise(self, cost_function, x0, bounds):
         controller = pints.OptimisationController(
             error, x0, boundaries=boundaries, method=self.method
         )
+
         controller.set_max_unchanged_iterations(20)  # default 200
 
         # Run the optimser
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 5ea901583..3aef9e92f 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -45,7 +45,7 @@ def test_spm(self):
         signal = "Voltage [V]"
 
         # Select optimiser
-        optimiser = pybop.NLoptOptimize(x0=x0)
+        optimiser = pybop.NLoptOptimize(n_param=len(parameters))
 
         # Build the optimisation problem
         parameterisation = pybop.Optimisation(
@@ -99,7 +99,7 @@ def test_spme(self):
         signal = "Voltage [V]"
 
         # Select optimiser
-        optimiser = pybop.NLoptOptimize(x0=x0)
+        optimiser = pybop.NLoptOptimize(n_param=len(parameters))
 
         # Build the optimisation problem
         parameterisation = pybop.Optimisation(

From 34ffca47e783ee95c1d98aadc3a32e0ab89c7837 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Wed, 1 Nov 2023 15:56:07 +0000
Subject: [PATCH 148/210] Update parameters

---
 pybop/models/base_model.py          |   4 +-
 pybop/models/pybamm_model.py        |  28 +++---
 pybop/optimisation.py               |  25 +++--
 pybop/optimisers/base_optimiser.py  |   3 +-
 pybop/optimisers/nlopt_optimize.py  |   4 +-
 pybop/optimisers/scipy_minimize.py  |  38 ++++---
 tests/unit/test_parameterisation.py | 147 ++++++++++++++++++++++++++++
 7 files changed, 198 insertions(+), 51 deletions(-)
 create mode 100644 tests/unit/test_parameterisation.py

diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 19a69c5fa..69557b7ef 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -8,8 +8,6 @@ class BaseModel:
 
     def __init__(self, name="Base Model"):
         self.name = name
-        self.parameters = None
-        self.dataset = None
 
     def build(
         self,
@@ -21,8 +19,8 @@ def build(
         """
         Build the pybop model (if not built already).
         """
-        self.parameters = parameters
         self.dataset = dataset
+        self.parameters = parameters
 
         raise ValueError("Not yet implemented")
 
diff --git a/pybop/models/pybamm_model.py b/pybop/models/pybamm_model.py
index 35c7c2276..a859cab7d 100644
--- a/pybop/models/pybamm_model.py
+++ b/pybop/models/pybamm_model.py
@@ -16,17 +16,19 @@ def __init__(self):
     def build(
         self,
         dataset=None,
+        experiment=None,
         parameters=None,
         check_model=True,
         init_soc=None,
     ):
         """
-        Build the PyBOP model (if not built already).
+        Build the pybop model (if not built already).
         For PyBaMM forward models, this method follows a
         similar process to pybamm.Simulation.build().
         """
-        self.parameters = parameters
         self.dataset = dataset
+        self.experiment = experiment
+        self.parameters = parameters
 
         if init_soc is not None:
             self.set_init_soc(init_soc)
@@ -37,6 +39,7 @@ def build(
         elif self.pybamm_model.is_discretised:
             self._model_with_set_params = self.pybamm_model
             self._built_model = self.pybamm_model
+
         else:
             self.set_params()
             self._mesh = pybamm.Mesh(self.geometry, self.submesh_types, self.var_pts)
@@ -70,15 +73,16 @@ def set_init_soc(self, init_soc):
 
     def set_params(self):
         """
-        Set the parameters in the model.
+        Set each parameter in the model either equal to its value
+        or mark it as an input.
         """
         if self.model_with_set_params:
             return
 
         if self.parameters is not None:
-            # set input parameters in parameter set from fitting parameters
-            for i in self.parameters.keys():
-                self.parameter_set[i] = "[input]"
+            # Set input parameters in parameter set from fitting parameters
+            for param in self.parameters:
+                self.parameter_set[param.name] = "[input]"
 
         if self.dataset is not None and self.parameters is not None:
             self.parameter_set["Current function [A]"] = pybamm.Interpolant(
@@ -86,8 +90,8 @@ def set_params(self):
                 self.dataset["Current function [A]"].data,
                 pybamm.t,
             )
-            # Set t_eval
-            self.time_data = self._parameter_set["Current function [A]"].x[0]
+            # Set times
+            self.times = self._parameter_set["Current function [A]"].x[0]
 
         self._model_with_set_params = self._parameter_set.process_model(
             self._unprocessed_model, inplace=False
@@ -107,9 +111,10 @@ def simulate(self, inputs, t_eval):
                 inputs_dict = {
                     key: inputs[i] for i, key in enumerate(self.parameters)
                 }
-            return self.solver.solve(
+            prediction = self.solver.solve(
                 self.built_model, inputs=inputs_dict, t_eval=t_eval
             )["Terminal voltage [V]"].data
+            return prediction
 
     def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None):
         """
@@ -120,16 +125,17 @@ def predict(self, inputs=None, t_eval=None, parameter_set=None, experiment=None)
             parameter_set.update(inputs)
         if self._unprocessed_model is not None:
             if experiment is None:
-                return pybamm.Simulation(
+                prediction = pybamm.Simulation(
                     self._unprocessed_model,
                     parameter_values=parameter_set,
                 ).solve(t_eval=t_eval)
             else:
-                return pybamm.Simulation(
+                prediction = pybamm.Simulation(
                     self._unprocessed_model,
                     experiment=experiment,
                     parameter_values=parameter_set,
                 ).solve()
+            return prediction
         else:
             raise ValueError("This sim method currently only supports PyBaMM models")
 
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index 19c35cdd4..7d94ecc71 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -23,13 +23,13 @@ def __init__(
         self.cost = cost
         self.model = model
         self.optimiser = optimiser
+        self.parameters = parameters
         self.x0 = x0
         self.dataset = {o.name: o for o in dataset}
         self.signal = signal
+        self.n_parameters = len(self.parameters)
         self.verbose = verbose
         self.fit_dict = {}
-        self.parameters = {o.name: o for o in parameters}
-        self.model.n_parameters = len(self.fit_dict)
 
         # Check that the dataset contains time and current
         for name in ["Time [s]", "Current function [A]"]:
@@ -38,21 +38,20 @@ def __init__(
 
         # Set bounds
         self.bounds = dict(
-            lower=[self.parameters[param].bounds[0] for param in self.parameters],
-            upper=[self.parameters[param].bounds[1] for param in self.parameters],
+            lower=[param.bounds[0] for param in self.parameters],
+            upper=[param.bounds[1] for param in self.parameters],
         )
 
         # Sample from prior for x0
         if x0 is None:
-            self.x0 = np.zeros(len(self.parameters))
-            for i, j in enumerate(self.parameters):
-                self.x0[i] = self.parameters[j].prior.rvs(1)[
-                    0
-                ]  # Updt to capture dimensions per parameter
+            self.x0 = np.zeros(self.n_parameters)
+            for i, param in enumerate(self.parameters):
+                self.x0[i] = param.prior.rvs(1)[0]
+                # Update to capture dimensions per parameter
 
-        # Add the initial values to the parameter definitions
+        # Populate the fit dictionary
         for i, param in enumerate(self.parameters):
-            self.fit_dict[param] = {param: self.x0[i]}
+            self.fit_dict[param.name] = {param.name: self.x0[i]}
 
         # Build model with dataset and fitting parameters
         self.model.build(
@@ -84,8 +83,8 @@ def cost_function(self, x, grad=None):
         target = self.dataset[self.signal].data
 
         # Update the parameter dictionary
-        for i, param in enumerate(self.fit_dict):
-            self.fit_dict[param] = x[i]
+        for i, key in enumerate(self.fit_dict):
+            self.fit_dict[key] = x[i]
 
         # Make prediction
         prediction = self.model.predict(inputs=self.fit_dict)[self.signal].data
diff --git a/pybop/optimisers/base_optimiser.py b/pybop/optimisers/base_optimiser.py
index df6e253e5..dec1495f6 100644
--- a/pybop/optimisers/base_optimiser.py
+++ b/pybop/optimisers/base_optimiser.py
@@ -8,14 +8,13 @@ class BaseOptimiser:
     def __init__(self):
         self.name = "Base Optimiser"
 
-    def optimise(self, cost_function, x0, bounds, method=None):
+    def optimise(self, cost_function, x0, bounds):
         """
         Optimisiation method to be overloaded by child classes.
 
         """
         self.cost_function = cost_function
         self.x0 = x0
-        self.method = method
         self.bounds = bounds
 
         # Run optimisation
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index e40aa2bf7..8a48d30a3 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -8,8 +8,10 @@ class NLoptOptimize(BaseOptimiser):
     Wrapper class for the NLOpt optimiser class. Extends the BaseOptimiser class.
     """
 
-    def __init__(self, method=None, x0=None, xtol=None):
+    def __init__(self, x0, method=None, xtol=None):
         super().__init__()
+        self.method = method
+        self.x0 = x0
         self.name = "NLOpt Optimiser"
 
         if method is not None:
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index b9a282839..c3b8919d1 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -8,16 +8,17 @@ class SciPyMinimize(BaseOptimiser):
     Wrapper class for the SciPy optimisation class. Extends the BaseOptimiser class.
     """
 
-    def __init__(self, cost_function, x0, bounds=None, options=None):
+    def __init__(self, x0, method=None, bounds=None):
         super().__init__()
-        self.cost_function = cost_function
-        self.method = options.optmethod
-        self.x0 = x0 or cost_function.x0
+        self.method = method
+        self.x0 = x0
         self.bounds = bounds
-        self.options = options
-        self.name = "Scipy Optimiser"
+        self.name = "SciPy Optimiser"
 
-    def _runoptimise(self):
+        if self.method is None:
+            self.method = "BFGS"
+
+    def _runoptimise(self, cost_function, x0, bounds):
         """
         Run the SciPy optimisation method.
 
@@ -29,23 +30,18 @@ def _runoptimise(self):
         bounds: bounds array
         """
 
-        if self.method is not None:
-            method=self.method
-        else:
-            opt = minimize(self.cost_function, self.x0, method="BFGS")
-
-        # Reformat bounds
-        bounds = (
-            (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"])
-        )
-
-        # Run the optimser
-        if self.bounds is not None:
+        if bounds is not None:
+            # Reformat bounds and run the optimser
+            bounds = (
+                (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"])
+            )
             output = minimize(
-                self.cost_function, self.x0, method=method, bounds=self.bounds, tol=self.xtol
+                cost_function, x0, method=self.method, bounds=bounds
             )
         else:
-            output = minimize(self.cost_function, self.x0, method=method, tol=self.xtol)
+            output = minimize(
+                cost_function, x0, method=self.method
+            )
 
         # Get performance statistics
         x = output.x
diff --git a/tests/unit/test_parameterisation.py b/tests/unit/test_parameterisation.py
new file mode 100644
index 000000000..bf8eecf13
--- /dev/null
+++ b/tests/unit/test_parameterisation.py
@@ -0,0 +1,147 @@
+import unittest
+import pybop
+import pybamm
+import pytest
+import numpy as np
+
+
+class TestParameterisation(unittest.TestCase):
+    """
+    A class to test the model parameterisation methods.
+    """
+
+    def getdata(self, model, x0):
+        # Update fitting parameters
+        model.parameter_set.update(
+            {
+                "Negative electrode active material volume fraction": x0[0],
+                "Positive electrode active material volume fraction": x0[1],
+            }
+        )
+
+        # Define experimental protocol
+        experiment = pybamm.Experiment(
+            [
+                (
+                    "Discharge at 2C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                    "Charge at 1C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                ),
+            ]
+            * 2
+        )
+
+        # Simulate model to generate test dataset
+        prediction = model.predict(experiment=experiment)
+        return prediction
+
+    @pytest.mark.unit
+    def test_spm_nlopt(self):
+        # Define model
+        model = pybop.lithium_ion.SPM()
+        model.parameter_set = model.pybamm_model.default_parameter_values
+
+        # Form dataset
+        x0 = np.array([0.52, 0.63])
+        solution = self.getdata(model, x0)
+        dataset = [
+            pybop.Dataset("Time [s]", solution["Time [s]"].data),
+            pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
+        ]
+
+        # Define fitting parameters
+        parameters = [
+            pybop.Parameter(
+                name="Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.5, 0.02),
+                bounds=[0.375, 0.625],
+            ),
+            pybop.Parameter(
+                name="Positive electrode active material volume fraction",
+                prior=pybop.Gaussian(0.65, 0.02),
+                bounds=[0.525, 0.75],
+            ),
+        ]
+
+        # Define the cost to optimise
+        cost = pybop.RMSE()
+        signal = "Voltage [V]"
+
+        # Select optimiser
+        optimiser = pybop.NLoptOptimize(x0=x0)
+
+        # Build the optimisation problem
+        parameterisation = pybop.Optimisation(
+            cost=cost,
+            model=model,
+            optimiser=optimiser,
+            parameters=parameters,
+            dataset=dataset,
+            signal=signal,
+        )
+
+        # Run the optimisation problem
+        x, output, final_cost, num_evals = parameterisation.run()
+
+        # Check assertions
+        np.testing.assert_allclose(final_cost, 1e-3, atol=1e-2)
+        np.testing.assert_allclose(x, x0, atol=1e-1)
+
+    @pytest.mark.unit
+    def test_spme_scipy(self):
+        # Define model
+        model = pybop.lithium_ion.SPMe()
+        model.parameter_set = model.pybamm_model.default_parameter_values
+
+        # Form dataset
+        x0 = np.array([0.52, 0.63])
+        solution = self.getdata(model, x0)
+        dataset = [
+            pybop.Dataset("Time [s]", solution["Time [s]"].data),
+            pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
+        ]
+
+        # Define fitting parameters
+        parameters = [
+            pybop.Parameter(
+                name="Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.5, 0.02),
+                bounds=[0.375, 0.625],
+            ),
+            pybop.Parameter(
+                name="Positive electrode active material volume fraction",
+                prior=pybop.Gaussian(0.65, 0.02),
+                bounds=[0.525, 0.75],
+            ),
+        ]
+
+        # Define the cost to optimise
+        cost = pybop.RMSE()
+        signal = "Voltage [V]"
+
+        # Select optimiser
+        optimiser = pybop.SciPyMinimize(x0=x0)
+
+        # Build the optimisation problem
+        parameterisation = pybop.Optimisation(
+            cost=cost,
+            model=model,
+            optimiser=optimiser,
+            parameters=parameters,
+            dataset=dataset,
+            signal=signal,
+        )
+
+        # Run the optimisation problem
+        x, output, final_cost, num_evals = parameterisation.run()
+
+        # Check assertions
+        np.testing.assert_allclose(final_cost, 1e-3, atol=1e-2)
+        np.testing.assert_allclose(x, x0, atol=1e-1)
+
+
+if __name__ == "__main__":
+    unittest.main()

From 6e67e5e77cc7a6d184254bad4eb8d2f2e87a3668 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 1 Nov 2023 15:58:03 +0000
Subject: [PATCH 149/210] Add problem class, Add modularity to output of
 model.simulateS1()

---
 pybop/__init__.py          |  5 +++
 pybop/_problem.py          | 63 ++++++++++++++++++++++++++++++++++++++
 pybop/models/base_model.py |  2 +-
 3 files changed, 69 insertions(+), 1 deletion(-)
 create mode 100644 pybop/_problem.py

diff --git a/pybop/__init__.py b/pybop/__init__.py
index e00e3d3c1..70cf0f7ea 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -59,6 +59,11 @@
 from .parameters.base_parameter_set import ParameterSet
 from .parameters.priors import Gaussian, Uniform, Exponential
 
+#
+# Problem class
+#
+from ._problem import SingleOutputProblem
+
 #
 # Plotting class
 #
diff --git a/pybop/_problem.py b/pybop/_problem.py
new file mode 100644
index 000000000..894c92300
--- /dev/null
+++ b/pybop/_problem.py
@@ -0,0 +1,63 @@
+import numpy as np
+
+
+class SingleOutputProblem:
+    """
+    Defines a PyBOP single output problem, follows the PINTS interface.
+    """
+
+    def __init__(self, model, parameters, signal, dataset):
+        self._model = model
+        self.parameters = parameters
+        self.signal = signal
+        self._dataset = dataset
+
+        if self._model._built_model is None:
+            self._model.build(fit_parameters=self.parameters)
+
+        for item in self._dataset:
+            if item.name == "Time [s]":
+                self._time_data_available = True
+                self._time_data = self._dataset[item]
+
+            if item.name == signal:
+                self._ground_truth = self._dataset[item]
+
+        if self._time_data_available is False:
+            raise ValueError("Dataset must contain time data")
+
+        if np.any(self._time_data < 0):
+            raise ValueError("Times can not be negative.")
+        if np.any(self._time_data[:-1] >= self._time_data[1:]):
+            raise ValueError("Times must be increasing.")
+
+        self._ground_truth = self._dataset[self.signal]
+
+        if len(self._ground_truth) != len(self._time_data):
+            raise ValueError("Time data and signal data must be the same length.")
+
+    def evaluate(self, parameters):
+        """
+        Evaluate the model with the given parameters and return the signal.
+        """
+
+        y = np.asarray(self._model.simulate(inputs=parameters, t_eval=self.model.time_data)[
+            self.signal
+        ].data)
+
+        return y
+
+    def evaluateS1(self, parameters):
+        """
+        Evaluate the model with the given parameters and return the signal and
+        its derivatives.
+        """
+
+        y, dy_dp = self._model.simulateS1(
+            inputs=parameters, t_eval=self.model.time_data, calculate_sensitivities=True
+        )[self.signal]
+
+        return (
+            np.asarray(y),
+            np.asarray(dy_dp)
+        )
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 3ddd904c1..91a4d9664 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -144,7 +144,7 @@ def simulateS1(self, inputs, t_eval):
 
             return (
                 sol["Terminal voltage [V]"].data,
-                np.array(
+                np.asarray(
                     [
                         sol["Terminal voltage [V]"].sensitivities[key].toarray()
                         for key in self.fit_keys

From 3b65b0225bbcd07e395e2a5f288dee97d2770e0b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 2 Nov 2023 10:37:48 +0000
Subject: [PATCH 150/210] Add tests for problem class, SciPyMinimize, reduce
 example/ runtimes, bugfix problem class

---
 examples/scripts/grad_descent.py     |  2 +-
 examples/scripts/mle.py              |  2 +-
 pybop/_problem.py                    | 10 ++---
 pybop/optimisers/scipy_minimize.py   |  3 +-
 tests/unit/test_parameterisations.py | 41 ++++++++++--------
 tests/unit/test_problem.py           | 63 ++++++++++++++++++++++++++++
 6 files changed, 93 insertions(+), 28 deletions(-)
 create mode 100644 tests/unit/test_problem.py

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 115b23258..6e62f9b18 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -10,7 +10,7 @@
     "Positive electrode active material volume fraction": 0.44,
     "Current function [A]": 1,
 }
-t_eval = np.arange(0, 1200, 2)
+t_eval = np.arange(0, 900, 2)
 model.build(fit_parameters=inputs)
 
 values = model.predict(inputs=inputs, t_eval=t_eval)
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index e20ccf55b..a508ffa46 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -10,7 +10,7 @@
     "Positive electrode active material volume fraction": 0.44,
     "Current function [A]": 1,
 }
-t_eval = np.arange(0, 1200, 2)
+t_eval = np.arange(0, 900, 2)
 model.build(fit_parameters=inputs)
 
 values = model.predict(inputs=inputs, t_eval=t_eval)
diff --git a/pybop/_problem.py b/pybop/_problem.py
index 9456f4461..979f1a2ff 100644
--- a/pybop/_problem.py
+++ b/pybop/_problem.py
@@ -8,20 +8,20 @@ class SingleOutputProblem:
 
     def __init__(self, model, parameters, signal, dataset):
         self._model = model
-        self.parameters = parameters
+        self.parameters = {o.name: o for o in parameters}
         self.signal = signal
         self._dataset = dataset
 
         if self._model._built_model is None:
             self._model.build(fit_parameters=self.parameters)
 
-        for item in self._dataset:
+        for i, item in enumerate(self._dataset):
             if item.name == "Time [s]":
                 self._time_data_available = True
-                self._time_data = self._dataset[item]
+                self._time_data = self._dataset[i].data
 
             if item.name == signal:
-                self._ground_truth = self._dataset[item]
+                self._ground_truth = self._dataset[i].data
 
         if self._time_data_available is False:
             raise ValueError("Dataset must contain time data")
@@ -31,8 +31,6 @@ def __init__(self, model, parameters, signal, dataset):
         if np.any(self._time_data[:-1] >= self._time_data[1:]):
             raise ValueError("Times must be increasing.")
 
-        self._ground_truth = self._dataset[self.signal]
-
         if len(self._ground_truth) != len(self._time_data):
             raise ValueError("Time data and signal data must be the same length.")
 
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index d8391276f..1b1ae6351 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -7,10 +7,9 @@ class SciPyMinimize(BaseOptimiser):
     Wrapper class for the SciPy optimisation class. Extends the BaseOptimiser class.
     """
 
-    def __init__(self, x0, method=None, bounds=None):
+    def __init__(self, method=None, bounds=None):
         super().__init__()
         self.method = method
-        self.x0 = x0
         self.bounds = bounds
         self.name = "SciPy Optimiser"
 
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index bd2884e6a..9f5e3f042 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -65,7 +65,7 @@ def test_spm(self):
         np.testing.assert_allclose(x, x0, atol=1e-1)
 
     @pytest.mark.unit
-    def test_spme(self):
+    def test_spme_multiple_optimisers(self):
         # Define model
         model = pybop.lithium_ion.SPMe()
         model.parameter_set = model.pybamm_model.default_parameter_values
@@ -98,24 +98,29 @@ def test_spme(self):
         cost = pybop.RMSE()
         signal = "Voltage [V]"
 
-        # Select optimiser
-        optimiser = pybop.NLoptOptimize(n_param=len(parameters))
-
-        # Build the optimisation problem
-        parameterisation = pybop.Optimisation(
-            cost=cost,
-            model=model,
-            optimiser=optimiser,
-            parameters=parameters,
-            dataset=dataset,
-            signal=signal,
-        )
+        # Select optimisers
+        optimisers = [
+            pybop.NLoptOptimize(n_param=len(parameters)),
+            pybop.SciPyMinimize()
+        ]
 
-        # Run the optimisation problem
-        x, _, final_cost, _ = parameterisation.run()
-        # Assertions (for testing purposes only)
-        np.testing.assert_allclose(final_cost, 0, atol=1e-2)
-        np.testing.assert_allclose(x, x0, rtol=1e-1)
+        # Test each optimiser
+        for optimiser in optimisers:
+
+            parameterisation = pybop.Optimisation(
+                cost=cost,
+                model=model,
+                optimiser=optimiser,
+                parameters=parameters,
+                dataset=dataset,
+                signal=signal,
+            )
+
+            # Run the optimisation problem
+            x, _, final_cost, _ = parameterisation.run()
+            # Assertions (for testing purposes only)
+            np.testing.assert_allclose(final_cost, 0, atol=1e-2)
+            np.testing.assert_allclose(x, x0, rtol=1e-1)
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
new file mode 100644
index 000000000..f117b313f
--- /dev/null
+++ b/tests/unit/test_problem.py
@@ -0,0 +1,63 @@
+import pybop
+import numpy as np
+import pybamm
+
+
+class TestProblem:
+    """
+    A class to test the problem class.
+    """
+    def test_problem(self):
+        # Define model
+        model = pybop.lithium_ion.SPM()
+        parameters = [
+            pybop.Parameter(
+                "Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.5, 0.02),
+                bounds=[0.375, 0.625],
+            ),
+            pybop.Parameter(
+                "Positive electrode active material volume fraction",
+                prior=pybop.Gaussian(0.65, 0.02),
+                bounds=[0.525, 0.75],
+            ),
+        ]
+        signal = "Voltage [V]"
+
+        # Form dataset
+        x0 = np.array([0.52, 0.63])
+        solution = self.getdata(model, x0)
+
+        dataset = [
+            pybop.Dataset("Time [s]", solution["Time [s]"].data),
+            pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
+        ]
+
+        problem = pybop.SingleOutputProblem(model, parameters, signal, dataset)
+
+        assert problem._model == model
+        assert problem._dataset == dataset
+
+    def getdata(self, model, x0):
+        model.parameter_set = model.pybamm_model.default_parameter_values
+
+        model.parameter_set.update(
+            {
+                "Negative electrode active material volume fraction": x0[0],
+                "Positive electrode active material volume fraction": x0[1],
+            }
+        )
+        experiment = pybamm.Experiment(
+            [
+                (
+                    "Discharge at 2C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                    "Charge at 1C for 5 minutes (1 second period)",
+                    "Rest for 2 minutes (1 second period)",
+                ),
+            ]
+            * 2
+        )
+        sim = model.predict(experiment=experiment)
+        return sim

From 4d84cb3499ffb4d3ccb87609f26d835f07cd0831 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 2 Nov 2023 12:56:46 +0000
Subject: [PATCH 151/210] Add tests for costs, improve priors and problem tests

---
 pybop/__init__.py          |  2 +-
 tests/unit/test_cost.py    | 44 ++++++++++++++++++++++++++++++++++++++
 tests/unit/test_priors.py  | 11 ++++++++++
 tests/unit/test_problem.py |  3 +++
 4 files changed, 59 insertions(+), 1 deletion(-)
 create mode 100644 tests/unit/test_cost.py

diff --git a/pybop/__init__.py b/pybop/__init__.py
index 70cf0f7ea..6d17e5102 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -26,7 +26,7 @@
 #
 # Cost function class
 #
-from .costs.error_costs import RMSE
+from .costs.error_costs import RMSE, MLE, PEM, MAP
 
 #
 # Dataset class
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
new file mode 100644
index 000000000..021877689
--- /dev/null
+++ b/tests/unit/test_cost.py
@@ -0,0 +1,44 @@
+import pytest
+import pybop
+import numpy as np
+
+class TestCosts:
+    """
+    Class for tests cost functions
+    """
+
+    @pytest.mark.unit
+    def test_RMSE(self):
+        # Tests cost function
+        vector1 = np.array([1, 2, 3])
+        vector2 = np.array([2, 3, 4])
+
+        cost = pybop.RMSE()
+        cost.compute(vector1, vector2)
+
+    @pytest.mark.unit
+    def test_MLE(self):
+        # Tests cost function
+        vector1 = np.array([1, 2, 3])
+        vector2 = np.array([2, 3, 4])
+
+        cost = pybop.MLE()
+        cost.compute(vector1, vector2)
+
+    @pytest.mark.unit
+    def test_PEM(self):
+        # Tests cost function
+        vector1 = np.array([1, 2, 3])
+        vector2 = np.array([2, 3, 4])
+
+        cost = pybop.PEM()
+        cost.compute(vector1, vector2)
+
+    @pytest.mark.unit
+    def test_MAP(self):
+        # Tests cost function
+        vector1 = np.array([1, 2, 3])
+        vector2 = np.array([2, 3, 4])
+
+        cost = pybop.MAP()
+        cost.compute(vector1, vector2)
diff --git a/tests/unit/test_priors.py b/tests/unit/test_priors.py
index cfb544cdf..389480505 100644
--- a/tests/unit/test_priors.py
+++ b/tests/unit/test_priors.py
@@ -15,6 +15,17 @@ def test_priors(self):
         Uniform = pybop.Uniform(0, 1)
         Exponential = pybop.Exponential(1)
 
+        # Test pdf
         np.testing.assert_allclose(Gaussian.pdf(0.5), 0.3989422804014327, atol=1e-4)
         np.testing.assert_allclose(Uniform.pdf(0.5), 1, atol=1e-4)
         np.testing.assert_allclose(Exponential.pdf(1), 0.36787944117144233, atol=1e-4)
+
+        # Test logpdf
+        np.testing.assert_allclose(Gaussian.logpdf(0.5), -0.9189385332046727, atol=1e-4)
+        np.testing.assert_allclose(Uniform.logpdf(0.5), 0, atol=1e-4)
+        np.testing.assert_allclose(Exponential.logpdf(1), -1, atol=1e-4)
+
+        # Test rvs
+        np.testing.assert_allclose(Gaussian.rvs(1), 0.5, atol=3)
+        np.testing.assert_allclose(Uniform.rvs(1), 0.5, atol=0.5)
+        np.testing.assert_allclose(Exponential.rvs(1), 1, atol=3)
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
index f117b313f..0b4889087 100644
--- a/tests/unit/test_problem.py
+++ b/tests/unit/test_problem.py
@@ -1,12 +1,15 @@
 import pybop
 import numpy as np
 import pybamm
+import pytest
 
 
 class TestProblem:
     """
     A class to test the problem class.
     """
+
+    @pytest.mark.unit
     def test_problem(self):
         # Define model
         model = pybop.lithium_ion.SPM()

From b7dca7e18e33912d06767076f197174bff477466 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 2 Nov 2023 14:40:40 +0000
Subject: [PATCH 152/210] Add additional cost function tests

---
 tests/unit/test_cost.py | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 021877689..4abf20dd8 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -16,6 +16,30 @@ def test_RMSE(self):
         cost = pybop.RMSE()
         cost.compute(vector1, vector2)
 
+    @pytest.mark.unit
+    def test_RMSE_mismatch_dims(self):
+        # Tests cost function
+        vector1 = np.array([1, 2, 3])
+        vector2 = np.array([2, 3, 4, 5])
+
+        cost = pybop.RMSE()
+        with pytest.raises(
+                ValueError
+        ):
+            cost.compute(vector1, vector2)
+
+    @pytest.mark.unit
+    def test_RMSE_incorrect_type(self):
+        # Tests cost function
+        vector1 = np.array([1, 2, 3])
+        vector2 = "string"
+
+        cost = pybop.RMSE()
+        with pytest.raises(
+            ValueError
+        ):
+            cost.compute(vector1, vector2)
+
     @pytest.mark.unit
     def test_MLE(self):
         # Tests cost function

From e98d840395c88743766fdb2e232b2ff782408944 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 2 Nov 2023 14:41:14 +0000
Subject: [PATCH 153/210] + black format

---
 tests/unit/test_cost.py              | 9 +++------
 tests/unit/test_parameterisations.py | 3 +--
 2 files changed, 4 insertions(+), 8 deletions(-)

diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 4abf20dd8..e7122b86e 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -2,6 +2,7 @@
 import pybop
 import numpy as np
 
+
 class TestCosts:
     """
     Class for tests cost functions
@@ -23,9 +24,7 @@ def test_RMSE_mismatch_dims(self):
         vector2 = np.array([2, 3, 4, 5])
 
         cost = pybop.RMSE()
-        with pytest.raises(
-                ValueError
-        ):
+        with pytest.raises(ValueError):
             cost.compute(vector1, vector2)
 
     @pytest.mark.unit
@@ -35,9 +34,7 @@ def test_RMSE_incorrect_type(self):
         vector2 = "string"
 
         cost = pybop.RMSE()
-        with pytest.raises(
-            ValueError
-        ):
+        with pytest.raises(ValueError):
             cost.compute(vector1, vector2)
 
     @pytest.mark.unit
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 9f5e3f042..337497d43 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -101,12 +101,11 @@ def test_spme_multiple_optimisers(self):
         # Select optimisers
         optimisers = [
             pybop.NLoptOptimize(n_param=len(parameters)),
-            pybop.SciPyMinimize()
+            pybop.SciPyMinimize(),
         ]
 
         # Test each optimiser
         for optimiser in optimisers:
-
             parameterisation = pybop.Optimisation(
                 cost=cost,
                 model=model,

From fd11fcae4ac4a08f783e7858bb63e798e19f2c27 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 2 Nov 2023 15:17:58 +0000
Subject: [PATCH 154/210] Update tests

---
 tests/unit/test_parameterisations.py |  2 +-
 tests/unit/test_priors.py            | 47 ++++++++++++++++++++++------
 tests/unit/test_problem.py           |  2 +-
 3 files changed, 40 insertions(+), 11 deletions(-)

diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 337497d43..8b3c0807a 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -133,7 +133,7 @@ def getdata(self, model, x0):
         experiment = pybamm.Experiment(
             [
                 (
-                    "Discharge at 2C for 5 minutes (1 second period)",
+                    "Discharge at 1C for 5 minutes (1 second period)",
                     "Rest for 2 minutes (1 second period)",
                     "Charge at 1C for 5 minutes (1 second period)",
                     "Rest for 2 minutes (1 second period)",
diff --git a/tests/unit/test_priors.py b/tests/unit/test_priors.py
index 389480505..e3baf8cec 100644
--- a/tests/unit/test_priors.py
+++ b/tests/unit/test_priors.py
@@ -8,12 +8,20 @@ class TestPriors:
     A class to test the priors.
     """
 
+    @pytest.fixture
+    def Gaussian(self):
+        return pybop.Gaussian(mean=0.5, sigma=1)
+
+    @pytest.fixture
+    def Uniform(self):
+        return pybop.Uniform(lower=0, upper=1)
+
+    @pytest.fixture
+    def Exponential(self):
+        return pybop.Exponential(scale=1)
+
     @pytest.mark.unit
-    def test_priors(self):
-        # Tests priors
-        Gaussian = pybop.Gaussian(0.5, 1)
-        Uniform = pybop.Uniform(0, 1)
-        Exponential = pybop.Exponential(1)
+    def test_priors(self, Gaussian, Uniform, Exponential):
 
         # Test pdf
         np.testing.assert_allclose(Gaussian.pdf(0.5), 0.3989422804014327, atol=1e-4)
@@ -25,7 +33,28 @@ def test_priors(self):
         np.testing.assert_allclose(Uniform.logpdf(0.5), 0, atol=1e-4)
         np.testing.assert_allclose(Exponential.logpdf(1), -1, atol=1e-4)
 
-        # Test rvs
-        np.testing.assert_allclose(Gaussian.rvs(1), 0.5, atol=3)
-        np.testing.assert_allclose(Uniform.rvs(1), 0.5, atol=0.5)
-        np.testing.assert_allclose(Exponential.rvs(1), 1, atol=3)
+    @pytest.mark.unit
+    def test_gaussian_rvs(self,Gaussian):
+        samples = Gaussian.rvs(size=500)
+        mean = np.mean(samples)
+        std = np.std(samples)
+        assert abs(mean - 0.5) < 0.1
+        assert abs(std - 1) < 0.1
+
+    @pytest.mark.unit
+    def test_uniform_rvs(self, Uniform):
+        samples = Uniform.rvs(size=500)
+        assert (samples >= 0).all() and (samples <= 1).all()
+
+    @pytest.mark.unit
+    def test_exponential_rvs(self, Exponential):
+        samples = Exponential.rvs(size=500)
+        assert (samples >= 0).all()
+        mean = np.mean(samples)
+        assert abs(mean - 1) < 0.1
+
+    @pytest.mark.unit
+    def test_repr(self, Gaussian, Uniform, Exponential):
+        assert repr(Gaussian) == "Gaussian, mean: 0.5, sigma: 1"
+        assert repr(Uniform) == "Uniform, lower: 0, upper: 1"
+        assert repr(Exponential) == "Exponential, scale: 1"
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
index 0b4889087..1878b509f 100644
--- a/tests/unit/test_problem.py
+++ b/tests/unit/test_problem.py
@@ -54,7 +54,7 @@ def getdata(self, model, x0):
         experiment = pybamm.Experiment(
             [
                 (
-                    "Discharge at 2C for 5 minutes (1 second period)",
+                    "Discharge at 1C for 5 minutes (1 second period)",
                     "Rest for 2 minutes (1 second period)",
                     "Charge at 1C for 5 minutes (1 second period)",
                     "Rest for 2 minutes (1 second period)",

From 326666ad85c1c59f6ea574b3704d2cf96cefe880 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 2 Nov 2023 16:59:18 +0000
Subject: [PATCH 155/210] Updt default SciPyMinimize Method, Reduce assert on
 prior tests

---
 pybop/optimisers/scipy_minimize.py | 2 +-
 tests/unit/test_priors.py          | 6 +++---
 2 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index 1b1ae6351..8f24c1d2a 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -14,7 +14,7 @@ def __init__(self, method=None, bounds=None):
         self.name = "SciPy Optimiser"
 
         if self.method is None:
-            self.method = "BFGS"
+            self.method = "L-BFGS-B"
 
     def _runoptimise(self, cost_function, x0, bounds):
         """
diff --git a/tests/unit/test_priors.py b/tests/unit/test_priors.py
index e3baf8cec..cfb8bacec 100644
--- a/tests/unit/test_priors.py
+++ b/tests/unit/test_priors.py
@@ -38,8 +38,8 @@ def test_gaussian_rvs(self,Gaussian):
         samples = Gaussian.rvs(size=500)
         mean = np.mean(samples)
         std = np.std(samples)
-        assert abs(mean - 0.5) < 0.1
-        assert abs(std - 1) < 0.1
+        assert abs(mean - 0.5) < 0.2
+        assert abs(std - 1) < 0.2
 
     @pytest.mark.unit
     def test_uniform_rvs(self, Uniform):
@@ -51,7 +51,7 @@ def test_exponential_rvs(self, Exponential):
         samples = Exponential.rvs(size=500)
         assert (samples >= 0).all()
         mean = np.mean(samples)
-        assert abs(mean - 1) < 0.1
+        assert abs(mean - 1) < 0.2
 
     @pytest.mark.unit
     def test_repr(self, Gaussian, Uniform, Exponential):

From d595cb038409216ed51dd44559eda577b657729a Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 2 Nov 2023 17:04:53 +0000
Subject: [PATCH 156/210] Change rtol assert to atol

---
 tests/unit/test_parameterisations.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 8b3c0807a..e08df6c00 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -119,7 +119,7 @@ def test_spme_multiple_optimisers(self):
             x, _, final_cost, _ = parameterisation.run()
             # Assertions (for testing purposes only)
             np.testing.assert_allclose(final_cost, 0, atol=1e-2)
-            np.testing.assert_allclose(x, x0, rtol=1e-1)
+            np.testing.assert_allclose(x, x0, atol=1e-1)
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From 3a58bcdffbd73c25b97f37e3d56723ebd0534a64 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 2 Nov 2023 18:58:44 +0000
Subject: [PATCH 157/210] Updt costs exception catches and tests

---
 pybop/costs/error_costs.py | 24 ++++--------------------
 tests/unit/test_cost.py    | 20 ++++----------------
 tests/unit/test_priors.py  |  3 +--
 3 files changed, 9 insertions(+), 38 deletions(-)

diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index 66bc28af8..139a68968 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -28,8 +28,7 @@ def compute(self, prediction, target):
             return np.sqrt(np.mean((prediction - target) ** 2))
 
         except Exception as e:
-            print(f"Error in RMSE calculation: {e}")
-            return None
+            raise ValueError(f"Error in RMSE calculation: {e}")
 
 
 class MLE:
@@ -42,12 +41,7 @@ def __init__(self):
 
     def compute(self, prediction, target):
         # Compute the cost
-        try:
-            return 0  # update with MLE residual
-
-        except Exception as e:
-            print(f"Error in RMSE calculation: {e}")
-            return None
+        return 0  # update with MLE residual
 
 
 class PEM:
@@ -60,12 +54,7 @@ def __init__(self):
 
     def compute(self, prediction, target):
         # Compute the cost
-        try:
-            return 0  # update with MLE residual
-
-        except Exception as e:
-            print(f"Error in RMSE calculation: {e}")
-            return None
+        return 0  # update with MLE residual
 
 
 class MAP:
@@ -78,12 +67,7 @@ def __init__(self):
 
     def compute(self, prediction, target):
         # Compute the cost
-        try:
-            return 0  # update with MLE residual
-
-        except Exception as e:
-            print(f"Error in RMSE calculation: {e}")
-            return None
+        return 0  # update with MLE residual
 
     def sample(self, n_chains):
         """
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index e7122b86e..1f14243d0 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -13,29 +13,17 @@ def test_RMSE(self):
         # Tests cost function
         vector1 = np.array([1, 2, 3])
         vector2 = np.array([2, 3, 4])
+        vector3 = np.array(["string", "string", "string"])
+        vector4 = np.array([2, 3, 4, 5])
 
         cost = pybop.RMSE()
         cost.compute(vector1, vector2)
 
-    @pytest.mark.unit
-    def test_RMSE_mismatch_dims(self):
-        # Tests cost function
-        vector1 = np.array([1, 2, 3])
-        vector2 = np.array([2, 3, 4, 5])
-
-        cost = pybop.RMSE()
         with pytest.raises(ValueError):
-            cost.compute(vector1, vector2)
+            cost.compute(vector1, vector3)
 
-    @pytest.mark.unit
-    def test_RMSE_incorrect_type(self):
-        # Tests cost function
-        vector1 = np.array([1, 2, 3])
-        vector2 = "string"
-
-        cost = pybop.RMSE()
         with pytest.raises(ValueError):
-            cost.compute(vector1, vector2)
+            cost.compute(vector1, vector4)
 
     @pytest.mark.unit
     def test_MLE(self):
diff --git a/tests/unit/test_priors.py b/tests/unit/test_priors.py
index cfb8bacec..342c35c46 100644
--- a/tests/unit/test_priors.py
+++ b/tests/unit/test_priors.py
@@ -22,7 +22,6 @@ def Exponential(self):
 
     @pytest.mark.unit
     def test_priors(self, Gaussian, Uniform, Exponential):
-
         # Test pdf
         np.testing.assert_allclose(Gaussian.pdf(0.5), 0.3989422804014327, atol=1e-4)
         np.testing.assert_allclose(Uniform.pdf(0.5), 1, atol=1e-4)
@@ -34,7 +33,7 @@ def test_priors(self, Gaussian, Uniform, Exponential):
         np.testing.assert_allclose(Exponential.logpdf(1), -1, atol=1e-4)
 
     @pytest.mark.unit
-    def test_gaussian_rvs(self,Gaussian):
+    def test_gaussian_rvs(self, Gaussian):
         samples = Gaussian.rvs(size=500)
         mean = np.mean(samples)
         std = np.std(samples)

From 39dcaebae35a3fabdb9edffd2b95454106eb168b Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 3 Nov 2023 09:04:18 +0000
Subject: [PATCH 158/210] standardise case in __init__, Updt. optimisation
 parameter dict formation, Updt. Cost iteration output

---
 pybop/__init__.py          |  6 +++---
 pybop/costs/error_costs.py |  6 +++---
 pybop/optimisation.py      | 18 +++++++-----------
 3 files changed, 13 insertions(+), 17 deletions(-)

diff --git a/pybop/__init__.py b/pybop/__init__.py
index 6d17e5102..81a6827ff 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -1,5 +1,5 @@
 #
-# Root of the PyBOP module.
+# Root of the pybop module.
 # Provides access to all shared functionality (models, solvers, etc.).
 #
 # This file is adapted from Pints
@@ -20,7 +20,7 @@
 # Float format: a float can be converted to a 17 digit decimal and back without
 # loss of information
 FLOAT_FORMAT = "{: .17e}"
-# Absolute path to the PyBOP repo
+# Absolute path to the pybop repo
 script_path = path.dirname(__file__)
 
 #
@@ -70,6 +70,6 @@
 from .plotting.quick_plot import QuickPlot
 
 #
-# Remove any imported modules, so we don't expose them as part of PyBOP
+# Remove any imported modules, so we don't expose them as part of pybop
 #
 del sys
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index 139a68968..18fe57124 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -21,11 +21,11 @@ def compute(self, prediction, target):
                 "Measurement and simulated data length mismatch, potentially due to reaching a voltage cut-off"
             )
 
-        print("Last Values:", prediction[-1], target[-1])
-
         # Compute the cost
         try:
-            return np.sqrt(np.mean((prediction - target) ** 2))
+            res = np.sqrt(np.mean((prediction - target) ** 2))
+            print("Cost:", res)
+            return res
 
         except Exception as e:
             raise ValueError(f"Error in RMSE calculation: {e}")
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index b13e36a25..8595e75de 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -25,7 +25,6 @@ def __init__(
         self.parameters = parameters
         self.x0 = x0
         self.dataset = {o.name: o for o in dataset}
-        self.fit_parameters = {o.name: o for o in parameters}
         self.signal = signal
         self.n_parameters = len(self.parameters)
         self.verbose = verbose
@@ -37,8 +36,8 @@ def __init__(
 
         # Set bounds
         self.bounds = dict(
-            lower=[Param.bounds[0] for Param in self.parameters],
-            upper=[Param.bounds[1] for Param in self.parameters],
+            lower=[param.bounds[0] for param in self.parameters],
+            upper=[param.bounds[1] for param in self.parameters],
         )
 
         # Sample from prior for x0
@@ -52,6 +51,7 @@ def __init__(
         for i, param in enumerate(self.parameters):
             param.update(value=self.x0[i])
 
+        self.fit_parameters = {o.name: o for o in parameters}
         # Build model with dataset and fitting parameters
         self.model.build(
             dataset=self.dataset,
@@ -66,7 +66,7 @@ def run(self):
         """
 
         results = self.optimiser.optimise(
-            cost_function=self.cost_function,  # lambda x, grad: self.cost_function(x, grad),
+            cost_function=self.cost_function,
             x0=self.x0,
             bounds=self.bounds,
         )
@@ -82,18 +82,14 @@ def cost_function(self, x, grad=None):
         target = self.dataset[self.signal].data
 
         # Update the parameter dictionary
-        inputs_dict = {key: x[i] for i, key in enumerate(self.fit_parameters)}
-
-        # for i, Param in enumerate(self.parameters):
-        #     Param.update(value=x[i])
+        for i, key in enumerate(self.fit_parameters):
+            self.fit_parameters[key] = x[i]
 
         # Make prediction
         prediction = self.model.simulate(
-            inputs=inputs_dict, t_eval=self.model.time_data
+            inputs=self.fit_parameters, t_eval=self.model.time_data
         )[self.signal].data
 
-        # Add simulation error handling here
-
         # Compute cost
         res = self.cost.compute(prediction, target)
 

From f672d6e8fd60d7e8584aaf3a16febe2703617b87 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 3 Nov 2023 10:36:56 +0000
Subject: [PATCH 159/210] restore rmse_estimation script parameter bounds

---
 examples/scripts/rmse_estimation.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index cc6fa8e1a..ca7d77868 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -18,7 +18,7 @@
     pybop.Parameter(
         "Negative electrode active material volume fraction",
         prior=pybop.Gaussian(0.75, 0.05),
-        bounds=[0.73, 0.77],
+        bounds=[0.65, 0.85],
     ),
     pybop.Parameter(
         "Positive electrode active material volume fraction",

From fbde16940fbd7ec22cefc9162f7349f51ea79ea3 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 3 Nov 2023 10:47:32 +0000
Subject: [PATCH 160/210] Updt num_samples and bounds for test_optimisation

---
 tests/unit/test_optimisation.py | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index 5d869f3f2..82cc3e32b 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -22,7 +22,7 @@ def test_prior_sampling(self):
         param = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.75, 0.05),
+                prior=pybop.Gaussian(0.75, 0.2),
                 bounds=[0.73, 0.77],
             )
         ]
@@ -30,7 +30,7 @@ def test_prior_sampling(self):
         signal = "Terminal voltage [V]"
         cost = pybop.RMSE()
 
-        for i in range(10):
+        for i in range(50):
             opt = pybop.Optimisation(
                 cost,
                 model,

From 8c66077057432cfda6bb13572969cc7e7f7a2f2f Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 3 Nov 2023 14:17:21 +0000
Subject: [PATCH 161/210] Add ruff format, jupyter notebook support, fix
 exception in base_parameter_set

---
 .pre-commit-config.yaml                | 13 ++++---------
 noxfile.py                             |  9 ++-------
 pybop/parameters/base_parameter_set.py |  5 +----
 ruff.toml                              |  8 ++++++++
 4 files changed, 15 insertions(+), 20 deletions(-)
 create mode 100644 ruff.toml

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 784e58cca..14fed65a6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -4,17 +4,12 @@ ci:
 
 repos:
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: "v0.0.292"
+    rev: "v0.1.3"
     hooks:
       - id: ruff
-        args: ["--fix", "--ignore=E501,E402,E741", "--exclude=__init__.py"]
-
-  - repo: https://github.com/nbQA-dev/nbQA
-    rev: 1.7.0
-    hooks:
-      - id: nbqa-ruff
-        additional_dependencies: [ruff==0.0.284]
-        args: ["--fix","--ignore=E501,E402"]
+        args: [--fix, --show-fixes]
+        types_or: [python, pyi, jupyter]
+      - id: ruff-format
 
   - repo: https://github.com/pre-commit/pre-commit-hooks
     rev: v4.4.0
diff --git a/noxfile.py b/noxfile.py
index 87c9cacdd..be62e1129 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -3,21 +3,16 @@
 # nox options
 nox.options.reuse_existing_virtualenvs = True
 
-# @nox.session
-# def lint(session):
-#     session.install('flake8')
-#     session.run('flake8', 'example.py')
-
 
 @nox.session
 def unit(session):
     session.run_always("pip", "install", "-e", ".")
     session.install("pytest")
-    session.run("pytest", "--unit")
+    session.run("pytest", "--unit", "-v")
 
 
 @nox.session
 def coverage(session):
     session.run_always("pip", "install", "-e", ".")
     session.install("pytest-cov")
-    session.run("pytest", "--unit", "--cov", "--cov-report=xml")
+    session.run("pytest", "--unit", "-v", "--cov", "--cov-report=xml")
diff --git a/pybop/parameters/base_parameter_set.py b/pybop/parameters/base_parameter_set.py
index 59172b3ba..dd1653d81 100644
--- a/pybop/parameters/base_parameter_set.py
+++ b/pybop/parameters/base_parameter_set.py
@@ -8,9 +8,6 @@ class ParameterSet:
 
     def __new__(cls, method, name):
         if method.casefold() == "pybamm":
-            try:
-                return pybamm.ParameterValues(name).copy()
-            except:
-                raise ValueError("Parameter set not found")
+            return pybamm.ParameterValues(name).copy()
         else:
             raise ValueError("Only PyBaMM parameter sets are currently implemented")
diff --git a/ruff.toml b/ruff.toml
new file mode 100644
index 000000000..29a4a2442
--- /dev/null
+++ b/ruff.toml
@@ -0,0 +1,8 @@
+extend-include = ["*.ipynb"]
+extend-exclude = ["__init__.py"]
+
+[lint]
+ignore = ["E501","E741"]
+
+[lint.per-file-ignores]
+"**.ipynb" = ["E402", "E703"]

From df79b9a6157f7e7dc04272b3779a62b19e2d5e6c Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 6 Nov 2023 13:57:30 +0000
Subject: [PATCH 162/210] Split optimisation class, Updt cost classes, Updt
 problem class for alignment, Updt test suite to support changes

---
 examples/scripts/grad_descent.py     |  1 +
 examples/scripts/mle.py              |  1 +
 examples/scripts/rmse_estimation.py  | 11 +---
 pybop/__init__.py                    |  4 +-
 pybop/_problem.py                    | 77 ++++++++++++++++-------
 pybop/costs/error_costs.py           | 92 ++++++++++++----------------
 pybop/models/base_model.py           | 12 ++--
 pybop/optimisation.py                | 63 ++-----------------
 tests/unit/test_cost.py              | 79 ++++++++++++------------
 tests/unit/test_optimisation.py      | 13 ++--
 tests/unit/test_parameterisations.py | 69 ++++++++-------------
 tests/unit/test_problem.py           |  4 +-
 12 files changed, 186 insertions(+), 240 deletions(-)

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 6e62f9b18..3a75f5d3d 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -4,6 +4,7 @@
 import matplotlib.pyplot as plt
 
 model = pybop.lithium_ion.SPMe()
+model.signal = "Terminal voltage [V]"
 
 inputs = {
     "Negative electrode active material volume fraction": 0.58,
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index a508ffa46..ad2d7514d 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -4,6 +4,7 @@
 import matplotlib.pyplot as plt
 
 model = pybop.lithium_ion.SPMe()
+model.signal = "Terminal voltage [V]"
 
 inputs = {
     "Negative electrode active material volume fraction": 0.58,
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 6c4bae536..7af0abe64 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -30,18 +30,13 @@
 ]
 
 # Define the cost to optimise
-cost = pybop.RMSE()
 signal = "Voltage [V]"
+problem = pybop.Problem(model, parameters, signal, dataset, init_soc=0.97)
+cost = pybop.RootMeanSquaredError(problem)
 
 # Build the optimisation problem
 parameterisation = pybop.Optimisation(
-    cost=cost,
-    model=model,
-    optimiser=pybop.NLoptOptimize(n_param=len(parameters)),
-    parameters=parameters,
-    dataset=dataset,
-    signal=signal,
-    init_soc=0.97,
+    cost=cost, optimiser=pybop.NLoptOptimize(n_param=len(parameters))
 )
 
 # Run the optimisation problem
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 81a6827ff..90165d6f1 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -26,7 +26,7 @@
 #
 # Cost function class
 #
-from .costs.error_costs import RMSE, MLE, PEM, MAP
+from .costs.error_costs import RootMeanSquaredError
 
 #
 # Dataset class
@@ -62,7 +62,7 @@
 #
 # Problem class
 #
-from ._problem import SingleOutputProblem
+from ._problem import Problem
 
 #
 # Plotting class
diff --git a/pybop/_problem.py b/pybop/_problem.py
index 979f1a2ff..ef808b613 100644
--- a/pybop/_problem.py
+++ b/pybop/_problem.py
@@ -1,49 +1,78 @@
 import numpy as np
 
 
-class SingleOutputProblem:
+class Problem:
     """
     Defines a PyBOP single output problem, follows the PINTS interface.
     """
 
-    def __init__(self, model, parameters, signal, dataset):
+    def __init__(
+        self,
+        model,
+        parameters,
+        signal,
+        dataset,
+        check_model=True,
+        init_soc=None,
+        x0=None,
+    ):
         self._model = model
-        self.parameters = {o.name: o for o in parameters}
+        self.parameters = parameters
         self.signal = signal
-        self._dataset = dataset
+        self._model.signal = self.signal
+        self._dataset = {o.name: o for o in dataset}
+        self.check_model = check_model
+        self.init_soc = init_soc
+        self.x0 = x0
+        self.n_parameters = len(self.parameters)
 
-        if self._model._built_model is None:
-            self._model.build(fit_parameters=self.parameters)
+        # Check that the dataset contains time and current
+        for name in ["Time [s]", "Current function [A]", signal]:
+            if name not in self._dataset:
+                raise ValueError(f"expected {name} in list of dataset")
 
-        for i, item in enumerate(self._dataset):
-            if item.name == "Time [s]":
-                self._time_data_available = True
-                self._time_data = self._dataset[i].data
-
-            if item.name == signal:
-                self._ground_truth = self._dataset[i].data
-
-        if self._time_data_available is False:
-            raise ValueError("Dataset must contain time data")
+        self._time_data = self._dataset["Time [s]"].data
+        self._target = self._dataset[signal].data
 
         if np.any(self._time_data < 0):
             raise ValueError("Times can not be negative.")
         if np.any(self._time_data[:-1] >= self._time_data[1:]):
             raise ValueError("Times must be increasing.")
 
-        if len(self._ground_truth) != len(self._time_data):
+        if len(self._target) != len(self._time_data):
             raise ValueError("Time data and signal data must be the same length.")
 
+        # Set bounds
+        self.bounds = dict(
+            lower=[param.bounds[0] for param in self.parameters],
+            upper=[param.bounds[1] for param in self.parameters],
+        )
+
+        # Sample from prior for x0
+        if x0 is None:
+            self.x0 = np.zeros(self.n_parameters)
+            for i, param in enumerate(self.parameters):
+                self.x0[i] = param.rvs(1)
+
+        # Add the initial values to the parameter definitions
+        for i, param in enumerate(self.parameters):
+            param.update(value=self.x0[i])
+
+        self.fit_parameters = {o.name: o for o in parameters}
+        # if self._model._built_model is None:
+        self._model.build(
+            dataset=self._dataset,
+            fit_parameters=self.fit_parameters,
+            check_model=self.check_model,
+            init_soc=self.init_soc,
+        )
+
     def evaluate(self, parameters):
         """
         Evaluate the model with the given parameters and return the signal.
         """
 
-        y = np.asarray(
-            self._model.simulate(inputs=parameters, t_eval=self.model.time_data)[
-                self.signal
-            ].data
-        )
+        y = np.asarray(self._model.simulate(inputs=parameters, t_eval=self._time_data))
 
         return y
 
@@ -54,7 +83,9 @@ def evaluateS1(self, parameters):
         """
 
         y, dy_dp = self._model.simulateS1(
-            inputs=parameters, t_eval=self.model.time_data, calculate_sensitivities=True
+            inputs=parameters,
+            t_eval=self._model.time_data,
+            calculate_sensitivities=True,
         )[self.signal]
 
         return (np.asarray(y), np.asarray(dy_dp))
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index 18fe57124..0536eccaa 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -1,76 +1,62 @@
 import numpy as np
+import pybop
 
 
-class RMSE:
+class BaseCost:
     """
-    Defines the root mean square error cost function.
+    Base class for defining cost functions.
+    This class computes a corresponding goodness-of-fit for a corresponding model prediction and dataset.
+    Lower cost values indicate a better fit.
     """
 
-    def __init__(self):
-        self.name = "RMSE"
-
-    def compute(self, prediction, target):
-        # Check compatibility
-        if len(prediction) != len(target):
-            print(
-                "Length of vectors:",
-                len(prediction),
-                len(target),
-            )
-            raise ValueError(
-                "Measurement and simulated data length mismatch, potentially due to reaching a voltage cut-off"
-            )
+    def __call__(self, x):
+        raise NotImplementedError
 
-        # Compute the cost
-        try:
-            res = np.sqrt(np.mean((prediction - target) ** 2))
-            print("Cost:", res)
-            return res
+    def compute(self, x):
+        """
+        Calls the forward models and computes the cost.
+        """
+        raise NotImplementedError
 
-        except Exception as e:
-            raise ValueError(f"Error in RMSE calculation: {e}")
+    def n_parameters(self):
+        """
+        Returns the size of the parameter space.
+        """
+        raise NotImplementedError
 
 
-class MLE:
+class ProblemCost(BaseCost):
     """
-    Defines the cost function for maximum likelihood estimation.
+    Extends the base cost function class for a single output problem.
     """
 
-    def __init__(self):
-        self.name = "MLE"
+    def __init__(self, problem):
+        super(ProblemCost, self).__init__()
+        self._problem = problem
+        self._target = problem._target
 
-    def compute(self, prediction, target):
-        # Compute the cost
-        return 0  # update with MLE residual
+    def n_parameters(self):
+        """
+        Returns the dimension of the parameter space.
+        """
+        return self._problem.n_parameters()
 
 
-class PEM:
+class RootMeanSquaredError(ProblemCost):
     """
-    Defines the cost function for prediction error minimisation.
+    Defines the root mean square error cost function.
     """
 
-    def __init__(self):
-        self.name = "PEM"
-
-    def compute(self, prediction, target):
-        # Compute the cost
-        return 0  # update with MLE residual
-
-
-class MAP:
-    """
-    Defines the cost function for maximum a posteriori estimation.
-    """
+    def __init__(self, problem):
+        super(RootMeanSquaredError, self).__init__(problem)
 
-    def __init__(self):
-        self.name = "MAP"
+        if not isinstance(problem, pybop.Problem):
+            raise ValueError("This cost function only supports pybop problems")
 
-    def compute(self, prediction, target):
+    def compute(self, x):
         # Compute the cost
-        return 0  # update with MLE residual
+        try:
+            return np.sqrt(np.mean((self._problem.evaluate(x) - self._target) ** 2))
 
-    def sample(self, n_chains):
-        """
-        Sample from the posterior distribution.
-        """
-        pass
+        except Exception as e:
+            raise ValueError(f"Error in RMSE calculation: {e}")
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index dd656f74a..891901ccb 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -12,6 +12,7 @@ def __init__(self, name="Base Model"):
         self.pybamm_model = None
         self.fit_parameters = None
         self.dataset = None
+        self.signal = None
 
     def build(
         self,
@@ -102,6 +103,7 @@ def simulate(self, inputs, t_eval):
         Run the forward model and return the result in Numpy array format
         aligning with Pints' ForwardModel simulate method.
         """
+
         if self._built_model is None:
             raise ValueError("Model must be built before calling simulate")
         else:
@@ -111,9 +113,11 @@ def simulate(self, inputs, t_eval):
                 }
                 return self.solver.solve(
                     self.built_model, inputs=inputs_dict, t_eval=t_eval
-                )["Terminal voltage [V]"].data
+                )[self.signal].data
             else:
-                return self.solver.solve(self.built_model, inputs=inputs, t_eval=t_eval)
+                return self.solver.solve(
+                    self.built_model, inputs=inputs, t_eval=t_eval
+                )[self.signal].data
 
     def simulateS1(self, inputs, t_eval):
         """
@@ -143,10 +147,10 @@ def simulateS1(self, inputs, t_eval):
                 )
 
             return (
-                sol["Terminal voltage [V]"].data,
+                sol[self.signal].data,
                 np.asarray(
                     [
-                        sol["Terminal voltage [V]"].sensitivities[key].toarray()
+                        sol[self.signal].sensitivities[key].toarray()
                         for key in self.fit_keys
                     ]
                 ).T,
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index 3318e34ce..b16551cc4 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -1,6 +1,3 @@
-import numpy as np
-
-
 class Optimisation:
     """
     Optimisation class for PyBOP.
@@ -9,55 +6,15 @@ class Optimisation:
     def __init__(
         self,
         cost,
-        model,
         optimiser,
-        parameters,
-        x0=None,
-        dataset=None,
-        signal=None,
-        check_model=True,
-        init_soc=None,
         verbose=False,
     ):
         self.cost = cost
-        self.model = model
         self.optimiser = optimiser
-        self.parameters = parameters
-        self.x0 = x0
-        self.dataset = {o.name: o for o in dataset}
-        self.signal = signal
-        self.n_parameters = len(self.parameters)
         self.verbose = verbose
-
-        # Check that the dataset contains time and current
-        for name in ["Time [s]", "Current function [A]"]:
-            if name not in self.dataset:
-                raise ValueError(f"expected {name} in list of dataset")
-
-        # Set bounds
-        self.bounds = dict(
-            lower=[param.bounds[0] for param in self.parameters],
-            upper=[param.bounds[1] for param in self.parameters],
-        )
-
-        # Sample from prior for x0
-        if x0 is None:
-            self.x0 = np.zeros(self.n_parameters)
-            for i, param in enumerate(self.parameters):
-                self.x0[i] = param.rvs(1)
-
-        # Add the initial values to the parameter definitions
-        for i, param in enumerate(self.parameters):
-            param.update(value=self.x0[i])
-
-        self.fit_parameters = {o.name: o for o in parameters}
-        # Build model with dataset and fitting parameters
-        self.model.build(
-            dataset=self.dataset,
-            fit_parameters=self.fit_parameters,
-            check_model=check_model,
-            init_soc=init_soc,
-        )
+        self.x0 = cost._problem.x0
+        self.bounds = cost._problem.bounds
+        self.fit_parameters = {}
 
     def run(self):
         """
@@ -77,22 +34,14 @@ def cost_function(self, x, grad=None):
         Compute a model prediction and associated value of the cost.
         """
 
-        # Unpack the target dataset
-        target = self.dataset[self.signal].data
-
         # Update the parameter dictionary
-        for i, key in enumerate(self.fit_parameters):
+        for i, key in enumerate(self.cost._problem.fit_parameters):
             self.fit_parameters[key] = x[i]
 
-        # Make prediction
-        prediction = self.model.simulate(
-            inputs=self.fit_parameters, t_eval=self.model.time_data
-        )[self.signal].data
-
         # Compute cost
-        res = self.cost.compute(prediction, target)
+        res = self.cost.compute(self.fit_parameters)
 
         if self.verbose:
-            print("Parameter estimates: ", self.parameters.value, "\n")
+            print("Parameter estimates: ", self.cost._problem.parameters, "\n")
 
         return res
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 1f14243d0..a88a1a273 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -9,45 +9,42 @@ class TestCosts:
     """
 
     @pytest.mark.unit
-    def test_RMSE(self):
+    def test_RootMeanSquaredError(self):
         # Tests cost function
-        vector1 = np.array([1, 2, 3])
-        vector2 = np.array([2, 3, 4])
-        vector3 = np.array(["string", "string", "string"])
-        vector4 = np.array([2, 3, 4, 5])
-
-        cost = pybop.RMSE()
-        cost.compute(vector1, vector2)
-
-        with pytest.raises(ValueError):
-            cost.compute(vector1, vector3)
-
-        with pytest.raises(ValueError):
-            cost.compute(vector1, vector4)
-
-    @pytest.mark.unit
-    def test_MLE(self):
-        # Tests cost function
-        vector1 = np.array([1, 2, 3])
-        vector2 = np.array([2, 3, 4])
-
-        cost = pybop.MLE()
-        cost.compute(vector1, vector2)
-
-    @pytest.mark.unit
-    def test_PEM(self):
-        # Tests cost function
-        vector1 = np.array([1, 2, 3])
-        vector2 = np.array([2, 3, 4])
-
-        cost = pybop.PEM()
-        cost.compute(vector1, vector2)
-
-    @pytest.mark.unit
-    def test_MAP(self):
-        # Tests cost function
-        vector1 = np.array([1, 2, 3])
-        vector2 = np.array([2, 3, 4])
-
-        cost = pybop.MAP()
-        cost.compute(vector1, vector2)
+        model = pybop.lithium_ion.SPM()
+        parameters = [
+            pybop.Parameter(
+                "Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.5, 0.02),
+                bounds=[0.375, 0.625],
+            )
+        ]
+
+        # Form dataset
+        x0 = np.array([0.52])
+        solution = self.getdata(model, x0)
+
+        dataset = [
+            pybop.Dataset("Time [s]", solution["Time [s]"].data),
+            pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
+        ]
+
+        signal = "Voltage [V]"
+        problem = pybop.Problem(model, parameters, signal, dataset)
+        cost = pybop.RootMeanSquaredError(problem)
+        cost.compute([0.5])
+
+        assert type(cost.compute([0.5])) == np.float64
+        assert cost.compute([0.5]) >= 0
+
+    def getdata(self, model, x0):
+        model.parameter_set = model.pybamm_model.default_parameter_values
+        model.parameter_set.update(
+            {
+                "Negative electrode active material volume fraction": x0[0],
+            }
+        )
+
+        sim = model.predict(t_eval=np.linspace(0, 10, 100))
+        return sim
diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index 82cc3e32b..0f83d5a96 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -13,7 +13,7 @@ def test_prior_sampling(self):
         # Tests prior sampling
         model = pybop.lithium_ion.SPM()
 
-        Dataset = [
+        dataset = [
             pybop.Dataset("Time [s]", np.linspace(0, 3600, 100)),
             pybop.Dataset("Current function [A]", np.zeros(100)),
             pybop.Dataset("Terminal voltage [V]", np.ones(100)),
@@ -28,15 +28,12 @@ def test_prior_sampling(self):
         ]
 
         signal = "Terminal voltage [V]"
-        cost = pybop.RMSE()
+        problem = pybop.Problem(model, param, signal, dataset)
+        cost = pybop.RootMeanSquaredError(problem)
 
         for i in range(50):
             opt = pybop.Optimisation(
-                cost,
-                model,
-                optimiser=pybop.NLoptOptimize(n_param=len(param)),
-                parameters=param,
-                dataset=Dataset,
-                signal=signal,
+                cost=cost, optimiser=pybop.NLoptOptimize(n_param=len(param))
             )
+
             assert opt.x0 <= 0.77 and opt.x0 >= 0.73
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 89676c49b..90e26bd5a 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -23,40 +23,35 @@ def test_spm(self, init_soc):
         dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
-            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
+            pybop.Dataset(
+                "Terminal voltage [V]", solution["Terminal voltage [V]"].data
+            ),
         ]
 
         # Fitting parameters
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.5, 0.02),
+                prior=pybop.Gaussian(0.5, 0.05),
                 bounds=[0.375, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
-                prior=pybop.Gaussian(0.65, 0.02),
+                prior=pybop.Gaussian(0.65, 0.05),
                 bounds=[0.525, 0.75],
             ),
         ]
 
         # Define the cost to optimise
-        cost = pybop.RMSE()
-        signal = "Voltage [V]"
+        signal = "Terminal voltage [V]"
+        problem = pybop.Problem(model, parameters, signal, dataset, init_soc=init_soc)
+        cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimiser
         optimiser = pybop.NLoptOptimize(n_param=len(parameters))
 
         # Build the optimisation problem
-        parameterisation = pybop.Optimisation(
-            cost=cost,
-            model=model,
-            optimiser=optimiser,
-            parameters=parameters,
-            dataset=dataset,
-            signal=signal,
-            init_soc=init_soc,
-        )
+        parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
 
         # Run the optimisation problem
         x, _, final_cost, _ = parameterisation.run()
@@ -79,26 +74,29 @@ def test_spme_multiple_optimisers(self, init_soc):
         dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
-            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
+            pybop.Dataset(
+                "Terminal voltage [V]", solution["Terminal voltage [V]"].data
+            ),
         ]
 
         # Fitting parameters
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.5, 0.02),
+                prior=pybop.Gaussian(0.5, 0.05),
                 bounds=[0.375, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
-                prior=pybop.Gaussian(0.65, 0.02),
+                prior=pybop.Gaussian(0.65, 0.05),
                 bounds=[0.525, 0.75],
             ),
         ]
 
         # Define the cost to optimise
-        cost = pybop.RMSE()
-        signal = "Voltage [V]"
+        signal = "Terminal voltage [V]"
+        problem = pybop.Problem(model, parameters, signal, dataset, init_soc=init_soc)
+        cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimisers
         optimisers = [
@@ -108,15 +106,7 @@ def test_spme_multiple_optimisers(self, init_soc):
 
         # Test each optimiser
         for optimiser in optimisers:
-            parameterisation = pybop.Optimisation(
-                cost=cost,
-                model=model,
-                optimiser=optimiser,
-                parameters=parameters,
-                dataset=dataset,
-                signal=signal,
-                init_soc=init_soc,
-            )
+            parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
 
             # Run the optimisation problem
             x, _, final_cost, _ = parameterisation.run()
@@ -142,40 +132,35 @@ def test_model_misparameterisation(self, init_soc):
         dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
-            pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
+            pybop.Dataset(
+                "Terminal voltage [V]", solution["Terminal voltage [V]"].data
+            ),
         ]
 
         # Fitting parameters
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.5, 0.02),
+                prior=pybop.Gaussian(0.5, 0.05),
                 bounds=[0.375, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
-                prior=pybop.Gaussian(0.65, 0.02),
+                prior=pybop.Gaussian(0.65, 0.05),
                 bounds=[0.525, 0.75],
             ),
         ]
 
         # Define the cost to optimise
-        cost = pybop.RMSE()
-        signal = "Voltage [V]"
+        signal = "Terminal voltage [V]"
+        problem = pybop.Problem(model, parameters, signal, dataset, init_soc=init_soc)
+        cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimiser
         optimiser = pybop.NLoptOptimize(n_param=len(parameters))
 
         # Build the optimisation problem
-        parameterisation = pybop.Optimisation(
-            cost=cost,
-            model=model,
-            optimiser=optimiser,
-            parameters=parameters,
-            dataset=dataset,
-            signal=signal,
-            init_soc=init_soc,
-        )
+        parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
 
         # Run the optimisation problem
         x, _, final_cost, _ = parameterisation.run()
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
index 1878b509f..6556bf702 100644
--- a/tests/unit/test_problem.py
+++ b/tests/unit/test_problem.py
@@ -37,10 +37,10 @@ def test_problem(self):
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
-        problem = pybop.SingleOutputProblem(model, parameters, signal, dataset)
+        problem = pybop.Problem(model, parameters, signal, dataset)
 
         assert problem._model == model
-        assert problem._dataset == dataset
+        assert problem._model._built_model is not None
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From d7baa5d2f95cd4f207ebf4cb655ebaa528f64c00 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Mon, 6 Nov 2023 17:48:08 +0000
Subject: [PATCH 163/210] chore: update pre-commit hooks
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.3 → v0.1.4](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.3...v0.1.4)
- [github.com/pre-commit/pre-commit-hooks: v4.4.0 → v4.5.0](https://github.com/pre-commit/pre-commit-hooks/compare/v4.4.0...v4.5.0)
---
 .pre-commit-config.yaml | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 14fed65a6..8fca335a6 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -4,7 +4,7 @@ ci:
 
 repos:
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: "v0.1.3"
+    rev: "v0.1.4"
     hooks:
       - id: ruff
         args: [--fix, --show-fixes]
@@ -12,7 +12,7 @@ repos:
       - id: ruff-format
 
   - repo: https://github.com/pre-commit/pre-commit-hooks
-    rev: v4.4.0
+    rev: v4.5.0
     hooks:
         - id: check-added-large-files
         - id: check-case-conflict

From 76ba9924e7aa7f6de096edcfcb80b30b73acae14 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 7 Nov 2023 09:51:31 +0000
Subject: [PATCH 164/210] Additions for init. pints implementation, rework cost
 function implementation in optimiser class

---
 examples/scripts/grad_descent.py     |  58 +++++--
 examples/scripts/rmse_estimation.py  |   4 +-
 pybop/__init__.py                    |   2 +-
 pybop/_problem.py                    |  15 +-
 pybop/costs/error_costs.py           |  13 +-
 pybop/optimisation.py                |   2 +-
 pybop/optimisers/base_optimiser.py   |   2 +-
 pybop/optimisers/nlopt_optimize.py   |   2 +-
 pybop/optimisers/pints_optimiser.py  | 242 ++++++++++++++-------------
 pybop/optimisers/scipy_minimize.py   |   4 +-
 tests/unit/test_parameterisations.py |  12 +-
 11 files changed, 198 insertions(+), 158 deletions(-)

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 3a75f5d3d..518d58100 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -1,26 +1,50 @@
 import pybop
-import pints
 import numpy as np
 import matplotlib.pyplot as plt
 
 model = pybop.lithium_ion.SPMe()
 model.signal = "Terminal voltage [V]"
 
-inputs = {
-    "Negative electrode active material volume fraction": 0.58,
-    "Positive electrode active material volume fraction": 0.44,
-    "Current function [A]": 1,
-}
-t_eval = np.arange(0, 900, 2)
-model.build(fit_parameters=inputs)
+# Fitting parameters
+parameters = [
+    pybop.Parameter(
+        "Negative electrode active material volume fraction",
+        prior=pybop.Gaussian(0.53, 0.02),
+        bounds=[0.6, 0.9],
+    ),
+    pybop.Parameter(
+        "Positive electrode active material volume fraction",
+        prior=pybop.Gaussian(0.62, 0.02),
+        bounds=[0.5, 0.8],
+    ),
+    # pybop.Parameter(
+    #     "Current function [A]",
+    #     prior=pybop.Gaussian(1.1, 0.05),
+    #     bounds=[0.8, 1.3],
+    # ),
+]
 
-values = model.predict(inputs=inputs, t_eval=t_eval)
+model.parameter_set.update(
+    {
+        "Negative electrode active material volume fraction": 0.53,
+        "Positive electrode active material volume fraction": 0.62,
+        "Current function [A]": 1.1,
+    }
+)
+t_eval = np.arange(0, 900, 2)
+values = model.predict(t_eval=t_eval)
 voltage = values["Terminal voltage [V]"].data
 time = values["Time [s]"].data
 
 sigma = 0.001
 CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
 
+dataset = [
+    pybop.Dataset("Time [s]", time),
+    pybop.Dataset("Current function [A]", values["Current [A]"].data),
+    pybop.Dataset("Terminal voltage [V]", CorruptValues),
+]
+
 # Show the generated data
 plt.figure()
 plt.xlabel("Time")
@@ -29,18 +53,18 @@
 plt.plot(time, voltage)
 plt.show()
 
-
-problem = pints.SingleOutputProblem(model, time, CorruptValues)
+signal = "Terminal voltage [V]"
+problem = pybop.Problem(model, parameters, signal, dataset)
 
 # Select a score function
-score = pints.SumOfSquaresError(problem)
+cost = pybop.RootMeanSquaredError(problem)
 
-x0 = np.array([0.48, 0.55, 1.4])
-opt = pints.OptimisationController(score, x0, method=pints.GradientDescent)
+x0 = np.array([0.53, 0.62, 1.1])
+opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
 
-opt.optimiser().set_learning_rate(0.025)
-opt.set_max_unchanged_iterations(50)
-opt.set_max_iterations(200)
+opt.optimiser.set_learning_rate = 0.025
+opt.optimiser.set_max_unchanged_iterations=50
+opt.optimiser.set_max_iterations=200
 
 x1, f1 = opt.run()
 print("Estimated parameters:")
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 7af0abe64..810e044f3 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -6,7 +6,7 @@
 dataset = [
     pybop.Dataset("Time [s]", Measurements[:, 0]),
     pybop.Dataset("Current function [A]", Measurements[:, 1]),
-    pybop.Dataset("Voltage [V]", Measurements[:, 2]),
+    pybop.Dataset("Terminal voltage [V]", Measurements[:, 2]),
 ]
 
 # Define model
@@ -30,7 +30,7 @@
 ]
 
 # Define the cost to optimise
-signal = "Voltage [V]"
+signal = "Terminal voltage [V]"
 problem = pybop.Problem(model, parameters, signal, dataset, init_soc=0.97)
 cost = pybop.RootMeanSquaredError(problem)
 
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 90165d6f1..f5c0bd93d 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -50,7 +50,7 @@
 from .optimisers.base_optimiser import BaseOptimiser
 from .optimisers.nlopt_optimize import NLoptOptimize
 from .optimisers.scipy_minimize import SciPyMinimize
-from .optimisers.pints_optimiser import PintsOptimiser, PintsError, PintsBoundaries
+from .optimisers.pints_optimiser import GradientDescent
 
 #
 # Parameter classes
diff --git a/pybop/_problem.py b/pybop/_problem.py
index ef808b613..f750ef424 100644
--- a/pybop/_problem.py
+++ b/pybop/_problem.py
@@ -58,7 +58,7 @@ def __init__(
         for i, param in enumerate(self.parameters):
             param.update(value=self.x0[i])
 
-        self.fit_parameters = {o.name: o for o in parameters}
+        self.fit_parameters = {o.name: o.value for o in parameters}
         # if self._model._built_model is None:
         self._model.build(
             dataset=self._dataset,
@@ -81,11 +81,12 @@ def evaluateS1(self, parameters):
         Evaluate the model with the given parameters and return the signal and
         its derivatives.
         """
+        for i, key in enumerate(self.fit_parameters):
+            self.fit_parameters[key] = parameters[i]
 
-        y, dy_dp = self._model.simulateS1(
-            inputs=parameters,
-            t_eval=self._model.time_data,
-            calculate_sensitivities=True,
-        )[self.signal]
+        y, dy = self._model.simulateS1(
+            inputs=self.fit_parameters,
+            t_eval=self._time_data,
+        )
 
-        return (np.asarray(y), np.asarray(dy_dp))
+        return (np.asarray(y), np.asarray(dy))
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index 0536eccaa..9c8a8d257 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -39,7 +39,7 @@ def n_parameters(self):
         """
         Returns the dimension of the parameter space.
         """
-        return self._problem.n_parameters()
+        return self._problem.n_parameters
 
 
 class RootMeanSquaredError(ProblemCost):
@@ -53,10 +53,19 @@ def __init__(self, problem):
         if not isinstance(problem, pybop.Problem):
             raise ValueError("This cost function only supports pybop problems")
 
-    def compute(self, x):
+    def compute(self, x, grad=None):
         # Compute the cost
         try:
             return np.sqrt(np.mean((self._problem.evaluate(x) - self._target) ** 2))
 
         except Exception as e:
             raise ValueError(f"Error in RMSE calculation: {e}")
+
+    def evaluateS1(self, x):
+        # Compute the cost
+        y, dy = self._problem.evaluateS1(x)
+        dy = dy.reshape((450, 1, 2))
+        r = y - self._target
+        e = np.sum(np.sum(r**2, axis=0), axis=0)
+        de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1)
+        return e, de
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index b16551cc4..66c5b6120 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -22,7 +22,7 @@ def run(self):
         """
 
         results = self.optimiser.optimise(
-            cost_function=self.cost_function,
+            cost_function=self.cost,
             x0=self.x0,
             bounds=self.bounds,
         )
diff --git a/pybop/optimisers/base_optimiser.py b/pybop/optimisers/base_optimiser.py
index 43d8a891f..1938c1db2 100644
--- a/pybop/optimisers/base_optimiser.py
+++ b/pybop/optimisers/base_optimiser.py
@@ -18,7 +18,7 @@ def optimise(self, cost_function, x0=None, bounds=None):
         self.bounds = bounds
 
         # Run optimisation
-        result = self._runoptimise(self.cost_function, self.x0, self.bounds)
+        result = self._runoptimise(self.cost_function, x0=self.x0, bounds=self.bounds)
 
         return result
 
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index 83c62d051..d770632bb 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -34,7 +34,7 @@ def _runoptimise(self, cost_function, x0, bounds):
         """
 
         # Pass settings to the optimiser
-        self.optim.set_min_objective(cost_function)
+        self.optim.set_min_objective(cost_function.compute)
         self.optim.set_lower_bounds(bounds["lower"])
         self.optim.set_upper_bounds(bounds["upper"])
 
diff --git a/pybop/optimisers/pints_optimiser.py b/pybop/optimisers/pints_optimiser.py
index 4aa52d746..569d96c92 100644
--- a/pybop/optimisers/pints_optimiser.py
+++ b/pybop/optimisers/pints_optimiser.py
@@ -1,24 +1,25 @@
-import pybop
 import pints
-from pybop.optimisers.base_optimiser import BaseOptimiser
-from pints import ErrorMeasure
+from .base_optimiser import BaseOptimiser
 
 
-class PintsOptimiser(BaseOptimiser):
+class GradientDescent(BaseOptimiser):
     """
     Class for the PINTS optimisation. Extends the BaseOptimiser class.
     """
 
     def __init__(self, x0=None, xtol=None, method=None):
         super().__init__()
-        self.name = "PINTS Optimiser"
+        self.name = "Gradient Descent Optimiser"
+        self.set_learning_rate = 0.025
+        self.max_iterations = 100
+        self.set_max_unchanged_iterations = 10
 
-        if method is not None:
-            self.method = method
-        else:
-            self.method = pints.CMAES
+        # if method is not None:
+        #     self.method = method
+        # else:
+        #     self.method = pints.GradientDescent
 
-    def _runoptimise(self, cost_function, x0, bounds=None):
+    def _runoptimise(self, cost_function, x0, bounds):
         """
         Run the PINTS optimisation method.
 
@@ -30,18 +31,23 @@ def _runoptimise(self, cost_function, x0, bounds=None):
         bounds: bounds array
         """
 
-        # Wrap bounds
-        boundaries = pybop.PintsBoundaries(bounds, x0)
-
-        # Wrap error measure
-        error = pybop.PintsError(cost_function, x0)
+        # Using the ask-and-tell interface
+        # self.method = pints.GradientDescent
+        # e = pints.SequentialEvaluator(cost_function.computeS1)
+        # error = pybop.PintsError(cost_function, x0)
+        # for i in range(50):
+        #     xs = self.method.ask()
+        #     fs = e.evaluate(xs)
+        #     self.method.tell(fs)
 
         # Set up optimisation controller
         controller = pints.OptimisationController(
-            error, x0, boundaries=boundaries, method=self.method
+            cost_function, x0, method=self.method
         )
 
-        controller.set_max_unchanged_iterations(20)  # default 200
+        controller.set_max_unchanged_iterations(self.set_max_unchanged_iterations)
+        controller.set_max_iterations(self.max_iterations)
+        controller.optimiser().set_learning_rate(self.set_learning_rate)
 
         # Run the optimser
         x, final_cost = controller.run()
@@ -56,104 +62,104 @@ def _runoptimise(self, cost_function, x0, bounds=None):
         return x, output, final_cost, num_evals
 
 
-class PintsError(ErrorMeasure):
-    """
-    An interface class for PyBOP that extends the PINTS ErrorMeasure class.
-
-    From PINTS:
-    Abstract base class for objects that calculate some scalar measure of
-    goodness-of-fit (for a model and a data set), such that a smaller value
-    means a better fit.
-
-    ErrorMeasures are callable objects: If ``e`` is an instance of an
-    :class:`ErrorMeasure` class you can calculate the error by calling ``e(p)``
-    where ``p`` is a point in parameter space.
-    """
-
-    def __init__(self, cost_function, x0):
-        self.cost_function = cost_function
-        self.x0 = x0
-
-    def __call__(self, x):
-        cost = self.cost_function(x)
-
-        return cost
-
-    def evaluateS1(self, x):
-        """
-        Evaluates this error measure, and returns the result plus the partial
-        derivatives of the result with respect to the parameters.
-
-        The returned data has the shape ``(e, e')`` where ``e`` is a scalar
-        value and ``e'`` is a sequence of length ``n_parameters``.
-
-        *This is an optional method that is not always implemented.*
-        """
-        raise NotImplementedError
-
-    def n_parameters(self):
-        """
-        Returns the dimension of the parameter space this measure is defined
-        over.
-        """
-        return len(self.x0)
-
-
-class PintsBoundaries(object):
-    """
-    An interface class for PyBOP that extends the PINTS ErrorMeasure class.
-
-    From PINTS:
-    Abstract class representing boundaries on a parameter space.
-    """
-
-    def __init__(self, bounds, x0):
-        self.bounds = bounds
-        self.x0 = x0
-
-    def check(self, parameters):
-        """
-        Returns ``True`` if and only if the given point in parameter space is
-        within the boundaries.
-
-        Parameters
-        ----------
-        parameters
-            A point in parameter space
-        """
-        result = False
-        if (
-            parameters[0] >= self.bounds["lower"][0]
-            and parameters[1] >= self.bounds["lower"][1]
-            and parameters[0] <= self.bounds["upper"][0]
-            and parameters[1] <= self.bounds["upper"][1]
-        ):
-            result = True
-
-        return result
-
-    def n_parameters(self):
-        """
-        Returns the dimension of the parameter space these boundaries are
-        defined on.
-        """
-        return len(self.x0)
-
-    def sample(self, n=1):
-        """
-        Returns ``n`` random samples from within the boundaries, for example to
-        use as starting points for an optimisation.
-
-        The returned value is a NumPy array with shape ``(n, d)`` where ``n``
-        is the requested number of samples, and ``d`` is the dimension of the
-        parameter space these boundaries are defined on.
-
-        *Note that implementing :meth:`sample()` is optional, so some boundary
-        types may not support it.*
-
-        Parameters
-        ----------
-        n : int
-            The number of points to sample
-        """
-        raise NotImplementedError
+# class PintsError(ErrorMeasure):
+#     """
+#     An interface class for PyBOP that extends the PINTS ErrorMeasure class.
+
+#     From PINTS:
+#     Abstract base class for objects that calculate some scalar measure of
+#     goodness-of-fit (for a model and a data set), such that a smaller value
+#     means a better fit.
+
+#     ErrorMeasures are callable objects: If ``e`` is an instance of an
+#     :class:`ErrorMeasure` class you can calculate the error by calling ``e(p)``
+#     where ``p`` is a point in parameter space.
+#     """
+
+#     def __init__(self, cost_function, x0):
+#         self.cost_function = cost_function
+#         self.x0 = x0
+
+#     def __call__(self, x):
+#         cost = self.cost_function(x)
+
+#         return cost
+
+#     def evaluateS1(self, x):
+#         """
+#         Evaluates this error measure, and returns the result plus the partial
+#         derivatives of the result with respect to the parameters.
+
+#         The returned data has the shape ``(e, e')`` where ``e`` is a scalar
+#         value and ``e'`` is a sequence of length ``n_parameters``.
+
+#         *This is an optional method that is not always implemented.*
+#         """
+#         raise NotImplementedError
+
+#     def n_parameters(self):
+#         """
+#         Returns the dimension of the parameter space this measure is defined
+#         over.
+#         """
+#         return len(self.x0)
+
+
+# class PintsBoundaries(object):
+#     """
+#     An interface class for PyBOP that extends the PINTS ErrorMeasure class.
+
+#     From PINTS:
+#     Abstract class representing boundaries on a parameter space.
+#     """
+
+#     def __init__(self, bounds, x0):
+#         self.bounds = bounds
+#         self.x0 = x0
+
+#     def check(self, parameters):
+#         """
+#         Returns ``True`` if and only if the given point in parameter space is
+#         within the boundaries.
+
+#         Parameters
+#         ----------
+#         parameters
+#             A point in parameter space
+#         """
+#         result = False
+#         if (
+#             parameters[0] >= self.bounds["lower"][0]
+#             and parameters[1] >= self.bounds["lower"][1]
+#             and parameters[0] <= self.bounds["upper"][0]
+#             and parameters[1] <= self.bounds["upper"][1]
+#         ):
+#             result = True
+
+#         return result
+
+#     def n_parameters(self):
+#         """
+#         Returns the dimension of the parameter space these boundaries are
+#         defined on.
+#         """
+#         return len(self.x0)
+
+#     def sample(self, n=1):
+#         """
+#         Returns ``n`` random samples from within the boundaries, for example to
+#         use as starting points for an optimisation.
+
+#         The returned value is a NumPy array with shape ``(n, d)`` where ``n``
+#         is the requested number of samples, and ``d`` is the dimension of the
+#         parameter space these boundaries are defined on.
+
+#         *Note that implementing :meth:`sample()` is optional, so some boundary
+#         types may not support it.*
+
+#         Parameters
+#         ----------
+#         n : int
+#             The number of points to sample
+#         """
+#         raise NotImplementedError
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index 8f24c1d2a..f4e912732 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -33,9 +33,9 @@ def _runoptimise(self, cost_function, x0, bounds):
             bounds = (
                 (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"])
             )
-            output = minimize(cost_function, x0, method=self.method, bounds=bounds)
+            output = minimize(cost_function.compute, x0, method=self.method, bounds=bounds)
         else:
-            output = minimize(cost_function, x0, method=self.method)
+            output = minimize(cost_function.compute, x0, method=self.method)
 
         # Get performance statistics
         x = output.x
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 90e26bd5a..be6fc2373 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -32,12 +32,12 @@ def test_spm(self, init_soc):
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.5, 0.05),
+                prior=pybop.Gaussian(0.5, 0.02),
                 bounds=[0.375, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
-                prior=pybop.Gaussian(0.65, 0.05),
+                prior=pybop.Gaussian(0.65, 0.02),
                 bounds=[0.525, 0.75],
             ),
         ]
@@ -83,12 +83,12 @@ def test_spme_multiple_optimisers(self, init_soc):
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.5, 0.05),
+                prior=pybop.Gaussian(0.5, 0.02),
                 bounds=[0.375, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
-                prior=pybop.Gaussian(0.65, 0.05),
+                prior=pybop.Gaussian(0.65, 0.02),
                 bounds=[0.525, 0.75],
             ),
         ]
@@ -141,12 +141,12 @@ def test_model_misparameterisation(self, init_soc):
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
-                prior=pybop.Gaussian(0.5, 0.05),
+                prior=pybop.Gaussian(0.5, 0.02),
                 bounds=[0.375, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",
-                prior=pybop.Gaussian(0.65, 0.05),
+                prior=pybop.Gaussian(0.65, 0.02),
                 bounds=[0.525, 0.75],
             ),
         ]

From bb79dda4015eaaefbb4cbf22275776052d79d9db Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 7 Nov 2023 17:12:24 +0000
Subject: [PATCH 165/210] Pints controller options, example Updts, current
 function input bugfix

---
 examples/scripts/grad_descent.py    | 49 +++++++++++++++--------------
 examples/scripts/rmse_estimation.py | 17 +++++++++-
 pybop/__init__.py                   |  2 +-
 pybop/costs/error_costs.py          | 20 +++++++++++-
 pybop/models/base_model.py          | 18 ++++++-----
 pybop/optimisers/pints_optimiser.py | 27 ++++++----------
 6 files changed, 82 insertions(+), 51 deletions(-)

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 518d58100..a2b9696c5 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -2,26 +2,27 @@
 import numpy as np
 import matplotlib.pyplot as plt
 
-model = pybop.lithium_ion.SPMe()
+parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+model = pybop.lithium_ion.SPMe(parameter_set=parameter_set)
 model.signal = "Terminal voltage [V]"
 
 # Fitting parameters
 parameters = [
     pybop.Parameter(
         "Negative electrode active material volume fraction",
-        prior=pybop.Gaussian(0.53, 0.02),
+        prior=pybop.Gaussian(0.57, 0.05),
         bounds=[0.6, 0.9],
     ),
     pybop.Parameter(
         "Positive electrode active material volume fraction",
-        prior=pybop.Gaussian(0.62, 0.02),
+        prior=pybop.Gaussian(0.58, 0.05),
         bounds=[0.5, 0.8],
     ),
-    # pybop.Parameter(
-    #     "Current function [A]",
-    #     prior=pybop.Gaussian(1.1, 0.05),
-    #     bounds=[0.8, 1.3],
-    # ),
+    pybop.Parameter(
+        "Current function [A]",
+        prior=pybop.Gaussian(1.2, 0.05),
+        bounds=[0.8, 1.3],
+    ),
 ]
 
 model.parameter_set.update(
@@ -31,6 +32,7 @@
         "Current function [A]": 1.1,
     }
 )
+
 t_eval = np.arange(0, 900, 2)
 values = model.predict(t_eval=t_eval)
 voltage = values["Terminal voltage [V]"].data
@@ -57,26 +59,27 @@
 problem = pybop.Problem(model, parameters, signal, dataset)
 
 # Select a score function
-cost = pybop.RootMeanSquaredError(problem)
-
-x0 = np.array([0.53, 0.62, 1.1])
+cost = pybop.SumSquaredError(problem)
 opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
 
-opt.optimiser.set_learning_rate = 0.025
-opt.optimiser.set_max_unchanged_iterations=50
-opt.optimiser.set_max_iterations=200
+opt.optimiser.learning_rate = 0.025
+opt.optimiser.max_unchanged_iterations=1
+opt.optimiser.max_iterations=50
 
-x1, f1 = opt.run()
-print("Estimated parameters:")
-print(x1)
+x, output, final_cost, num_evals = opt.run()
+print("Estimated parameters:", x)
 
 # Show the generated data
-simulated_values = problem.evaluate(x1[:3])
+simulated_values = problem.evaluate(x[:3])
 
-plt.figure()
-plt.xlabel("Time")
-plt.ylabel("Values")
-plt.plot(time, CorruptValues)
+plt.figure(figsize=(5, 5), dpi=100, facecolor="w", edgecolor="k", linewidth=2, frameon=False)
+plt.xlabel("Time", fontsize=20)
+plt.ylabel("Values", fontsize=20)
+plt.plot(time, CorruptValues, label="Measured")
 plt.fill_between(time, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
-plt.plot(time, simulated_values)
+plt.plot(time, simulated_values, label="Simulated")
+plt.legend(
+    bbox_to_anchor=(0.85, 1), loc="upper left", fontsize=20
+)
+plt.tick_params(axis='both', labelsize=20)
 plt.show()
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 810e044f3..9766e40ce 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -1,5 +1,6 @@
 import pybop
 import pandas as pd
+import matplotlib.pyplot as plt
 
 # Form dataset
 Measurements = pd.read_csv("examples/scripts/Chen_example.csv", comment="#").to_numpy()
@@ -31,7 +32,7 @@
 
 # Define the cost to optimise
 signal = "Terminal voltage [V]"
-problem = pybop.Problem(model, parameters, signal, dataset, init_soc=0.97)
+problem = pybop.Problem(model, parameters, signal, dataset, init_soc=0.98)
 cost = pybop.RootMeanSquaredError(problem)
 
 # Build the optimisation problem
@@ -42,6 +43,20 @@
 # Run the optimisation problem
 x, output, final_cost, num_evals = parameterisation.run()
 
+# Show the generated data
+simulated_values = problem.evaluate(x)
+
+plt.figure()
+plt.xlabel("Time")
+plt.ylabel("Values")
+plt.plot(dataset[0].data, dataset[2].data, label="Measured")
+plt.plot(dataset[0].data, simulated_values, label="Simulated")
+plt.legend(
+    bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0.0, frameon=False
+)
+plt.show()
+
+
 # get MAP estimate, starting at a random initial point in parameter space
 # parameterisation.map(x0=[p.sample() for p in parameters])
 
diff --git a/pybop/__init__.py b/pybop/__init__.py
index f5c0bd93d..fe0502d56 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -26,7 +26,7 @@
 #
 # Cost function class
 #
-from .costs.error_costs import RootMeanSquaredError
+from .costs.error_costs import RootMeanSquaredError, SumSquaredError
 
 #
 # Dataset class
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index 9c8a8d257..b0ad06276 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -61,10 +61,28 @@ def compute(self, x, grad=None):
         except Exception as e:
             raise ValueError(f"Error in RMSE calculation: {e}")
 
+
+class SumSquaredError(ProblemCost):
+    """
+    Defines the sum squared error cost function.
+    """
+
+    def __init__(self, problem):
+        super(SumSquaredError, self).__init__(problem)
+
+        if not isinstance(problem, pybop.Problem):
+            raise ValueError("This cost function only supports pybop problems")
+
+    def compute(self, x, grad=None):
+        # Compute the cost
+
+        return np.sum((np.sum(((self._problem.evaluate(x) - self._target)**2),
+                              axis=0)), axis=0)
+
     def evaluateS1(self, x):
         # Compute the cost
         y, dy = self._problem.evaluateS1(x)
-        dy = dy.reshape((450, 1, 2))
+        dy = dy.reshape((450, 1, self._problem.n_parameters))
         r = y - self._target
         e = np.sum(np.sum(r**2, axis=0), axis=0)
         de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1)
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 891901ccb..92f3f3dbc 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -31,6 +31,7 @@ def build(
         if self.fit_parameters is not None:
             self.fit_keys = list(self.fit_parameters.keys())
 
+
         if init_soc is not None:
             self.set_init_soc(init_soc)
 
@@ -83,14 +84,16 @@ def set_params(self):
             for i in self.fit_parameters.keys():
                 self._parameter_set[i] = "[input]"
 
+
         if self.dataset is not None and self.fit_parameters is not None:
-            self.parameter_set["Current function [A]"] = pybamm.Interpolant(
-                self.dataset["Time [s]"].data,
-                self.dataset["Current function [A]"].data,
-                pybamm.t,
-            )
-            # Set t_eval
-            self.time_data = self._parameter_set["Current function [A]"].x[0]
+            if "Current function [A]" not in self.fit_keys:
+                self.parameter_set["Current function [A]"] = pybamm.Interpolant(
+                    self.dataset["Time [s]"].data,
+                    self.dataset["Current function [A]"].data,
+                    pybamm.t,
+                )
+                # Set t_eval
+                self.time_data = self._parameter_set["Current function [A]"].x[0]
 
         self._model_with_set_params = self._parameter_set.process_model(
             self._unprocessed_model, inplace=False
@@ -124,6 +127,7 @@ def simulateS1(self, inputs, t_eval):
         Run the forward model and return the function evaulation and it's gradient
         aligning with Pints' ForwardModel simulateS1 method.
         """
+
         if self._built_model is None:
             raise ValueError("Model must be built before calling simulate")
         else:
diff --git a/pybop/optimisers/pints_optimiser.py b/pybop/optimisers/pints_optimiser.py
index 569d96c92..13cecd2bc 100644
--- a/pybop/optimisers/pints_optimiser.py
+++ b/pybop/optimisers/pints_optimiser.py
@@ -10,14 +10,14 @@ class GradientDescent(BaseOptimiser):
     def __init__(self, x0=None, xtol=None, method=None):
         super().__init__()
         self.name = "Gradient Descent Optimiser"
-        self.set_learning_rate = 0.025
-        self.max_iterations = 100
-        self.set_max_unchanged_iterations = 10
+        self.learning_rate = 0.025
+        self.max_iterations = 200
+        self.max_unchanged_iterations = 10
 
-        # if method is not None:
-        #     self.method = method
-        # else:
-        #     self.method = pints.GradientDescent
+        if method is not None:
+            self.method = method
+        else:
+            self.method = pints.GradientDescent
 
     def _runoptimise(self, cost_function, x0, bounds):
         """
@@ -31,23 +31,14 @@ def _runoptimise(self, cost_function, x0, bounds):
         bounds: bounds array
         """
 
-        # Using the ask-and-tell interface
-        # self.method = pints.GradientDescent
-        # e = pints.SequentialEvaluator(cost_function.computeS1)
-        # error = pybop.PintsError(cost_function, x0)
-        # for i in range(50):
-        #     xs = self.method.ask()
-        #     fs = e.evaluate(xs)
-        #     self.method.tell(fs)
-
         # Set up optimisation controller
         controller = pints.OptimisationController(
             cost_function, x0, method=self.method
         )
 
-        controller.set_max_unchanged_iterations(self.set_max_unchanged_iterations)
+        controller.set_max_unchanged_iterations(self.max_unchanged_iterations)
         controller.set_max_iterations(self.max_iterations)
-        controller.optimiser().set_learning_rate(self.set_learning_rate)
+        controller.optimiser().set_learning_rate(self.learning_rate)
 
         # Run the optimser
         x, final_cost = controller.run()

From 99457db3c28bf0aec3ec705ba9ba2da9e77b2046 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Tue, 7 Nov 2023 18:44:57 +0000
Subject: [PATCH 166/210] Updt readme + contributing

---
 CONTRIBUTING.md |  21 ++-----
 README.md       | 145 +++++++++++++++++++++---------------------------
 2 files changed, 68 insertions(+), 98 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index f65361cd2..5926bedc1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -6,7 +6,7 @@ If you'd like to contribute to PyBOP, please have a look at the [pre-commit](#pr
 
 Before you commit any code, please perform the following checks:
 
-- [All tests pass](#testing): `$ nox -s unit_test`
+- [All tests pass](#testing): `$ nox -s unit`
 
 ### Installing and using pre-commit
 
@@ -35,7 +35,7 @@ We use [GIT](https://en.wikipedia.org/wiki/Git) and [GitHub](https://en.wikipedi
 2. Create a [branch](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/) of this repo (ideally on your own [fork](https://help.github.com/articles/fork-a-repo/)), where all changes will be made
 3. Download the source code onto your local system, by [cloning](https://help.github.com/articles/cloning-a-repository/) the repository (or your fork of the repository).
 4. [Install](Developer-Install) PyBOP with the developer options.
-5. [Test](#testing) if your installation worked, using the test script: `$ python run-tests.py --unit`.
+5. [Test](#testing) if your installation worked: `$ pytest --unit -v`.
 
 You now have everything you need to start making changes!
 
@@ -120,13 +120,13 @@ All code requires testing. We use the [pytest](https://docs.pytest.org/en/) pack
 If you have nox installed, to run unit tests, type
 
 ```bash
-nox -s unit_test
+nox -s unit
 ```
 
 else, type
 
 ```bash
-python run-tests.py
+pytest --unit -v
 ```
 
 ### Writing tests
@@ -146,24 +146,15 @@ This also means that, if you can't fix the bug yourself, it will be much easier
 1. Run individual test scripts instead of the whole test suite:
 
    ```bash
-   python tests/unit/path/to/test
+   pytest tests/unit/path/to/test
    ```
 
    You can also run an individual test from a particular script, e.g.
 
    ```bash
-   python tests/unit/test_quick_plot.py TestQuickPlot.test_failure
+   pytest tests/unit/test_quick_plot.py TestQuickPlot.test_failure
    ```
 
-   If you want to run several, but not all, the tests from a script, you can restrict which tests are run from a particular script by using the skipping decorator:
-
-   ```python
-   @unittest.skip("")
-   def test_bit_of_code(self):
-       ...
-   ```
-
-   or by just commenting out all the tests you don't want to run.
 2. Set break-points, either in your IDE or using the Python debugging module. To use the latter, add the following line where you want to set the break point
 
    ```python
diff --git a/README.md b/README.md
index cf39db405..447a35b4f 100644
--- a/README.md
+++ b/README.md
@@ -34,13 +34,12 @@
 
 <!-- Software Specification -->
 ## PyBOP
-PyBOP provides a comprehensive suite of tools for parameterisation and optimisation of battery models. It aims to implement Bayesian and frequentist techniques with example workflows to guide the user. PyBOP can be applied to parameterise a wide range of battery models, including the electrochemical and equivalent circuit models available in [PyBaMM](https://pybamm.org/). A major emphasis in PyBOP is understandable and actionable diagnostics for the user, while still providing extensibility for advanced probabilistic methods. By building on the state-of-the-art battery models and leveraging Python's accessibility, PyBOP enables agile and robust parameterisation and optimisation.
-
-The figure below gives PyBOP's current conceptual structure. The living software specification of PyBOP can be found [here](https://github.com/pybop-team/software-spec). This package is under active development, expect API (Application Programming Interface) evolution with releases.
+PyBOP offers a full range of tools for the parameterisation and optimisation of battery models, utilising both Bayesian and frequentist approaches with example workflows to assist the user. PyBOP can be used to parameterise various battery models, which include electrochemical and equivalent circuit models that are present in [PyBaMM](https://pybamm.org/). PyBOP prioritises clear and informative diagnostics for users, while also allowing for advanced probabilistic methods.
 
+The diagram below presents PyBOP's conceptual framework. The PyBOP software specification is available at [this link](https://github.com/pybop-team/software-spec). This product is currently undergoing development, and users can expect the API to evolve with future releases.
 
 <p align="center">
-    <img src="https://raw.githubusercontent.com/pybop-team/PyBOP/develop/assets/PyBOP_Architecture.png" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
+    <img src="https://raw.githubusercontent.com/pybop-team/PyBOP/develop/assets/PyBOP_Architecture.png" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="400" />
 </p>
 
 <!-- Getting Started -->
@@ -48,7 +47,7 @@ The figure below gives PyBOP's current conceptual structure. The living software
 
 <!-- Installation -->
 ### Prerequisites
-To use and/or contribute to PyBOP, you must first install Python 3 (specifically, 3.8-3.11). For example, on a Debian-based distribution (Debian, Ubuntu - including via WSL, Linux Mint), open a terminal and enter:
+To use and/or contribute to PyBOP, first install Python (3.8-3.11). On a Debian-based distribution, this looks like:
 
 ```bash
 sudo apt update
@@ -59,38 +58,24 @@ For further information, please refer to the similar [installation instructions
 
 ### Installation
 
-Create a virtual environment called `pybop-env` within your current directory using:
+Create a virtual environment called `pybop-env` within your current directory:
 
 ```bash
 virtualenv pybop-env
 ```
 
-Activate the environment with:
+Activate the environment:
 
 ```bash
 source pybop-env/bin/activate
 ```
 
-You can check which version of python is installed within the virtual environment by typing:
-
-```bash
-python --version
-```
-
-Later, you can deactivate the environment and go back to your original system using:
+Later, you can deactivate the environment:
 
 ```bash
 deactivate
 ```
 
-Note that there are alternative packages that can be used to create and manage [virtual environments](https://realpython.com/python-virtual-environments-a-primer/), for example [pyenv](https://github.com/pyenv/pyenv#installation) and [pyenv-virtualenv](https://github.com/pyenv/pyenv-virtualenv#installation). In this case, follow the instructions to install these packages and then to create, activate and deactivate a virtual environment, use:
-
-```bash
-pyenv virtualenv pybop-env
-pyenv activate pybop-env
-pyenv deactivate
-```
-
 Within your virtual environment, install the `develop` branch of PyBOP:
 
 ```bash
@@ -103,18 +88,8 @@ To alternatively install PyBOP from a local directory, use the following templat
 pip install -e "PATH_TO_PYBOP"
 ```
 
-Now, with PyBOP installed in your virtual environment, you can run Python scripts that import and use the functionality of this package.
-
-<!-- Example Usage -->
-### Usage
-PyBOP has two classes of intended use cases:
-1. parameter estimation from battery test data
-2. design optimisation subject to battery manufacturing/usage constraints
-
-These classes encompass a wide variety of optimisation problems, which depend on the choice of battery model, the available data and/or the choice of design parameters.
-
-### Parameter estimation
-The example below shows a simple fitting routine that starts by generating synthetic data from a single particle model with modified parameter values. An RMSE cost function using the terminal voltage as the optimised signal is completed to determine the unknown parameter values. First, the synthetic data is generated:
+### Example
+The example below illustrates a straightforward process that begins by creating artificial data from a solo particle blueprint. The unknown parameter values are discovered by implementing an RMSE cost function using the terminal voltage as the observed signal. Initially, the simulated data is generated.
 
 ```python
 import pybop
@@ -122,46 +97,42 @@ import pybamm
 import pandas as pd
 import numpy as np
 
-def getdata(x0):
-        model = pybamm.lithium_ion.SPM()
-        params = model.default_parameter_values
-
-        params.update(
-            {
-                "Negative electrode active material volume fraction": x0[0],
-                "Positive electrode active material volume fraction": x0[1],
-            }
-        )
-        experiment = pybamm.Experiment(
-            [
-                (
-                    "Discharge at 2C for 5 minutes (1 second period)",
-                    "Rest for 2 minutes (1 second period)",
-                    "Charge at 1C for 5 minutes (1 second period)",
-                    "Rest for 2 minutes (1 second period)",
-                ),
-            ]
-            * 2
-        )
-        sim = pybamm.Simulation(model, experiment=experiment, parameter_values=params)
-        return sim.solve()
-
-
-# Form observations
-x0 = np.array([0.55, 0.63])
-solution = getdata(x0)
+def getdata(self, model, x0):
+    model.parameter_set.update(
+        {
+            "Negative electrode active material volume fraction": x0[0],
+            "Positive electrode active material volume fraction": x0[1],
+        }
+    )
+    experiment = pybamm.Experiment(
+        [
+            (
+                "Discharge at 1C for 3 minutes (1 second period)",
+                "Rest for 2 minutes (1 second period)",
+                "Charge at 1C for 3 minutes (1 second period)",
+                "Rest for 2 minutes (1 second period)",
+            ),
+        ]
+        * 2
+    )
+    sim = model.predict(init_soc=init_soc, experiment=experiment)
+    return sim
 ```
-Next, the observed variables are defined, with the model construction and parameter definitions following. Finally, the parameterisation class is constructed and parameter fitting is completed.
+Next, we construct the model, define the dataset, and form the parameters. Lastly, we build the parameterisation class and complete the parameter fitting.
 ```python
-observations = [
-    pybop.Observed("Time [s]", solution["Time [s]"].data),
-    pybop.Observed("Current function [A]", solution["Current [A]"].data),
-    pybop.Observed("Voltage [V]", solution["Terminal voltage [V]"].data),
-]
-
 # Define model
-model = pybop.models.lithium_ion.SPM()
-model.parameter_set = model.pybamm_model.default_parameter_values
+parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+model = pybop.lithium_ion.SPM(parameter_set=parameter_set)
+
+# Form dataset
+x0 = np.array([0.55, 0.63])
+solution = getdata(x0)
+
+dataset = [
+    pybop.Dataset("Time [s]", solution["Time [s]"].data),
+    pybop.Dataset("Current function [A]", solution["Current [A]"].data),
+    pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
+]
 
 # Fitting parameters
 params = [
@@ -177,29 +148,37 @@ params = [
     ),
 ]
 
-parameterisation = pybop.Parameterisation(
-    model, observations=observations, fit_parameters=params
+# Define the cost to optimise
+cost = pybop.RMSE()
+signal = "Voltage [V]"
+
+# Select optimiser
+optimiser = pybop.NLoptOptimize(n_param=len(parameters))
+
+# Build the optimisation problem
+parameterisation = pybop.Optimisation(
+    cost=cost,
+    model=model,
+    optimiser=optimiser,
+    parameters=parameters,
+    dataset=dataset,
+    signal=signal,
 )
 
-# get RMSE estimate using NLOpt
-results, last_optim, num_evals = parameterisation.rmse(
-    signal="Voltage [V]", method="nlopt" # results = [0.54452026, 0.63064801]
-)
+# run the parameterisation
+results, last_optim, num_evals = parameterisation.run()
 ```
 
 <!-- Code of Conduct -->
 ## Code of Conduct
 
-PyBOP aims to foster a broad consortium of developers and users, building on and
-learning from the success of the [PyBaMM](https://pybamm.org/) community. Our values are:
-
--   Open-source (code and ideas should be shared)
+PyBOP aims to foster a broad consortium of developers and users, building on and learning from the success of the [PyBaMM](https://pybamm.org/) community. Our values are:
 
 -   Inclusivity and fairness (those who want to contribute may do so, and their input is appropriately recognised)
 
--   Interoperability (aiming for modularity to enable maximum impact and inclusivity)
+-   Interoperability (Modularity to enable maximum impact and inclusivity)
 
--   User-friendliness (putting user requirements first, thinking about user-assistance & workflows)
+-   User-friendliness (putting user requirements first via suser-assistance & workflows)
 
 
 <!-- Contributing -->

From 433940f000da8382c9fb93be0bbe8ef5f9599eab Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 8 Nov 2023 09:12:05 +0000
Subject: [PATCH 167/210] Updt. optimisation class, signal defintion in problem
 class, examples updt.

---
 examples/scripts/grad_descent.py     | 64 ++++++++--------------------
 examples/scripts/rmse_estimation.py  |  2 +-
 pybop/_problem.py                    |  2 +-
 pybop/optimisation.py                | 17 --------
 tests/unit/test_cost.py              |  2 +-
 tests/unit/test_optimisation.py      |  2 +-
 tests/unit/test_parameterisations.py |  6 +--
 tests/unit/test_problem.py           |  2 +-
 8 files changed, 26 insertions(+), 71 deletions(-)

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index a2b9696c5..e8ac7f636 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -4,82 +4,54 @@
 
 parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
 model = pybop.lithium_ion.SPMe(parameter_set=parameter_set)
-model.signal = "Terminal voltage [V]"
 
 # Fitting parameters
 parameters = [
     pybop.Parameter(
         "Negative electrode active material volume fraction",
-        prior=pybop.Gaussian(0.57, 0.05),
+        prior=pybop.Gaussian(0.7, 0.05),
         bounds=[0.6, 0.9],
     ),
     pybop.Parameter(
         "Positive electrode active material volume fraction",
         prior=pybop.Gaussian(0.58, 0.05),
         bounds=[0.5, 0.8],
-    ),
-    pybop.Parameter(
-        "Current function [A]",
-        prior=pybop.Gaussian(1.2, 0.05),
-        bounds=[0.8, 1.3],
-    ),
+    )
 ]
 
-model.parameter_set.update(
-    {
-        "Negative electrode active material volume fraction": 0.53,
-        "Positive electrode active material volume fraction": 0.62,
-        "Current function [A]": 1.1,
-    }
-)
-
+sigma = 0.001
 t_eval = np.arange(0, 900, 2)
 values = model.predict(t_eval=t_eval)
-voltage = values["Terminal voltage [V]"].data
-time = values["Time [s]"].data
-
-sigma = 0.001
-CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
+CorruptValues = values["Terminal voltage [V]"].data + np.random.normal(0, sigma, len(t_eval))
 
 dataset = [
-    pybop.Dataset("Time [s]", time),
+    pybop.Dataset("Time [s]", t_eval),
     pybop.Dataset("Current function [A]", values["Current [A]"].data),
     pybop.Dataset("Terminal voltage [V]", CorruptValues),
 ]
 
-# Show the generated data
-plt.figure()
-plt.xlabel("Time")
-plt.ylabel("Values")
-plt.plot(time, CorruptValues)
-plt.plot(time, voltage)
-plt.show()
-
-signal = "Terminal voltage [V]"
-problem = pybop.Problem(model, parameters, signal, dataset)
-
-# Select a score function
+# Generate problem, cost function, and optimisation class
+problem = pybop.Problem(model, parameters, dataset)
 cost = pybop.SumSquaredError(problem)
 opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
 
 opt.optimiser.learning_rate = 0.025
-opt.optimiser.max_unchanged_iterations=1
-opt.optimiser.max_iterations=50
+opt.optimiser.max_iterations=100
 
 x, output, final_cost, num_evals = opt.run()
 print("Estimated parameters:", x)
 
 # Show the generated data
-simulated_values = problem.evaluate(x[:3])
-
-plt.figure(figsize=(5, 5), dpi=100, facecolor="w", edgecolor="k", linewidth=2, frameon=False)
-plt.xlabel("Time", fontsize=20)
-plt.ylabel("Values", fontsize=20)
-plt.plot(time, CorruptValues, label="Measured")
-plt.fill_between(time, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
-plt.plot(time, simulated_values, label="Simulated")
+simulated_values = problem.evaluate(x)
+
+plt.figure(dpi=100)
+plt.xlabel("Time", fontsize=12)
+plt.ylabel("Values", fontsize=12)
+plt.plot(t_eval, CorruptValues, label="Measured")
+plt.fill_between(t_eval, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
+plt.plot(t_eval, simulated_values, label="Simulated")
 plt.legend(
-    bbox_to_anchor=(0.85, 1), loc="upper left", fontsize=20
+    bbox_to_anchor=(0.6, 1), loc="upper left", fontsize=12
 )
-plt.tick_params(axis='both', labelsize=20)
+plt.tick_params(axis='both', labelsize=12)
 plt.show()
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 9766e40ce..190788344 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -32,7 +32,7 @@
 
 # Define the cost to optimise
 signal = "Terminal voltage [V]"
-problem = pybop.Problem(model, parameters, signal, dataset, init_soc=0.98)
+problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=0.98)
 cost = pybop.RootMeanSquaredError(problem)
 
 # Build the optimisation problem
diff --git a/pybop/_problem.py b/pybop/_problem.py
index f750ef424..9f8c2bf4e 100644
--- a/pybop/_problem.py
+++ b/pybop/_problem.py
@@ -10,8 +10,8 @@ def __init__(
         self,
         model,
         parameters,
-        signal,
         dataset,
+        signal="Terminal voltage [V]",
         check_model=True,
         init_soc=None,
         x0=None,
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index 66c5b6120..b6a88befe 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -28,20 +28,3 @@ def run(self):
         )
 
         return results
-
-    def cost_function(self, x, grad=None):
-        """
-        Compute a model prediction and associated value of the cost.
-        """
-
-        # Update the parameter dictionary
-        for i, key in enumerate(self.cost._problem.fit_parameters):
-            self.fit_parameters[key] = x[i]
-
-        # Compute cost
-        res = self.cost.compute(self.fit_parameters)
-
-        if self.verbose:
-            print("Parameter estimates: ", self.cost._problem.parameters, "\n")
-
-        return res
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index a88a1a273..363a8b63e 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -31,7 +31,7 @@ def test_RootMeanSquaredError(self):
         ]
 
         signal = "Voltage [V]"
-        problem = pybop.Problem(model, parameters, signal, dataset)
+        problem = pybop.Problem(model, parameters, dataset, signal=signal)
         cost = pybop.RootMeanSquaredError(problem)
         cost.compute([0.5])
 
diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index 0f83d5a96..2a1de60a4 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -28,7 +28,7 @@ def test_prior_sampling(self):
         ]
 
         signal = "Terminal voltage [V]"
-        problem = pybop.Problem(model, param, signal, dataset)
+        problem = pybop.Problem(model, param, dataset, signal=signal)
         cost = pybop.RootMeanSquaredError(problem)
 
         for i in range(50):
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index be6fc2373..12a5560e5 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -44,7 +44,7 @@ def test_spm(self, init_soc):
 
         # Define the cost to optimise
         signal = "Terminal voltage [V]"
-        problem = pybop.Problem(model, parameters, signal, dataset, init_soc=init_soc)
+        problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=init_soc)
         cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimiser
@@ -95,7 +95,7 @@ def test_spme_multiple_optimisers(self, init_soc):
 
         # Define the cost to optimise
         signal = "Terminal voltage [V]"
-        problem = pybop.Problem(model, parameters, signal, dataset, init_soc=init_soc)
+        problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=init_soc)
         cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimisers
@@ -153,7 +153,7 @@ def test_model_misparameterisation(self, init_soc):
 
         # Define the cost to optimise
         signal = "Terminal voltage [V]"
-        problem = pybop.Problem(model, parameters, signal, dataset, init_soc=init_soc)
+        problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=init_soc)
         cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimiser
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
index 6556bf702..ec415dc53 100644
--- a/tests/unit/test_problem.py
+++ b/tests/unit/test_problem.py
@@ -37,7 +37,7 @@ def test_problem(self):
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
-        problem = pybop.Problem(model, parameters, signal, dataset)
+        problem = pybop.Problem(model, parameters, dataset, signal=signal)
 
         assert problem._model == model
         assert problem._model._built_model is not None

From cccdca3e58cd3e0cccf1ffc1c8f4d03c63e10132 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 8 Nov 2023 09:17:16 +0000
Subject: [PATCH 168/210] Updt. Fig1 size, new example

---
 README.md | 98 +++++++++++++++++++------------------------------------
 1 file changed, 34 insertions(+), 64 deletions(-)

diff --git a/README.md b/README.md
index 447a35b4f..0eb6bf3c4 100644
--- a/README.md
+++ b/README.md
@@ -39,7 +39,7 @@ PyBOP offers a full range of tools for the parameterisation and optimisation of
 The diagram below presents PyBOP's conceptual framework. The PyBOP software specification is available at [this link](https://github.com/pybop-team/software-spec). This product is currently undergoing development, and users can expect the API to evolve with future releases.
 
 <p align="center">
-    <img src="https://raw.githubusercontent.com/pybop-team/PyBOP/develop/assets/PyBOP_Architecture.png" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="400" />
+    <img src="https://raw.githubusercontent.com/pybop-team/PyBOP/develop/assets/PyBOP_Architecture.png" alt="Data flows from battery cycling machines to Galv Harvesters, then to the     Galv server and REST API. Metadata can be updated and data read using the web client, and data can be downloaded by the Python client." width="600" />
 </p>
 
 <!-- Getting Started -->
@@ -89,84 +89,54 @@ pip install -e "PATH_TO_PYBOP"
 ```
 
 ### Example
-The example below illustrates a straightforward process that begins by creating artificial data from a solo particle blueprint. The unknown parameter values are discovered by implementing an RMSE cost function using the terminal voltage as the observed signal. Initially, the simulated data is generated.
+The example below illustrates a straightforward process that begins by creating artificial data from a solo particle blueprint. The unknown parameter values are discovered by implementing an RMSE cost function using the terminal voltage as the observed signal.
 
 ```python
 import pybop
-import pybamm
-import pandas as pd
 import numpy as np
+import matplotlib.pyplot as plt
 
-def getdata(self, model, x0):
-    model.parameter_set.update(
-        {
-            "Negative electrode active material volume fraction": x0[0],
-            "Positive electrode active material volume fraction": x0[1],
-        }
-    )
-    experiment = pybamm.Experiment(
-        [
-            (
-                "Discharge at 1C for 3 minutes (1 second period)",
-                "Rest for 2 minutes (1 second period)",
-                "Charge at 1C for 3 minutes (1 second period)",
-                "Rest for 2 minutes (1 second period)",
-            ),
-        ]
-        * 2
-    )
-    sim = model.predict(init_soc=init_soc, experiment=experiment)
-    return sim
-```
-Next, we construct the model, define the dataset, and form the parameters. Lastly, we build the parameterisation class and complete the parameter fitting.
-```python
-# Define model
+# Parameter set and model definition
 parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
-model = pybop.lithium_ion.SPM(parameter_set=parameter_set)
-
-# Form dataset
-x0 = np.array([0.55, 0.63])
-solution = getdata(x0)
-
-dataset = [
-    pybop.Dataset("Time [s]", solution["Time [s]"].data),
-    pybop.Dataset("Current function [A]", solution["Current [A]"].data),
-    pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
-]
+model = pybop.lithium_ion.SPMe(parameter_set=parameter_set)
 
 # Fitting parameters
-params = [
+parameters = [
     pybop.Parameter(
         "Negative electrode active material volume fraction",
-        prior=pybop.Gaussian(0.5, 0.05),
-        bounds=[0.35, 0.75],
+        prior=pybop.Gaussian(0.7, 0.05),
+        bounds=[0.6, 0.9],
     ),
     pybop.Parameter(
         "Positive electrode active material volume fraction",
-        prior=pybop.Gaussian(0.65, 0.05),
-        bounds=[0.45, 0.85],
-    ),
+        prior=pybop.Gaussian(0.58, 0.05),
+        bounds=[0.5, 0.8],
+    )
 ]
 
-# Define the cost to optimise
-cost = pybop.RMSE()
-signal = "Voltage [V]"
-
-# Select optimiser
-optimiser = pybop.NLoptOptimize(n_param=len(parameters))
-
-# Build the optimisation problem
-parameterisation = pybop.Optimisation(
-    cost=cost,
-    model=model,
-    optimiser=optimiser,
-    parameters=parameters,
-    dataset=dataset,
-    signal=signal,
-)
-
-# run the parameterisation
-results, last_optim, num_evals = parameterisation.run()
+# Generate data
+sigma = 0.005
+t_eval = np.arange(0, 900, 2)
+values = model.predict(t_eval=t_eval)
+CorruptValues = values["Terminal voltage [V]"].data + np.random.normal(0, sigma, len(t_eval))
+
+# Dataset definition
+dataset = [
+    pybop.Dataset("Time [s]", t_eval),
+    pybop.Dataset("Current function [A]", values["Current [A]"].data),
+    pybop.Dataset("Terminal voltage [V]", CorruptValues),
+]
+
+# Generate problem, cost function, and optimisation class
+problem = pybop.Problem(model, parameters, dataset)
+cost = pybop.SumSquaredError(problem)
+opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
+opt.optimiser.learning_rate = 0.025
+opt.optimiser.max_iterations = 100
+
+# Run optimisation
+x, output, final_cost, num_evals = opt.run()
+print("Estimated parameters:", x)
 ```
 
 <!-- Code of Conduct -->

From 225964b71b5b1b710174fc04ffddb418891d4776 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 8 Nov 2023 15:41:49 +0000
Subject: [PATCH 169/210] Pints integration structure change, Inherit
 pints.optimisers, merging functionality between pints.OptimisationController
 & pybop.Optimisation

---
 examples/scripts/grad_descent.py     |  20 +--
 examples/scripts/rmse_estimation.py  |  19 +--
 pybop/__init__.py                    |   2 +-
 pybop/costs/error_costs.py           |  15 +-
 pybop/models/base_model.py           |   2 -
 pybop/optimisation.py                | 215 ++++++++++++++++++++++++++-
 pybop/optimisers/nlopt_optimize.py   |   2 +-
 pybop/optimisers/pints_optimiser.py  | 156 -------------------
 pybop/optimisers/pints_optimisers.py |  10 ++
 pybop/optimisers/scipy_minimize.py   |   6 +-
 tests/unit/test_optimisation.py      |   4 +-
 tests/unit/test_parameterisations.py |  20 ++-
 12 files changed, 261 insertions(+), 210 deletions(-)
 delete mode 100644 pybop/optimisers/pints_optimiser.py
 create mode 100644 pybop/optimisers/pints_optimisers.py

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index e8ac7f636..93f15fdd8 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -16,13 +16,15 @@
         "Positive electrode active material volume fraction",
         prior=pybop.Gaussian(0.58, 0.05),
         bounds=[0.5, 0.8],
-    )
+    ),
 ]
 
 sigma = 0.001
 t_eval = np.arange(0, 900, 2)
 values = model.predict(t_eval=t_eval)
-CorruptValues = values["Terminal voltage [V]"].data + np.random.normal(0, sigma, len(t_eval))
+CorruptValues = values["Terminal voltage [V]"].data + np.random.normal(
+    0, sigma, len(t_eval)
+)
 
 dataset = [
     pybop.Dataset("Time [s]", t_eval),
@@ -33,12 +35,12 @@
 # Generate problem, cost function, and optimisation class
 problem = pybop.Problem(model, parameters, dataset)
 cost = pybop.SumSquaredError(problem)
-opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
+opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent)
 
-opt.optimiser.learning_rate = 0.025
-opt.optimiser.max_iterations=100
+opt.learning_rate = 0.025
+opt.max_iterations = 100
 
-x, output, final_cost, num_evals = opt.run()
+x = opt.run()
 print("Estimated parameters:", x)
 
 # Show the generated data
@@ -50,8 +52,6 @@
 plt.plot(t_eval, CorruptValues, label="Measured")
 plt.fill_between(t_eval, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
 plt.plot(t_eval, simulated_values, label="Simulated")
-plt.legend(
-    bbox_to_anchor=(0.6, 1), loc="upper left", fontsize=12
-)
-plt.tick_params(axis='both', labelsize=12)
+plt.legend(bbox_to_anchor=(0.6, 1), loc="upper left", fontsize=12)
+plt.tick_params(axis="both", labelsize=12)
 plt.show()
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 190788344..89ff873cf 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -37,7 +37,7 @@
 
 # Build the optimisation problem
 parameterisation = pybop.Optimisation(
-    cost=cost, optimiser=pybop.NLoptOptimize(n_param=len(parameters))
+    cost=cost, optimiser=pybop.NLoptOptimize
 )
 
 # Run the optimisation problem
@@ -51,20 +51,5 @@
 plt.ylabel("Values")
 plt.plot(dataset[0].data, dataset[2].data, label="Measured")
 plt.plot(dataset[0].data, simulated_values, label="Simulated")
-plt.legend(
-    bbox_to_anchor=(1.05, 1), loc="upper left", borderaxespad=0.0, frameon=False
-)
+plt.legend(bbox_to_anchor=(0.6, 1), loc="upper left", fontsize=12)
 plt.show()
-
-
-# get MAP estimate, starting at a random initial point in parameter space
-# parameterisation.map(x0=[p.sample() for p in parameters])
-
-# or sample from posterior
-# parameterisation.sample(1000, n_chains=4, ....)
-
-# or SOBER
-# parameterisation.sober()
-
-
-# Optimisation = pybop.optimisation(model, cost=cost, parameters=parameters, observation=observation)
diff --git a/pybop/__init__.py b/pybop/__init__.py
index fe0502d56..93f457bb5 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -50,7 +50,7 @@
 from .optimisers.base_optimiser import BaseOptimiser
 from .optimisers.nlopt_optimize import NLoptOptimize
 from .optimisers.scipy_minimize import SciPyMinimize
-from .optimisers.pints_optimiser import GradientDescent
+from .optimisers.pints_optimisers import GradientDescent
 
 #
 # Parameter classes
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index b0ad06276..c5792e121 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -32,14 +32,14 @@ class ProblemCost(BaseCost):
 
     def __init__(self, problem):
         super(ProblemCost, self).__init__()
-        self._problem = problem
+        self.problem = problem
         self._target = problem._target
 
     def n_parameters(self):
         """
         Returns the dimension of the parameter space.
         """
-        return self._problem.n_parameters
+        return self.problem.n_parameters
 
 
 class RootMeanSquaredError(ProblemCost):
@@ -56,7 +56,7 @@ def __init__(self, problem):
     def compute(self, x, grad=None):
         # Compute the cost
         try:
-            return np.sqrt(np.mean((self._problem.evaluate(x) - self._target) ** 2))
+            return np.sqrt(np.mean((self.problem.evaluate(x) - self._target) ** 2))
 
         except Exception as e:
             raise ValueError(f"Error in RMSE calculation: {e}")
@@ -76,13 +76,14 @@ def __init__(self, problem):
     def compute(self, x, grad=None):
         # Compute the cost
 
-        return np.sum((np.sum(((self._problem.evaluate(x) - self._target)**2),
-                              axis=0)), axis=0)
+        return np.sum(
+            (np.sum(((self.problem.evaluate(x) - self._target) ** 2), axis=0)), axis=0
+        )
 
     def evaluateS1(self, x):
         # Compute the cost
-        y, dy = self._problem.evaluateS1(x)
-        dy = dy.reshape((450, 1, self._problem.n_parameters))
+        y, dy = self.problem.evaluateS1(x)
+        dy = dy.reshape((450, 1, self.problem.n_parameters))
         r = y - self._target
         e = np.sum(np.sum(r**2, axis=0), axis=0)
         de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1)
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 92f3f3dbc..0584fb276 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -31,7 +31,6 @@ def build(
         if self.fit_parameters is not None:
             self.fit_keys = list(self.fit_parameters.keys())
 
-
         if init_soc is not None:
             self.set_init_soc(init_soc)
 
@@ -84,7 +83,6 @@ def set_params(self):
             for i in self.fit_parameters.keys():
                 self._parameter_set[i] = "[input]"
 
-
         if self.dataset is not None and self.fit_parameters is not None:
             if "Current function [A]" not in self.fit_keys:
                 self.parameter_set["Current function [A]"] = pybamm.Interpolant(
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index b6a88befe..ec643a44e 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -1,3 +1,8 @@
+import pybop
+import pints
+import numpy as np
+
+
 class Optimisation:
     """
     Optimisation class for PyBOP.
@@ -10,21 +15,223 @@ def __init__(
         verbose=False,
     ):
         self.cost = cost
+        self.problem = cost.problem
         self.optimiser = optimiser
         self.verbose = verbose
-        self.x0 = cost._problem.x0
-        self.bounds = cost._problem.bounds
+        self.x0 = cost.problem.x0
+        self.bounds = cost.problem.bounds
         self.fit_parameters = {}
+        self.learning_rate = 0.025
+        self.max_iterations = 200
+        self.max_unchanged_iterations = 10
+        self.max_evaluations = None
+        self.threshold = None
+
+        # Check if minimising or maximising
+        self._minimising = not isinstance(cost, pints.LogPDF)
+
+        if self._minimising:
+            self._function = cost
+        else:
+            self._function = pints.ProbabilityBasedError(cost)
+        del cost
 
     def run(self):
         """
         Run the optimisation algorithm.
+        Selects between PyBOP backend or Pints backend.
+        returns:
+            x: best parameters
+            output: optimiser output
+            final_cost: final cost
+            num_evals: number of evaluations
         """
 
-        results = self.optimiser.optimise(
+        if issubclass(self.optimiser, pints.Optimiser):
+            x, output, final_cost, num_evals = self._run_pints()
+        else:
+            if issubclass(self.optimiser, pybop.NLoptOptimize):
+                self.optimiser = self.optimiser(self.problem.n_parameters)
+            elif issubclass(self.optimiser, pybop.SciPyMinimize):
+                self.optimiser = self.optimiser()
+
+            x, output, final_cost, num_evals = self._run_pybop()
+
+        return x, output, final_cost, num_evals
+
+    def _run_pybop(self):
+        """
+        Run method for PyBOP optimisers.
+        """
+        x, output, final_cost, num_evals = self.optimiser.optimise(
             cost_function=self.cost,
             x0=self.x0,
             bounds=self.bounds,
         )
+        return x, output, final_cost, num_evals
+
+    def _run_pints(self):
+        """
+        Run method for PINTS optimisers.
+        This method is based on the run method in the PINTS.OptimisationController class.
+        """
+
+        # Check stopping criteria
+        has_stopping_criterion = False
+        has_stopping_criterion |= self.max_iterations is not None
+        has_stopping_criterion |= self.max_unchanged_iterations is not None
+        has_stopping_criterion |= self.max_evaluations is not None
+        has_stopping_criterion |= self.threshold is not None
+        if not has_stopping_criterion:
+            raise ValueError("At least one stopping criterion must be set.")
+
+        # Iterations and function evaluations
+        iteration = 0
+        evaluations = 0
+
+        # Unchanged iterations count (used for stopping or just for
+        # information)
+        unchanged_iterations = 0
+
+        # Choose method to evaluate
+        f = self._function
+        if self._needs_sensitivities:
+            f = f.evaluateS1
+
+        # Create evaluator object
+        evaluator = pints.SequentialEvaluator(f)
+
+        # Keep track of current best and best-guess scores.
+        fb = fg = np.inf
+
+        # Internally we always minimise! Keep a 2nd value to show the user.
+        fb_user, fg_user = (fb, fg) if self._minimising else (-fb, -fg)
+
+        # Keep track of the last significant change
+        f_sig = np.inf
+
+        # Set up progress reporting
+        running = True
+        try:
+            while running:
+                # Ask optimiser for new points
+                xs = self._optimiser.ask()
+
+                # Evaluate points
+                fs = evaluator.evaluate(xs)
+
+                # Tell optimiser about function values
+                self._optimiser.tell(fs)
+
+                # Update the scores
+                fb = self._optimiser.f_best()
+                fg = self._optimiser.f_guess()
+                fb_user, fg_user = (fb, fg) if self._minimising else (-fb, -fg)
+
+                # Check for significant changes
+                f_new = fg if self._use_f_guessed else fb
+                if np.abs(f_new - f_sig) >= self._unchanged_threshold:
+                    unchanged_iterations = 0
+                    f_sig = f_new
+                else:
+                    unchanged_iterations += 1
+
+                # Update evaluation count
+                evaluations += len(fs)
+
+                # Update iteration count
+                iteration += 1
+
+                #
+                # Check stopping criteria
+                #
+
+                # Maximum number of iterations
+                if (
+                    self._max_iterations is not None
+                    and iteration >= self._max_iterations
+                ):
+                    running = False
+                    (
+                        "Maximum number of iterations (" + str(iteration) + ") reached."
+                    )
+
+                # Maximum number of iterations without significant change
+                halt = (
+                    self._unchanged_max_iterations is not None
+                    and unchanged_iterations >= self._unchanged_max_iterations
+                )
+                if running and halt:
+                    running = False
+                    (
+                        "No significant change for "
+                        + str(unchanged_iterations)
+                        + " iterations."
+                    )
+
+                # Maximum number of evaluations
+                if (
+                    self._max_evaluations is not None
+                    and evaluations >= self._max_evaluations
+                ):
+                    running = False
+                    (
+                        "Maximum number of evaluations ("
+                        + str(self._max_evaluations)
+                        + ") reached."
+                    )
+
+                # Threshold value
+                halt = self._threshold is not None and f_new < self._threshold
+                if running and halt:
+                    running = False
+                    (
+                        "Objective function crossed threshold: "
+                        + str(self._threshold)
+                        + "."
+                    )
+
+                # Error in optimiser
+                error = self._optimiser.stop()
+                if error:  # pragma: no cover
+                    running = False
+                    str(error)
+
+                elif self._callback is not None:
+                    self._callback(iteration - 1, self._optimiser)
+
+        except (Exception, SystemExit, KeyboardInterrupt):  # pragma: no cover
+            # Unexpected end!
+            # Show last result and exit
+            print("\n" + "-" * 40)
+            print("Unexpected termination.")
+            print("Current score: " + str(fg_user))
+            print("Current position:")
+
+            # Show current parameters
+            x_user = self._optimiser.x_guessed()
+            if self._transformation is not None:
+                x_user = self._transformation.to_model(x_user)
+            for p in x_user:
+                print(pints.strfloat(p))
+            print("-" * 40)
+            raise
+
+        # Save post-run statistics
+        self._evaluations = evaluations
+        self._iterations = iteration
+
+        # Get best parameters
+        if self._use_f_guessed:
+            x = self._optimiser.x_guessed()
+            f = self._optimiser.f_guessed()
+        else:
+            x = self._optimiser.x_best()
+            f = self._optimiser.f_best()
+
+        # Inverse transform search parameters
+        if self._transformation is not None:
+            x = self._transformation.to_model(x)
 
-        return results
+        # Return best position and score
+        return x, f if self._minimising else -f
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index d770632bb..eca5e71da 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -9,7 +9,7 @@ class NLoptOptimize(BaseOptimiser):
 
     def __init__(self, n_param, xtol=None, method=None):
         super().__init__()
-        self.name = "NLOpt Optimiser"
+        self.name = "NLoptOptimize"
 
         if method is not None:
             self.optim = nlopt.opt(method, n_param)
diff --git a/pybop/optimisers/pints_optimiser.py b/pybop/optimisers/pints_optimiser.py
deleted file mode 100644
index 13cecd2bc..000000000
--- a/pybop/optimisers/pints_optimiser.py
+++ /dev/null
@@ -1,156 +0,0 @@
-import pints
-from .base_optimiser import BaseOptimiser
-
-
-class GradientDescent(BaseOptimiser):
-    """
-    Class for the PINTS optimisation. Extends the BaseOptimiser class.
-    """
-
-    def __init__(self, x0=None, xtol=None, method=None):
-        super().__init__()
-        self.name = "Gradient Descent Optimiser"
-        self.learning_rate = 0.025
-        self.max_iterations = 200
-        self.max_unchanged_iterations = 10
-
-        if method is not None:
-            self.method = method
-        else:
-            self.method = pints.GradientDescent
-
-    def _runoptimise(self, cost_function, x0, bounds):
-        """
-        Run the PINTS optimisation method.
-
-        Inputs
-        ----------
-        cost_function: function for optimising
-        method: optimisation algorithm
-        x0: initialisation array
-        bounds: bounds array
-        """
-
-        # Set up optimisation controller
-        controller = pints.OptimisationController(
-            cost_function, x0, method=self.method
-        )
-
-        controller.set_max_unchanged_iterations(self.max_unchanged_iterations)
-        controller.set_max_iterations(self.max_iterations)
-        controller.optimiser().set_learning_rate(self.learning_rate)
-
-        # Run the optimser
-        x, final_cost = controller.run()
-
-        # Get performance statistics
-        # output = *pass all output*
-        # final_cost
-        # num_evals
-        output = None
-        num_evals = None
-
-        return x, output, final_cost, num_evals
-
-
-# class PintsError(ErrorMeasure):
-#     """
-#     An interface class for PyBOP that extends the PINTS ErrorMeasure class.
-
-#     From PINTS:
-#     Abstract base class for objects that calculate some scalar measure of
-#     goodness-of-fit (for a model and a data set), such that a smaller value
-#     means a better fit.
-
-#     ErrorMeasures are callable objects: If ``e`` is an instance of an
-#     :class:`ErrorMeasure` class you can calculate the error by calling ``e(p)``
-#     where ``p`` is a point in parameter space.
-#     """
-
-#     def __init__(self, cost_function, x0):
-#         self.cost_function = cost_function
-#         self.x0 = x0
-
-#     def __call__(self, x):
-#         cost = self.cost_function(x)
-
-#         return cost
-
-#     def evaluateS1(self, x):
-#         """
-#         Evaluates this error measure, and returns the result plus the partial
-#         derivatives of the result with respect to the parameters.
-
-#         The returned data has the shape ``(e, e')`` where ``e`` is a scalar
-#         value and ``e'`` is a sequence of length ``n_parameters``.
-
-#         *This is an optional method that is not always implemented.*
-#         """
-#         raise NotImplementedError
-
-#     def n_parameters(self):
-#         """
-#         Returns the dimension of the parameter space this measure is defined
-#         over.
-#         """
-#         return len(self.x0)
-
-
-# class PintsBoundaries(object):
-#     """
-#     An interface class for PyBOP that extends the PINTS ErrorMeasure class.
-
-#     From PINTS:
-#     Abstract class representing boundaries on a parameter space.
-#     """
-
-#     def __init__(self, bounds, x0):
-#         self.bounds = bounds
-#         self.x0 = x0
-
-#     def check(self, parameters):
-#         """
-#         Returns ``True`` if and only if the given point in parameter space is
-#         within the boundaries.
-
-#         Parameters
-#         ----------
-#         parameters
-#             A point in parameter space
-#         """
-#         result = False
-#         if (
-#             parameters[0] >= self.bounds["lower"][0]
-#             and parameters[1] >= self.bounds["lower"][1]
-#             and parameters[0] <= self.bounds["upper"][0]
-#             and parameters[1] <= self.bounds["upper"][1]
-#         ):
-#             result = True
-
-#         return result
-
-#     def n_parameters(self):
-#         """
-#         Returns the dimension of the parameter space these boundaries are
-#         defined on.
-#         """
-#         return len(self.x0)
-
-#     def sample(self, n=1):
-#         """
-#         Returns ``n`` random samples from within the boundaries, for example to
-#         use as starting points for an optimisation.
-
-#         The returned value is a NumPy array with shape ``(n, d)`` where ``n``
-#         is the requested number of samples, and ``d`` is the dimension of the
-#         parameter space these boundaries are defined on.
-
-#         *Note that implementing :meth:`sample()` is optional, so some boundary
-#         types may not support it.*
-
-#         Parameters
-#         ----------
-#         n : int
-#             The number of points to sample
-#         """
-#         raise NotImplementedError
diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
new file mode 100644
index 000000000..9c38599df
--- /dev/null
+++ b/pybop/optimisers/pints_optimisers.py
@@ -0,0 +1,10 @@
+import pints
+
+
+class GradientDescent(pints.GradientDescent):
+    """
+    Class for the PINTS optimisation. Extends the BaseOptimiser class.
+    """
+
+    def __init__(self, x0, sigma0=0.1, boundaries=None):
+        super().__init__(x0, sigma0, boundaries)
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index f4e912732..7427655d6 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -9,9 +9,9 @@ class SciPyMinimize(BaseOptimiser):
 
     def __init__(self, method=None, bounds=None):
         super().__init__()
+        self.name = "SciPyMinimize"
         self.method = method
         self.bounds = bounds
-        self.name = "SciPy Optimiser"
 
         if self.method is None:
             self.method = "L-BFGS-B"
@@ -33,7 +33,9 @@ def _runoptimise(self, cost_function, x0, bounds):
             bounds = (
                 (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"])
             )
-            output = minimize(cost_function.compute, x0, method=self.method, bounds=bounds)
+            output = minimize(
+                cost_function.compute, x0, method=self.method, bounds=bounds
+            )
         else:
             output = minimize(cost_function.compute, x0, method=self.method)
 
diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index 2a1de60a4..c77055e2f 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -32,8 +32,6 @@ def test_prior_sampling(self):
         cost = pybop.RootMeanSquaredError(problem)
 
         for i in range(50):
-            opt = pybop.Optimisation(
-                cost=cost, optimiser=pybop.NLoptOptimize(n_param=len(param))
-            )
+            opt = pybop.Optimisation(cost=cost, optimiser=pybop.NLoptOptimize)
 
             assert opt.x0 <= 0.77 and opt.x0 >= 0.73
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 12a5560e5..e37031744 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -44,11 +44,13 @@ def test_spm(self, init_soc):
 
         # Define the cost to optimise
         signal = "Terminal voltage [V]"
-        problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=init_soc)
+        problem = pybop.Problem(
+            model, parameters, dataset, signal=signal, init_soc=init_soc
+        )
         cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimiser
-        optimiser = pybop.NLoptOptimize(n_param=len(parameters))
+        optimiser = pybop.NLoptOptimize
 
         # Build the optimisation problem
         parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
@@ -95,13 +97,15 @@ def test_spme_multiple_optimisers(self, init_soc):
 
         # Define the cost to optimise
         signal = "Terminal voltage [V]"
-        problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=init_soc)
+        problem = pybop.Problem(
+            model, parameters, dataset, signal=signal, init_soc=init_soc
+        )
         cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimisers
         optimisers = [
-            pybop.NLoptOptimize(n_param=len(parameters)),
-            pybop.SciPyMinimize(),
+            pybop.NLoptOptimize,
+            pybop.SciPyMinimize,
         ]
 
         # Test each optimiser
@@ -153,11 +157,13 @@ def test_model_misparameterisation(self, init_soc):
 
         # Define the cost to optimise
         signal = "Terminal voltage [V]"
-        problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=init_soc)
+        problem = pybop.Problem(
+            model, parameters, dataset, signal=signal, init_soc=init_soc
+        )
         cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimiser
-        optimiser = pybop.NLoptOptimize(n_param=len(parameters))
+        optimiser = pybop.NLoptOptimize
 
         # Build the optimisation problem
         parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)

From 17ccfbe02eedbd2507a17b583188b7cfc2fe57dd Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 9 Nov 2023 09:26:17 +0000
Subject: [PATCH 170/210] Add Pints requirements to optimiser & optimisation
 class

---
 examples/scripts/rmse_estimation.py  |  4 +-
 pybop/optimisation.py                | 55 ++++++++++++++----------
 pybop/optimisers/nlopt_optimize.py   |  6 +++
 pybop/optimisers/pints_optimisers.py | 63 +++++++++++++++++++++++++++-
 pybop/optimisers/scipy_minimize.py   |  6 +++
 5 files changed, 109 insertions(+), 25 deletions(-)

diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 89ff873cf..27a3e53e6 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -36,9 +36,7 @@
 cost = pybop.RootMeanSquaredError(problem)
 
 # Build the optimisation problem
-parameterisation = pybop.Optimisation(
-    cost=cost, optimiser=pybop.NLoptOptimize
-)
+parameterisation = pybop.Optimisation(cost=cost, optimiser=pybop.NLoptOptimize)
 
 # Run the optimisation problem
 x, output, final_cost, num_evals = parameterisation.run()
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index ec643a44e..73ed33365 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -26,6 +26,7 @@ def __init__(
         self.max_unchanged_iterations = 10
         self.max_evaluations = None
         self.threshold = None
+        self.sigma0 = 0.1
 
         # Check if minimising or maximising
         self._minimising = not isinstance(cost, pints.LogPDF)
@@ -36,6 +37,25 @@ def __init__(
             self._function = pints.ProbabilityBasedError(cost)
         del cost
 
+        # Create optimiser
+        if self.optimiser is None or issubclass(self.optimiser, pints.Optimiser):
+            self.pints = True
+            self.optimiser = self.optimiser or pints.CMAES
+            self.optimiser = optimiser(self.x0, self.sigma0, self.bounds)
+
+        elif issubclass(self.optimiser, pybop.NLoptOptimize):
+            self.pints = False
+            self.optimiser = self.optimiser(self.problem.n_parameters)
+
+        elif issubclass(self.optimiser, pybop.SciPyMinimize):
+            self.pints = False
+            self.optimiser = self.optimiser()
+        else:
+            raise ValueError("Optimiser selected is not supported.")
+
+        # Check if sensitivities are required
+        self._needs_sensitivities = self.optimiser.needs_sensitivities()
+
     def run(self):
         """
         Run the optimisation algorithm.
@@ -47,14 +67,9 @@ def run(self):
             num_evals: number of evaluations
         """
 
-        if issubclass(self.optimiser, pints.Optimiser):
+        if self.pints:
             x, output, final_cost, num_evals = self._run_pints()
-        else:
-            if issubclass(self.optimiser, pybop.NLoptOptimize):
-                self.optimiser = self.optimiser(self.problem.n_parameters)
-            elif issubclass(self.optimiser, pybop.SciPyMinimize):
-                self.optimiser = self.optimiser()
-
+        elif not self.pints:
             x, output, final_cost, num_evals = self._run_pybop()
 
         return x, output, final_cost, num_evals
@@ -115,17 +130,17 @@ def _run_pints(self):
         try:
             while running:
                 # Ask optimiser for new points
-                xs = self._optimiser.ask()
+                xs = self.optimiser.ask()
 
                 # Evaluate points
                 fs = evaluator.evaluate(xs)
 
                 # Tell optimiser about function values
-                self._optimiser.tell(fs)
+                self.optimiser.tell(fs)
 
                 # Update the scores
-                fb = self._optimiser.f_best()
-                fg = self._optimiser.f_guess()
+                fb = self.optimiser.f_best()
+                fg = self.optimiser.f_guess()
                 fb_user, fg_user = (fb, fg) if self._minimising else (-fb, -fg)
 
                 # Check for significant changes
@@ -152,9 +167,7 @@ def _run_pints(self):
                     and iteration >= self._max_iterations
                 ):
                     running = False
-                    (
-                        "Maximum number of iterations (" + str(iteration) + ") reached."
-                    )
+                    ("Maximum number of iterations (" + str(iteration) + ") reached.")
 
                 # Maximum number of iterations without significant change
                 halt = (
@@ -192,13 +205,13 @@ def _run_pints(self):
                     )
 
                 # Error in optimiser
-                error = self._optimiser.stop()
+                error = self.optimiser.stop()
                 if error:  # pragma: no cover
                     running = False
                     str(error)
 
                 elif self._callback is not None:
-                    self._callback(iteration - 1, self._optimiser)
+                    self._callback(iteration - 1, self.optimiser)
 
         except (Exception, SystemExit, KeyboardInterrupt):  # pragma: no cover
             # Unexpected end!
@@ -209,7 +222,7 @@ def _run_pints(self):
             print("Current position:")
 
             # Show current parameters
-            x_user = self._optimiser.x_guessed()
+            x_user = self.optimiser.x_guessed()
             if self._transformation is not None:
                 x_user = self._transformation.to_model(x_user)
             for p in x_user:
@@ -223,11 +236,11 @@ def _run_pints(self):
 
         # Get best parameters
         if self._use_f_guessed:
-            x = self._optimiser.x_guessed()
-            f = self._optimiser.f_guessed()
+            x = self.optimiser.x_guessed()
+            f = self.optimiser.f_guessed()
         else:
-            x = self._optimiser.x_best()
-            f = self._optimiser.f_best()
+            x = self.optimiser.x_best()
+            f = self.optimiser.f_best()
 
         # Inverse transform search parameters
         if self._transformation is not None:
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index eca5e71da..7effdda7e 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -47,3 +47,9 @@ def _runoptimise(self, cost_function, x0, bounds):
         num_evals = self.optim.get_numevals()
 
         return x, output, final_cost, num_evals
+
+    def needs_sensitivities(self):
+        """
+        Returns True if the optimiser needs sensitivities.
+        """
+        return False
diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index 9c38599df..a655bf176 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -6,5 +6,66 @@ class GradientDescent(pints.GradientDescent):
     Class for the PINTS optimisation. Extends the BaseOptimiser class.
     """
 
-    def __init__(self, x0, sigma0=0.1, boundaries=None):
+    def __init__(self, x0, sigma0=0.1, bounds=None):
+        boundaries = PintsBoundaries(bounds, x0)
         super().__init__(x0, sigma0, boundaries)
+
+
+class PintsBoundaries(object):
+    """
+    An interface class for PyBOP that extends the PINTS ErrorMeasure class.
+
+    From PINTS:
+    Abstract class representing boundaries on a parameter space.
+    """
+
+    def __init__(self, bounds, x0):
+        self.bounds = bounds
+        self.x0 = x0
+
+    def check(self, parameters):
+        """
+        Returns ``True`` if and only if the given point in parameter space is
+        within the boundaries.
+
+        Parameters
+        ----------
+        parameters
+            A point in parameter space
+        """
+        result = False
+        if (
+            parameters[0] >= self.bounds["lower"][0]
+            and parameters[1] >= self.bounds["lower"][1]
+            and parameters[0] <= self.bounds["upper"][0]
+            and parameters[1] <= self.bounds["upper"][1]
+        ):
+            result = True
+
+        return result
+
+    def n_parameters(self):
+        """
+        Returns the dimension of the parameter space these boundaries are
+        defined on.
+        """
+        return len(self.x0)
+
+    # def sample(self, n=1):
+    #     """
+    #     Returns ``n`` random samples from within the boundaries, for example to
+    #     use as starting points for an optimisation.
+
+    #     The returned value is a NumPy array with shape ``(n, d)`` where ``n``
+    #     is the requested number of samples, and ``d`` is the dimension of the
+    #     parameter space these boundaries are defined on.
+
+    #     *Note that implementing :meth:`sample()` is optional, so some boundary
+    #     types may not support it.*
+
+    #     Parameters
+    #     ----------
+    #     n : int
+    #         The number of points to sample
+    #     """
+    #     raise NotImplementedError
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index 7427655d6..2d6e909fd 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -45,3 +45,9 @@ def _runoptimise(self, cost_function, x0, bounds):
         num_evals = output.nfev
 
         return x, output, final_cost, num_evals
+
+    def needs_sensitivities(self):
+        """
+        Returns True if the optimiser needs sensitivities.
+        """
+        return False

From f0637861c4377b8dec5e49e7930f4b78630a302d Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Thu, 9 Nov 2023 14:53:16 +0000
Subject: [PATCH 171/210] Move example code

Move the example code in the Readme to the example scripts folder. This example will not run until #72 is merged.
---
 README.md                       | 76 +++++++++++----------------------
 examples/scripts/SPM_example.py | 47 ++++++++++++++++++++
 2 files changed, 73 insertions(+), 50 deletions(-)
 create mode 100644 examples/scripts/SPM_example.py

diff --git a/README.md b/README.md
index 0eb6bf3c4..8592bf7dd 100644
--- a/README.md
+++ b/README.md
@@ -88,55 +88,31 @@ To alternatively install PyBOP from a local directory, use the following templat
 pip install -e "PATH_TO_PYBOP"
 ```
 
-### Example
-The example below illustrates a straightforward process that begins by creating artificial data from a solo particle blueprint. The unknown parameter values are discovered by implementing an RMSE cost function using the terminal voltage as the observed signal.
-
-```python
-import pybop
-import numpy as np
-import matplotlib.pyplot as plt
-
-# Parameter set and model definition
-parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
-model = pybop.lithium_ion.SPMe(parameter_set=parameter_set)
-
-# Fitting parameters
-parameters = [
-    pybop.Parameter(
-        "Negative electrode active material volume fraction",
-        prior=pybop.Gaussian(0.7, 0.05),
-        bounds=[0.6, 0.9],
-    ),
-    pybop.Parameter(
-        "Positive electrode active material volume fraction",
-        prior=pybop.Gaussian(0.58, 0.05),
-        bounds=[0.5, 0.8],
-    )
-]
-
-# Generate data
-sigma = 0.005
-t_eval = np.arange(0, 900, 2)
-values = model.predict(t_eval=t_eval)
-CorruptValues = values["Terminal voltage [V]"].data + np.random.normal(0, sigma, len(t_eval))
-
-# Dataset definition
-dataset = [
-    pybop.Dataset("Time [s]", t_eval),
-    pybop.Dataset("Current function [A]", values["Current [A]"].data),
-    pybop.Dataset("Terminal voltage [V]", CorruptValues),
-]
-
-# Generate problem, cost function, and optimisation class
-problem = pybop.Problem(model, parameters, dataset)
-cost = pybop.SumSquaredError(problem)
-opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
-opt.optimiser.learning_rate = 0.025
-opt.optimiser.max_iterations = 100
-
-# Run optimisation
-x, output, final_cost, num_evals = opt.run()
-print("Estimated parameters:", x)
+To check whether PyBOP has been installed correctly, run one of the examples in the following section or the full set of unit tests:
+
+```bash
+pytest --unit -v
+```
+
+### Using PyBOP
+PyBOP has two general types of intended use case:
+1. parameter estimation from battery test data
+2. design optimisation subject to battery manufacturing/usage constraints
+
+These general cases encompass a wide variety of optimisation problems, which require careful consideration based on the choice of battery model, the available data and/or the choice of design parameters.
+
+PyBOP comes with a number of example notebooks and scripts which can be found in the examples folder.
+
+The (`spm_example` script)[https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/spm_example.py] illustrates a straightforward example that begins by creating artificial data from a single particle model (SPM). The unknown parameter values are then discovered by implementing an RMSE cost function using the terminal voltage as the observed signal. The main output is the set of estimated parameters, namely the negative and positive electrode active material volume fractions in this example. To run this example:
+
+```bash
+python examples/scripts/spm_example.py
+```
+
+The (`RMSE_estimation` script)[https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/rmse_estimation.py] provides a second example which differs by importing the example `Chen_example.csv` dataset and then estimates the same SPM parameters based on the same RMSE cost function. To run this example:
+
+```bash
+python examples/scripts/rmse_estimation.py
 ```
 
 <!-- Code of Conduct -->
@@ -148,7 +124,7 @@ PyBOP aims to foster a broad consortium of developers and users, building on and
 
 -   Interoperability (Modularity to enable maximum impact and inclusivity)
 
--   User-friendliness (putting user requirements first via suser-assistance & workflows)
+-   User-friendliness (putting user requirements first via user-assistance & workflows)
 
 
 <!-- Contributing -->
diff --git a/examples/scripts/SPM_example.py b/examples/scripts/SPM_example.py
new file mode 100644
index 000000000..82c57ea34
--- /dev/null
+++ b/examples/scripts/SPM_example.py
@@ -0,0 +1,47 @@
+import pybop
+import numpy as np
+import matplotlib.pyplot as plt
+
+# Parameter set and model definition
+parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+model = pybop.lithium_ion.SPMe(parameter_set=parameter_set)
+
+# Fitting parameters
+parameters = [
+    pybop.Parameter(
+        "Negative electrode active material volume fraction",
+        prior=pybop.Gaussian(0.7, 0.05),
+        bounds=[0.6, 0.9],
+    ),
+    pybop.Parameter(
+        "Positive electrode active material volume fraction",
+        prior=pybop.Gaussian(0.58, 0.05),
+        bounds=[0.5, 0.8],
+    ),
+]
+
+# Generate data
+sigma = 0.005
+t_eval = np.arange(0, 900, 2)
+values = model.predict(t_eval=t_eval)
+CorruptValues = values["Terminal voltage [V]"].data + np.random.normal(
+    0, sigma, len(t_eval)
+)
+
+# Dataset definition
+dataset = [
+    pybop.Dataset("Time [s]", t_eval),
+    pybop.Dataset("Current function [A]", values["Current [A]"].data),
+    pybop.Dataset("Terminal voltage [V]", CorruptValues),
+]
+
+# Generate problem, cost function, and optimisation class
+problem = pybop.Problem(model, parameters, dataset)
+cost = pybop.SumSquaredError(problem)
+opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
+opt.optimiser.learning_rate = 0.025
+opt.optimiser.max_iterations = 100
+
+# Run optimisation
+x, output, final_cost, num_evals = opt.run()
+print("Estimated parameters:", x)

From cc2fc86b2d16f13873c42fa5661cc826280e8ea1 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 9 Nov 2023 15:34:24 +0000
Subject: [PATCH 172/210] Finialise optimisation class for multi-backend, Add
 CMAES optimiser, Updt SumofErrors cost function, Adds needs_sensitivities()
 method to optimisers, updates tests, and updts optimisation ouput size

---
 examples/scripts/CMAES.py            |  54 ++++++
 examples/scripts/grad_descent.py     |   6 +-
 examples/scripts/rmse_estimation.py  |   2 +-
 pybop/__init__.py                    |   2 +-
 pybop/costs/error_costs.py           |   3 +-
 pybop/optimisation.py                | 251 ++++++++++++++++++++++-----
 pybop/optimisers/nlopt_optimize.py   |   4 +-
 pybop/optimisers/pints_optimisers.py |  10 ++
 pybop/optimisers/scipy_minimize.py   |   3 +-
 tests/unit/test_parameterisations.py |   6 +-
 10 files changed, 279 insertions(+), 62 deletions(-)
 create mode 100644 examples/scripts/CMAES.py

diff --git a/examples/scripts/CMAES.py b/examples/scripts/CMAES.py
new file mode 100644
index 000000000..272a253a9
--- /dev/null
+++ b/examples/scripts/CMAES.py
@@ -0,0 +1,54 @@
+import pybop
+import numpy as np
+import matplotlib.pyplot as plt
+
+parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
+model = pybop.lithium_ion.SPMe(parameter_set=parameter_set)
+
+# Fitting parameters
+parameters = [
+    pybop.Parameter(
+        "Negative electrode active material volume fraction",
+        prior=pybop.Gaussian(0.7, 0.05),
+        bounds=[0.6, 0.9],
+    ),
+    pybop.Parameter(
+        "Positive electrode active material volume fraction",
+        prior=pybop.Gaussian(0.58, 0.05),
+        bounds=[0.5, 0.8],
+    ),
+]
+
+sigma = 0.001
+t_eval = np.arange(0, 900, 2)
+values = model.predict(t_eval=t_eval)
+CorruptValues = values["Terminal voltage [V]"].data + np.random.normal(
+    0, sigma, len(t_eval)
+)
+
+dataset = [
+    pybop.Dataset("Time [s]", t_eval),
+    pybop.Dataset("Current function [A]", values["Current [A]"].data),
+    pybop.Dataset("Terminal voltage [V]", CorruptValues),
+]
+
+# Generate problem, cost function, and optimisation class
+problem = pybop.Problem(model, parameters, dataset)
+cost = pybop.SumSquaredError(problem)
+opt = pybop.Optimisation(cost, optimiser=pybop.CMAES, verbose=True)
+
+x, final_cost = opt.run()
+print("Estimated parameters:", x)
+
+# Show the generated data
+simulated_values = problem.evaluate(x)
+
+plt.figure(dpi=100)
+plt.xlabel("Time", fontsize=12)
+plt.ylabel("Values", fontsize=12)
+plt.plot(t_eval, CorruptValues, label="Measured")
+plt.fill_between(t_eval, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
+plt.plot(t_eval, simulated_values, label="Simulated")
+plt.legend(bbox_to_anchor=(0.6, 1), loc="upper left", fontsize=12)
+plt.tick_params(axis="both", labelsize=12)
+plt.show()
diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 93f15fdd8..adaabdae8 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -36,11 +36,9 @@
 problem = pybop.Problem(model, parameters, dataset)
 cost = pybop.SumSquaredError(problem)
 opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent)
+opt.optimiser.set_learning_rate(0.025)
 
-opt.learning_rate = 0.025
-opt.max_iterations = 100
-
-x = opt.run()
+x, final_cost = opt.run()
 print("Estimated parameters:", x)
 
 # Show the generated data
diff --git a/examples/scripts/rmse_estimation.py b/examples/scripts/rmse_estimation.py
index 27a3e53e6..19401ed45 100644
--- a/examples/scripts/rmse_estimation.py
+++ b/examples/scripts/rmse_estimation.py
@@ -39,7 +39,7 @@
 parameterisation = pybop.Optimisation(cost=cost, optimiser=pybop.NLoptOptimize)
 
 # Run the optimisation problem
-x, output, final_cost, num_evals = parameterisation.run()
+x, final_cost = parameterisation.run()
 
 # Show the generated data
 simulated_values = problem.evaluate(x)
diff --git a/pybop/__init__.py b/pybop/__init__.py
index 93f457bb5..ec9afe714 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -50,7 +50,7 @@
 from .optimisers.base_optimiser import BaseOptimiser
 from .optimisers.nlopt_optimize import NLoptOptimize
 from .optimisers.scipy_minimize import SciPyMinimize
-from .optimisers.pints_optimisers import GradientDescent
+from .optimisers.pints_optimisers import GradientDescent, CMAES
 
 #
 # Parameter classes
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index c5792e121..68401ae6c 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -73,9 +73,8 @@ def __init__(self, problem):
         if not isinstance(problem, pybop.Problem):
             raise ValueError("This cost function only supports pybop problems")
 
-    def compute(self, x, grad=None):
+    def __call__(self, x, grad=None):
         # Compute the cost
-
         return np.sum(
             (np.sum(((self.problem.evaluate(x) - self._target) ** 2), axis=0)), axis=0
         )
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index 73ed33365..0d9ea451f 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -6,12 +6,20 @@
 class Optimisation:
     """
     Optimisation class for PyBOP.
+    This class provides functionality for PyBOP optimisers and Pints optimisers.
+    args:
+        cost: PyBOP cost function
+        optimiser: A PyBOP or Pints optimiser
+        sigma0: initial step size
+        verbose: print optimisation progress
+
     """
 
     def __init__(
         self,
         cost,
         optimiser,
+        sigma0=None,
         verbose=False,
     ):
         self.cost = cost
@@ -19,25 +27,24 @@ def __init__(
         self.optimiser = optimiser
         self.verbose = verbose
         self.x0 = cost.problem.x0
-        self.bounds = cost.problem.bounds
-        self.fit_parameters = {}
-        self.learning_rate = 0.025
-        self.max_iterations = 200
-        self.max_unchanged_iterations = 10
-        self.max_evaluations = None
-        self.threshold = None
-        self.sigma0 = 0.1
+        self.bounds = self.problem.bounds
+        self.sigma0 = sigma0
+
+        # Convert x0 to pints vector
+        self._x0 = pints.vector(self.x0)
+
+        # PyBOP doesn't currently support the pints transformation class
+        self._transformation = None
 
         # Check if minimising or maximising
         self._minimising = not isinstance(cost, pints.LogPDF)
-
         if self._minimising:
-            self._function = cost
+            self._function = self.cost
         else:
             self._function = pints.ProbabilityBasedError(cost)
         del cost
 
-        # Create optimiser
+        # Construct Optimiser
         if self.optimiser is None or issubclass(self.optimiser, pints.Optimiser):
             self.pints = True
             self.optimiser = self.optimiser or pints.CMAES
@@ -56,47 +63,86 @@ def __init__(
         # Check if sensitivities are required
         self._needs_sensitivities = self.optimiser.needs_sensitivities()
 
+        # Track optimiser's f_best or f_guessed
+        self._use_f_guessed = None
+        self.set_f_guessed_tracking()
+
+        # Parallelisation
+        self._parallel = False
+        self._n_workers = 1
+        self.set_parallel()
+
+        # User callback
+        self._callback = None
+
+        #
+        # Stopping criteria
+        #
+
+        # Maximum iterations
+        self._max_iterations = None
+        self.set_max_iterations()
+
+        # Maximum unchanged iterations
+        self._unchanged_threshold = 1  # smallest significant f change
+        self._unchanged_max_iterations = None
+        self.set_max_unchanged_iterations()
+
+        # Maximum evaluations
+        self._max_evaluations = None
+
+        # Threshold value
+        self._threshold = None
+
+        # Post-run statistics
+        self._evaluations = None
+        self._iterations = None
+
     def run(self):
         """
         Run the optimisation algorithm.
         Selects between PyBOP backend or Pints backend.
         returns:
             x: best parameters
-            output: optimiser output
             final_cost: final cost
-            num_evals: number of evaluations
         """
 
         if self.pints:
-            x, output, final_cost, num_evals = self._run_pints()
+            x, final_cost = self._run_pints()
         elif not self.pints:
-            x, output, final_cost, num_evals = self._run_pybop()
+            x, final_cost = self._run_pybop()
 
-        return x, output, final_cost, num_evals
+        return x, final_cost
 
     def _run_pybop(self):
         """
-        Run method for PyBOP optimisers.
+        Run method for PyBOP based optimisers.
+        returns:
+            x: best parameters
+            final_cost: final cost
         """
-        x, output, final_cost, num_evals = self.optimiser.optimise(
+        x, final_cost = self.optimiser.optimise(
             cost_function=self.cost,
             x0=self.x0,
             bounds=self.bounds,
         )
-        return x, output, final_cost, num_evals
+        return x, final_cost
 
     def _run_pints(self):
         """
         Run method for PINTS optimisers.
-        This method is based on the run method in the PINTS.OptimisationController class.
+        This method is heavily based on the run method in the PINTS.OptimisationController class.
+        returns:
+            x: best parameters
+            final_cost: final cost
         """
 
         # Check stopping criteria
         has_stopping_criterion = False
-        has_stopping_criterion |= self.max_iterations is not None
-        has_stopping_criterion |= self.max_unchanged_iterations is not None
-        has_stopping_criterion |= self.max_evaluations is not None
-        has_stopping_criterion |= self.threshold is not None
+        has_stopping_criterion |= self._max_iterations is not None
+        has_stopping_criterion |= self._unchanged_max_iterations is not None
+        has_stopping_criterion |= self._max_evaluations is not None
+        has_stopping_criterion |= self._threshold is not None
         if not has_stopping_criterion:
             raise ValueError("At least one stopping criterion must be set.")
 
@@ -104,8 +150,7 @@ def _run_pints(self):
         iteration = 0
         evaluations = 0
 
-        # Unchanged iterations count (used for stopping or just for
-        # information)
+        # Unchanged iterations counter
         unchanged_iterations = 0
 
         # Choose method to evaluate
@@ -114,18 +159,28 @@ def _run_pints(self):
             f = f.evaluateS1
 
         # Create evaluator object
-        evaluator = pints.SequentialEvaluator(f)
+        if self._parallel:
+            # Get number of workers
+            n_workers = self._n_workers
+
+            # For population based optimisers, don't use more workers than
+            # particles!
+            if isinstance(self._optimiser, pints.PopulationBasedOptimiser):
+                n_workers = min(n_workers, self._optimiser.population_size())
+            evaluator = pints.ParallelEvaluator(f, n_workers=n_workers)
+        else:
+            evaluator = pints.SequentialEvaluator(f)
 
         # Keep track of current best and best-guess scores.
         fb = fg = np.inf
 
         # Internally we always minimise! Keep a 2nd value to show the user.
-        fb_user, fg_user = (fb, fg) if self._minimising else (-fb, -fg)
+        fg_user = (fb, fg) if self._minimising else (-fb, -fg)
 
         # Keep track of the last significant change
         f_sig = np.inf
 
-        # Set up progress reporting
+        # Run the ask-and-tell loop
         running = True
         try:
             while running:
@@ -140,8 +195,8 @@ def _run_pints(self):
 
                 # Update the scores
                 fb = self.optimiser.f_best()
-                fg = self.optimiser.f_guess()
-                fb_user, fg_user = (fb, fg) if self._minimising else (-fb, -fg)
+                fg = self.optimiser.f_guessed()
+                fg_user = (fb, fg) if self._minimising else (-fb, -fg)
 
                 # Check for significant changes
                 f_new = fg if self._use_f_guessed else fb
@@ -151,23 +206,20 @@ def _run_pints(self):
                 else:
                     unchanged_iterations += 1
 
-                # Update evaluation count
+                # Update counts
                 evaluations += len(fs)
-
-                # Update iteration count
                 iteration += 1
 
-                #
-                # Check stopping criteria
-                #
-
+                # Check stopping criteria:
                 # Maximum number of iterations
                 if (
                     self._max_iterations is not None
                     and iteration >= self._max_iterations
                 ):
                     running = False
-                    ("Maximum number of iterations (" + str(iteration) + ") reached.")
+                    halt_message = (
+                        "Maximum number of iterations (" + str(iteration) + ") reached."
+                    )
 
                 # Maximum number of iterations without significant change
                 halt = (
@@ -176,7 +228,7 @@ def _run_pints(self):
                 )
                 if running and halt:
                     running = False
-                    (
+                    halt_message = (
                         "No significant change for "
                         + str(unchanged_iterations)
                         + " iterations."
@@ -188,7 +240,7 @@ def _run_pints(self):
                     and evaluations >= self._max_evaluations
                 ):
                     running = False
-                    (
+                    halt_message = (
                         "Maximum number of evaluations ("
                         + str(self._max_evaluations)
                         + ") reached."
@@ -198,7 +250,7 @@ def _run_pints(self):
                 halt = self._threshold is not None and f_new < self._threshold
                 if running and halt:
                     running = False
-                    (
+                    halt_message = (
                         "Objective function crossed threshold: "
                         + str(self._threshold)
                         + "."
@@ -206,15 +258,14 @@ def _run_pints(self):
 
                 # Error in optimiser
                 error = self.optimiser.stop()
-                if error:  # pragma: no cover
+                if error:
                     running = False
-                    str(error)
+                    halt_message = str(error)
 
                 elif self._callback is not None:
                     self._callback(iteration - 1, self.optimiser)
 
-        except (Exception, SystemExit, KeyboardInterrupt):  # pragma: no cover
-            # Unexpected end!
+        except (Exception, SystemExit, KeyboardInterrupt):
             # Show last result and exit
             print("\n" + "-" * 40)
             print("Unexpected termination.")
@@ -230,6 +281,9 @@ def _run_pints(self):
             print("-" * 40)
             raise
 
+        if self.verbose:
+            print("Halt: " + halt_message)
+
         # Save post-run statistics
         self._evaluations = evaluations
         self._iterations = iteration
@@ -248,3 +302,108 @@ def _run_pints(self):
 
         # Return best position and score
         return x, f if self._minimising else -f
+
+    def f_guessed_tracking(self):
+        """
+        Returns ``True`` if f_guessed instead of f_best is being tracked,
+        ``False`` otherwise. See also :meth:`set_f_guessed_tracking`.
+
+        Credit: PINTS
+        """
+        return self._use_f_guessed
+
+    def set_f_guessed_tracking(self, use_f_guessed=False):
+        """
+        Sets the method used to track the optimiser progress to
+        :meth:`pints.Optimiser.f_guessed()` or
+        :meth:`pints.Optimiser.f_best()` (default).
+
+        The tracked ``f`` value is used to evaluate stopping criteria.
+
+        Credit: PINTS
+        """
+        self._use_f_guessed = bool(use_f_guessed)
+
+    def set_log_interval(self, iters=20, warm_up=3):
+        """
+        Changes the frequency with which messages are logged.
+
+        Parameters
+        ----------
+        ``interval``
+            A log message will be shown every ``iters`` iterations.
+        ``warm_up``
+            A log message will be shown every iteration, for the first
+            ``warm_up`` iterations.
+
+        Credit: PINTS
+        """
+        iters = int(iters)
+        if iters < 1:
+            raise ValueError("Interval must be greater than zero.")
+        warm_up = max(0, int(warm_up))
+
+        self._message_interval = iters
+        self._message_warm_up = warm_up
+
+    def set_parallel(self, parallel=False):
+        """
+        Enables/disables parallel evaluation.
+
+        If ``parallel=True``, the method will run using a number of worker
+        processes equal to the detected cpu core count. The number of workers
+        can be set explicitly by setting ``parallel`` to an integer greater
+        than 0.
+        Parallelisation can be disabled by setting ``parallel`` to ``0`` or
+        ``False``.
+
+        Credit: PINTS
+        """
+        if parallel is True:
+            self._parallel = True
+            self._n_workers = pints.ParallelEvaluator.cpu_count()
+        elif parallel >= 1:
+            self._parallel = True
+            self._n_workers = int(parallel)
+        else:
+            self._parallel = False
+            self._n_workers = 1
+
+    def set_max_iterations(self, iterations=10000):
+        """
+        Adds a stopping criterion, allowing the routine to halt after the
+        given number of ``iterations``.
+
+        This criterion is enabled by default. To disable it, use
+        ``set_max_iterations(None)``.
+
+        Credit: PINTS
+        """
+        if iterations is not None:
+            iterations = int(iterations)
+            if iterations < 0:
+                raise ValueError("Maximum number of iterations cannot be negative.")
+        self._max_iterations = iterations
+
+    def set_max_unchanged_iterations(self, iterations=200, threshold=1e-11):
+        """
+        Adds a stopping criterion, allowing the routine to halt if the
+        objective function doesn't change by more than ``threshold`` for the
+        given number of ``iterations``.
+
+        This criterion is enabled by default. To disable it, use
+        ``set_max_unchanged_iterations(None)``.
+
+        Credit: PINTS
+        """
+        if iterations is not None:
+            iterations = int(iterations)
+            if iterations < 0:
+                raise ValueError("Maximum number of iterations cannot be negative.")
+
+        threshold = float(threshold)
+        if threshold < 0:
+            raise ValueError("Minimum significant change cannot be negative.")
+
+        self._unchanged_max_iterations = iterations
+        self._unchanged_threshold = threshold
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index 7effdda7e..bced86c08 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -42,11 +42,9 @@ def _runoptimise(self, cost_function, x0, bounds):
         x = self.optim.optimize(x0)
 
         # Get performance statistics
-        output = self.optim
         final_cost = self.optim.last_optimum_value()
-        num_evals = self.optim.get_numevals()
 
-        return x, output, final_cost, num_evals
+        return x, final_cost
 
     def needs_sensitivities(self):
         """
diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index a655bf176..bb6d8d74f 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -2,6 +2,16 @@
 
 
 class GradientDescent(pints.GradientDescent):
+    """
+    Gradient descent optimiser. Inherits from the PINTS gradient descent class.
+    """
+
+    def __init__(self, x0, sigma0=0.1, bounds=None):
+        boundaries = PintsBoundaries(bounds, x0)
+        super().__init__(x0, sigma0, boundaries)
+
+
+class CMAES(pints.CMAES):
     """
     Class for the PINTS optimisation. Extends the BaseOptimiser class.
     """
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index 2d6e909fd..8bb52e780 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -42,9 +42,8 @@ def _runoptimise(self, cost_function, x0, bounds):
         # Get performance statistics
         x = output.x
         final_cost = output.fun
-        num_evals = output.nfev
 
-        return x, output, final_cost, num_evals
+        return x, final_cost
 
     def needs_sensitivities(self):
         """
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index e37031744..1c9c14677 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -56,7 +56,7 @@ def test_spm(self, init_soc):
         parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
 
         # Run the optimisation problem
-        x, _, final_cost, _ = parameterisation.run()
+        x, final_cost = parameterisation.run()
 
         # Assertions
         np.testing.assert_allclose(final_cost, 0, atol=1e-2)
@@ -113,7 +113,7 @@ def test_spme_multiple_optimisers(self, init_soc):
             parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
 
             # Run the optimisation problem
-            x, _, final_cost, _ = parameterisation.run()
+            x, final_cost = parameterisation.run()
 
             # Assertions
             np.testing.assert_allclose(final_cost, 0, atol=1e-2)
@@ -169,7 +169,7 @@ def test_model_misparameterisation(self, init_soc):
         parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
 
         # Run the optimisation problem
-        x, _, final_cost, _ = parameterisation.run()
+        x, final_cost = parameterisation.run()
 
         # Assertions
         with np.testing.assert_raises(AssertionError):

From 2f1abcdba9de4eb0b5c8dac8016e518f0674ec59 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Thu, 9 Nov 2023 15:47:15 +0000
Subject: [PATCH 173/210] Update text

---
 examples/scripts/SPM_example.py  |  8 +++---
 examples/scripts/grad_descent.py | 22 ++++++++++------
 examples/scripts/mle.py          | 43 +++++++++++++++++++-------------
 3 files changed, 44 insertions(+), 29 deletions(-)

diff --git a/examples/scripts/SPM_example.py b/examples/scripts/SPM_example.py
index 82c57ea34..2740b0786 100644
--- a/examples/scripts/SPM_example.py
+++ b/examples/scripts/SPM_example.py
@@ -38,10 +38,10 @@
 # Generate problem, cost function, and optimisation class
 problem = pybop.Problem(model, parameters, dataset)
 cost = pybop.SumSquaredError(problem)
-opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
-opt.optimiser.learning_rate = 0.025
-opt.optimiser.max_iterations = 100
+optim = pybop.Optimisation(cost, optimiser=pybop.GradientDescent())
+optim.optimiser.learning_rate = 0.025
+optim.optimiser.max_iterations = 100
 
 # Run optimisation
-x, output, final_cost, num_evals = opt.run()
+x, output, final_cost, num_evals = optim.run()
 print("Estimated parameters:", x)
diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 6e62f9b18..61ffaea88 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -3,8 +3,10 @@
 import numpy as np
 import matplotlib.pyplot as plt
 
+# Model definition
 model = pybop.lithium_ion.SPMe()
 
+# Input current and fitting parameters
 inputs = {
     "Negative electrode active material volume fraction": 0.58,
     "Positive electrode active material volume fraction": 0.44,
@@ -13,10 +15,12 @@
 t_eval = np.arange(0, 900, 2)
 model.build(fit_parameters=inputs)
 
+# Generate data
 values = model.predict(inputs=inputs, t_eval=t_eval)
 voltage = values["Terminal voltage [V]"].data
 time = values["Time [s]"].data
 
+# Add noise
 sigma = 0.001
 CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
 
@@ -28,26 +32,28 @@
 plt.plot(time, voltage)
 plt.show()
 
-
+# Generate problem
 problem = pints.SingleOutputProblem(model, time, CorruptValues)
 
 # Select a score function
 score = pints.SumOfSquaresError(problem)
 
+# Set the initial parameter values and optimisation class
 x0 = np.array([0.48, 0.55, 1.4])
-opt = pints.OptimisationController(score, x0, method=pints.GradientDescent)
-
-opt.optimiser().set_learning_rate(0.025)
-opt.set_max_unchanged_iterations(50)
-opt.set_max_iterations(200)
+optim = pints.OptimisationController(score, x0, method=pints.GradientDescent)
+optim.optimiser().set_learning_rate(0.025)
+optim.set_max_unchanged_iterations(50)
+optim.set_max_iterations(200)
 
-x1, f1 = opt.run()
+# Run optimisation
+x1, f1 = optim.run()
 print("Estimated parameters:")
 print(x1)
 
-# Show the generated data
+# Generate data using the estimated parameters
 simulated_values = problem.evaluate(x1[:3])
 
+# Show the estimated data
 plt.figure()
 plt.xlabel("Time")
 plt.ylabel("Values")
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index a508ffa46..3d6175d3b 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -3,8 +3,10 @@
 import numpy as np
 import matplotlib.pyplot as plt
 
+# Model definition
 model = pybop.lithium_ion.SPMe()
 
+# Input current and fitting parameters
 inputs = {
     "Negative electrode active material volume fraction": 0.58,
     "Positive electrode active material volume fraction": 0.44,
@@ -13,44 +15,51 @@
 t_eval = np.arange(0, 900, 2)
 model.build(fit_parameters=inputs)
 
+# Generate data
 values = model.predict(inputs=inputs, t_eval=t_eval)
 voltage = values["Terminal voltage [V]"].data
 time = values["Time [s]"].data
 
+# Add noise
 sigma = 0.001
-CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
+corrupt_values = voltage + np.random.normal(0, sigma, len(voltage))
 
 # Show the generated data
 plt.figure()
-plt.xlabel("Time")
-plt.ylabel("Values")
-plt.plot(time, CorruptValues)
-plt.plot(time, voltage)
+#plt.title("Synthetic data and corrupted signal")
+plt.xlabel("Time (s)")
+plt.ylabel("Voltage (V)")
+plt.plot(time, corrupt_values, label="corrupted signal")
+plt.plot(time, voltage, label="synthetic data")
+plt.legend(loc="upper right")
 plt.show()
 
-
-problem = pints.SingleOutputProblem(model, time, CorruptValues)
+# Generate problem, cost function, and optimisation class
+problem = pints.SingleOutputProblem(model, time, corrupt_values)
 log_likelihood = pints.GaussianLogLikelihood(problem)
 boundaries = pints.RectangularBoundaries([0.4, 0.4, 0.7, 1e-5], [0.6, 0.6, 2.1, 1e-1])
-
 x0 = np.array([0.48, 0.55, 1.4, 1e-3])
-opt = pints.OptimisationController(
+optim = pints.OptimisationController(
     log_likelihood, x0, boundaries=boundaries, method=pints.CMAES
 )
-opt.set_max_unchanged_iterations(50)
-opt.set_max_iterations(200)
+optim.set_max_unchanged_iterations(50)
+optim.set_max_iterations(200)
 
-x1, f1 = opt.run()
+# Run optimisation
+x1, f1 = optim.run()
 print("Estimated parameters:")
 print(x1)
 
-# Show the generated data
+# Generate data using the estimated parameters
 simulated_values = problem.evaluate(x1[:3])
 
+# Show the generated data
 plt.figure()
-plt.xlabel("Time")
-plt.ylabel("Values")
-plt.plot(time, CorruptValues)
+#plt.title("Corrupted signal and estimation")
+plt.xlabel("Time (s)")
+plt.ylabel("Voltage (V)")
+plt.plot(time, corrupt_values, label="corrupted signal")
 plt.fill_between(time, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
-plt.plot(time, simulated_values)
+plt.plot(time, simulated_values, label="estimation")
+plt.legend(loc="upper right")
 plt.show()

From bf350ee1c5437215dc3607f6c708a624c58f1d13 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Thu, 9 Nov 2023 15:48:25 +0000
Subject: [PATCH 174/210] Rename SPM_example to spm_example

---
 examples/scripts/{SPM_example.py => spm_example.py} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename examples/scripts/{SPM_example.py => spm_example.py} (100%)

diff --git a/examples/scripts/SPM_example.py b/examples/scripts/spm_example.py
similarity index 100%
rename from examples/scripts/SPM_example.py
rename to examples/scripts/spm_example.py

From edf4b151500ca65db14764215f8ce5b383ccc2dc Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Thu, 9 Nov 2023 15:52:08 +0000
Subject: [PATCH 175/210] Fix braces

---
 README.md | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/README.md b/README.md
index 8592bf7dd..ba56774f3 100644
--- a/README.md
+++ b/README.md
@@ -103,13 +103,13 @@ These general cases encompass a wide variety of optimisation problems, which req
 
 PyBOP comes with a number of example notebooks and scripts which can be found in the examples folder.
 
-The (`spm_example` script)[https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/spm_example.py] illustrates a straightforward example that begins by creating artificial data from a single particle model (SPM). The unknown parameter values are then discovered by implementing an RMSE cost function using the terminal voltage as the observed signal. The main output is the set of estimated parameters, namely the negative and positive electrode active material volume fractions in this example. To run this example:
+The [`spm_example` script](https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/spm_example.py) illustrates a straightforward example that begins by creating artificial data from a single particle model (SPM). The unknown parameter values are then discovered by implementing an RMSE cost function using the terminal voltage as the observed signal. The main output is the set of estimated parameters, namely the negative and positive electrode active material volume fractions in this example. To run this example:
 
 ```bash
 python examples/scripts/spm_example.py
 ```
 
-The (`RMSE_estimation` script)[https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/rmse_estimation.py] provides a second example which differs by importing the example `Chen_example.csv` dataset and then estimates the same SPM parameters based on the same RMSE cost function. To run this example:
+The [`RMSE_estimation` script](https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/rmse_estimation.py) provides a second example which differs by importing the example `Chen_example.csv` dataset and then estimates the same SPM parameters based on the same RMSE cost function. To run this example:
 
 ```bash
 python examples/scripts/rmse_estimation.py

From f41d4263f517a22cefc903692316b9e5927474ad Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Thu, 9 Nov 2023 16:08:27 +0000
Subject: [PATCH 176/210] Switch show to draw so scripts run to the end

---
 examples/scripts/grad_descent.py | 2 +-
 examples/scripts/mle.py          | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 61ffaea88..22b657574 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -30,7 +30,7 @@
 plt.ylabel("Values")
 plt.plot(time, CorruptValues)
 plt.plot(time, voltage)
-plt.show()
+plt.draw() # use draw instead of show so that computation continues
 
 # Generate problem
 problem = pints.SingleOutputProblem(model, time, CorruptValues)
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index 3d6175d3b..1658d83f7 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -32,7 +32,7 @@
 plt.plot(time, corrupt_values, label="corrupted signal")
 plt.plot(time, voltage, label="synthetic data")
 plt.legend(loc="upper right")
-plt.show()
+plt.draw() # use draw instead of show so that computation continues
 
 # Generate problem, cost function, and optimisation class
 problem = pints.SingleOutputProblem(model, time, corrupt_values)

From a3b314905d2043fe3d4cbe8e099ba6191fc7d065 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 9 Nov 2023 16:15:51 +0000
Subject: [PATCH 177/210] Fix bugs and small changes added during development

---
 pybop/_problem.py                    | 17 ++++++++++-------
 pybop/costs/error_costs.py           | 10 ++++++++--
 pybop/optimisers/nlopt_optimize.py   |  2 +-
 pybop/optimisers/pints_optimisers.py | 19 -------------------
 pybop/optimisers/scipy_minimize.py   |  6 ++----
 tests/unit/test_cost.py              |  6 +++---
 6 files changed, 24 insertions(+), 36 deletions(-)

diff --git a/pybop/_problem.py b/pybop/_problem.py
index 9f8c2bf4e..2cdc5544b 100644
--- a/pybop/_problem.py
+++ b/pybop/_problem.py
@@ -25,6 +25,7 @@ def __init__(
         self.init_soc = init_soc
         self.x0 = x0
         self.n_parameters = len(self.parameters)
+        self.n_outputs = len([self.signal])
 
         # Check that the dataset contains time and current
         for name in ["Time [s]", "Current function [A]", signal]:
@@ -32,6 +33,7 @@ def __init__(
                 raise ValueError(f"expected {name} in list of dataset")
 
         self._time_data = self._dataset["Time [s]"].data
+        self.n_time_data = len(self._time_data)
         self._target = self._dataset[signal].data
 
         if np.any(self._time_data < 0):
@@ -58,14 +60,15 @@ def __init__(
         for i, param in enumerate(self.parameters):
             param.update(value=self.x0[i])
 
+        # Set the fitting parameters and build the model
         self.fit_parameters = {o.name: o.value for o in parameters}
-        # if self._model._built_model is None:
-        self._model.build(
-            dataset=self._dataset,
-            fit_parameters=self.fit_parameters,
-            check_model=self.check_model,
-            init_soc=self.init_soc,
-        )
+        if self._model._built_model is None:
+            self._model.build(
+                dataset=self._dataset,
+                fit_parameters=self.fit_parameters,
+                check_model=self.check_model,
+                init_soc=self.init_soc,
+            )
 
     def evaluate(self, parameters):
         """
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index 68401ae6c..00fa9182f 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -53,7 +53,7 @@ def __init__(self, problem):
         if not isinstance(problem, pybop.Problem):
             raise ValueError("This cost function only supports pybop problems")
 
-    def compute(self, x, grad=None):
+    def __call__(self, x, grad=None):
         # Compute the cost
         try:
             return np.sqrt(np.mean((self.problem.evaluate(x) - self._target) ** 2))
@@ -82,7 +82,13 @@ def __call__(self, x, grad=None):
     def evaluateS1(self, x):
         # Compute the cost
         y, dy = self.problem.evaluateS1(x)
-        dy = dy.reshape((450, 1, self.problem.n_parameters))
+        dy = dy.reshape(
+            (
+                self.problem.n_time_data,
+                self.problem.n_outputs,
+                self.problem.n_parameters,
+            )
+        )
         r = y - self._target
         e = np.sum(np.sum(r**2, axis=0), axis=0)
         de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1)
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index bced86c08..2bc3be85c 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -34,7 +34,7 @@ def _runoptimise(self, cost_function, x0, bounds):
         """
 
         # Pass settings to the optimiser
-        self.optim.set_min_objective(cost_function.compute)
+        self.optim.set_min_objective(cost_function)
         self.optim.set_lower_bounds(bounds["lower"])
         self.optim.set_upper_bounds(bounds["upper"])
 
diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index bb6d8d74f..621e02ae6 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -60,22 +60,3 @@ def n_parameters(self):
         defined on.
         """
         return len(self.x0)
-
-    # def sample(self, n=1):
-    #     """
-    #     Returns ``n`` random samples from within the boundaries, for example to
-    #     use as starting points for an optimisation.
-
-    #     The returned value is a NumPy array with shape ``(n, d)`` where ``n``
-    #     is the requested number of samples, and ``d`` is the dimension of the
-    #     parameter space these boundaries are defined on.
-
-    #     *Note that implementing :meth:`sample()` is optional, so some boundary
-    #     types may not support it.*
-
-    #     Parameters
-    #     ----------
-    #     n : int
-    #         The number of points to sample
-    #     """
-    #     raise NotImplementedError
diff --git a/pybop/optimisers/scipy_minimize.py b/pybop/optimisers/scipy_minimize.py
index 8bb52e780..083d93c53 100644
--- a/pybop/optimisers/scipy_minimize.py
+++ b/pybop/optimisers/scipy_minimize.py
@@ -33,11 +33,9 @@ def _runoptimise(self, cost_function, x0, bounds):
             bounds = (
                 (lower, upper) for lower, upper in zip(bounds["lower"], bounds["upper"])
             )
-            output = minimize(
-                cost_function.compute, x0, method=self.method, bounds=bounds
-            )
+            output = minimize(cost_function, x0, method=self.method, bounds=bounds)
         else:
-            output = minimize(cost_function.compute, x0, method=self.method)
+            output = minimize(cost_function, x0, method=self.method)
 
         # Get performance statistics
         x = output.x
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 363a8b63e..ec109ec95 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -33,10 +33,10 @@ def test_RootMeanSquaredError(self):
         signal = "Voltage [V]"
         problem = pybop.Problem(model, parameters, dataset, signal=signal)
         cost = pybop.RootMeanSquaredError(problem)
-        cost.compute([0.5])
+        cost([0.5])
 
-        assert type(cost.compute([0.5])) == np.float64
-        assert cost.compute([0.5]) >= 0
+        assert type(cost([0.5])) == np.float64
+        assert cost([0.5]) >= 0
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From 0edf919a5310244a51e5f24c342b16cf5b7d3dea Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Mon, 13 Nov 2023 17:58:50 +0000
Subject: [PATCH 178/210] chore: update pre-commit hooks
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

updates:
- [github.com/astral-sh/ruff-pre-commit: v0.1.4 → v0.1.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.1.4...v0.1.5)
---
 .pre-commit-config.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 8fca335a6..5270e26ff 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -4,7 +4,7 @@ ci:
 
 repos:
   - repo: https://github.com/astral-sh/ruff-pre-commit
-    rev: "v0.1.4"
+    rev: "v0.1.5"
     hooks:
       - id: ruff
         args: [--fix, --show-fixes]

From cc6ba0ffba1222f9c14aaa39f3fc1640d6354538 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 15 Nov 2023 12:03:04 +0000
Subject: [PATCH 179/210] Udt. Cost base class, add optimisation evolution log,
 updt. parameter variables, remove redundant base model methods

---
 examples/scripts/grad_descent.py | 12 +++----
 examples/scripts/mle.py          | 57 --------------------------------
 pybop/costs/error_costs.py       | 55 ++++++++++++++----------------
 pybop/models/base_model.py       | 12 -------
 pybop/optimisation.py            |  3 +-
 tests/unit/test_models.py        |  6 ----
 6 files changed, 33 insertions(+), 112 deletions(-)
 delete mode 100644 examples/scripts/mle.py

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index adaabdae8..7f8e46e3e 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -22,23 +22,23 @@
 sigma = 0.001
 t_eval = np.arange(0, 900, 2)
 values = model.predict(t_eval=t_eval)
-CorruptValues = values["Terminal voltage [V]"].data + np.random.normal(
+corrupt_values = values["Terminal voltage [V]"].data + np.random.normal(
     0, sigma, len(t_eval)
 )
 
 dataset = [
     pybop.Dataset("Time [s]", t_eval),
     pybop.Dataset("Current function [A]", values["Current [A]"].data),
-    pybop.Dataset("Terminal voltage [V]", CorruptValues),
+    pybop.Dataset("Terminal voltage [V]", corrupt_values),
 ]
 
 # Generate problem, cost function, and optimisation class
 problem = pybop.Problem(model, parameters, dataset)
 cost = pybop.SumSquaredError(problem)
-opt = pybop.Optimisation(cost, optimiser=pybop.GradientDescent)
-opt.optimiser.set_learning_rate(0.025)
+optim = pybop.Optimisation(cost, optimiser=pybop.GradientDescent)
+optim.optimiser.set_learning_rate(0.025)
 
-x, final_cost = opt.run()
+x, final_cost = optim.run()
 print("Estimated parameters:", x)
 
 # Show the generated data
@@ -47,7 +47,7 @@
 plt.figure(dpi=100)
 plt.xlabel("Time", fontsize=12)
 plt.ylabel("Values", fontsize=12)
-plt.plot(t_eval, CorruptValues, label="Measured")
+plt.plot(t_eval, corrupt_values, label="Measured")
 plt.fill_between(t_eval, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
 plt.plot(t_eval, simulated_values, label="Simulated")
 plt.legend(bbox_to_anchor=(0.6, 1), loc="upper left", fontsize=12)
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
deleted file mode 100644
index ad2d7514d..000000000
--- a/examples/scripts/mle.py
+++ /dev/null
@@ -1,57 +0,0 @@
-import pybop
-import pints
-import numpy as np
-import matplotlib.pyplot as plt
-
-model = pybop.lithium_ion.SPMe()
-model.signal = "Terminal voltage [V]"
-
-inputs = {
-    "Negative electrode active material volume fraction": 0.58,
-    "Positive electrode active material volume fraction": 0.44,
-    "Current function [A]": 1,
-}
-t_eval = np.arange(0, 900, 2)
-model.build(fit_parameters=inputs)
-
-values = model.predict(inputs=inputs, t_eval=t_eval)
-voltage = values["Terminal voltage [V]"].data
-time = values["Time [s]"].data
-
-sigma = 0.001
-CorruptValues = voltage + np.random.normal(0, sigma, len(voltage))
-
-# Show the generated data
-plt.figure()
-plt.xlabel("Time")
-plt.ylabel("Values")
-plt.plot(time, CorruptValues)
-plt.plot(time, voltage)
-plt.show()
-
-
-problem = pints.SingleOutputProblem(model, time, CorruptValues)
-log_likelihood = pints.GaussianLogLikelihood(problem)
-boundaries = pints.RectangularBoundaries([0.4, 0.4, 0.7, 1e-5], [0.6, 0.6, 2.1, 1e-1])
-
-x0 = np.array([0.48, 0.55, 1.4, 1e-3])
-opt = pints.OptimisationController(
-    log_likelihood, x0, boundaries=boundaries, method=pints.CMAES
-)
-opt.set_max_unchanged_iterations(50)
-opt.set_max_iterations(200)
-
-x1, f1 = opt.run()
-print("Estimated parameters:")
-print(x1)
-
-# Show the generated data
-simulated_values = problem.evaluate(x1[:3])
-
-plt.figure()
-plt.xlabel("Time")
-plt.ylabel("Values")
-plt.plot(time, CorruptValues)
-plt.fill_between(time, simulated_values - sigma, simulated_values + sigma, alpha=0.2)
-plt.plot(time, simulated_values)
-plt.show()
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index 00fa9182f..f6918dc51 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -9,12 +9,13 @@ class BaseCost:
     Lower cost values indicate a better fit.
     """
 
-    def __call__(self, x):
-        raise NotImplementedError
+    def __init__(self, problem):
+        self.problem = problem
+        self._target = problem._target
 
-    def compute(self, x):
+    def __call__(self, x, grad=None):
         """
-        Calls the forward models and computes the cost.
+        Returns the cost function value and computes the cost.
         """
         raise NotImplementedError
 
@@ -25,24 +26,7 @@ def n_parameters(self):
         raise NotImplementedError
 
 
-class ProblemCost(BaseCost):
-    """
-    Extends the base cost function class for a single output problem.
-    """
-
-    def __init__(self, problem):
-        super(ProblemCost, self).__init__()
-        self.problem = problem
-        self._target = problem._target
-
-    def n_parameters(self):
-        """
-        Returns the dimension of the parameter space.
-        """
-        return self.problem.n_parameters
-
-
-class RootMeanSquaredError(ProblemCost):
+class RootMeanSquaredError(BaseCost):
     """
     Defines the root mean square error cost function.
     """
@@ -54,15 +38,17 @@ def __init__(self, problem):
             raise ValueError("This cost function only supports pybop problems")
 
     def __call__(self, x, grad=None):
-        # Compute the cost
+        """
+        Computes the cost.
+        """
         try:
             return np.sqrt(np.mean((self.problem.evaluate(x) - self._target) ** 2))
 
         except Exception as e:
-            raise ValueError(f"Error in RMSE calculation: {e}")
+            raise ValueError(f"Error in cost calculation: {e}")
 
 
-class SumSquaredError(ProblemCost):
+class SumSquaredError(BaseCost):
     """
     Defines the sum squared error cost function.
     """
@@ -74,13 +60,22 @@ def __init__(self, problem):
             raise ValueError("This cost function only supports pybop problems")
 
     def __call__(self, x, grad=None):
-        # Compute the cost
-        return np.sum(
-            (np.sum(((self.problem.evaluate(x) - self._target) ** 2), axis=0)), axis=0
-        )
+        """
+        Computes the cost.
+        """
+        try:
+            return np.sum(
+                (np.sum(((self.problem.evaluate(x) - self._target) ** 2), axis=0)),
+                axis=0,
+            )
+        except Exception as e:
+            raise ValueError(f"Error in cost calculation: {e}")
 
     def evaluateS1(self, x):
-        # Compute the cost
+        """
+        Compute the cost and corresponding
+        gradients with respect to the parameters.
+        """
         y, dy = self.problem.evaluateS1(x)
         dy = dy.reshape(
             (
diff --git a/pybop/models/base_model.py b/pybop/models/base_model.py
index 0584fb276..ced38437e 100644
--- a/pybop/models/base_model.py
+++ b/pybop/models/base_model.py
@@ -187,18 +187,6 @@ def predict(
         else:
             raise ValueError("This sim method currently only supports PyBaMM models")
 
-    def n_parameters(self):
-        """
-        Returns the dimension of the parameter space.
-        """
-        return len(self.fit_parameters)
-
-    def n_outputs(self):
-        """
-        Returns the number of outputs this model has. The default is 1.
-        """
-        return 1
-
     @property
     def built_model(self):
         return self._built_model
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index 0d9ea451f..946e9b82d 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -29,6 +29,7 @@ def __init__(
         self.x0 = cost.problem.x0
         self.bounds = self.problem.bounds
         self.sigma0 = sigma0
+        self.log = []
 
         # Convert x0 to pints vector
         self._x0 = pints.vector(self.x0)
@@ -186,7 +187,7 @@ def _run_pints(self):
             while running:
                 # Ask optimiser for new points
                 xs = self.optimiser.ask()
-
+                self.log.append(xs)
                 # Evaluate points
                 fs = evaluator.evaluate(xs)
 
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index 09c47d730..ba47b0bfb 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -22,9 +22,3 @@ def test_build(self):
         model = pybop.lithium_ion.SPM()
         model.build()
         assert model.built_model is not None
-
-    @pytest.mark.unit
-    def test_n_parameters(self):
-        model = pybop.BaseModel()
-        n = model.n_outputs()
-        assert isinstance(n, int)

From 077dad7e745c97dc9b08f234002802996abafabf Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Wed, 15 Nov 2023 12:15:13 +0000
Subject: [PATCH 180/210] style: pre-commit fixes

---
 examples/scripts/grad_descent.py | 2 +-
 examples/scripts/mle.py          | 6 +++---
 examples/scripts/spm_example.py  | 1 -
 3 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 22b657574..6ba619b60 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -30,7 +30,7 @@
 plt.ylabel("Values")
 plt.plot(time, CorruptValues)
 plt.plot(time, voltage)
-plt.draw() # use draw instead of show so that computation continues
+plt.draw()  # use draw instead of show so that computation continues
 
 # Generate problem
 problem = pints.SingleOutputProblem(model, time, CorruptValues)
diff --git a/examples/scripts/mle.py b/examples/scripts/mle.py
index 1658d83f7..b139809a8 100644
--- a/examples/scripts/mle.py
+++ b/examples/scripts/mle.py
@@ -26,13 +26,13 @@
 
 # Show the generated data
 plt.figure()
-#plt.title("Synthetic data and corrupted signal")
+# plt.title("Synthetic data and corrupted signal")
 plt.xlabel("Time (s)")
 plt.ylabel("Voltage (V)")
 plt.plot(time, corrupt_values, label="corrupted signal")
 plt.plot(time, voltage, label="synthetic data")
 plt.legend(loc="upper right")
-plt.draw() # use draw instead of show so that computation continues
+plt.draw()  # use draw instead of show so that computation continues
 
 # Generate problem, cost function, and optimisation class
 problem = pints.SingleOutputProblem(model, time, corrupt_values)
@@ -55,7 +55,7 @@
 
 # Show the generated data
 plt.figure()
-#plt.title("Corrupted signal and estimation")
+# plt.title("Corrupted signal and estimation")
 plt.xlabel("Time (s)")
 plt.ylabel("Voltage (V)")
 plt.plot(time, corrupt_values, label="corrupted signal")
diff --git a/examples/scripts/spm_example.py b/examples/scripts/spm_example.py
index 2740b0786..d352260bd 100644
--- a/examples/scripts/spm_example.py
+++ b/examples/scripts/spm_example.py
@@ -1,6 +1,5 @@
 import pybop
 import numpy as np
-import matplotlib.pyplot as plt
 
 # Parameter set and model definition
 parameter_set = pybop.ParameterSet("pybamm", "Chen2020")

From 1e1f911bf2f0708253bff5a11ddb17bc9b3930d0 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Wed, 15 Nov 2023 20:08:30 +0000
Subject: [PATCH 181/210] Updt tests, iters limit on examples, refact optimiser
 construction, refactor PintsBoundaries.check()

---
 examples/scripts/CMAES.py            |  5 ++--
 examples/scripts/grad_descent.py     |  1 +
 pybop/__init__.py                    |  2 +-
 pybop/costs/error_costs.py           |  7 -----
 pybop/optimisation.py                | 33 +++++++++++++-----------
 pybop/optimisers/nlopt_optimize.py   |  5 ++--
 pybop/optimisers/pints_optimisers.py | 28 ++++++++++----------
 tests/unit/test_cost.py              | 21 +++++++++++++--
 tests/unit/test_models.py            |  4 +++
 tests/unit/test_optimisation.py      | 38 ++++++++++++++++++++++++++++
 tests/unit/test_problem.py           |  3 +++
 11 files changed, 103 insertions(+), 44 deletions(-)

diff --git a/examples/scripts/CMAES.py b/examples/scripts/CMAES.py
index 272a253a9..65315b41e 100644
--- a/examples/scripts/CMAES.py
+++ b/examples/scripts/CMAES.py
@@ -35,9 +35,10 @@
 # Generate problem, cost function, and optimisation class
 problem = pybop.Problem(model, parameters, dataset)
 cost = pybop.SumSquaredError(problem)
-opt = pybop.Optimisation(cost, optimiser=pybop.CMAES, verbose=True)
+optim = pybop.Optimisation(cost, optimiser=pybop.CMAES)
+optim.set_max_iterations(100)
 
-x, final_cost = opt.run()
+x, final_cost = optim.run()
 print("Estimated parameters:", x)
 
 # Show the generated data
diff --git a/examples/scripts/grad_descent.py b/examples/scripts/grad_descent.py
index 7f8e46e3e..8eb53a1e7 100644
--- a/examples/scripts/grad_descent.py
+++ b/examples/scripts/grad_descent.py
@@ -37,6 +37,7 @@
 cost = pybop.SumSquaredError(problem)
 optim = pybop.Optimisation(cost, optimiser=pybop.GradientDescent)
 optim.optimiser.set_learning_rate(0.025)
+optim.set_max_iterations(100)
 
 x, final_cost = optim.run()
 print("Estimated parameters:", x)
diff --git a/pybop/__init__.py b/pybop/__init__.py
index ec9afe714..29dcd88b1 100644
--- a/pybop/__init__.py
+++ b/pybop/__init__.py
@@ -26,7 +26,7 @@
 #
 # Cost function class
 #
-from .costs.error_costs import RootMeanSquaredError, SumSquaredError
+from .costs.error_costs import BaseCost, RootMeanSquaredError, SumSquaredError
 
 #
 # Dataset class
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index f6918dc51..c36d372f5 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -1,5 +1,4 @@
 import numpy as np
-import pybop
 
 
 class BaseCost:
@@ -34,9 +33,6 @@ class RootMeanSquaredError(BaseCost):
     def __init__(self, problem):
         super(RootMeanSquaredError, self).__init__(problem)
 
-        if not isinstance(problem, pybop.Problem):
-            raise ValueError("This cost function only supports pybop problems")
-
     def __call__(self, x, grad=None):
         """
         Computes the cost.
@@ -56,9 +52,6 @@ class SumSquaredError(BaseCost):
     def __init__(self, problem):
         super(SumSquaredError, self).__init__(problem)
 
-        if not isinstance(problem, pybop.Problem):
-            raise ValueError("This cost function only supports pybop problems")
-
     def __call__(self, x, grad=None):
         """
         Computes the cost.
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index 946e9b82d..e890e45dd 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -46,20 +46,26 @@ def __init__(
         del cost
 
         # Construct Optimiser
-        if self.optimiser is None or issubclass(self.optimiser, pints.Optimiser):
-            self.pints = True
-            self.optimiser = self.optimiser or pints.CMAES
-            self.optimiser = optimiser(self.x0, self.sigma0, self.bounds)
+        self.pints = True
 
-        elif issubclass(self.optimiser, pybop.NLoptOptimize):
+        if self.optimiser is None:
+            self.optimiser = pints.CMAES
+        elif issubclass(self.optimiser, pints.Optimiser):
+            pass
+        else:
             self.pints = False
-            self.optimiser = self.optimiser(self.problem.n_parameters)
 
-        elif issubclass(self.optimiser, pybop.SciPyMinimize):
-            self.pints = False
-            self.optimiser = self.optimiser()
-        else:
-            raise ValueError("Optimiser selected is not supported.")
+            if issubclass(self.optimiser, pybop.NLoptOptimize):
+                self.optimiser = self.optimiser(self.problem.n_parameters)
+
+            elif issubclass(self.optimiser, pybop.SciPyMinimize):
+                self.optimiser = self.optimiser()
+
+            else:
+                raise ValueError("Unknown optimiser type")
+
+        if self.pints:
+            self.optimiser = self.optimiser(self.x0, self.sigma0, self.bounds)
 
         # Check if sensitivities are required
         self._needs_sensitivities = self.optimiser.needs_sensitivities()
@@ -76,10 +82,7 @@ def __init__(
         # User callback
         self._callback = None
 
-        #
-        # Stopping criteria
-        #
-
+        # Define stopping criteria
         # Maximum iterations
         self._max_iterations = None
         self.set_max_iterations()
diff --git a/pybop/optimisers/nlopt_optimize.py b/pybop/optimisers/nlopt_optimize.py
index 2bc3be85c..5c0da8f47 100644
--- a/pybop/optimisers/nlopt_optimize.py
+++ b/pybop/optimisers/nlopt_optimize.py
@@ -10,11 +10,12 @@ class NLoptOptimize(BaseOptimiser):
     def __init__(self, n_param, xtol=None, method=None):
         super().__init__()
         self.name = "NLoptOptimize"
+        self.n_param = n_param
 
         if method is not None:
-            self.optim = nlopt.opt(method, n_param)
+            self.optim = nlopt.opt(method, self.n_param)
         else:
-            self.optim = nlopt.opt(nlopt.LN_BOBYQA, n_param)
+            self.optim = nlopt.opt(nlopt.LN_BOBYQA, self.n_param)
 
         if xtol is not None:
             self.optim.set_xtol_rel(xtol)
diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index 621e02ae6..903d4d560 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -37,22 +37,20 @@ def check(self, parameters):
         """
         Returns ``True`` if and only if the given point in parameter space is
         within the boundaries.
-
-        Parameters
-        ----------
-        parameters
-            A point in parameter space
         """
-        result = False
-        if (
-            parameters[0] >= self.bounds["lower"][0]
-            and parameters[1] >= self.bounds["lower"][1]
-            and parameters[0] <= self.bounds["upper"][0]
-            and parameters[1] <= self.bounds["upper"][1]
-        ):
-            result = True
-
-        return result
+
+        lower_bounds = self.bounds["lower"]
+        upper_bounds = self.bounds["upper"]
+
+        if len(parameters) != len(lower_bounds):
+            raise ValueError("Parameters length mismatch")
+
+        within_bounds = all(
+            low <= param <= high
+            for low, high, param in zip(lower_bounds, upper_bounds, parameters)
+        )
+
+        return within_bounds
 
     def n_parameters(self):
         """
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index ec109ec95..71fc6237a 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -9,8 +9,8 @@ class TestCosts:
     """
 
     @pytest.mark.unit
-    def test_RootMeanSquaredError(self):
-        # Tests cost function
+    def test_costs(self):
+        # Construct Problem
         model = pybop.lithium_ion.SPM()
         parameters = [
             pybop.Parameter(
@@ -32,12 +32,29 @@ def test_RootMeanSquaredError(self):
 
         signal = "Voltage [V]"
         problem = pybop.Problem(model, parameters, dataset, signal=signal)
+
+        # Base Cost
+        cost = pybop.BaseCost(problem)
+        assert cost.problem == problem
+        with pytest.raises(NotImplementedError):
+            cost([0.5])
+        with pytest.raises(NotImplementedError):
+            cost.n_parameters()
+
+        # Root Mean Squared Error
         cost = pybop.RootMeanSquaredError(problem)
         cost([0.5])
 
         assert type(cost([0.5])) == np.float64
         assert cost([0.5]) >= 0
 
+        # Root Mean Squared Error
+        cost = pybop.SumSquaredError(problem)
+        cost([0.5])
+
+        assert type(cost([0.5])) == np.float64
+        assert cost([0.5]) >= 0
+
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values
         model.parameter_set.update(
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index ba47b0bfb..5d1c095cb 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -22,3 +22,7 @@ def test_build(self):
         model = pybop.lithium_ion.SPM()
         model.build()
         assert model.built_model is not None
+
+        # Test that the model can be built again
+        model.build()
+        assert model.built_model is not None
diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index c77055e2f..8c33732a6 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -35,3 +35,41 @@ def test_prior_sampling(self):
             opt = pybop.Optimisation(cost=cost, optimiser=pybop.NLoptOptimize)
 
             assert opt.x0 <= 0.77 and opt.x0 >= 0.73
+
+    @pytest.mark.unit
+    def test_optimiser_construction(self):
+        # Tests construction of optimisers
+
+        dataset = [
+            pybop.Dataset("Time [s]", np.linspace(0, 360, 10)),
+            pybop.Dataset("Current function [A]", np.zeros(10)),
+            pybop.Dataset("Terminal voltage [V]", np.ones(10)),
+        ]
+        parameters = [
+            pybop.Parameter(
+                "Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.75, 0.2),
+                bounds=[0.73, 0.77],
+            )
+        ]
+
+        problem = pybop.Problem(pybop.lithium_ion.SPM(), parameters, dataset, signal="Terminal voltage [V]")
+        cost = pybop.SumSquaredError(problem)
+
+        opt = pybop.Optimisation(cost=cost, optimiser=pybop.NLoptOptimize)
+        assert opt.optimiser is not None
+        assert opt.optimiser.name == "NLoptOptimize"
+        assert opt.optimiser.n_param == 1
+
+        opt = pybop.Optimisation(cost=cost, optimiser=pybop.GradientDescent)
+        assert opt.optimiser is not None
+        # assert issubclass(opt.optimiser, pybop.GradientDescent)
+
+        opt = pybop.Optimisation(cost=cost, optimiser=pybop.SciPyMinimize)
+        assert opt.optimiser is not None
+        assert opt.optimiser.name == "SciPyMinimize"
+
+        class randomclass:
+            pass
+        with pytest.raises(ValueError):
+            pybop.Optimisation(cost=cost, optimiser=randomclass)
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
index ec415dc53..54e8f0bab 100644
--- a/tests/unit/test_problem.py
+++ b/tests/unit/test_problem.py
@@ -42,6 +42,9 @@ def test_problem(self):
         assert problem._model == model
         assert problem._model._built_model is not None
 
+        # Test model.simulate
+        model.simulate(inputs=[0.5,0.5], t_eval=np.linspace(0, 10, 100))
+
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values
 

From 53f6c727e31fae9539709f1ddc3403d83d3370b1 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Wed, 15 Nov 2023 20:08:46 +0000
Subject: [PATCH 182/210] style: pre-commit fixes

---
 tests/unit/test_optimisation.py | 5 ++++-
 tests/unit/test_problem.py      | 2 +-
 2 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index 8c33732a6..da7ff7706 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -53,7 +53,9 @@ def test_optimiser_construction(self):
             )
         ]
 
-        problem = pybop.Problem(pybop.lithium_ion.SPM(), parameters, dataset, signal="Terminal voltage [V]")
+        problem = pybop.Problem(
+            pybop.lithium_ion.SPM(), parameters, dataset, signal="Terminal voltage [V]"
+        )
         cost = pybop.SumSquaredError(problem)
 
         opt = pybop.Optimisation(cost=cost, optimiser=pybop.NLoptOptimize)
@@ -71,5 +73,6 @@ def test_optimiser_construction(self):
 
         class randomclass:
             pass
+
         with pytest.raises(ValueError):
             pybop.Optimisation(cost=cost, optimiser=randomclass)
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
index 54e8f0bab..93879f395 100644
--- a/tests/unit/test_problem.py
+++ b/tests/unit/test_problem.py
@@ -43,7 +43,7 @@ def test_problem(self):
         assert problem._model._built_model is not None
 
         # Test model.simulate
-        model.simulate(inputs=[0.5,0.5], t_eval=np.linspace(0, 10, 100))
+        model.simulate(inputs=[0.5, 0.5], t_eval=np.linspace(0, 10, 100))
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From 8f7f4fae8ed3858c20b59a47bcbcb831b188206d Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 16 Nov 2023 10:19:43 +0000
Subject: [PATCH 183/210] Add tests, remove redundant method from optimisation,
 add try-except functionality to cost.evaluateS1, optimiser now optional input
 to Optimisation

---
 pybop/costs/error_costs.py           | 26 ++++++++++++++-----------
 pybop/optimisation.py                | 29 ++++------------------------
 tests/unit/test_cost.py              | 14 ++++++++++++++
 tests/unit/test_models.py            |  5 +++++
 tests/unit/test_optimisation.py      | 19 ++++++++++++++++--
 tests/unit/test_parameterisations.py | 22 ++++++++++++++-------
 tests/unit/test_problem.py           |  2 +-
 7 files changed, 71 insertions(+), 46 deletions(-)

diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index c36d372f5..d3f4c6d18 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -69,15 +69,19 @@ def evaluateS1(self, x):
         Compute the cost and corresponding
         gradients with respect to the parameters.
         """
-        y, dy = self.problem.evaluateS1(x)
-        dy = dy.reshape(
-            (
-                self.problem.n_time_data,
-                self.problem.n_outputs,
-                self.problem.n_parameters,
+        try:
+            y, dy = self.problem.evaluateS1(x)
+            dy = dy.reshape(
+                (
+                    self.problem.n_time_data,
+                    self.problem.n_outputs,
+                    self.problem.n_parameters,
+                )
             )
-        )
-        r = y - self._target
-        e = np.sum(np.sum(r**2, axis=0), axis=0)
-        de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1)
-        return e, de
+            r = y - self._target
+            e = np.sum(np.sum(r**2, axis=0), axis=0)
+            de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1)
+            return e, de
+
+        except Exception as e:
+            raise ValueError(f"Error in cost calculation: {e}")
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index e890e45dd..cf5c905bd 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -18,7 +18,7 @@ class Optimisation:
     def __init__(
         self,
         cost,
-        optimiser,
+        optimiser=None,
         sigma0=None,
         verbose=False,
     ):
@@ -49,7 +49,7 @@ def __init__(
         self.pints = True
 
         if self.optimiser is None:
-            self.optimiser = pints.CMAES
+            self.optimiser = pybop.CMAES
         elif issubclass(self.optimiser, pints.Optimiser):
             pass
         else:
@@ -190,7 +190,7 @@ def _run_pints(self):
             while running:
                 # Ask optimiser for new points
                 xs = self.optimiser.ask()
-                self.log.append(xs)
+
                 # Evaluate points
                 fs = evaluator.evaluate(xs)
 
@@ -213,6 +213,7 @@ def _run_pints(self):
                 # Update counts
                 evaluations += len(fs)
                 iteration += 1
+                self.log.append(xs)
 
                 # Check stopping criteria:
                 # Maximum number of iterations
@@ -328,28 +329,6 @@ def set_f_guessed_tracking(self, use_f_guessed=False):
         """
         self._use_f_guessed = bool(use_f_guessed)
 
-    def set_log_interval(self, iters=20, warm_up=3):
-        """
-        Changes the frequency with which messages are logged.
-
-        Parameters
-        ----------
-        ``interval``
-            A log message will be shown every ``iters`` iterations.
-        ``warm_up``
-            A log message will be shown every iteration, for the first
-            ``warm_up`` iterations.
-
-        Credit: PINTS
-        """
-        iters = int(iters)
-        if iters < 1:
-            raise ValueError("Interval must be greater than zero.")
-        warm_up = max(0, int(warm_up))
-
-        self._message_interval = iters
-        self._message_warm_up = warm_up
-
     def set_parallel(self, parallel=False):
         """
         Enables/disables parallel evaluation.
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 71fc6237a..650c576f8 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -55,6 +55,20 @@ def test_costs(self):
         assert type(cost([0.5])) == np.float64
         assert cost([0.5]) >= 0
 
+        # Test catch on non-matching vector lengths
+        # Sum Squared Error
+        cost = pybop.SumSquaredError(problem)
+        with pytest.raises(ValueError):
+            cost(["test-entry"])
+
+        with pytest.raises(ValueError):
+            cost.evaluateS1(["test-entry"])
+
+        # Root Mean Squared Error
+        cost = pybop.RootMeanSquaredError(problem)
+        with pytest.raises(ValueError):
+            cost(["test-entry"])
+
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values
         model.parameter_set.update(
diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index 5d1c095cb..f8fb26f75 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -17,6 +17,11 @@ def test_simulate_without_build_model(self):
         ):
             model.simulate(None, None)
 
+        with pytest.raises(
+            ValueError, match="Model must be built before calling simulate"
+        ):
+            model.simulateS1(None, None)
+
     @pytest.mark.unit
     def test_build(self):
         model = pybop.lithium_ion.SPM()
diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index 8c33732a6..4e283d9c9 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -53,23 +53,38 @@ def test_optimiser_construction(self):
             )
         ]
 
-        problem = pybop.Problem(pybop.lithium_ion.SPM(), parameters, dataset, signal="Terminal voltage [V]")
+        problem = pybop.Problem(
+            pybop.lithium_ion.SPM(), parameters, dataset, signal="Terminal voltage [V]"
+        )
         cost = pybop.SumSquaredError(problem)
 
+        # Test construction of optimisers
+        # NLopt
         opt = pybop.Optimisation(cost=cost, optimiser=pybop.NLoptOptimize)
         assert opt.optimiser is not None
         assert opt.optimiser.name == "NLoptOptimize"
         assert opt.optimiser.n_param == 1
 
+        # Gradient Descent
         opt = pybop.Optimisation(cost=cost, optimiser=pybop.GradientDescent)
         assert opt.optimiser is not None
-        # assert issubclass(opt.optimiser, pybop.GradientDescent)
 
+        # None
+        opt = pybop.Optimisation(cost=cost)
+        assert opt.optimiser is not None
+        assert (
+            opt.optimiser.name()
+            == "Covariance Matrix Adaptation Evolution Strategy (CMA-ES)"
+        )
+
+        # SciPy
         opt = pybop.Optimisation(cost=cost, optimiser=pybop.SciPyMinimize)
         assert opt.optimiser is not None
         assert opt.optimiser.name == "SciPyMinimize"
 
+        # Incorrect class
         class randomclass:
             pass
+
         with pytest.raises(ValueError):
             pybop.Optimisation(cost=cost, optimiser=randomclass)
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 1c9c14677..580fb0627 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -103,17 +103,23 @@ def test_spme_multiple_optimisers(self, init_soc):
         cost = pybop.RootMeanSquaredError(problem)
 
         # Select optimisers
-        optimisers = [
-            pybop.NLoptOptimize,
-            pybop.SciPyMinimize,
-        ]
+        optimisers = [pybop.NLoptOptimize, pybop.SciPyMinimize, pybop.CMAES]
 
         # Test each optimiser
         for optimiser in optimisers:
             parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
 
-            # Run the optimisation problem
-            x, final_cost = parameterisation.run()
+            if optimiser == pybop.CMAES:
+                parameterisation.set_max_iterations(100)
+                parameterisation.set_f_guessed_tracking(True)
+
+                x, final_cost = parameterisation.run()
+
+                assert parameterisation._iterations == 100
+                assert parameterisation._use_f_guessed is True
+
+            else:
+                x, final_cost = parameterisation.run()
 
             # Assertions
             np.testing.assert_allclose(final_cost, 0, atol=1e-2)
@@ -122,7 +128,9 @@ def test_spme_multiple_optimisers(self, init_soc):
     @pytest.mark.parametrize("init_soc", [0.3, 0.5, 0.8])
     @pytest.mark.unit
     def test_model_misparameterisation(self, init_soc):
-        # Define model
+        # Define two different models with different parameter sets
+        # The optimisation should fail as the models are not the same
+
         parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
         model = pybop.lithium_ion.SPM(parameter_set=parameter_set)
 
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
index 54e8f0bab..93879f395 100644
--- a/tests/unit/test_problem.py
+++ b/tests/unit/test_problem.py
@@ -43,7 +43,7 @@ def test_problem(self):
         assert problem._model._built_model is not None
 
         # Test model.simulate
-        model.simulate(inputs=[0.5,0.5], t_eval=np.linspace(0, 10, 100))
+        model.simulate(inputs=[0.5, 0.5], t_eval=np.linspace(0, 10, 100))
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From 11d5e60f94889cfc1b0bcb673376e3fbfc6d9038 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 16 Nov 2023 10:50:19 +0000
Subject: [PATCH 184/210] Update notebook for API changes

---
 examples/notebooks/rmse-estimisation.ipynb | 173 ++++++++++++---------
 1 file changed, 97 insertions(+), 76 deletions(-)

diff --git a/examples/notebooks/rmse-estimisation.ipynb b/examples/notebooks/rmse-estimisation.ipynb
index ff7b47771..28b4c2951 100644
--- a/examples/notebooks/rmse-estimisation.ipynb
+++ b/examples/notebooks/rmse-estimisation.ipynb
@@ -108,9 +108,9 @@
     "experiment = pybamm.Experiment(\n",
     "    [\n",
     "        (\n",
-    "            \"Discharge at 2C for 5 minutes (1 second period)\",\n",
+    "            \"Discharge at 1C for 15 minutes (1 second period)\",\n",
     "            \"Rest for 2 minutes (1 second period)\",\n",
-    "            \"Charge at 1C for 5 minutes (1 second period)\",\n",
+    "            \"Charge at 1C for 15 minutes (1 second period)\",\n",
     "            \"Rest for 2 minutes (1 second period)\",\n",
     "        ),\n",
     "    ]\n",
@@ -132,25 +132,15 @@
    "execution_count": 6,
    "metadata": {},
    "outputs": [
-    {
-     "data": {
-      "image/png": "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S2VdBQDA2LFjtRq8H1UTXQUAwLvvvot33323whgiIiIiIiIiopfRggULMGbMGIwYMQIAEB0djbi4OCxfvhyfffZZmfjVq1drzS9duhQbN25EcnIyAgICpOVyubzKY9IVFBSgoKBAmtdoNAAAQ0PDau8PEVFtqfad6ERERERERERE9HwrLCxEeno6vL29pWV6enrw9vZGWlpaleq4c+cOioqKYGlpqbU8NTUVTZo0gZOTE8aPH48bN26UW0dERATMzc2lyc7O7vF2iIioFrERnYiIiIiIiIiojvnnn39QXFwMKysrreVWVlZQq9VVquPTTz+Fra2tVkO8r68vVq5cieTkZHz99dfYuXMn/Pz8UFxcrLOOsLAw5ObmStOVK1cAACUlJY+5Z0REzx4b0YmIiIiI6pAlS5bAxcUFCoUCCoUCnp6e+PXXXwEAN2/exEcffQQnJycYGxujWbNmmDBhAnJzc7XqeHTAOJlMhrVr12rFpKamokOHDpDL5WjRogViY2PL5FKdweyIiOj5Mnv2bKxduxabN2+GkZGRtHzQoEF488030a5dO/j7+2P79u04dOgQUlNTddYjl8ul76TSCQDu3r37LHaDiKhGsBGdiIiIiKgOadq0KWbPno309HQcPnwYPXv2RP/+/XHy5Elcu3YN165dw7x583DixAnExsYiPj4eo0aNKlNPTEyM1qBx/v7+UllmZib69u2LHj16QKVSISQkBKNHj0ZCQoIUU93B7IiIqGY1atQI+vr6yM7O1lqenZ1daX/m8+bNw+zZs5GYmAgXF5cKY5s3b45GjRrh/PnzT5wzEdHzqtoDixIRERER0fOrX79+WvNffvkllixZgv3792PUqFHYuHGjVPbqq6/iyy+/xPvvv4/79++jXr3//XlgYWFRbiNLdHQ0HB0dMX/+fABAmzZtsGfPHixcuBBKpRJA9QezK1XeAHRERFQ9hoaGcHd3R3JysvRDaElJCZKTkxEcHFzuenPmzMGXX36JhIQEdOzYsdLtXL16FTdu3ICNjU1NpU5E9NzhnehERERERHVUcXEx1q5di/z8fHh6euqMyc3NhUKh0GpAB4CgoCA0atQInTp1wvLlyyGEkMrS0tK0+scFAKVSKQ1U9ySD2XEAOiKimhMaGooffvgBK1aswOnTpzF+/Hjk5+dLP3AGBAQgLCxMiv/666/xxRdf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F/t1IqLah307EREVZ8KECfjpp58wfPhwfPnllzA0NMTdu3exfft2/Pzzz1BVVS1TOYcOHcL9+/fRs2dP1K9fH7///jvy8vJgZWVVyS2gmogj0anO+frrr5GSkoI1a9Zg5syZePfdd/HFF1+Uq4zIyEgAwNq1a3Hnzh388ccfcHd3B5B/w09ERFWH/ToRUe3Dvp2IiIpjZmaGM2fOIDc3F46OjmjXrh2mTJkCAwMDqKiUPdRpYGCAPXv24MMPP0SrVq0QEBCAX3/9FW3atKnE2lNNxZHoVKeEhYVh1apVOH78OORyOQBg69at6NChA/z9/TF+/PgylRMZGQknJyfcv38f7dq1Q+vWrfHtt99i/PjxWLNmDbZu3VqZzSAiov/Hfp2IqPZh305EVPN5eHjAw8OjUHpgYKDCflhYWKE8RU3hJYRQ2G/ZsiX27NnzFjUEunfvXuT1iYrCIDrVKb1790Z2drZCmqWlJVJSUspVztWrV9G1a1d89913CumfffaZ9O83/SIgIqKyY79ORFT7sG8nIqLKkJKSAl1dXUyYMAGLFy8uNf+4cePwyy+/VEHNqCbgdC5EZfDDDz9AV1cXUVFRAPJvyNu1a1cp1xo3bhx0dXUrpWwiIsrHfp2IqPZh305ERMUZNGgQ7ty5g8jISMyYMaNM58ybNw+RkZG4c+cOPvroo0quIVV3MsGf1IlK9PjxY7x8+RIA0KRJEyQlJcHU1BQ3btxA69atK/x6iYmJSE1NBQCYmpqWe2VpIiIqGft1IqLah307ERERVSYG0YmIiIiIiIiIiIiIisHpXIiIiIiIiIiIiIiIisEgOhERERERERERERFRMRhEJyIiIiIiIiIiIiIqBoPoRERERERERERERETFYBCdiIiIiIiIiIiIiKgYDKITERERERERERERERWDQXQiIiIiIiIiIiIiomIwiE5EREREREREREREVAwG0YmIiIiIiIiIiIiIisEgOhERERERERERERFRMRhEJyIiIiIiIiIiIiIqBoPoRERERERERERERETFYBCdiIiIiIiIiIiIiKgYDKITERERERERERERERWDQXQiIiIiIiIiIiIiomIwiE5EREREREREREREVAwG0ancLC0tsWrVKqXWITAwEAYGBkqtQ3lVh9dNGXx9fdGxY8dynSOTybBv375ij/fu3RsymQwymQyRkZHl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Z49+/PFHbdq0SSNHjlRhYWG529m4caMWLFig1NRU/fLLL1q9erWKiorUrl27KowetVXVP7YcqGEuXryooUOH6t5771W7du00evRo7d+/X97e3uVuIy0tTRcuXJCfn5+lLCkpScePHy820wUAULUY1wGg7mFsBwCUxs/PT19++aWeeuop9enTR3l5eWrZsqUiIiJkZ1f++cJubm56//33NWPGDF24cEFt27bVf/7zH11//fVVGD1qK5LoqHeeeeYZnTlzRgsWLFCjRo306aef6sEHH9TGjRvL3UZqaqokaeHChXrsscd05MgRyxOcL168WBVhAwBKwbgOAHUPYzsA1G4jRozQiBEjipWvXLnSan/btm3F6pT06SOTyWS137ZtW73//vtXEaEUGhpa4vWBkrCcC+qVbdu2af78+XrzzTdlNBplZ2enN998U1988YWWLFlS7nZSU1MVHh6un376SR07dtQzzzyjZ599VkajUQsWLKjCHgAA/opxHQDqHsZ2AEBVOHPmjBo1aqSnnnqqXPUfeughNWrUqIqjQm3BTHTUKz179lR+fr5VWatWrXTmzJkrauebb77RTTfdpOeee86q/P7777d8X9F3UwEA5ce4DgB1D2M7AKCy3XXXXQoNDZVkXsalPGbOnKl///vfkqRmzZpVVWioJZiJDpTD4sWL1ahRI+3fv1+S+QV5x44dq+RavNMJAFWPcR0A6h7GdgBAaRo3bqw2bdqoTZs28vT0LNc53t7elnMaNmxYxRGipjOYeEsdKNPx48d1/vx5SVKLFi2UmZmpZs2a6eDBg+rQoUOlXy8jI0PZ2dmSzO90MlADQOViXAeAuoexHQAAVCWS6AAAAAAAAAAAlILlXAAAAAAAAAAAKAVJdAAAAAAAAAAASkESHQAAAAAAAACAUpBEBwAAAAAAAACgFCTRAQAAAAAAAAAoBUl0AAAAAAAAAABKQRIdAAAAAAAAAIBSkEQHAAAAAAAAAKAUJNEBAAAAAAAAACgFSXQAAAAAAAAAAErx/wG5zswtkpVtsAAAAABJRU5ErkJggg==",
-      "text/plain": [
-       "<Figure size 1500x700 with 8 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
     {
      "data": {
       "application/vnd.jupyter.widget-view+json": {
-       "model_id": "733a23c5511b4df7be43966d0fcc268b",
+       "model_id": "b81d2479a67e475cafce6cab6d366680",
        "version_major": 2,
        "version_minor": 0
       },
       "text/plain": [
-       "interactive(children=(FloatSlider(value=0.0, description='t', max=1680.0, step=16.8), Output()), _dom_classes=…"
+       "interactive(children=(FloatSlider(value=0.0, description='t', max=1.1333333333333333, step=0.01133333333333333…"
       ]
      },
      "metadata": {},
@@ -159,7 +149,7 @@
     {
      "data": {
       "text/plain": [
-       "<pybamm.plotting.quick_plot.QuickPlot at 0x7fd9141a5f50>"
+       "<pybamm.plotting.quick_plot.QuickPlot at 0x126561bd0>"
       ]
      },
      "execution_count": 6,
@@ -185,7 +175,7 @@
    "outputs": [],
    "source": [
     "corrupt_V = synthetic_sol[\"Terminal voltage [V]\"].data\n",
-    "corrupt_V += np.random.normal(0, 0.005, len(corrupt_V))"
+    "corrupt_V += np.random.normal(0, 0.001, len(corrupt_V))"
    ]
   },
   {
@@ -209,10 +199,10 @@
    "outputs": [],
    "source": [
     "model = pybop.lithium_ion.SPM()\n",
-    "observations = [\n",
-    "    pybop.Observed(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
-    "    pybop.Observed(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
-    "    pybop.Observed(\"Voltage [V]\", corrupt_V),\n",
+    "dataset = [\n",
+    "    pybop.Dataset(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
+    "    pybop.Dataset(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
+    "    pybop.Dataset(\"Voltage [V]\", corrupt_V),\n",
     "]"
    ]
   },
@@ -229,7 +219,7 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "fit_params = [\n",
+    "parameters = [\n",
     "    pybop.Parameter(\n",
     "        \"Negative electrode active material volume fraction\",\n",
     "        prior=pybop.Gaussian(0.5, 0.02),\n",
@@ -247,7 +237,7 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "We can now construct PyBOP's parameterisation class. This class provides the parameterisation methods needed to fit the forward model."
+    "We can now construct a cost function and define the fitting signal."
    ]
   },
   {
@@ -256,8 +246,31 @@
    "metadata": {},
    "outputs": [],
    "source": [
-    "parameterisation = pybop.Parameterisation(\n",
-    "    model, observations=observations, fit_parameters=fit_params\n",
+    "# Define the cost to optimise\n",
+    "cost = pybop.RMSE()\n",
+    "signal = \"Voltage [V]\""
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Let's construct PyBOP's optimisation class. This class provides the methods needed to fit the forward model."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 11,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "parameterisation = pybop.Optimisation(\n",
+    "    cost=cost,\n",
+    "    model=model,\n",
+    "    optimiser=pybop.NLoptOptimize(n_param=len(parameters)),\n",
+    "    parameters=parameters,\n",
+    "    dataset=dataset,\n",
+    "    signal=signal,\n",
     ")"
    ]
   },
@@ -270,56 +283,57 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": 12,
    "metadata": {},
    "outputs": [
     {
      "name": "stdout",
      "output_type": "stream",
      "text": [
-      "Last Voltage Values: 3.7996611982185766 3.7975057810794395\n",
-      "Last Voltage Values: 3.7998126133693533 3.7975057810794395\n",
-      "Last Voltage Values: 3.8031854726522285 3.7975057810794395\n",
-      "Last Voltage Values: 3.799468931833036 3.7975057810794395\n",
-      "Last Voltage Values: 3.795602883298669 3.7975057810794395\n",
-      "Last Voltage Values: 3.799699771891773 3.7975057810794395\n",
-      "Last Voltage Values: 3.7996774395763646 3.7975057810794395\n",
-      "Last Voltage Values: 3.799593518890104 3.7975057810794395\n",
-      "Last Voltage Values: 3.799509395374853 3.7975057810794395\n",
-      "Last Voltage Values: 3.799536439260354 3.7975057810794395\n",
-      "Last Voltage Values: 3.799500287332914 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995753351359633 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995384590593297 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995486528904316 3.7975057810794395\n",
-      "Last Voltage Values: 3.799516169359653 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995185726290273 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995203555320374 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995147509521265 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995176549369756 3.7975057810794395\n",
-      "Last Voltage Values: 3.79951475648217 3.7975057810794395\n",
-      "Last Voltage Values: 3.799511594116657 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995343783536892 3.7975057810794395\n",
-      "Last Voltage Values: 3.799509412527155 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995128802129674 3.7975057810794395\n",
-      "Last Voltage Values: 3.799512401383983 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995112796265267 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995122788212523 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995113814292405 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995114700840316 3.7975057810794395\n",
-      "Last Voltage Values: 3.799511298272937 3.7975057810794395\n",
-      "Last Voltage Values: 3.799511135780194 3.7975057810794395\n",
-      "Last Voltage Values: 3.799510972324501 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995318559387594 3.7975057810794395\n",
-      "Last Voltage Values: 3.799510973343803 3.7975057810794395\n",
-      "Last Voltage Values: 3.799511115021574 3.7975057810794395\n",
-      "Last Voltage Values: 3.7995110103732177 3.7975057810794395\n"
+      "Cost: 0.0014306419900053451\n",
+      "Cost: 0.001878140952546479\n",
+      "Cost: 0.0056853760898525705\n",
+      "Cost: 0.0011144296137402825\n",
+      "Cost: 0.004234408585704868\n",
+      "Cost: 0.002260880733148505\n",
+      "Cost: 0.0010374243859739255\n",
+      "Cost: 0.0011340799888696297\n",
+      "Cost: 0.001093836134793644\n",
+      "Cost: 0.001042723321241934\n",
+      "Cost: 0.0010266172137603305\n",
+      "Cost: 0.00103588203364289\n",
+      "Cost: 0.001007039288536067\n",
+      "Cost: 0.000990040153496016\n",
+      "Cost: 0.0009820913602296417\n",
+      "Cost: 0.0009795434928262323\n",
+      "Cost: 0.0009945581830178092\n",
+      "Cost: 0.0009921144772808324\n",
+      "Cost: 0.0009825846380214938\n",
+      "Cost: 0.0009915338481534652\n",
+      "Cost: 0.0009789337894256292\n",
+      "Cost: 0.0009823901578605396\n",
+      "Cost: 0.0009786983892344486\n",
+      "Cost: 0.0009785339841692688\n",
+      "Cost: 0.000978719434079295\n",
+      "Cost: 0.000978406378769787\n",
+      "Cost: 0.0009784181875287846\n",
+      "Cost: 0.0009792572769492622\n",
+      "Cost: 0.0009789609220288331\n",
+      "Cost: 0.000979061722139482\n",
+      "Cost: 0.0009784215735618952\n",
+      "Cost: 0.0009790240608910446\n",
+      "Cost: 0.0009784386249667666\n",
+      "Cost: 0.0009784283248914902\n",
+      "Cost: 0.0009784142223954373\n",
+      "Cost: 0.0009791106518699038\n",
+      "Cost: 0.0009784113851583095\n",
+      "Cost: 0.0009791097832152831\n",
+      "Cost: 0.0009784096923936012\n"
      ]
     }
    ],
    "source": [
-    "results, last_optim, num_evals = parameterisation.rmse(\n",
-    "    signal=\"Voltage [V]\", method=\"nlopt\"\n",
-    ")"
+    "x, output, final_cost, num_evals = parameterisation.run()"
    ]
   },
   {
@@ -331,22 +345,22 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
+   "execution_count": 13,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "array([0.49301982, 0.63682677])"
+       "array([0.50138974, 0.63221165])"
       ]
      },
-     "execution_count": 12,
+     "execution_count": 13,
      "metadata": {},
      "output_type": "execute_result"
     }
    ],
    "source": [
-    "results"
+    "x"
    ]
   },
   {
@@ -365,14 +379,14 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
+   "execution_count": 14,
    "metadata": {},
    "outputs": [],
    "source": [
     "params.update(\n",
     "    {\n",
-    "        \"Negative electrode active material volume fraction\": results[0],\n",
-    "        \"Positive electrode active material volume fraction\": results[1],\n",
+    "        \"Negative electrode active material volume fraction\": x[0],\n",
+    "        \"Positive electrode active material volume fraction\": x[1],\n",
     "    }\n",
     ")\n",
     "optsol = sim.solve()[\"Terminal voltage [V]\"].data"
@@ -387,22 +401,22 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": 15,
    "metadata": {},
    "outputs": [
     {
      "data": {
       "text/plain": [
-       "<matplotlib.legend.Legend at 0x7fd910dc2290>"
+       "<matplotlib.legend.Legend at 0x12721faf0>"
       ]
      },
-     "execution_count": 14,
+     "execution_count": 15,
      "metadata": {},
      "output_type": "execute_result"
     },
     {
      "data": {
-      "image/png": "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",
+      "image/png": "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qFEjsmXLhqIorFy5Mt7zqqry5ZdfkjVrVjw8PKhVqxanTp2KV+bOnTu0bt0ab29v0qVLR4cOHbh//368MocOHaJq1aq4u7uTM2dOvvrqq6TetRfu20cfffTEcaxXr168Ms66b0FBQbzxxhukTZuWTJky0bRpU06cOBGvTGJ9DkNCQihTpgxubm7kz5+fefPmab5vNWrUeOLYdenSxen3LTg4mBIlSjgmxAsMDGTNmjWO5131mL3MvrnqMXuacePGOebYe8SVj108qkgWixYtUk0mkzpnzhz1yJEjaqdOndR06dKp169f1zq05xo2bJhatGhRNSwszPFz8+ZNx/NdunRRc+bMqW7cuFHdu3evWrFiRbVSpUqO561Wq1qsWDG1Vq1a6v79+9XVq1ervr6+6sCBA5N9X1avXq0OHjxYXb58uQqoK1asiPf8uHHjVB8fH3XlypXqwYMH1caNG6t58uRRo6OjHWXq1aunlixZUt25c6e6detWNX/+/GrLli0dz0dERKiZM2dWW7durR4+fFj95ZdfVA8PD3XWrFma7lu7du3UevXqxTuOd+7ciVfGWfetbt266ty5c9XDhw+rBw4cUBs0aKDmypVLvX//vqNMYnwOz549q3p6eqp9+vRRjx49qk6bNk3V6/Xq2rVrNd236tWrq506dYp37CIiIpx+337//Xd11apV6smTJ9UTJ06ogwYNUo1Go3r48GFVVV33mL3MvrnqMfuv3bt3q/7+/mqJEiXUnj17Oh535WP3OEmAkkn58uXV7t27O/622WxqtmzZ1KCgIA2jerFhw4apJUuWfOpz4eHhqtFoVJcuXep47NixYyqg7tixQ1XVuC9mnU6nXrt2zVEmODhY9fb2VmNjY5M09uf5b5Jgt9vVLFmyqBMmTHA8Fh4errq5uam//PKLqqqqevToURVQ9+zZ4yizZs0aVVEU9cqVK6qqquqMGTPU9OnTx9u3L774Qg0ICEjiPfrXsxKgJk2aPPM1rrJvqqqqN27cUAF18+bNqqom3ufw888/V4sWLRrvvZo3b67WrVs3qXfJ4b/7pqpxX6aPf/n8l6vsm6qqavr06dUffvghRR2zRx7tm6qmjGN27949tUCBAur69evj7U9KOnbSBJYMzGYz+/bto1atWo7HdDodtWrVYseOHRpG9nJOnTpFtmzZyJs3L61bt+bixYsA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",
       "text/plain": [
        "<Figure size 640x480 with 1 Axes>"
       ]
@@ -418,6 +432,13 @@
     "plt.ylabel(\"Voltage (V)\")\n",
     "plt.legend()"
    ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": []
   }
  ],
  "metadata": {
@@ -436,7 +457,7 @@
    "name": "python",
    "nbconvert_exporter": "python",
    "pygments_lexer": "ipython3",
-   "version": "3.11.4"
+   "version": "3.10.12"
   }
  },
  "nbformat": 4,

From 881ab843cc56ab847cf779921b305b990aa2a5fd Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 16 Nov 2023 15:16:39 +0000
Subject: [PATCH 185/210] Add BaseModel tests

---
 tests/unit/test_models.py | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index f8fb26f75..e5c8cc4bc 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -1,5 +1,6 @@
 import pybop
 import pytest
+import numpy as np
 
 
 class TestModels:
@@ -22,6 +23,29 @@ def test_simulate_without_build_model(self):
         ):
             model.simulateS1(None, None)
 
+    @pytest.mark.unit
+    def test_predict_without_pybamm(self):
+        # Define model
+        model = pybop.lithium_ion.SPM()
+        model._unprocessed_model = None
+
+        with pytest.raises(ValueError):
+            model.predict(None,None)
+
+    @pytest.mark.unit
+    def test_predict_with_inputs(self):
+        # Define model
+        model = pybop.lithium_ion.SPM()
+        t_eval = np.linspace(0, 10, 100)
+        inputs = {
+        "Negative electrode active material volume fraction": 0.52,
+        "Positive electrode active material volume fraction": 0.63,
+        }
+
+
+        res = model.predict(t_eval=t_eval,inputs=inputs)
+        assert len(res["Terminal voltage [V]"].data) == 100
+
     @pytest.mark.unit
     def test_build(self):
         model = pybop.lithium_ion.SPM()

From bfde78a8824572f4b591361789ffa2f5c862f236 Mon Sep 17 00:00:00 2001
From: "pre-commit-ci[bot]"
 <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Date: Thu, 16 Nov 2023 15:17:38 +0000
Subject: [PATCH 186/210] style: pre-commit fixes

---
 tests/unit/test_models.py | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/tests/unit/test_models.py b/tests/unit/test_models.py
index e5c8cc4bc..ce73000a6 100644
--- a/tests/unit/test_models.py
+++ b/tests/unit/test_models.py
@@ -30,7 +30,7 @@ def test_predict_without_pybamm(self):
         model._unprocessed_model = None
 
         with pytest.raises(ValueError):
-            model.predict(None,None)
+            model.predict(None, None)
 
     @pytest.mark.unit
     def test_predict_with_inputs(self):
@@ -38,12 +38,11 @@ def test_predict_with_inputs(self):
         model = pybop.lithium_ion.SPM()
         t_eval = np.linspace(0, 10, 100)
         inputs = {
-        "Negative electrode active material volume fraction": 0.52,
-        "Positive electrode active material volume fraction": 0.63,
+            "Negative electrode active material volume fraction": 0.52,
+            "Positive electrode active material volume fraction": 0.63,
         }
 
-
-        res = model.predict(t_eval=t_eval,inputs=inputs)
+        res = model.predict(t_eval=t_eval, inputs=inputs)
         assert len(res["Terminal voltage [V]"].data) == 100
 
     @pytest.mark.unit

From 1119914a18fe0cc74c278e3d85d834b7e5c71369 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Thu, 16 Nov 2023 15:46:08 +0000
Subject: [PATCH 187/210] Add Optimisation.max_evalutions(), Add halting tests
 for Optimisation

---
 pybop/optimisation.py           | 16 ++++++++++++++++
 tests/unit/test_optimisation.py | 34 +++++++++++++++++++++++++++++++++
 2 files changed, 50 insertions(+)

diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index cf5c905bd..ac8ffdfd3 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -329,6 +329,22 @@ def set_f_guessed_tracking(self, use_f_guessed=False):
         """
         self._use_f_guessed = bool(use_f_guessed)
 
+    def set_max_evaluations(self, evaluations=None):
+        """
+        Adds a stopping criterion, allowing the routine to halt after the
+        given number of ``evaluations``.
+
+        This criterion is disabled by default. To enable, pass in any positive
+        integer. To disable again, use ``set_max_evaluations(None)``.
+
+        Credit: PINTS
+        """
+        if evaluations is not None:
+            evaluations = int(evaluations)
+            if evaluations < 0:
+                raise ValueError("Maximum number of evaluations cannot be negative.")
+        self._max_evaluations = evaluations
+
     def set_parallel(self, parallel=False):
         """
         Enables/disables parallel evaluation.
diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index 4e283d9c9..b9d3b0414 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -88,3 +88,37 @@ class randomclass:
 
         with pytest.raises(ValueError):
             pybop.Optimisation(cost=cost, optimiser=randomclass)
+
+    @pytest.mark.unit
+    def test_halting(self):
+        # Tests halting criteria
+        model = pybop.lithium_ion.SPM()
+
+        dataset = [
+            pybop.Dataset("Time [s]", np.linspace(0, 3600, 100)),
+            pybop.Dataset("Current function [A]", np.zeros(100)),
+            pybop.Dataset("Terminal voltage [V]", np.ones(100)),
+        ]
+
+        param = [
+            pybop.Parameter(
+                "Negative electrode active material volume fraction",
+                prior=pybop.Gaussian(0.75, 0.2),
+                bounds=[0.73, 0.77],
+            )
+        ]
+
+        problem = pybop.Problem(model, param, dataset, signal="Terminal voltage [V]")
+        cost = pybop.SumSquaredError(problem)
+
+        # Test max evalutions
+        optim = pybop.Optimisation(cost=cost, optimiser=pybop.GradientDescent)
+        optim.set_max_evaluations(10)
+        x, __ = optim.run()
+        assert optim._iterations == 10
+
+        # Test max unchanged iterations
+        optim = pybop.Optimisation(cost=cost, optimiser=pybop.GradientDescent)
+        optim.set_max_unchanged_iterations(1)
+        x, __ = optim.run()
+        assert optim._iterations == 2

From 2d520798a82cdff7d898f05e60ff4dc32912f144 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Fri, 17 Nov 2023 00:22:56 +0000
Subject: [PATCH 188/210] Update rmse-estimisation.ipynb

---
 examples/notebooks/rmse-estimisation.ipynb | 189 ++++-----------------
 1 file changed, 37 insertions(+), 152 deletions(-)

diff --git a/examples/notebooks/rmse-estimisation.ipynb b/examples/notebooks/rmse-estimisation.ipynb
index 28b4c2951..3b9b257fa 100644
--- a/examples/notebooks/rmse-estimisation.ipynb
+++ b/examples/notebooks/rmse-estimisation.ipynb
@@ -11,18 +11,9 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 1,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Note: you may need to restart the kernel to use updated packages.\n",
-      "Note: you may need to restart the kernel to use updated packages.\n"
-     ]
-    }
-   ],
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "%pip install --upgrade pip ipywidgets pybamm -q\n",
     "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q"
@@ -37,7 +28,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 2,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -63,7 +54,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 3,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -80,7 +71,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -101,7 +92,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -129,34 +120,9 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "application/vnd.jupyter.widget-view+json": {
-       "model_id": "b81d2479a67e475cafce6cab6d366680",
-       "version_major": 2,
-       "version_minor": 0
-      },
-      "text/plain": [
-       "interactive(children=(FloatSlider(value=0.0, description='t', max=1.1333333333333333, step=0.01133333333333333…"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    },
-    {
-     "data": {
-      "text/plain": [
-       "<pybamm.plotting.quick_plot.QuickPlot at 0x126561bd0>"
-      ]
-     },
-     "execution_count": 6,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "sim.plot()"
    ]
@@ -165,12 +131,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Now, let's corrupt the synthetic data with 5mV of gaussian noise centered around zero,"
+    "Now, let's corrupt the synthetic data with 1mV of gaussian noise centered around zero,"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -194,7 +160,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -202,7 +168,7 @@
     "dataset = [\n",
     "    pybop.Dataset(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
     "    pybop.Dataset(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
-    "    pybop.Dataset(\"Voltage [V]\", corrupt_V),\n",
+    "    pybop.Dataset(\"Terminal voltage [V]\", corrupt_V),\n",
     "]"
    ]
   },
@@ -215,7 +181,7 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -237,40 +203,37 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "We can now construct a cost function and define the fitting signal."
+    "We can now define the fitting signal, a problem (which combines the model with the dataset) and construct a cost function."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
     "# Define the cost to optimise\n",
-    "cost = pybop.RMSE()\n",
-    "signal = \"Voltage [V]\""
+    "signal = \"Terminal voltage [V]\"\n",
+    "problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=0.98)\n",
+    "cost = pybop.RootMeanSquaredError(problem)"
    ]
   },
   {
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Let's construct PyBOP's optimisation class. This class provides the methods needed to fit the forward model."
+    "Let's construct PyBOP's optimisation class. This class provides the methods needed to fit the forward model. For this example, we use a root-mean square cost function with the BOBYQA algorithm implemented in NLOpt."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 11,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
     "parameterisation = pybop.Optimisation(\n",
     "    cost=cost,\n",
-    "    model=model,\n",
-    "    optimiser=pybop.NLoptOptimize(n_param=len(parameters)),\n",
-    "    parameters=parameters,\n",
-    "    dataset=dataset,\n",
-    "    signal=signal,\n",
+    "    optimiser=pybop.NLoptOptimize,\n",
     ")"
    ]
   },
@@ -278,62 +241,16 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "Finally, we run the estimation algorithm. For this example, we use a root-mean square cost function with the BOBYQA algorithm implemented in NLOpt"
+    "Finally, we run the estimation algorithm."
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 12,
-   "metadata": {},
-   "outputs": [
-    {
-     "name": "stdout",
-     "output_type": "stream",
-     "text": [
-      "Cost: 0.0014306419900053451\n",
-      "Cost: 0.001878140952546479\n",
-      "Cost: 0.0056853760898525705\n",
-      "Cost: 0.0011144296137402825\n",
-      "Cost: 0.004234408585704868\n",
-      "Cost: 0.002260880733148505\n",
-      "Cost: 0.0010374243859739255\n",
-      "Cost: 0.0011340799888696297\n",
-      "Cost: 0.001093836134793644\n",
-      "Cost: 0.001042723321241934\n",
-      "Cost: 0.0010266172137603305\n",
-      "Cost: 0.00103588203364289\n",
-      "Cost: 0.001007039288536067\n",
-      "Cost: 0.000990040153496016\n",
-      "Cost: 0.0009820913602296417\n",
-      "Cost: 0.0009795434928262323\n",
-      "Cost: 0.0009945581830178092\n",
-      "Cost: 0.0009921144772808324\n",
-      "Cost: 0.0009825846380214938\n",
-      "Cost: 0.0009915338481534652\n",
-      "Cost: 0.0009789337894256292\n",
-      "Cost: 0.0009823901578605396\n",
-      "Cost: 0.0009786983892344486\n",
-      "Cost: 0.0009785339841692688\n",
-      "Cost: 0.000978719434079295\n",
-      "Cost: 0.000978406378769787\n",
-      "Cost: 0.0009784181875287846\n",
-      "Cost: 0.0009792572769492622\n",
-      "Cost: 0.0009789609220288331\n",
-      "Cost: 0.000979061722139482\n",
-      "Cost: 0.0009784215735618952\n",
-      "Cost: 0.0009790240608910446\n",
-      "Cost: 0.0009784386249667666\n",
-      "Cost: 0.0009784283248914902\n",
-      "Cost: 0.0009784142223954373\n",
-      "Cost: 0.0009791106518699038\n",
-      "Cost: 0.0009784113851583095\n",
-      "Cost: 0.0009791097832152831\n",
-      "Cost: 0.0009784096923936012\n"
-     ]
-    }
-   ],
-   "source": [
-    "x, output, final_cost, num_evals = parameterisation.run()"
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "x, final_cost = parameterisation.run()"
    ]
   },
   {
@@ -345,20 +262,9 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 13,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "array([0.50138974, 0.63221165])"
-      ]
-     },
-     "execution_count": 13,
-     "metadata": {},
-     "output_type": "execute_result"
-    }
-   ],
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "x"
    ]
@@ -374,12 +280,12 @@
    "cell_type": "markdown",
    "metadata": {},
    "source": [
-    "First, run SPM forward model with the estimated parameters,"
+    "First, run the SPM forward model with the estimated parameters,"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 14,
+   "execution_count": null,
    "metadata": {},
    "outputs": [],
    "source": [
@@ -401,30 +307,9 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 15,
-   "metadata": {},
-   "outputs": [
-    {
-     "data": {
-      "text/plain": [
-       "<matplotlib.legend.Legend at 0x12721faf0>"
-      ]
-     },
-     "execution_count": 15,
-     "metadata": {},
-     "output_type": "execute_result"
-    },
-    {
-     "data": {
-      "image/png": "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qFEjsmXLhqIorFy5Mt7zqqry5ZdfkjVrVjw8PKhVqxanTp2KV+bOnTu0bt0ab29v0qVLR4cOHbh//368MocOHaJq1aq4u7uTM2dOvvrqq6TetRfu20cfffTEcaxXr168Ms66b0FBQbzxxhukTZuWTJky0bRpU06cOBGvTGJ9DkNCQihTpgxubm7kz5+fefPmab5vNWrUeOLYdenSxen3LTg4mBIlSjgmxAsMDGTNmjWO5131mL3MvrnqMXuacePGOebYe8SVj108qkgWixYtUk0mkzpnzhz1yJEjaqdOndR06dKp169f1zq05xo2bJhatGhRNSwszPFz8+ZNx/NdunRRc+bMqW7cuFHdu3evWrFiRbVSpUqO561Wq1qsWDG1Vq1a6v79+9XVq1ervr6+6sCBA5N9X1avXq0OHjxYXb58uQqoK1asiPf8uHHjVB8fH3XlypXqwYMH1caNG6t58uRRo6OjHWXq1aunlixZUt25c6e6detWNX/+/GrLli0dz0dERKiZM2dWW7durR4+fFj95ZdfVA8PD3XWrFma7lu7du3UevXqxTuOd+7ciVfGWfetbt266ty5c9XDhw+rBw4cUBs0aKDmypVLvX//vqNMYnwOz549q3p6eqp9+vRRjx49qk6bNk3V6/Xq2rVrNd236tWrq506dYp37CIiIpx+337//Xd11apV6smTJ9UTJ06ogwYNUo1Go3r48GFVVV33mL3MvrnqMfuv3bt3q/7+/mqJEiXUnj17Oh535WP3OEmAkkn58uXV7t27O/622WxqtmzZ1KCgIA2jerFhw4apJUuWfOpz4eHhqtFoVJcuXep47NixYyqg7tixQ1XVuC9mnU6nXrt2zVEmODhY9fb2VmNjY5M09uf5b5Jgt9vVLFmyqBMmTHA8Fh4errq5uam//PKLqqqqevToURVQ9+zZ4yizZs0aVVEU9cqVK6qqquqMGTPU9OnTx9u3L774Qg0ICEjiPfrXsxKgJk2aPPM1rrJvqqqqN27cUAF18+bNqqom3ufw888/V4sWLRrvvZo3b67WrVs3qXfJ4b/7pqpxX6aPf/n8l6vsm6qqavr06dUffvghRR2zRx7tm6qmjGN27949tUCBAur69evj7U9KOnbSBJYMzGYz+/bto1atWo7HdDodtWrVYseOHRpG9nJOnTpFtmzZyJs3L61bt+bixYsA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",
-      "text/plain": [
-       "<Figure size 640x480 with 1 Axes>"
-      ]
-     },
-     "metadata": {},
-     "output_type": "display_data"
-    }
-   ],
+   "execution_count": null,
+   "metadata": {},
+   "outputs": [],
    "source": [
     "plt.plot(corrupt_V, label=\"Groundtruth\")\n",
     "plt.plot(optsol, label=\"Estimated\")\n",

From 7047af7f8fb1a08f421d642dca219f87462f3dc8 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 09:12:41 +0000
Subject: [PATCH 189/210] Turn off f_guessed for performance assertion

---
 tests/unit/test_parameterisations.py | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 580fb0627..e102da3fe 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -110,13 +110,14 @@ def test_spme_multiple_optimisers(self, init_soc):
             parameterisation = pybop.Optimisation(cost=cost, optimiser=optimiser)
 
             if optimiser == pybop.CMAES:
-                parameterisation.set_max_iterations(100)
                 parameterisation.set_f_guessed_tracking(True)
+                assert parameterisation._use_f_guessed is True
 
-                x, final_cost = parameterisation.run()
+                parameterisation.set_f_guessed_tracking(False)
+                parameterisation.set_max_iterations(100)
 
+                x, final_cost = parameterisation.run()
                 assert parameterisation._iterations == 100
-                assert parameterisation._use_f_guessed is True
 
             else:
                 x, final_cost = parameterisation.run()

From 8846725590dcae95167cfccb8c551d5e7e187520 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 09:36:44 +0000
Subject: [PATCH 190/210] tighten parameter bounds

---
 tests/unit/test_parameterisations.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index e102da3fe..e5ab70d79 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -155,7 +155,7 @@ def test_model_misparameterisation(self, init_soc):
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
                 prior=pybop.Gaussian(0.5, 0.02),
-                bounds=[0.375, 0.625],
+                bounds=[0.45, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",

From 4604f11819d934061525777f9f599e2b69387cdb Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 10:08:20 +0000
Subject: [PATCH 191/210] Updt. notebook name

---
 examples/notebooks/{rmse-estimisation.ipynb => spm_nlopt.ipynb} | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 rename examples/notebooks/{rmse-estimisation.ipynb => spm_nlopt.ipynb} (100%)

diff --git a/examples/notebooks/rmse-estimisation.ipynb b/examples/notebooks/spm_nlopt.ipynb
similarity index 100%
rename from examples/notebooks/rmse-estimisation.ipynb
rename to examples/notebooks/spm_nlopt.ipynb

From 7bc92d92dc934059ebf61532b3f0bd283f3625d3 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 10:43:55 +0000
Subject: [PATCH 192/210] Split-model, add solved state

---
 examples/notebooks/spm_nlopt.ipynb | 1139 +++++++++++++++++++---------
 1 file changed, 791 insertions(+), 348 deletions(-)

diff --git a/examples/notebooks/spm_nlopt.ipynb b/examples/notebooks/spm_nlopt.ipynb
index 3b9b257fa..811575160 100644
--- a/examples/notebooks/spm_nlopt.ipynb
+++ b/examples/notebooks/spm_nlopt.ipynb
@@ -1,350 +1,793 @@
 {
- "cells": [
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## A NMC/Gr parameterisation example using PyBOP\n",
-    "\n",
-    "This notebook introduces a synthetic re-parameterisation of the single-particle model with corrupted observations. To start, we import the PyBOP package for parameterisation and the PyBaMM package to generate the initial synethic data,"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "%pip install --upgrade pip ipywidgets pybamm -q\n",
-    "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Next, we import the added packages plus any additional dependencies,"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "import pybop\n",
-    "import pybamm\n",
-    "import matplotlib.pyplot as plt\n",
-    "import numpy as np"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Generate Synthetic Data"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "We need to generate the synthetic data required for later reparameterisation. To do this we will run the PyBaMM forward model and store the generated data. This will be integrated into PyBOP in a future release for fast synthetic generation. For now, we define the PyBaMM model with a default parameter set,"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "synthetic_model = pybamm.lithium_ion.SPM()\n",
-    "params = synthetic_model.default_parameter_values"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "We can now modify individual parameters with the bespoke values and run the simulation."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "params.update(\n",
-    "    {\n",
-    "        \"Negative electrode active material volume fraction\": 0.52,\n",
-    "        \"Positive electrode active material volume fraction\": 0.63,\n",
-    "    }\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Define the experiment and run the forward model to capture the synthetic data."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "experiment = pybamm.Experiment(\n",
-    "    [\n",
-    "        (\n",
-    "            \"Discharge at 1C for 15 minutes (1 second period)\",\n",
-    "            \"Rest for 2 minutes (1 second period)\",\n",
-    "            \"Charge at 1C for 15 minutes (1 second period)\",\n",
-    "            \"Rest for 2 minutes (1 second period)\",\n",
-    "        ),\n",
-    "    ]\n",
-    "    * 2\n",
-    ")\n",
-    "sim = pybamm.Simulation(synthetic_model, experiment=experiment, parameter_values=params)\n",
-    "synthetic_sol = sim.solve()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Plot the synthetic data,"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "sim.plot()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Now, let's corrupt the synthetic data with 1mV of gaussian noise centered around zero,"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "corrupt_V = synthetic_sol[\"Terminal voltage [V]\"].data\n",
-    "corrupt_V += np.random.normal(0, 0.001, len(corrupt_V))"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Identify the Parameters"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Now, to blind fit the synthetic parameters we need to define the observation variables as well as update the forward model to be of PyBOP type (This composes PyBaMM's model class). For the observed voltage variable, we used the newly corrupted voltage array, "
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "model = pybop.lithium_ion.SPM()\n",
-    "dataset = [\n",
-    "    pybop.Dataset(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
-    "    pybop.Dataset(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
-    "    pybop.Dataset(\"Terminal voltage [V]\", corrupt_V),\n",
-    "]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Next, we define the targeted forward model parameters for estimation. Furthermore, PyBOP provides functionality to define a prior for the parameters. The initial parameters values used in the estimiation will be randomly drawn from the prior distribution."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "parameters = [\n",
-    "    pybop.Parameter(\n",
-    "        \"Negative electrode active material volume fraction\",\n",
-    "        prior=pybop.Gaussian(0.5, 0.02),\n",
-    "        bounds=[0.375, 0.625],\n",
-    "    ),\n",
-    "    pybop.Parameter(\n",
-    "        \"Positive electrode active material volume fraction\",\n",
-    "        prior=pybop.Gaussian(0.65, 0.02),\n",
-    "        bounds=[0.525, 0.75],\n",
-    "    ),\n",
-    "]"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "We can now define the fitting signal, a problem (which combines the model with the dataset) and construct a cost function."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "# Define the cost to optimise\n",
-    "signal = \"Terminal voltage [V]\"\n",
-    "problem = pybop.Problem(model, parameters, dataset, signal=signal, init_soc=0.98)\n",
-    "cost = pybop.RootMeanSquaredError(problem)"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Let's construct PyBOP's optimisation class. This class provides the methods needed to fit the forward model. For this example, we use a root-mean square cost function with the BOBYQA algorithm implemented in NLOpt."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "parameterisation = pybop.Optimisation(\n",
-    "    cost=cost,\n",
-    "    optimiser=pybop.NLoptOptimize,\n",
-    ")"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Finally, we run the estimation algorithm."
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "x, final_cost = parameterisation.run()"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Let's view the identified parameters:"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "x"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "## Plotting"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "First, run the SPM forward model with the estimated parameters,"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "params.update(\n",
-    "    {\n",
-    "        \"Negative electrode active material volume fraction\": x[0],\n",
-    "        \"Positive electrode active material volume fraction\": x[1],\n",
-    "    }\n",
-    ")\n",
-    "optsol = sim.solve()[\"Terminal voltage [V]\"].data"
-   ]
-  },
-  {
-   "cell_type": "markdown",
-   "metadata": {},
-   "source": [
-    "Now, we plot the estimated forward model against the corrupted synthetic observation,"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": [
-    "plt.plot(corrupt_V, label=\"Groundtruth\")\n",
-    "plt.plot(optsol, label=\"Estimated\")\n",
-    "plt.xlabel(\"Time (s)\")\n",
-    "plt.ylabel(\"Voltage (V)\")\n",
-    "plt.legend()"
-   ]
-  },
-  {
-   "cell_type": "code",
-   "execution_count": null,
-   "metadata": {},
-   "outputs": [],
-   "source": []
-  }
- ],
- "metadata": {
-  "kernelspec": {
-   "display_name": "Python 3 (ipykernel)",
-   "language": "python",
-   "name": "python3"
-  },
-  "language_info": {
-   "codemirror_mode": {
-    "name": "ipython",
-    "version": 3
-   },
-   "file_extension": ".py",
-   "mimetype": "text/x-python",
-   "name": "python",
-   "nbconvert_exporter": "python",
-   "pygments_lexer": "ipython3",
-   "version": "3.10.12"
-  }
- },
- "nbformat": 4,
- "nbformat_minor": 4
+  "cells": [
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "expmkveO04pw"
+      },
+      "source": [
+        "## A NMC/Gr parameterisation example using PyBOP\n",
+        "\n",
+        "This notebook introduces a synthetic re-parameterisation of the single-particle model with corrupted observations. To start, we import the PyBOP package for parameterisation and the PyBaMM package to generate the initial synethic data,"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 1,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "id": "X87NUGPW04py",
+        "outputId": "0d785b07-7cff-4aeb-e60a-4ff5a669afbf"
+      },
+      "outputs": [
+        {
+          "output_type": "stream",
+          "name": "stdout",
+          "text": [
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.1/2.1 MB\u001b[0m \u001b[31m19.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m139.4/139.4 kB\u001b[0m \u001b[31m14.3 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m15.9/15.9 MB\u001b[0m \u001b[31m78.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m2.3/2.3 MB\u001b[0m \u001b[31m79.4 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m44.9/44.9 kB\u001b[0m \u001b[31m5.0 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m160.1/160.1 kB\u001b[0m \u001b[31m17.9 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m75.3/75.3 MB\u001b[0m \u001b[31m8.6 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m561.4/561.4 kB\u001b[0m \u001b[31m27.5 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m1.6/1.6 MB\u001b[0m \u001b[31m51.7 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[?25h  Preparing metadata (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m423.7/423.7 kB\u001b[0m \u001b[31m6.1 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K     \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m260.7/260.7 kB\u001b[0m \u001b[31m15.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[2K   \u001b[90m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\u001b[0m \u001b[32m284.9/284.9 kB\u001b[0m \u001b[31m15.8 MB/s\u001b[0m eta \u001b[36m0:00:00\u001b[0m\n",
+            "\u001b[?25h  Building wheel for pybop (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
+            "\u001b[33mWARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv\u001b[0m\u001b[33m\n",
+            "\u001b[0m"
+          ]
+        }
+      ],
+      "source": [
+        "%pip install --upgrade pip ipywidgets pybamm -q\n",
+        "%pip install git+https://github.com/pybop-team/PyBOP.git@develop -q"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "jAvD5fk104p0"
+      },
+      "source": [
+        "Next, we import the added packages plus any additional dependencies,"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 21,
+      "metadata": {
+        "id": "SQdt4brD04p1"
+      },
+      "outputs": [],
+      "source": [
+        "import pybop\n",
+        "import pybamm\n",
+        "import matplotlib.pyplot as plt\n",
+        "import numpy as np"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "5XU-dMtU04p2"
+      },
+      "source": [
+        "## Generate Synthetic Data"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "MlBYO-xK04p3"
+      },
+      "source": [
+        "We need to generate the synthetic data required for later reparameterisation. To do this we will run the PyBaMM forward model and store the generated data. This will be integrated into PyBOP in a future release for fast synthetic generation. For now, we define the PyBaMM model with a default parameter set,"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 22,
+      "metadata": {
+        "id": "sBasxv8U04p3"
+      },
+      "outputs": [],
+      "source": [
+        "synthetic_model = pybamm.lithium_ion.SPM()\n",
+        "params = synthetic_model.default_parameter_values"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "wRDiC_dj04p5"
+      },
+      "source": [
+        "We can now modify individual parameters with the bespoke values and run the simulation."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 23,
+      "metadata": {
+        "id": "JgN4C76x04p6"
+      },
+      "outputs": [],
+      "source": [
+        "params.update(\n",
+        "    {\n",
+        "        \"Negative electrode active material volume fraction\": 0.52,\n",
+        "        \"Positive electrode active material volume fraction\": 0.63,\n",
+        "    }\n",
+        ")"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "KWA5Fmbv04p7"
+      },
+      "source": [
+        "Define the experiment and run the forward model to capture the synthetic data."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 24,
+      "metadata": {
+        "id": "LvQ7eXGf04p7"
+      },
+      "outputs": [],
+      "source": [
+        "experiment = pybamm.Experiment(\n",
+        "    [\n",
+        "        (\n",
+        "            \"Discharge at 1C for 15 minutes (1 second period)\",\n",
+        "            \"Rest for 2 minutes (1 second period)\",\n",
+        "            \"Charge at 1C for 15 minutes (1 second period)\",\n",
+        "            \"Rest for 2 minutes (1 second period)\",\n",
+        "        ),\n",
+        "    ]\n",
+        "    * 2\n",
+        ")\n",
+        "sim = pybamm.Simulation(synthetic_model, experiment=experiment, parameter_values=params)\n",
+        "synthetic_sol = sim.solve()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "u6QbgzJD04p-"
+      },
+      "source": [
+        "Plot the synthetic data,"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 25,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 602,
+          "referenced_widgets": [
+            "8d003c14da5f4fa68284b28c15cee6e6",
+            "aef2fa7adcc14ad0854b73d5910ae3b4",
+            "7d46516469314b88be3500e2afcafcf6",
+            "423bffea3a1c42b49a9ad71218e5811b",
+            "06f2374f91c8455bb63252092512f2ed",
+            "56ff19291e464d63b23e63b8e2ac9ea3",
+            "646a8670cb204a31bb56bc2380898093"
+          ]
+        },
+        "id": "_F-7UPUl04p-",
+        "outputId": "cf548842-64ae-4389-b16d-d3cf3239ce8f"
+      },
+      "outputs": [
+        {
+          "output_type": "display_data",
+          "data": {
+            "text/plain": [
+              "interactive(children=(FloatSlider(value=0.0, description='t', max=1.1333333333333333, step=0.01133333333333333…"
+            ],
+            "application/vnd.jupyter.widget-view+json": {
+              "version_major": 2,
+              "version_minor": 0,
+              "model_id": "8d003c14da5f4fa68284b28c15cee6e6"
+            }
+          },
+          "metadata": {}
+        },
+        {
+          "output_type": "execute_result",
+          "data": {
+            "text/plain": [
+              "<pybamm.plotting.quick_plot.QuickPlot at 0x7d7b2d770eb0>"
+            ]
+          },
+          "metadata": {},
+          "execution_count": 25
+        },
+        {
+          "output_type": "display_data",
+          "data": {
+            "text/plain": [
+              "<Figure size 1500x700 with 8 Axes>"
+            ],
+            "image/png": "iVBORw0KGgoAAAANSUhEUgAABdEAAAKxCAYAAAC8BuXeAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeVxU1f8/8NeADKsDorIlAqYhmIDiRxzLHRnQj2n5KRdS3D8aaEhp8ckItcJc0ST5mAtW8nGpNFMDCUNccENHccMN0xIwU0BQAeH8/vDH/ToybIoMwuv5eNxH3Xve9973PTNzOZ65c45MCCFARERERERERERERETl6Ok6ASIiIiIiIiIiIiKi+oqd6EREREREREREREREFWAnOhERERERERERERFRBdiJTkRERERERERERERUAXaiExERERERERERERFVgJ3oREREREREREREREQVYCc6EREREREREREREVEF2IlORERERERERERERFQBdqITEREREREREREREVWAnehPyNHREZGRkbpOo1ZduXIFMpkMarW6WvFjxozBkCFDnmlOT2r//v3o2LEjDAwM6m2OpEkmk2Hr1q3P9Bzh4eGQyWSQyWR18vmti2uqrrq+9sasPr3ujwsPD4eHh4eu06Aq1EUbIyYmRronBAcHP9NzAfWr3VTX1061JykpCTKZDDk5OZXG1af3W21hO510ie30Z4vtdKL6o+zvrUwme6J/N5Xta2FhUeu5ke7Vu070MWPGQCaTYd68eRrbt27dCplMVuf5xMTEaH3zHzlyBJMmTarzfGqLtoa1vb09MjMz8fLLL+smqVoUEhICDw8PZGRkICYmRtfpPNcq+gw8qYo68TIzM+Hn51dr56lIhw4dkJmZ+Vx/fh+Xnp6OPn36wNraGkZGRmjTpg1mzZqF4uJiKeb9999HZmYmWrVqpcNMn39lf6MeX3x9fZ/ZOXX5j7za/vw/76rbgVddum5jKBQKZGZmYu7cuc/8XHXl77//hq+vL+zs7GBoaAh7e3sEBQUhLy9Pihk2bBgyMzOhVCp1mGnD9eh9Ui6Xo23btpgzZw4ePHjw1Mfu3r07MjMzYW5uDkD3n6Fnhe10qi620+s/ttOpIcrKysLUqVPRpk0bqb01aNAgJCYm6jq1StXk31W//vqr1uv5448/IJfLK/x7nJmZyS/DGrAmuk5A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SdsyMzMFAJGSklLhccoolUphaGgoAIhJkyaJkpKScjFsnD+dgIAAoa+vL0xNTTWWzz77TIp59HX/9ttvhbOzs9TZKMTDzlNjY2MRHx8vhKj83vP48cp88sknwsDAQKPxt2vXLqGvry+uXr0qbSv7PB8+fFja79HPwBdffCFcXFyk9R9++EGYmZlJnz1tn//ff/9d6Ovriz///FNje79+/URoaKjWa4iPjxd6enoiPT1da/nIkSNF//79NbbNmDFDuLq6SusODg7i7bffltZLS0uFlZWVWLFihRCi6ntuv379yjX4v/32W2FrayutV3XPfbQD71G9evUSnTp10nreRz1JG6O6r6uJiYnG39MZM2YILy+vCnOp7NyP1nPZPejjjz+WtpXdIzMzM4UQ1X/9qupEd3Bw0LhvOTs7ix49ekjrZffI//3vfxUep8zw4cOFsbGxACAGDRok7t27Vy6GnejPxqPtw9LSUpGQkCAMDQ3F+++/L86fPy8AiP3790vxN2/eFMbGxmLTpk1CCCE6duyo8eXWox7/DLKdzna6EGyns53OdjpRXTl06JAAIH788cdK42rSib5161aNfbW1q+fOnSt8fHw0tl27dk16uKVsv0c/s0II8Y9//EN88MEH0npVn/uKci8zcuRIjb9r7u7uWv+esRO94aqXw7mU+eKLL7Bu3TqcPXu2XNmJEycQExMjjR9mZmYGlUqF0tJSZGRkID09HU2aNEHnzp2lfdq2bVvuJ/e//vor+vXrhxdeeAFNmzbFqFGj8Pfff+Pu3bvVzrNJkyZ46623sH79egBAQUEBfvrpJ/j7+wMALl68iLt376J///4a+X7zzTcV/uSyzOOTXimVSo36qE7+crkcbm5u1b6eMmq1Gj169ICBgUGVsU9yjf3794eDgwPatGmDUaNGYf369TWq9zJdunSpVlxUVBQ8PT3RsmVLmJmZYeXKlbh69SoA4MaNG7h+/Tr69eundd8TJ04gPz8fzZs317i+jIyMCq9PrVajU6dOsLS01Fp+9uxZvPLKKxrbXnnllXLv90dfO1NTUygUCty4cUM6R0WvUUFBAS5duoTx48dr5Pzpp5+Wy/nRc9ja2kp1UhVtdb9x40a88sorsLGxgZmZGWbNmiXVc3WdPXsW7u7uMDU1lba98sorKC0tRXp6urStQ4cOGmMH2traVitvbR6t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9x3y8vIejuMOoGXLltDX18fPP/+M7OxsdOvWDUZGRkhISMDnn3+O999/XzrH5MmTsXz5csycORPjxo3D7t27sWnTJuzYsUOKCQkJQUBAALp06YKuXbsiMjJSo1OGiIjqh2HDhuGvv/5CWFgYsrKy4OHhgbi4OGlei6tXr0JP7/+exezevTtiY2Mxa9Ys/Oc//0G7du2wdetWvPzyy7q6BGpohNB1BkQSdqITETUwvXv3hqiksSGTyTBnzhyNzuvHWVpaIjY2ttLzuLm5Ye/evRWWjxkzBmPGjNHY5uDggJ07d1Z63N69e+P48eOVxhARUdVu3LiB0aNHIzMzE+bm5nBzc0N8fDz69++PpKQkHDp0CADQtm1bjf0yMjLg6OgIAwMDREVFYfr06RBCoG3btli8eDEmTpwoxVbny8+qOmWIiKj+CAoKqvBJ8qSkpHLb3nzzTbz55pvPOCtiZzI9tcb6HqrF62YnOhERERFRA7R69eoKy6r6whUAfH194evrW+V5qvPlZ2WdMkRERERE9R3HRCciIiIiIiIiIp2oalLrRk0m03UG9QPr4cmx7h6qhXpgJzoREREREREREemEXC7XdQpERFViJzoRERERERERERERUQXYiU5ERERERERERDpRWlqq6xSIiKrETnQiIiIiIiIiItKJe/fu6TqF+q+KycAbrMZ63c9CY63LWrxudqITEREREREREREREVWAnehERERERERERET1jUym6wzqB9bDk2PdPVQL9cBOdCIiIiIiIiIiIiKiCrATnYiIiIiIiIiIiIioAuxEJyIiIiIiIiIiIiKqADvRiYiIiIiIiIiIqH4RQtcZEEnYiU5ERERERERERDrRpEkTXadQ/7EzmZ5WY30P1eJ1sxOdiIiIiIiIiIh0wtDQUNcpEBFViZ3oRERERERERERE9Y1MpusM6gfWw5Nj3T1UC/XATnQiIiIiIiIiItIJ0ViHmSCi5wo70YmIiIiIiIiISCfu3r2r6xSIiKrETnQiIiIiIiIiIiKqX/grBapH2IlORERERERERERUX7EzmZ5WY30P1eJ1sxOdiIiIiKgBWrFiBdzc3KBQKKBQKKBUKvHLL78AAG7duoWpU6fC2dkZxsbGaN26NaZNm4bc3FyNY1y9ehUDBw6EiYkJrKysMGPGDDx48EAjJikpCZ07d4ahoSHatm2LmJiY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Rb1D5ERENU+l1kQvKCjAkSNH8P7778PR0RFNmjSBra2tQsmXmJgY5ObmwsHBQZxnaWmJZs2aITo6GoC8HleHDh1gbGwstnF0dERGRgauX78utnm9j8I2hX0Uh/W3iIiIiIiIiKg+MDIygqWlZamThoYG7OzskJaWhpiYGHHdyMhIFBQUwNbWtti+586diytXriAuLk6cAHlpxm3btlXH7tUPEomyI6gZeBzeHo+dXCUch0pNoqekpCAzMxNLly6Fk5MTfv/9dwwbNgzDhw/H8ePHAchrbWloaBT5tNLY2FistZWUlKSQQC9cXristDYZGRl4+fJlsfGx/hYRERERERER0f9YWVnByckJXl5eOH/+PE6fPg1vb2+MGTMGpqamAIBHjx7B0tIS58+fBwDIZDK0b99eYQKAZs2aoUWLFhXavopKpaamqC6pryVIqEaqcDmX0hQUFAAAhg4dCl9fXwBAp06dcObMGQQFBaF3796VubkKY/0tIiIiIiIiIiJFu3btgre3N/r37w8VFRWMGDEC69atE5fn5uYiPj4eL168qPRta2lpVXqfRESVrVKT6I0bN4aamhratm2rML+wXjkg/7QyJycHaWlpClejJycni7W2ZDKZ+Onm68sLlxX+LJz3ehs9PT0OwERERERERERE5WRoaIiQkJASl5ubm0Mo46rgspYTEdVmlfqdGQ0NDXTr1g3x8fEK82/duoXmzZsDAGxsbKCuro6IiAhxeXx8PB48eAA7OzsAgJ2dHa5evapwY4vw8HDo6emJCXo7OzuFPgrbFPZBRERERERERERERPSuKnwlemZmJu7cuSM+v3fvHuLi4mBoaIhmzZph9uzZGD16NHr16oW+ffvi6NGjOHTokHhnZn19fXh6esLPzw+GhobQ09PDtGnTYGdnhx49egAABgwYgLZt22L8+PFYvnw5kpKS8OWXX2Lq1KliOZbJkydjw4YN+PzzzzFhwgRERkZi7969OHLkSCUcFiIiIiIiIiIiqmovXryAnp6essOo2XiVP72r+vo7VIn7XeEk+sWLF9G3b1/xuZ+fHwDAzc0NwcHBGDZsGIKCghAYGIjp06fDwsIC+/btQ8+ePcV1Vq9eLdbYys7OhqOjI7799ltxuaqqKg4fPowpU6bAzs4O2tracHNzw1dffSW2adGiBY4cOQJfX1+sXbsWTZs2xfff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6h6O7UREVJIuXbrg+vXrMDc3R+vWrRUmbW1tZYdHdRCT6FSv5OTk4JNPPsHo0aOxePFiTJw4scJXlMTHx+PVq1cwNTUV50VHR+PRo0cKJ+NERFQ9OLYTEdU9HNuJiKg0U6dORWpqKsaOHYsLFy4gISEBYWFh8PDwQH5+vrLDozqISXSqV+bNm4f09HSsW7cOc+bMwfvvv48JEyZUqI+4uDgAwPr163H79m389ttvcHV1BSA/2SciourFsZ2IqO7h2E5ERKUxNTXF6dOnkZ+fjwEDBqBDhw7w8fGBgYEBVFSY7qTKx5roVG9ERUVhzZo1OHbsGPT09AAAO3fuhLW1NTZt2oQpU6aUq5+4uDg4Ojri7t276NChA9q2bYtFixZhypQpWLduHXbu3FmVu0FERK/h2E5EVPdwbCciqhvc3d3h7u5eZH5wcLDC86ioqCJtiivjJQiCwvM2bdrg559/focIS95W4QexRIWYRKd6o0+fPsjNzVWYZ25ujvT09Ar1c/nyZXTr1g3/+c9/FOa/fsOit30DICKiiuHYTkRU93BsJyKiqpKeng4dHR1MnTq12JuSlkRHRwd5eXnQ1NSswuioJuP3G4jK8O2330JHRwdXr14FID8Z79ChQ5Vsa/LkydDR0amSvomI6H84thMR1T0c24mIqDQjRozA7du3ERcXh9mzZ1do3bi4OFy7dg2xsbFVFB3VdBKBH6kTlejRo0d4+fIlAKBZs2ZITU2FiYkJrl+/jrZt21b69lJSUpCRkQEAMDEx4R2liYiqAMd2IqK6h2M7ERERVSUm0YmIiIiIiIiIiIiISsByLkREREREREREREREJWASnYiIiIiIiIiIiIioBEyiExERERERERERERGVgEl0IiIiIiIiIiIiIqISMIlORERERERERERERFQCJtGJiIiIiIiIiIiIiErAJDoRERERERERERERUQmYRCciIiIiIiIiIiIiKgGT6EREREREREREREREJWASnYiIiIiIiIiIiIioBEyiExERERERERERERGVgEl0IiIiIiIiIiIiIqISMIlORERERERERERERFQCJtGJiIiIiIiIiIiIiErAJDoRERERERERERERUQmYRCciIiIiIiIiIiIiKgGT6FQh5ubmWLNmjVJjCA4OhoGBgVJjqKiacNyUISAgAJ06darQOhKJBPv37y9xeZ8+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IiKq+xo0aKDsEIiIysQkOhERERERERERKYVEIlF2CEREZWISnYiIiIiIiIiIiIioBEyiExERERERERGRUmRnZys7BKqpnjwBLl1SdhRUm+XlASdOALm579wVk+hERERERERERKQUeXl5yg6BaqIXLwBbW6BrV+DuXWVHQ7WVhwfQuzewY8c7d8UkOhEREREREREREdUcgYHy5LkgAI8fKzsaqo2iooAffpA//vvvd+6OSXQiIiIiIiIiIiKqGe7cAZYvV3YUVJvl5gLe3pXaJZPoREREREREREREpHyCAEyfDuTkKDsSqs02bACuX6/ULplEJyIiIiIiIiIiIuU7eBD47TdAXR3Q15fPEwTlxkS1S2IisHCh/LGRkfxnJfwOMYlOREREREREREREyvXyJeDjI388cyZgbKzUcKiWmj0beP4c6N4dGDGi0rplEp2IiIiIiIiIiIiUKzAQuH8faNoU+PJLZUdDtdHx48CuXYBEAmzcCKhUXuqbSXQiIiIiIiIiIlKKBg0aKDsEqgni44Fly+SPV60CtLWVGw/VPjk5wJQp8seTJgFdu1Zq90yiExERERERERGRUkgkEmWHQMomCPLkZ04OMHAg8O9/F11OVJYVK4AbN4AmTeTfangda6ITERERERERERFRrfXDD8CxY4CmJrBhg7wUB/C/n0RlSUgAFi+WP161CmjYUP64En+HmEQnIiIiIiIiIiKlyM7OVnYIpEypqfKbiALAggVAy5bKjYdqH0EApk4FXr0C+vcHxo2rks0wiU5EREREREREREqRl5en7BBImebOBf75B2jb9n/JdKKKCA0FwsIADQ3g22+r7BsMTKITERERERERERFR9TpzBvjvf+WPg4LkSdDXFSZDWROdSpKeDsyYIX/8xRfA++8X34410YmIiIiIiIiIiKhWyc0FPv1U/njCBODDD5UbD9VO8+YBSUny5PncuUWXsyY6ERERERERERER1Upr1gDXrgGNGgHLlys7GqqNLlyQl28BgE2bAKm0SjfHJDoRERERERERERFVj7/+AgIC5I9XrJAn0okqIi9P/k0GQQA++QTo16/KN8kkOhFRPZOamgoXFxfo6enBwMAAnp6eyMzMLHWdzZs3o0+fPtDT04NEIkFaWlqx7Y4cOQJbW1toaWmhYcOGcHZ2FpcFBwdDIpEUO6WkpAAAoqKiil2e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5AQsXqzsiIpXm2qiExERERERERERFUcqlSo7hPrl/n15HfS8PGDcOHk9a6KKyMmR/w49fAi8/z7w44+Aqqqyo6pyTKITEREREREREZFSqKlVW5EEysqSXz389CnQpQvw/fe82psqbsYM4ORJQE8POHBAfkPReoBJdCIiIiIiIiIiorpMEAB3d+DKFaBJE2D/fkBLS9lRlQ9rotccQUHyqbCWvqWlsiMqn0r4HWISnYiIiIiIiIiIlCI3N1fZIdQPS5YAP/0EqKsD+/YBZmbKjqhsvEq+Zjl5Epg2Tf54yRJg8GDlxlMerIlORERERERERES1XU5OjrJDqPv27QPmz5c/3rgR6NlTufFQ7XP3LjB8uLyW/ujRwJw5yo6o2jGJTkREREREREREVBedOwd88om8nMXUqYCXl7Ijotrm2TNg0CDgyRN5Lf2tW+vltwSYRCciIiIiIiIiIqpr7t8HPv4YePVKngRds0bZEb0d1kRXnpwc+RXo8fHyEkCHDgENGig7qopjTXQiIiIiIiIiIiJSkJYmr1mdkgJYWwO7dwNqasqOqmLq4dXONYogAJ9+CkRFAbq6wOHDgKmpsqOqGNZEJyIiIiIiIiIioiJyc4GRI4E//5QnPQ8flidBiSpiyRIgOBhQVQX27gU6dlR2RErFJDoREREREREREVFdIAjAlCnAH38A2tryBHrTpsqOimqbH38EvvxS/nj9esDJSbnx1ABMohMREREREREREdUFy5cDW7YAKiryEi6dOys7orenqSn/+fy5cuOob06fBtzd5Y9nzpR/KFNbVeLvEJPoRERERERERESkFFKpVNkh1B179wJz58ofr10L/Otfyo3nXbVpI/9586Zy46hPbt8Ghg6V31B02DD5hzK1WeHv0I0b79wVk+hERERERERERKQUarXtZpc11YkTwPjx8sfTpwPe3sqNpzIUXkUfEaHcOOqLlBR52ZanT4GuXYEffpB/o6E269JF/vPiRfnNdt9BLT8SRERERERERERE9diNG4pXD69apeyIKsfQoYBEApw5A5w/r+xo6rasLGDIEODuXaBFC3kt/QYNlB3Vu3v/faBtW/nNdr/77p26YhKdiIiIiIiIiIiUIi8vT9kh1G6JicDAgfKrbO3sgF27AFVVZUdVOd57D/jkE/njTz6R7ytVvrw8YOxY+QcVhobAb78BxsbK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d+nSpTKZTDKZTBo5cqRlfoMGDTRr1qxC1726no+PT5nGCMflZu8AAAAAAAAAADg/k8lU6PKJEyfqzTfflGEYNorImpeXlw4ePKiqVave0HrJycn64IMPNHHixDKKDI6OkehAITp06GC52piUlFTm+xs4cKBlf5988kmZ7w8AKiL6dgAof+jbAcAxJCcnW6ZZs2bJy8vLat4zzzwjb29vu43oNplMCggIUPXq1W9ovYCAAHl7e5dRVHAGJNGBIkRFRSk5OVm33357me/rzTffVHJycpnvBwAqOvp2ACh/6NsBwP4CAgIsk7e3tyVpfXWqVq1annIuHTp00JNPPqmRI0eqRo0a8vf31zvvvKPMzEwNGjRI1atXV5MmTfTf//7Xal979+5Vly5dVK1aNfn7++uxxx7T2bNnixV3VlaWHn/8cVWvXl3169fXggULSvIyoBwiiQ4UoUqVKgoICJCbW9lXP/L29lZAQECZ7wcAKjr6dgAof+jbAcB5LVu2TL6+vtq+fbuefPJJDR8+XH379lW7du20c+dO3X///XrssceUlZUlSUpLS1PHjh0VFBSk77//XnFxcTp9+rQefvjhYu3/tddeU9u2bbVr1y498cQTGj58uA4ePFiahwgnRxIdFcZvv/2mgIAATZ061TJv8+bNcnd31/r1629oW99++60qVaqkixcvWuYdP35cJpNJP//8c7GvogIAbgx9OwCUP/TtAFDxtGrVSuPGjdMtt9yisWPHytPTU76+voqKitItt9yiCRMm6Ny5c/rhhx8kSW+99ZaCgoI0depUBQYGKigoSIsXL9bGjRv1008/3fD+u3btqieeeEJNmjTR888/L19fX23cuLG0DxNOjCQ6KoxatWpp8eLFmjRpkr7//nudP39ejz32mKKjo9WpU6cb2lZSUpKaNWsmT09Py7xdu3apRo0auvnmmyXd+FVUAMCNo28HgPKHvh0AKp6WLVtaHru6uuqmm25SixYtLPP8/f0lSWfOnJEk7d69Wxs3blS1atUsU2BgoCTpyJEjJdr/1RI0V/cFSCTRUcF07dpVUVFRCg8P17Bhw1S1alVNmzbthreze/duBQUFWc1LSkpSq1atLM9v9CoqAKB46NsBoPyhbweAiqVSpUpWz00mk9U8k8kkScrNzZUkXbhwQT169FBSUpLVdOjQId17772lsv+r+wIkkuiogGbOnKkrV65o9erVWr58uTw8PG54G0lJSWrdurXVvF27dlnNu9GrqACA4qNvB4Dyh74dAFCQO+64Q/v27VODBg3UpEkTq6lq1ar2Dg/lEEl0VDhHjhzRqVOnlJubq+PHj9/w+jk5Odq7d2+eES07d+60+jB+o1dRAQDFR98OAOUPfTsAoCAjRoxQamqq+vfvrx07dujIkSNat26dBg0apJycHHuHh3Ko7G9bDjiQS5cuacCAAXrkkUfUtGlTDRkyRHv27JGfn991b+PgwYO6ePGi6tSpY5m3ZcsW/frrr3lGuQAAyh59OwCUP/TtAIDC1KlTR999952ef/553X///crOztbNN9+ssLAwubgwZhiljyQ6KpQXX3xR6enpmj17tqpVq6YvvvhCjz/+uNauXXvd20hKSpIkzZkzR0899ZQOHz6sp556SpL5wz4AwLbo2wGg/KFvBwDnN3DgQA0cODDP/KVLl1o9T0hIyNMmv28gGYZh9fyWW27RRx99VIIIC97X1b8hwFVcmkGFkZCQoFmzZum9996Tl5eXXFxc9N577+mbb77R/Pnzr3s7SUlJCg0N1dGjR9WiRQu9+OKLeumll+Tl5aXZs2eX4REAAP6Kvh0Ayh/6dgBAWUlPT1e1atX0/PPP39B61apV07Bhw8ooKjgDRqKjwujQoYMuX75sNa9BgwZKT0+/oe3s3r1bd955p/71r39ZzX/00Uctj4t7FRUAcGPo2wGg/KFvBwCUhT59+qh9+/aSJB8fnxta9+rIdFdX11KOCs6CkehAEebNm6dq1appz549kswfxlu0aFEm+xo2bJiqVatWJtsGAPyJvh0Ayh/6dgBAYapXr64mTZqoSZMm8vX1vaF1r67XsGHDMooOjs5kcEkdKNCvv/6qP/74Q5JUv359paamqnbt2tq3b5+aN29e6vs7c+aMMjIyJEm1a9dW1apVS30fAFDR0bcDQPlD3w4AAMoSSXQAAAAAAAAAAApAORcAAAAAAAAAAApAEh0AAAAAAAAAgAKQRAcAAAAAAAAAoAAk0QEAAAAAAAAAKABJdAAAAAAAAAAACkASHQAAAAAAAACAApBEBwAAAAAAAACgACTRAQAAAAAAAAAoAEl0AAAAAAAAAAAKQBIdAAAAAAAAAIAC/D9pNV++FzK5QwAAAABJRU5ErkJggg==\n"
+          },
+          "metadata": {}
+        }
+      ],
+      "source": [
+        "sim.plot()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "kPlPy2oo04p-"
+      },
+      "source": [
+        "Now, let's corrupt the synthetic data with 1mV of gaussian noise centered around zero,"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 26,
+      "metadata": {
+        "id": "IW9PFOV904p-"
+      },
+      "outputs": [],
+      "source": [
+        "corrupt_V = synthetic_sol[\"Terminal voltage [V]\"].data\n",
+        "corrupt_V += np.random.normal(0, 0.001, len(corrupt_V))"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "X8-tubYY04p_"
+      },
+      "source": [
+        "## Identify the Parameters"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "PQqhvSZN04p_"
+      },
+      "source": [
+        "Now, to blind fit the synthetic parameters we need to define the observation variables as well as update the forward model to be of PyBOP type (This composes PyBaMM's model class). For the observed voltage variable, we used the newly corrupted voltage array,"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 64,
+      "metadata": {
+        "id": "zuvGHWID04p_"
+      },
+      "outputs": [],
+      "source": [
+        "pyb_model = pybop.lithium_ion.SPM()\n",
+        "dataset = [\n",
+        "    pybop.Dataset(\"Time [s]\", synthetic_sol[\"Time [s]\"].data),\n",
+        "    pybop.Dataset(\"Current function [A]\", synthetic_sol[\"Current [A]\"].data),\n",
+        "    pybop.Dataset(\"Terminal voltage [V]\", corrupt_V),\n",
+        "]"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "ffS3CF_704qA"
+      },
+      "source": [
+        "Next, we define the targeted forward model parameters for estimation. Furthermore, PyBOP provides functionality to define a prior for the parameters. The initial parameters values used in the estimiation will be randomly drawn from the prior distribution."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 65,
+      "metadata": {
+        "id": "WPCybXIJ04qA"
+      },
+      "outputs": [],
+      "source": [
+        "parameters = [\n",
+        "    pybop.Parameter(\n",
+        "        \"Negative electrode active material volume fraction\",\n",
+        "        prior=pybop.Gaussian(0.5, 0.02),\n",
+        "        bounds=[0.48, 0.625],\n",
+        "    ),\n",
+        "    pybop.Parameter(\n",
+        "        \"Positive electrode active material volume fraction\",\n",
+        "        prior=pybop.Gaussian(0.65, 0.02),\n",
+        "        bounds=[0.525, 0.75],\n",
+        "    ),\n",
+        "]"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "n4OHa-aF04qA"
+      },
+      "source": [
+        "We can now define the fitting signal, a problem (which combines the model with the dataset) and construct a cost function."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 66,
+      "metadata": {
+        "id": "etMzRtx404qA"
+      },
+      "outputs": [],
+      "source": [
+        "# Define the cost to optimise\n",
+        "signal = \"Terminal voltage [V]\"\n",
+        "problem = pybop.Problem(pyb_model, parameters, dataset, signal=signal)\n",
+        "cost = pybop.RootMeanSquaredError(problem)"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "eQiGurUV04qB"
+      },
+      "source": [
+        "Let's construct PyBOP's optimisation class. This class provides the methods needed to fit the forward model. For this example, we use a root-mean square cost function with the BOBYQA algorithm implemented in NLOpt."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 67,
+      "metadata": {
+        "id": "N3FtAhrT04qB"
+      },
+      "outputs": [],
+      "source": [
+        "parameterisation = pybop.Optimisation(\n",
+        "    cost=cost,\n",
+        "    optimiser=pybop.NLoptOptimize,\n",
+        ")"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "caprp-bV04qB"
+      },
+      "source": [
+        "Finally, we run the estimation algorithm."
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 68,
+      "metadata": {
+        "id": "-9OVt0EQ04qB"
+      },
+      "outputs": [],
+      "source": [
+        "x, final_cost = parameterisation.run()"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "-4pZsDmS04qC"
+      },
+      "source": [
+        "Let's view the identified parameters:"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 69,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/"
+        },
+        "id": "Hgz8SV4i04qC",
+        "outputId": "e1e42ae7-5075-4c47-dd68-1b22ecc170f6"
+      },
+      "outputs": [
+        {
+          "output_type": "execute_result",
+          "data": {
+            "text/plain": [
+              "array([0.48367449, 0.63380314])"
+            ]
+          },
+          "metadata": {},
+          "execution_count": 69
+        }
+      ],
+      "source": [
+        "x"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "KxKURtH704qC"
+      },
+      "source": [
+        "## Plotting"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "-cWCOiqR04qC"
+      },
+      "source": [
+        "First, run the SPM forward model with the estimated parameters,"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 70,
+      "metadata": {
+        "id": "ZVfozY0A04qC"
+      },
+      "outputs": [],
+      "source": [
+        "params.update(\n",
+        "    {\n",
+        "        \"Negative electrode active material volume fraction\": x[0],\n",
+        "        \"Positive electrode active material volume fraction\": x[1],\n",
+        "    }\n",
+        ")\n",
+        "optsol = sim.solve()[\"Terminal voltage [V]\"].data"
+      ]
+    },
+    {
+      "cell_type": "markdown",
+      "metadata": {
+        "id": "ntIvAJmA04qD"
+      },
+      "source": [
+        "Now, we plot the estimated forward model against the corrupted synthetic observation,"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 71,
+      "metadata": {
+        "colab": {
+          "base_uri": "https://localhost:8080/",
+          "height": 467
+        },
+        "id": "tJUJ80Ve04qD",
+        "outputId": "855fbaa2-1e09-4935-eb1a-8caf7f99eb75"
+      },
+      "outputs": [
+        {
+          "output_type": "execute_result",
+          "data": {
+            "text/plain": [
+              "<matplotlib.legend.Legend at 0x7d7b24dc6d40>"
+            ]
+          },
+          "metadata": {},
+          "execution_count": 71
+        },
+        {
+          "output_type": "display_data",
+          "data": {
+            "text/plain": [
+              "<Figure size 640x480 with 1 Axes>"
+            ],
+            "image/png": "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\n"
+          },
+          "metadata": {}
+        }
+      ],
+      "source": [
+        "plt.plot(corrupt_V, label=\"Groundtruth\")\n",
+        "plt.plot(optsol, label=\"Estimated\")\n",
+        "plt.xlabel(\"Time (s)\")\n",
+        "plt.ylabel(\"Voltage (V)\")\n",
+        "plt.legend()"
+      ]
+    },
+    {
+      "cell_type": "code",
+      "execution_count": 71,
+      "metadata": {
+        "id": "N5XYkevi04qD"
+      },
+      "outputs": [],
+      "source": []
+    }
+  ],
+  "metadata": {
+    "kernelspec": {
+      "display_name": "Python 3 (ipykernel)",
+      "language": "python",
+      "name": "python3"
+    },
+    "language_info": {
+      "codemirror_mode": {
+        "name": "ipython",
+        "version": 3
+      },
+      "file_extension": ".py",
+      "mimetype": "text/x-python",
+      "name": "python",
+      "nbconvert_exporter": "python",
+      "pygments_lexer": "ipython3",
+      "version": "3.10.12"
+    },
+    "colab": {
+      "provenance": []
+    },
+    "widgets": {
+      "application/vnd.jupyter.widget-state+json": {
+        "8d003c14da5f4fa68284b28c15cee6e6": {
+          "model_module": "@jupyter-widgets/controls",
+          "model_name": "VBoxModel",
+          "model_module_version": "2.0.0",
+          "state": {
+            "_dom_classes": [
+              "widget-interact"
+            ],
+            "_model_module": "@jupyter-widgets/controls",
+            "_model_module_version": "2.0.0",
+            "_model_name": "VBoxModel",
+            "_view_count": null,
+            "_view_module": "@jupyter-widgets/controls",
+            "_view_module_version": "2.0.0",
+            "_view_name": "VBoxView",
+            "box_style": "",
+            "children": [
+              "IPY_MODEL_aef2fa7adcc14ad0854b73d5910ae3b4",
+              "IPY_MODEL_7d46516469314b88be3500e2afcafcf6"
+            ],
+            "layout": "IPY_MODEL_423bffea3a1c42b49a9ad71218e5811b",
+            "tabbable": null,
+            "tooltip": null
+          }
+        },
+        "aef2fa7adcc14ad0854b73d5910ae3b4": {
+          "model_module": "@jupyter-widgets/controls",
+          "model_name": "FloatSliderModel",
+          "model_module_version": "2.0.0",
+          "state": {
+            "_dom_classes": [],
+            "_model_module": "@jupyter-widgets/controls",
+            "_model_module_version": "2.0.0",
+            "_model_name": "FloatSliderModel",
+            "_view_count": null,
+            "_view_module": "@jupyter-widgets/controls",
+            "_view_module_version": "2.0.0",
+            "_view_name": "FloatSliderView",
+            "behavior": "drag-tap",
+            "continuous_update": true,
+            "description": "t",
+            "description_allow_html": false,
+            "disabled": false,
+            "layout": "IPY_MODEL_06f2374f91c8455bb63252092512f2ed",
+            "max": 1.1333333333333333,
+            "min": 0,
+            "orientation": "horizontal",
+            "readout": true,
+            "readout_format": ".2f",
+            "step": 0.011333333333333332,
+            "style": "IPY_MODEL_56ff19291e464d63b23e63b8e2ac9ea3",
+            "tabbable": null,
+            "tooltip": null,
+            "value": 0
+          }
+        },
+        "7d46516469314b88be3500e2afcafcf6": {
+          "model_module": "@jupyter-widgets/output",
+          "model_name": "OutputModel",
+          "model_module_version": "1.0.0",
+          "state": {
+            "_dom_classes": [],
+            "_model_module": "@jupyter-widgets/output",
+            "_model_module_version": "1.0.0",
+            "_model_name": "OutputModel",
+            "_view_count": null,
+            "_view_module": "@jupyter-widgets/output",
+            "_view_module_version": "1.0.0",
+            "_view_name": "OutputView",
+            "layout": "IPY_MODEL_646a8670cb204a31bb56bc2380898093",
+            "msg_id": "",
+            "outputs": [],
+            "tabbable": null,
+            "tooltip": null
+          }
+        },
+        "423bffea3a1c42b49a9ad71218e5811b": {
+          "model_module": "@jupyter-widgets/base",
+          "model_name": "LayoutModel",
+          "model_module_version": "2.0.0",
+          "state": {
+            "_model_module": "@jupyter-widgets/base",
+            "_model_module_version": "2.0.0",
+            "_model_name": "LayoutModel",
+            "_view_count": null,
+            "_view_module": "@jupyter-widgets/base",
+            "_view_module_version": "2.0.0",
+            "_view_name": "LayoutView",
+            "align_content": null,
+            "align_items": null,
+            "align_self": null,
+            "border_bottom": null,
+            "border_left": null,
+            "border_right": null,
+            "border_top": null,
+            "bottom": null,
+            "display": null,
+            "flex": null,
+            "flex_flow": null,
+            "grid_area": null,
+            "grid_auto_columns": null,
+            "grid_auto_flow": null,
+            "grid_auto_rows": null,
+            "grid_column": null,
+            "grid_gap": null,
+            "grid_row": null,
+            "grid_template_areas": null,
+            "grid_template_columns": null,
+            "grid_template_rows": null,
+            "height": null,
+            "justify_content": null,
+            "justify_items": null,
+            "left": null,
+            "margin": null,
+            "max_height": null,
+            "max_width": null,
+            "min_height": null,
+            "min_width": null,
+            "object_fit": null,
+            "object_position": null,
+            "order": null,
+            "overflow": null,
+            "padding": null,
+            "right": null,
+            "top": null,
+            "visibility": null,
+            "width": null
+          }
+        },
+        "06f2374f91c8455bb63252092512f2ed": {
+          "model_module": "@jupyter-widgets/base",
+          "model_name": "LayoutModel",
+          "model_module_version": "2.0.0",
+          "state": {
+            "_model_module": "@jupyter-widgets/base",
+            "_model_module_version": "2.0.0",
+            "_model_name": "LayoutModel",
+            "_view_count": null,
+            "_view_module": "@jupyter-widgets/base",
+            "_view_module_version": "2.0.0",
+            "_view_name": "LayoutView",
+            "align_content": null,
+            "align_items": null,
+            "align_self": null,
+            "border_bottom": null,
+            "border_left": null,
+            "border_right": null,
+            "border_top": null,
+            "bottom": null,
+            "display": null,
+            "flex": null,
+            "flex_flow": null,
+            "grid_area": null,
+            "grid_auto_columns": null,
+            "grid_auto_flow": null,
+            "grid_auto_rows": null,
+            "grid_column": null,
+            "grid_gap": null,
+            "grid_row": null,
+            "grid_template_areas": null,
+            "grid_template_columns": null,
+            "grid_template_rows": null,
+            "height": null,
+            "justify_content": null,
+            "justify_items": null,
+            "left": null,
+            "margin": null,
+            "max_height": null,
+            "max_width": null,
+            "min_height": null,
+            "min_width": null,
+            "object_fit": null,
+            "object_position": null,
+            "order": null,
+            "overflow": null,
+            "padding": null,
+            "right": null,
+            "top": null,
+            "visibility": null,
+            "width": null
+          }
+        },
+        "56ff19291e464d63b23e63b8e2ac9ea3": {
+          "model_module": "@jupyter-widgets/controls",
+          "model_name": "SliderStyleModel",
+          "model_module_version": "2.0.0",
+          "state": {
+            "_model_module": "@jupyter-widgets/controls",
+            "_model_module_version": "2.0.0",
+            "_model_name": "SliderStyleModel",
+            "_view_count": null,
+            "_view_module": "@jupyter-widgets/base",
+            "_view_module_version": "2.0.0",
+            "_view_name": "StyleView",
+            "description_width": "",
+            "handle_color": null
+          }
+        },
+        "646a8670cb204a31bb56bc2380898093": {
+          "model_module": "@jupyter-widgets/base",
+          "model_name": "LayoutModel",
+          "model_module_version": "2.0.0",
+          "state": {
+            "_model_module": "@jupyter-widgets/base",
+            "_model_module_version": "2.0.0",
+            "_model_name": "LayoutModel",
+            "_view_count": null,
+            "_view_module": "@jupyter-widgets/base",
+            "_view_module_version": "2.0.0",
+            "_view_name": "LayoutView",
+            "align_content": null,
+            "align_items": null,
+            "align_self": null,
+            "border_bottom": null,
+            "border_left": null,
+            "border_right": null,
+            "border_top": null,
+            "bottom": null,
+            "display": null,
+            "flex": null,
+            "flex_flow": null,
+            "grid_area": null,
+            "grid_auto_columns": null,
+            "grid_auto_flow": null,
+            "grid_auto_rows": null,
+            "grid_column": null,
+            "grid_gap": null,
+            "grid_row": null,
+            "grid_template_areas": null,
+            "grid_template_columns": null,
+            "grid_template_rows": null,
+            "height": null,
+            "justify_content": null,
+            "justify_items": null,
+            "left": null,
+            "margin": null,
+            "max_height": null,
+            "max_width": null,
+            "min_height": null,
+            "min_width": null,
+            "object_fit": null,
+            "object_position": null,
+            "order": null,
+            "overflow": null,
+            "padding": null,
+            "right": null,
+            "top": null,
+            "visibility": null,
+            "width": null
+          }
+        }
+      }
+    }
+  },
+  "nbformat": 4,
+  "nbformat_minor": 0
 }

From f1592968a1fe9ec1526a930d9fed59ffff8404db Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 11:54:11 +0000
Subject: [PATCH 193/210] Update pytest flags and usage

---
 CONTRIBUTING.md | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index 5926bedc1..a625bedd1 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -129,6 +129,19 @@ else, type
 pytest --unit -v
 ```
 
+To run individual test files, you can use
+
+```bash
+pytest tests/unit/path/to/test --unit -v
+```
+
+And for individual tests,
+
+```bash
+pytest tests/unit/path/to/test.py::TestClass:test_name --unit -v
+```
+where `--unit` is a flag to run only unit tests and `-v` is a flag to display verbose output.
+
 ### Writing tests
 
 Every new feature should have its own test. To create ones, have a look at the `test` directory and see if there's a test for a similar method. Copy-pasting is a good way to start.

From 283ccd0eecbaaff01019aa6ab631fbd9ecce2ca0 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 12:49:56 +0000
Subject: [PATCH 194/210] Updt example name, links in readme, and phrasing

---
 README.md                                      | 18 +++++++-----------
 .../scripts/{spm_example.py => spm_descent.py} |  0
 2 files changed, 7 insertions(+), 11 deletions(-)
 rename examples/scripts/{spm_example.py => spm_descent.py} (100%)

diff --git a/README.md b/README.md
index ba56774f3..35e0ff0da 100644
--- a/README.md
+++ b/README.md
@@ -95,34 +95,30 @@ pytest --unit -v
 ```
 
 ### Using PyBOP
-PyBOP has two general types of intended use case:
+PyBOP has two general types of intended use cases:
 1. parameter estimation from battery test data
 2. design optimisation subject to battery manufacturing/usage constraints
 
-These general cases encompass a wide variety of optimisation problems, which require careful consideration based on the choice of battery model, the available data and/or the choice of design parameters.
+These general cases encompass a wide variety of optimisation problems that require careful consideration based on the choice of battery model, the available data and/or the choice of design parameters.
 
-PyBOP comes with a number of example notebooks and scripts which can be found in the examples folder.
+PyBOP comes with a number of [example](https://github.com/pybop-team/PyBOP/blob/develop/examples) notebooks and scripts which can be found in the examples folder.
 
-The [`spm_example` script](https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/spm_example.py) illustrates a straightforward example that begins by creating artificial data from a single particle model (SPM). The unknown parameter values are then discovered by implementing an RMSE cost function using the terminal voltage as the observed signal. The main output is the set of estimated parameters, namely the negative and positive electrode active material volume fractions in this example. To run this example:
+The [spm_descent.py](https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/spm_descent.py) script illustrates a straightforward example that starts by generating artificial data from a single particle model (SPM). The unknown parameter values are identified by implementing a sum-of-square error cost function using the terminal voltage as the observed signal and a gradient descent optimiser. To run this example:
 
 ```bash
 python examples/scripts/spm_example.py
 ```
 
-The [`RMSE_estimation` script](https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/rmse_estimation.py) provides a second example which differs by importing the example `Chen_example.csv` dataset and then estimates the same SPM parameters based on the same RMSE cost function. To run this example:
-
-```bash
-python examples/scripts/rmse_estimation.py
-```
+In addition, [spm_nlopt.ipynb](https://github.com/pybop-team/PyBOP/blob/develop/examples/notebooks/spm_nlopt.ipynb) provides a second example in notebook form. This example estimates the SPM parameters based on an RMSE cost function and a BOBYQA optimiser.
 
 <!-- Code of Conduct -->
 ## Code of Conduct
 
 PyBOP aims to foster a broad consortium of developers and users, building on and learning from the success of the [PyBaMM](https://pybamm.org/) community. Our values are:
 
--   Inclusivity and fairness (those who want to contribute may do so, and their input is appropriately recognised)
+-   Inclusivity and fairness (those who wish to contribute may do so, and their input is appropriately recognised)
 
--   Interoperability (Modularity to enable maximum impact and inclusivity)
+-   Interoperability (Modularity for maximum impact and inclusivity)
 
 -   User-friendliness (putting user requirements first via user-assistance & workflows)
 
diff --git a/examples/scripts/spm_example.py b/examples/scripts/spm_descent.py
similarity index 100%
rename from examples/scripts/spm_example.py
rename to examples/scripts/spm_descent.py

From 1906f8d56f4fd694af817dac848357349d750240 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 13:10:30 +0000
Subject: [PATCH 195/210] Add colab badge

---
 README.md | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/README.md b/README.md
index 35e0ff0da..25d1fbd09 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,8 @@
   <a href="https://github.com/pybop-team/PyBOP/blob/develop/LICENSE">
     <img src="https://img.shields.io/github/license/pybop-team/PyBOP" alt="license" />
   </a>
+  <a href="https://colab.research.google.com/github/pybop-team/PyBOP/blob/develop/">
+    <img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab" />
 </p>
 
 </div>

From 9529456c8871e2e159d8caf9146c68ae327a73db Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 14:31:18 +0000
Subject: [PATCH 196/210] Add jupyter notebook nox session and scheduled tests

---
 .github/workflows/scheduled_tests.yaml | 2 ++
 noxfile.py                             | 8 ++++++++
 2 files changed, 10 insertions(+)

diff --git a/.github/workflows/scheduled_tests.yaml b/.github/workflows/scheduled_tests.yaml
index cb730f66e..2de1a0f83 100644
--- a/.github/workflows/scheduled_tests.yaml
+++ b/.github/workflows/scheduled_tests.yaml
@@ -30,6 +30,7 @@ jobs:
       - name: Unit tests with nox
         run: |
           python -m nox -s unit
+          python -m nox -s notebooks
 
     #M-series Mac Mini
   build-apple-mseries:
@@ -57,6 +58,7 @@ jobs:
           pyenv activate pybop-${{ matrix.python-version }}
           python -m pip install --upgrade pip wheel setuptools nox
           python -m nox -s unit
+          python -m nox -s notebooks
 
       - name: Uninstall pyenv-virtualenv & python
         if: always()
diff --git a/noxfile.py b/noxfile.py
index be62e1129..c88e483e4 100644
--- a/noxfile.py
+++ b/noxfile.py
@@ -16,3 +16,11 @@ def coverage(session):
     session.run_always("pip", "install", "-e", ".")
     session.install("pytest-cov")
     session.run("pytest", "--unit", "-v", "--cov", "--cov-report=xml")
+
+
+@nox.session
+def notebooks(session):
+    """Run the examples tests for Jupyter notebooks."""
+    session.run_always("pip", "install", "-e", ".")
+    session.install("pytest", "nbmake")
+    session.run("pytest", "--nbmake", "examples/", external=True)

From e0cdb750ef6e566c41325f5cb311eca19cac6f31 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Fri, 17 Nov 2023 15:29:19 +0000
Subject: [PATCH 197/210] Add checks on early termination of simulation

---
 tests/unit/test_cost.py | 58 ++++++++++++++++++++++-------------------
 1 file changed, 31 insertions(+), 27 deletions(-)

diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 650c576f8..601e52db4 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -8,10 +8,12 @@ class TestCosts:
     Class for tests cost functions
     """
 
+    @pytest.mark.parametrize("cut_off", [2.5,3.777])
     @pytest.mark.unit
-    def test_costs(self):
-        # Construct Problem
+    def test_costs(self, cut_off):
+        # Construct model
         model = pybop.lithium_ion.SPM()
+
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
@@ -23,51 +25,53 @@ def test_costs(self):
         # Form dataset
         x0 = np.array([0.52])
         solution = self.getdata(model, x0)
-
         dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
+        # Construct Problem
         signal = "Voltage [V]"
-        problem = pybop.Problem(model, parameters, dataset, signal=signal)
+        model.parameter_set.update({"Lower voltage cut-off [V]": cut_off})
+        problem = pybop.Problem(model, parameters, dataset, signal=signal, x0=x0)
 
         # Base Cost
-        cost = pybop.BaseCost(problem)
-        assert cost.problem == problem
+        base_cost = pybop.BaseCost(problem)
+        assert base_cost.problem == problem
         with pytest.raises(NotImplementedError):
-            cost([0.5])
+            base_cost([0.5])
         with pytest.raises(NotImplementedError):
-            cost.n_parameters()
+            base_cost.n_parameters()
 
         # Root Mean Squared Error
-        cost = pybop.RootMeanSquaredError(problem)
-        cost([0.5])
+        rmse_cost = pybop.RootMeanSquaredError(problem)
+        rmse_cost([0.5])
 
-        assert type(cost([0.5])) == np.float64
-        assert cost([0.5]) >= 0
+        # Sum Squared Error
+        sums_cost = pybop.SumSquaredError(problem)
+        sums_cost([0.5])
 
-        # Root Mean Squared Error
-        cost = pybop.SumSquaredError(problem)
-        cost([0.5])
+        # Test type of returned value
+        assert type(rmse_cost([0.5])) == np.float64 or np.isinf(rmse_cost([0.5]))
+        assert rmse_cost([0.5]) >= 0
+        assert type(sums_cost([0.5])) == np.float64 or np.isinf(sums_cost([0.5]))
+        assert sums_cost([0.5]) >= 0
 
-        assert type(cost([0.5])) == np.float64
-        assert cost([0.5]) >= 0
+        # Test option setting
+        sums_cost.set_fail_gradient(1)
 
-        # Test catch on non-matching vector lengths
-        # Sum Squared Error
-        cost = pybop.SumSquaredError(problem)
+        # Test exception for non-numeric inputs
         with pytest.raises(ValueError):
-            cost(["test-entry"])
-
+            rmse_cost(["StringInputShouldNotWork"])
         with pytest.raises(ValueError):
-            cost.evaluateS1(["test-entry"])
-
-        # Root Mean Squared Error
-        cost = pybop.RootMeanSquaredError(problem)
+            sums_cost(["StringInputShouldNotWork"])
         with pytest.raises(ValueError):
-            cost(["test-entry"])
+            sums_cost.evaluateS1(["StringInputShouldNotWork"])
+
+        # Test treatment of simulations that terminated early
+        # by variation of the cut-off voltage.
+       
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From 16b2fbf2ab7ed02f070cad52a2325b0dd915dcab Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Fri, 17 Nov 2023 15:30:28 +0000
Subject: [PATCH 198/210] Revert "Add checks on early termination of
 simulation"

This reverts commit e0cdb750ef6e566c41325f5cb311eca19cac6f31.
---
 tests/unit/test_cost.py | 58 +++++++++++++++++++----------------------
 1 file changed, 27 insertions(+), 31 deletions(-)

diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 601e52db4..650c576f8 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -8,12 +8,10 @@ class TestCosts:
     Class for tests cost functions
     """
 
-    @pytest.mark.parametrize("cut_off", [2.5,3.777])
     @pytest.mark.unit
-    def test_costs(self, cut_off):
-        # Construct model
+    def test_costs(self):
+        # Construct Problem
         model = pybop.lithium_ion.SPM()
-
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
@@ -25,53 +23,51 @@ def test_costs(self, cut_off):
         # Form dataset
         x0 = np.array([0.52])
         solution = self.getdata(model, x0)
+
         dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
-        # Construct Problem
         signal = "Voltage [V]"
-        model.parameter_set.update({"Lower voltage cut-off [V]": cut_off})
-        problem = pybop.Problem(model, parameters, dataset, signal=signal, x0=x0)
+        problem = pybop.Problem(model, parameters, dataset, signal=signal)
 
         # Base Cost
-        base_cost = pybop.BaseCost(problem)
-        assert base_cost.problem == problem
+        cost = pybop.BaseCost(problem)
+        assert cost.problem == problem
         with pytest.raises(NotImplementedError):
-            base_cost([0.5])
+            cost([0.5])
         with pytest.raises(NotImplementedError):
-            base_cost.n_parameters()
+            cost.n_parameters()
 
         # Root Mean Squared Error
-        rmse_cost = pybop.RootMeanSquaredError(problem)
-        rmse_cost([0.5])
+        cost = pybop.RootMeanSquaredError(problem)
+        cost([0.5])
 
-        # Sum Squared Error
-        sums_cost = pybop.SumSquaredError(problem)
-        sums_cost([0.5])
+        assert type(cost([0.5])) == np.float64
+        assert cost([0.5]) >= 0
 
-        # Test type of returned value
-        assert type(rmse_cost([0.5])) == np.float64 or np.isinf(rmse_cost([0.5]))
-        assert rmse_cost([0.5]) >= 0
-        assert type(sums_cost([0.5])) == np.float64 or np.isinf(sums_cost([0.5]))
-        assert sums_cost([0.5]) >= 0
+        # Root Mean Squared Error
+        cost = pybop.SumSquaredError(problem)
+        cost([0.5])
 
-        # Test option setting
-        sums_cost.set_fail_gradient(1)
+        assert type(cost([0.5])) == np.float64
+        assert cost([0.5]) >= 0
 
-        # Test exception for non-numeric inputs
-        with pytest.raises(ValueError):
-            rmse_cost(["StringInputShouldNotWork"])
+        # Test catch on non-matching vector lengths
+        # Sum Squared Error
+        cost = pybop.SumSquaredError(problem)
         with pytest.raises(ValueError):
-            sums_cost(["StringInputShouldNotWork"])
+            cost(["test-entry"])
+
         with pytest.raises(ValueError):
-            sums_cost.evaluateS1(["StringInputShouldNotWork"])
+            cost.evaluateS1(["test-entry"])
 
-        # Test treatment of simulations that terminated early
-        # by variation of the cut-off voltage.
-       
+        # Root Mean Squared Error
+        cost = pybop.RootMeanSquaredError(problem)
+        with pytest.raises(ValueError):
+            cost(["test-entry"])
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values

From 790bb474eeb0178cbf20236311afb4eb564ceab2 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Fri, 17 Nov 2023 17:28:33 +0000
Subject: [PATCH 199/210] Return Infinity if simulation terminates early (#99)

* Return inf if simulation terminates early

* Add rvs description

* Update error_costs.py

* Add x0 length errors

* Add checks on early termination of simulation

* Add test for evaluateS1

* Combine x0 length checking

Co-authored-by: Brady Planden <55357039+BradyPlanden@users.noreply.github.com>

* Initialise _de as float

Co-authored-by: Brady Planden <55357039+BradyPlanden@users.noreply.github.com>

* Add check on length of x0

* Align np.inf return type with standard return

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Brady Planden <55357039+BradyPlanden@users.noreply.github.com>
Co-authored-by: Brady Planden <brady.planden@gmail.com>
---
 pybop/_problem.py                  |  2 +
 pybop/costs/error_costs.py         | 57 ++++++++++++++++++++-------
 pybop/parameters/base_parameter.py |  3 ++
 tests/unit/test_cost.py            | 62 +++++++++++++++++-------------
 tests/unit/test_problem.py         |  5 +++
 5 files changed, 88 insertions(+), 41 deletions(-)

diff --git a/pybop/_problem.py b/pybop/_problem.py
index 2cdc5544b..469b65047 100644
--- a/pybop/_problem.py
+++ b/pybop/_problem.py
@@ -55,6 +55,8 @@ def __init__(
             self.x0 = np.zeros(self.n_parameters)
             for i, param in enumerate(self.parameters):
                 self.x0[i] = param.rvs(1)
+        elif len(x0) != self.n_parameters:
+            raise ValueError("x0 dimensions do not match number of parameters")
 
         # Add the initial values to the parameter definitions
         for i, param in enumerate(self.parameters):
diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index d3f4c6d18..82582d52a 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -38,7 +38,12 @@ def __call__(self, x, grad=None):
         Computes the cost.
         """
         try:
-            return np.sqrt(np.mean((self.problem.evaluate(x) - self._target) ** 2))
+            prediction = self.problem.evaluate(x)
+
+            if len(prediction) < len(self._target):
+                return np.float64(np.inf)  # simulation stopped early
+            else:
+                return np.sqrt(np.mean((prediction - self._target) ** 2))
 
         except Exception as e:
             raise ValueError(f"Error in cost calculation: {e}")
@@ -47,20 +52,32 @@ def __call__(self, x, grad=None):
 class SumSquaredError(BaseCost):
     """
     Defines the sum squared error cost function.
+
+    The initial fail gradient is set equal to one, but this can be
+    changed at any time with :meth:`set_fail_gradient()`.
     """
 
     def __init__(self, problem):
         super(SumSquaredError, self).__init__(problem)
 
+        # Default fail gradient
+        self._de = 1.0
+
     def __call__(self, x, grad=None):
         """
         Computes the cost.
         """
         try:
-            return np.sum(
-                (np.sum(((self.problem.evaluate(x) - self._target) ** 2), axis=0)),
-                axis=0,
-            )
+            prediction = self.problem.evaluate(x)
+
+            if len(prediction) < len(self._target):
+                return np.float64(np.inf)  # simulation stopped early
+            else:
+                return np.sum(
+                    (np.sum(((prediction - self._target) ** 2), axis=0)),
+                    axis=0,
+                )
+
         except Exception as e:
             raise ValueError(f"Error in cost calculation: {e}")
 
@@ -71,17 +88,29 @@ def evaluateS1(self, x):
         """
         try:
             y, dy = self.problem.evaluateS1(x)
-            dy = dy.reshape(
-                (
-                    self.problem.n_time_data,
-                    self.problem.n_outputs,
-                    self.problem.n_parameters,
+            if len(y) < len(self._target):
+                e = np.float64(np.inf)
+                de = self._de * np.ones(self.problem.n_parameters)
+            else:
+                dy = dy.reshape(
+                    (
+                        self.problem.n_time_data,
+                        self.problem.n_outputs,
+                        self.problem.n_parameters,
+                    )
                 )
-            )
-            r = y - self._target
-            e = np.sum(np.sum(r**2, axis=0), axis=0)
-            de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1)
+                r = y - self._target
+                e = np.sum(np.sum(r**2, axis=0), axis=0)
+                de = 2 * np.sum(np.sum((r.T * dy.T), axis=2), axis=1)
+
             return e, de
 
         except Exception as e:
             raise ValueError(f"Error in cost calculation: {e}")
+
+    def set_fail_gradient(self, de):
+        """
+        Sets the fail gradient for this optimiser.
+        """
+        de = float(de)
+        self._de = de
diff --git a/pybop/parameters/base_parameter.py b/pybop/parameters/base_parameter.py
index 66c3a9e3c..66ac0b136 100644
--- a/pybop/parameters/base_parameter.py
+++ b/pybop/parameters/base_parameter.py
@@ -15,6 +15,9 @@ def __init__(self, name, value=None, prior=None, bounds=None):
             raise ValueError("Lower bound must be less than upper bound")
 
     def rvs(self, n_samples):
+        """
+        Returns a random value sample from the prior distribution.
+        """
         sample = self.prior.rvs(n_samples)
 
         if sample < self.lower_bound:
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 650c576f8..8f528e942 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -8,10 +8,12 @@ class TestCosts:
     Class for tests cost functions
     """
 
+    @pytest.mark.parametrize("cut_off", [2.5, 3.777])
     @pytest.mark.unit
-    def test_costs(self):
-        # Construct Problem
+    def test_costs(self, cut_off):
+        # Construct model
         model = pybop.lithium_ion.SPM()
+
         parameters = [
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
@@ -23,51 +25,57 @@ def test_costs(self):
         # Form dataset
         x0 = np.array([0.52])
         solution = self.getdata(model, x0)
-
         dataset = [
             pybop.Dataset("Time [s]", solution["Time [s]"].data),
             pybop.Dataset("Current function [A]", solution["Current [A]"].data),
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
+        # Construct Problem
         signal = "Voltage [V]"
-        problem = pybop.Problem(model, parameters, dataset, signal=signal)
+        model.parameter_set.update({"Lower voltage cut-off [V]": cut_off})
+        problem = pybop.Problem(model, parameters, dataset, signal=signal, x0=x0)
 
         # Base Cost
-        cost = pybop.BaseCost(problem)
-        assert cost.problem == problem
+        base_cost = pybop.BaseCost(problem)
+        assert base_cost.problem == problem
         with pytest.raises(NotImplementedError):
-            cost([0.5])
+            base_cost([0.5])
         with pytest.raises(NotImplementedError):
-            cost.n_parameters()
+            base_cost.n_parameters()
 
         # Root Mean Squared Error
-        cost = pybop.RootMeanSquaredError(problem)
-        cost([0.5])
+        rmse_cost = pybop.RootMeanSquaredError(problem)
+        rmse_cost([0.5])
 
-        assert type(cost([0.5])) == np.float64
-        assert cost([0.5]) >= 0
+        # Sum Squared Error
+        sums_cost = pybop.SumSquaredError(problem)
+        sums_cost([0.5])
 
-        # Root Mean Squared Error
-        cost = pybop.SumSquaredError(problem)
-        cost([0.5])
+        # Test type of returned value
+        assert type(rmse_cost([0.5])) == np.float64
+        assert rmse_cost([0.5]) >= 0
 
-        assert type(cost([0.5])) == np.float64
-        assert cost([0.5]) >= 0
+        assert type(sums_cost([0.5])) == np.float64
+        assert sums_cost([0.5]) >= 0
+        e, de = sums_cost.evaluateS1([0.5])
 
-        # Test catch on non-matching vector lengths
-        # Sum Squared Error
-        cost = pybop.SumSquaredError(problem)
-        with pytest.raises(ValueError):
-            cost(["test-entry"])
+        assert type(e) == np.float64
+        assert type(de) == np.ndarray
 
-        with pytest.raises(ValueError):
-            cost.evaluateS1(["test-entry"])
+        # Test option setting
+        sums_cost.set_fail_gradient(1)
 
-        # Root Mean Squared Error
-        cost = pybop.RootMeanSquaredError(problem)
+        # Test exception for non-numeric inputs
         with pytest.raises(ValueError):
-            cost(["test-entry"])
+            rmse_cost(["StringInputShouldNotWork"])
+        with pytest.raises(ValueError):
+            sums_cost(["StringInputShouldNotWork"])
+        with pytest.raises(ValueError):
+            sums_cost.evaluateS1(["StringInputShouldNotWork"])
+
+        # Test treatment of simulations that terminated early
+        # by variation of the cut-off voltage.
 
     def getdata(self, model, x0):
         model.parameter_set = model.pybamm_model.default_parameter_values
diff --git a/tests/unit/test_problem.py b/tests/unit/test_problem.py
index 93879f395..aa470d9b4 100644
--- a/tests/unit/test_problem.py
+++ b/tests/unit/test_problem.py
@@ -37,6 +37,11 @@ def test_problem(self):
             pybop.Dataset("Voltage [V]", solution["Terminal voltage [V]"].data),
         ]
 
+        # Test incorrect number of initial parameter values
+        with pytest.raises(ValueError):
+            pybop.Problem(model, parameters, dataset, signal=signal, x0=np.array([]))
+
+        # Construct Problem
         problem = pybop.Problem(model, parameters, dataset, signal=signal)
 
         assert problem._model == model

From 3523f200ec3fee4206ebbbfd7f9426cc48c3c1f3 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Fri, 17 Nov 2023 18:11:41 +0000
Subject: [PATCH 200/210] Updt max iterations for convergance, rename test
 method

---
 tests/unit/test_parameterisations.py | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index e5ab70d79..2dbd4ed40 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -64,7 +64,7 @@ def test_spm(self, init_soc):
 
     @pytest.mark.parametrize("init_soc", [0.3, 0.5, 0.8])
     @pytest.mark.unit
-    def test_spme_multiple_optimisers(self, init_soc):
+    def test_spme_optimisers(self, init_soc):
         # Define model
         parameter_set = pybop.ParameterSet("pybamm", "Chen2020")
         model = pybop.lithium_ion.SPMe(parameter_set=parameter_set)
@@ -114,10 +114,10 @@ def test_spme_multiple_optimisers(self, init_soc):
                 assert parameterisation._use_f_guessed is True
 
                 parameterisation.set_f_guessed_tracking(False)
-                parameterisation.set_max_iterations(100)
+                parameterisation.set_max_iterations(250)
 
                 x, final_cost = parameterisation.run()
-                assert parameterisation._iterations == 100
+                assert parameterisation._max_iterations == 250
 
             else:
                 x, final_cost = parameterisation.run()
@@ -155,7 +155,7 @@ def test_model_misparameterisation(self, init_soc):
             pybop.Parameter(
                 "Negative electrode active material volume fraction",
                 prior=pybop.Gaussian(0.5, 0.02),
-                bounds=[0.45, 0.625],
+                bounds=[0.375, 0.625],
             ),
             pybop.Parameter(
                 "Positive electrode active material volume fraction",

From f67c8103ace47cd40f87fd85a1f45748efd674f4 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Fri, 17 Nov 2023 18:12:37 +0000
Subject: [PATCH 201/210] Pass x0, bounds and n_parameters into Cost (#101)

* Unpack x0, bounds and n_parameters into Cost

* Pass x0, bounds and n_parameters from Cost

* Remove n_parameters function check

* Allow problem=None in BaseCost

* Add StandaloneCost

* Add test of StandaloneCosts
---
 pybop/costs/error_costs.py      | 12 +++++-------
 pybop/costs/standalone.py       | 18 ++++++++++++++++++
 pybop/optimisation.py           |  8 ++++----
 tests/unit/test_cost.py         |  2 --
 tests/unit/test_optimisation.py | 15 +++++++++++++++
 5 files changed, 42 insertions(+), 13 deletions(-)
 create mode 100644 pybop/costs/standalone.py

diff --git a/pybop/costs/error_costs.py b/pybop/costs/error_costs.py
index 82582d52a..2c497d45b 100644
--- a/pybop/costs/error_costs.py
+++ b/pybop/costs/error_costs.py
@@ -10,7 +10,11 @@ class BaseCost:
 
     def __init__(self, problem):
         self.problem = problem
-        self._target = problem._target
+        if problem is not None:
+            self._target = problem._target
+            self.x0 = problem.x0
+            self.bounds = problem.bounds
+            self.n_parameters = problem.n_parameters
 
     def __call__(self, x, grad=None):
         """
@@ -18,12 +22,6 @@ def __call__(self, x, grad=None):
         """
         raise NotImplementedError
 
-    def n_parameters(self):
-        """
-        Returns the size of the parameter space.
-        """
-        raise NotImplementedError
-
 
 class RootMeanSquaredError(BaseCost):
     """
diff --git a/pybop/costs/standalone.py b/pybop/costs/standalone.py
new file mode 100644
index 000000000..197dcca5b
--- /dev/null
+++ b/pybop/costs/standalone.py
@@ -0,0 +1,18 @@
+import pybop
+import numpy as np
+
+
+class StandaloneCost(pybop.BaseCost):
+    def __init__(self, problem=None):
+        super().__init__(problem)
+
+        self.x0 = np.array([4.2])
+        self.n_parameters = len(self.x0)
+
+        self.bounds = dict(
+            lower=[-1],
+            upper=[10],
+        )
+
+    def __call__(self, x, grad=None):
+        return x[0] ** 2 + 42
diff --git a/pybop/optimisation.py b/pybop/optimisation.py
index ac8ffdfd3..6dc947de7 100644
--- a/pybop/optimisation.py
+++ b/pybop/optimisation.py
@@ -23,11 +23,11 @@ def __init__(
         verbose=False,
     ):
         self.cost = cost
-        self.problem = cost.problem
         self.optimiser = optimiser
         self.verbose = verbose
-        self.x0 = cost.problem.x0
-        self.bounds = self.problem.bounds
+        self.x0 = cost.x0
+        self.bounds = cost.bounds
+        self.n_parameters = cost.n_parameters
         self.sigma0 = sigma0
         self.log = []
 
@@ -56,7 +56,7 @@ def __init__(
             self.pints = False
 
             if issubclass(self.optimiser, pybop.NLoptOptimize):
-                self.optimiser = self.optimiser(self.problem.n_parameters)
+                self.optimiser = self.optimiser(self.n_parameters)
 
             elif issubclass(self.optimiser, pybop.SciPyMinimize):
                 self.optimiser = self.optimiser()
diff --git a/tests/unit/test_cost.py b/tests/unit/test_cost.py
index 8f528e942..0c7e329f3 100644
--- a/tests/unit/test_cost.py
+++ b/tests/unit/test_cost.py
@@ -41,8 +41,6 @@ def test_costs(self, cut_off):
         assert base_cost.problem == problem
         with pytest.raises(NotImplementedError):
             base_cost([0.5])
-        with pytest.raises(NotImplementedError):
-            base_cost.n_parameters()
 
         # Root Mean Squared Error
         rmse_cost = pybop.RootMeanSquaredError(problem)
diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index b9d3b0414..406c89ee3 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -1,6 +1,7 @@
 import pybop
 import numpy as np
 import pytest
+from pybop.costs.standalone import StandaloneCost
 
 
 class TestOptimisation:
@@ -8,6 +9,20 @@ class TestOptimisation:
     A class to test the optimisation class.
     """
 
+    @pytest.mark.unit
+    def test_standalone(self):
+        # Build an Optimisation problem with a StandaloneCost
+        cost = StandaloneCost()
+
+        opt = pybop.Optimisation(cost=cost, optimiser=pybop.NLoptOptimize)
+
+        assert len(opt.x0) == opt.n_parameters
+
+        x, final_cost = opt.run()
+
+        np.testing.assert_allclose(x, 0, atol=1e-2)
+        np.testing.assert_allclose(final_cost, 42, atol=1e-2)
+
     @pytest.mark.unit
     def test_prior_sampling(self):
         # Tests prior sampling

From 4dc8a3d3ad459919739ddb861a0ff9b8c793f22e Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Fri, 17 Nov 2023 18:42:11 +0000
Subject: [PATCH 202/210] Update CONTRIBUTING.md

---
 CONTRIBUTING.md | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a625bedd1..d1ea9db24 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -159,14 +159,15 @@ This also means that, if you can't fix the bug yourself, it will be much easier
 1. Run individual test scripts instead of the whole test suite:
 
    ```bash
-   pytest tests/unit/path/to/test
+   pytest tests/unit/path/to/test --unit -v
    ```
 
    You can also run an individual test from a particular script, e.g.
 
    ```bash
-   pytest tests/unit/test_quick_plot.py TestQuickPlot.test_failure
+   pytest tests/unit/path/to/test.py::TestClass:test_name --unit -v
    ```
+   where `--unit` is a flag to run only unit tests and `-v` is a flag to display verbose output.
 
 2. Set break-points, either in your IDE or using the Python debugging module. To use the latter, add the following line where you want to set the break point
 

From 500fc682a2a22a48db542c1324630dec4249a718 Mon Sep 17 00:00:00 2001
From: NicolaCourtier <45851982+NicolaCourtier@users.noreply.github.com>
Date: Fri, 17 Nov 2023 18:44:12 +0000
Subject: [PATCH 203/210] Update README.md

---
 README.md | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/README.md b/README.md
index 25d1fbd09..11d7e9be8 100644
--- a/README.md
+++ b/README.md
@@ -103,12 +103,12 @@ PyBOP has two general types of intended use cases:
 
 These general cases encompass a wide variety of optimisation problems that require careful consideration based on the choice of battery model, the available data and/or the choice of design parameters.
 
-PyBOP comes with a number of [example](https://github.com/pybop-team/PyBOP/blob/develop/examples) notebooks and scripts which can be found in the examples folder.
+PyBOP comes with a number of [example notebooks and scripts](https://github.com/pybop-team/PyBOP/blob/develop/examples) which can be found in the examples folder.
 
 The [spm_descent.py](https://github.com/pybop-team/PyBOP/blob/develop/examples/scripts/spm_descent.py) script illustrates a straightforward example that starts by generating artificial data from a single particle model (SPM). The unknown parameter values are identified by implementing a sum-of-square error cost function using the terminal voltage as the observed signal and a gradient descent optimiser. To run this example:
 
 ```bash
-python examples/scripts/spm_example.py
+python examples/scripts/spm_descent.py
 ```
 
 In addition, [spm_nlopt.ipynb](https://github.com/pybop-team/PyBOP/blob/develop/examples/notebooks/spm_nlopt.ipynb) provides a second example in notebook form. This example estimates the SPM parameters based on an RMSE cost function and a BOBYQA optimiser.
@@ -120,7 +120,7 @@ PyBOP aims to foster a broad consortium of developers and users, building on and
 
 -   Inclusivity and fairness (those who wish to contribute may do so, and their input is appropriately recognised)
 
--   Interoperability (Modularity for maximum impact and inclusivity)
+-   Interoperability (modularity for maximum impact and inclusivity)
 
 -   User-friendliness (putting user requirements first via user-assistance & workflows)
 

From d2b1d17a35f0d133eff20ba4cea49911508ad61a Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 20 Nov 2023 11:22:18 +0000
Subject: [PATCH 204/210] Updt CMAES with pints.RectangularBoundaries

---
 pybop/optimisers/pints_optimisers.py | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index 903d4d560..cad4bed43 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -17,7 +17,10 @@ class CMAES(pints.CMAES):
     """
 
     def __init__(self, x0, sigma0=0.1, bounds=None):
-        boundaries = PintsBoundaries(bounds, x0)
+        if bounds is not None:
+            boundaries = pints.RectangularBoundaries(bounds["lower"], bounds["upper"])
+        else:
+            boundaries = PintsBoundaries(bounds, x0)
         super().__init__(x0, sigma0, boundaries)
 
 

From ec2f86381b1d750ef7c3e471d12c1d7af4552001 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 20 Nov 2023 11:58:22 +0000
Subject: [PATCH 205/210] Refactor x0 sampling w/o bound clashes, reduce
 test_parameterisation SOC points 3->2, Updt. CMAES boundaries creation

---
 pybop/optimisers/pints_optimisers.py |  3 ++-
 pybop/parameters/base_parameter.py   | 21 +++++++++++++--------
 tests/unit/test_parameterisations.py |  6 +++---
 3 files changed, 18 insertions(+), 12 deletions(-)

diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index cad4bed43..30d414bcd 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -20,7 +20,8 @@ def __init__(self, x0, sigma0=0.1, bounds=None):
         if bounds is not None:
             boundaries = pints.RectangularBoundaries(bounds["lower"], bounds["upper"])
         else:
-            boundaries = PintsBoundaries(bounds, x0)
+            boundaries = None  # PintsBoundaries(bounds, x0)
+
         super().__init__(x0, sigma0, boundaries)
 
 
diff --git a/pybop/parameters/base_parameter.py b/pybop/parameters/base_parameter.py
index 66ac0b136..5e58d5ed9 100644
--- a/pybop/parameters/base_parameter.py
+++ b/pybop/parameters/base_parameter.py
@@ -1,3 +1,6 @@
+import numpy as np
+
+
 class Parameter:
     """ ""
     Class for creating parameters in PyBOP.
@@ -18,14 +21,16 @@ def rvs(self, n_samples):
         """
         Returns a random value sample from the prior distribution.
         """
-        sample = self.prior.rvs(n_samples)
-
-        if sample < self.lower_bound:
-            return self.lower_bound
-        elif sample > self.upper_bound:
-            return self.upper_bound
-        else:
-            return sample
+        samples = self.prior.rvs(n_samples)
+
+        # Constrain samples to be within bounds
+        samples = np.clip(samples, self.lower_bound, self.upper_bound)
+
+        # Adjust samples that exactly equal bounds
+        samples[samples == self.lower_bound] += samples * 0.0001
+        samples[samples == self.upper_bound] -= samples * 0.0001
+
+        return samples
 
     def update(self, value):
         self.value = value
diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 2dbd4ed40..0b9c41a71 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -9,7 +9,7 @@ class TestModelParameterisation:
     A class to test the model parameterisation methods.
     """
 
-    @pytest.mark.parametrize("init_soc", [0.3, 0.5, 0.8])
+    @pytest.mark.parametrize("init_soc", [0.3, 0.7])
     @pytest.mark.unit
     def test_spm(self, init_soc):
         # Define model
@@ -62,7 +62,7 @@ def test_spm(self, init_soc):
         np.testing.assert_allclose(final_cost, 0, atol=1e-2)
         np.testing.assert_allclose(x, x0, atol=1e-1)
 
-    @pytest.mark.parametrize("init_soc", [0.3, 0.5, 0.8])
+    @pytest.mark.parametrize("init_soc", [0.3, 0.7])
     @pytest.mark.unit
     def test_spme_optimisers(self, init_soc):
         # Define model
@@ -126,7 +126,7 @@ def test_spme_optimisers(self, init_soc):
             np.testing.assert_allclose(final_cost, 0, atol=1e-2)
             np.testing.assert_allclose(x, x0, atol=1e-1)
 
-    @pytest.mark.parametrize("init_soc", [0.3, 0.5, 0.8])
+    @pytest.mark.parametrize("init_soc", [0.3, 0.7])
     @pytest.mark.unit
     def test_model_misparameterisation(self, init_soc):
         # Define two different models with different parameter sets

From c82b85b91259fd63a8d526c6a54c43e0e8d276b2 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 20 Nov 2023 12:52:22 +0000
Subject: [PATCH 206/210] Updt. tests, grad descent boundaries

---
 pybop/optimisers/pints_optimisers.py | 10 ++++++----
 tests/unit/test_optimisation.py      |  5 +++++
 2 files changed, 11 insertions(+), 4 deletions(-)

diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index 30d414bcd..79dc85c28 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -7,7 +7,7 @@ class GradientDescent(pints.GradientDescent):
     """
 
     def __init__(self, x0, sigma0=0.1, bounds=None):
-        boundaries = PintsBoundaries(bounds, x0)
+        boundaries = None  # Bounds ignored in pints.GradDesc
         super().__init__(x0, sigma0, boundaries)
 
 
@@ -18,11 +18,13 @@ class CMAES(pints.CMAES):
 
     def __init__(self, x0, sigma0=0.1, bounds=None):
         if bounds is not None:
-            boundaries = pints.RectangularBoundaries(bounds["lower"], bounds["upper"])
+            self.boundaries = pints.RectangularBoundaries(
+                bounds["lower"], bounds["upper"]
+            )
         else:
-            boundaries = None  # PintsBoundaries(bounds, x0)
+            self.boundaries = None
 
-        super().__init__(x0, sigma0, boundaries)
+        super().__init__(x0, sigma0, self.boundaries)
 
 
 class PintsBoundaries(object):
diff --git a/tests/unit/test_optimisation.py b/tests/unit/test_optimisation.py
index 406c89ee3..5bbb4998b 100644
--- a/tests/unit/test_optimisation.py
+++ b/tests/unit/test_optimisation.py
@@ -92,6 +92,11 @@ def test_optimiser_construction(self):
             == "Covariance Matrix Adaptation Evolution Strategy (CMA-ES)"
         )
 
+        # None with no bounds
+        cost.bounds = None
+        opt = pybop.Optimisation(cost=cost)
+        assert opt.optimiser.boundaries is None
+
         # SciPy
         opt = pybop.Optimisation(cost=cost, optimiser=pybop.SciPyMinimize)
         assert opt.optimiser is not None

From 854e1ec9ac1d569c77ef26100183e99331241916 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 20 Nov 2023 13:16:08 +0000
Subject: [PATCH 207/210] Remove PintsBoundaries class as not required

---
 pybop/optimisers/pints_optimisers.py | 39 ----------------------------
 1 file changed, 39 deletions(-)

diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index 79dc85c28..709f028a8 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -25,42 +25,3 @@ def __init__(self, x0, sigma0=0.1, bounds=None):
             self.boundaries = None
 
         super().__init__(x0, sigma0, self.boundaries)
-
-
-class PintsBoundaries(object):
-    """
-    An interface class for PyBOP that extends the PINTS ErrorMeasure class.
-
-    From PINTS:
-    Abstract class representing boundaries on a parameter space.
-    """
-
-    def __init__(self, bounds, x0):
-        self.bounds = bounds
-        self.x0 = x0
-
-    def check(self, parameters):
-        """
-        Returns ``True`` if and only if the given point in parameter space is
-        within the boundaries.
-        """
-
-        lower_bounds = self.bounds["lower"]
-        upper_bounds = self.bounds["upper"]
-
-        if len(parameters) != len(lower_bounds):
-            raise ValueError("Parameters length mismatch")
-
-        within_bounds = all(
-            low <= param <= high
-            for low, high, param in zip(lower_bounds, upper_bounds, parameters)
-        )
-
-        return within_bounds
-
-    def n_parameters(self):
-        """
-        Returns the dimension of the parameter space these boundaries are
-        defined on.
-        """
-        return len(self.x0)

From a66be81e409df321562c83d0df618e4821e9dbd2 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 20 Nov 2023 14:06:00 +0000
Subject: [PATCH 208/210] Restore simple f_guessed test

---
 tests/unit/test_parameterisations.py | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/tests/unit/test_parameterisations.py b/tests/unit/test_parameterisations.py
index 0b9c41a71..142e590d0 100644
--- a/tests/unit/test_parameterisations.py
+++ b/tests/unit/test_parameterisations.py
@@ -112,6 +112,8 @@ def test_spme_optimisers(self, init_soc):
             if optimiser == pybop.CMAES:
                 parameterisation.set_f_guessed_tracking(True)
                 assert parameterisation._use_f_guessed is True
+                parameterisation.set_max_iterations(1)
+                x, final_cost = parameterisation.run()
 
                 parameterisation.set_f_guessed_tracking(False)
                 parameterisation.set_max_iterations(250)

From 3437b9534dec5e3166fce282a3ab50ca5f922b34 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 20 Nov 2023 15:08:03 +0000
Subject: [PATCH 209/210] Bounds message for GradDescent, Add hyperparameter
 for parameter bound clipping with setter

---
 pybop/optimisers/pints_optimisers.py |  3 +++
 pybop/parameters/base_parameter.py   | 19 +++++++++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/pybop/optimisers/pints_optimisers.py b/pybop/optimisers/pints_optimisers.py
index 709f028a8..6524cb607 100644
--- a/pybop/optimisers/pints_optimisers.py
+++ b/pybop/optimisers/pints_optimisers.py
@@ -7,6 +7,9 @@ class GradientDescent(pints.GradientDescent):
     """
 
     def __init__(self, x0, sigma0=0.1, bounds=None):
+        if bounds is not None:
+            print("Boundaries ignored by GradientDescent")
+
         boundaries = None  # Bounds ignored in pints.GradDesc
         super().__init__(x0, sigma0, boundaries)
 
diff --git a/pybop/parameters/base_parameter.py b/pybop/parameters/base_parameter.py
index 5e58d5ed9..fa8754831 100644
--- a/pybop/parameters/base_parameter.py
+++ b/pybop/parameters/base_parameter.py
@@ -13,8 +13,9 @@ def __init__(self, name, value=None, prior=None, bounds=None):
         self.bounds = bounds
         self.lower_bound = self.bounds[0]
         self.upper_bound = self.bounds[1]
+        self.margin = 1e-4
 
-        if self.lower_bound > self.upper_bound:
+        if self.lower_bound >= self.upper_bound:
             raise ValueError("Lower bound must be less than upper bound")
 
     def rvs(self, n_samples):
@@ -24,11 +25,8 @@ def rvs(self, n_samples):
         samples = self.prior.rvs(n_samples)
 
         # Constrain samples to be within bounds
-        samples = np.clip(samples, self.lower_bound, self.upper_bound)
-
-        # Adjust samples that exactly equal bounds
-        samples[samples == self.lower_bound] += samples * 0.0001
-        samples[samples == self.upper_bound] -= samples * 0.0001
+        offset = self.margin * (self.upper_bound - self.lower_bound)
+        samples = np.clip(samples, self.lower_bound + offset, self.upper_bound - offset)
 
         return samples
 
@@ -37,3 +35,12 @@ def update(self, value):
 
     def __repr__(self):
         return f"Parameter: {self.name} \n Prior: {self.prior} \n Bounds: {self.bounds} \n Value: {self.value}"
+
+    def set_margin(self, margin):
+        """
+        Sets the margin for the parameter.
+        """
+        if not 0 < margin < 1:
+            raise ValueError("Margin must be between 0 and 1")
+
+        self.margin = margin

From dd88872e501354cd5118e4ba4d0ef022e6318833 Mon Sep 17 00:00:00 2001
From: Brady Planden <brady.planden@gmail.com>
Date: Mon, 20 Nov 2023 15:37:39 +0000
Subject: [PATCH 210/210] bump to v23.11

---
 pybop/version.py | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/pybop/version.py b/pybop/version.py
index 41a1fa8c0..915a9aedb 100644
--- a/pybop/version.py
+++ b/pybop/version.py
@@ -1 +1 @@
-__version__ = "23.09"
+__version__ = "23.11"