diff --git a/pybamm/models/base_models.py b/pybamm/models/base_models.py
index a5e1d9999..233799298 100644
--- a/pybamm/models/base_models.py
+++ b/pybamm/models/base_models.py
@@ -345,7 +345,11 @@ class BaseModel(object):
                     )
 
     def check_variables(self):
-        """ Chec that the right variables are provided. """
+        """
+        Check that the right variables are provided.
+        Check that all variables in the variable list appear in the rhs or algebraic
+        keys
+        """
         missing_vars = []
         for output, expression in self._variables.items():
             if expression is None:
@@ -362,6 +366,31 @@ class BaseModel(object):
             for output in missing_vars:
                 del self._variables[output]
 
+        # Create list of all Variable nodes that appear in the model's list of variables
+        all_vars = {}
+        for eqn in self.variables.values():
+            # Add all variables in the equation to the list of variables
+            all_vars.update(
+                {x.id: x for x in eqn.pre_order() if isinstance(x, pybamm.Variable)}
+            )
+        var_ids_in_keys = set()
+        for var in {**self.rhs, **self.algebraic}.keys():
+            if isinstance(var, pybamm.Variable):
+                var_ids_in_keys.add(var.id)
+            elif isinstance(var, pybamm.Concatenation):
+                var_ids_in_keys.update([x.id for x in var.children])
+        for var_id, var in all_vars.items():
+            if var_id not in var_ids_in_keys:
+                raise pybamm.ModelError(
+                    """
+                    No key set for variable '{}'. Make sure it is included in either
+                    model.rhs or model.algebraic in an unmodified form (e.g. not
+                    Broadcasted)
+                    """.format(
+                        var
+                    )
+                )
+
 
 class StandardBatteryBaseModel(BaseModel):
     """
@@ -417,7 +446,7 @@ class StandardBatteryBaseModel(BaseModel):
                 ),
                 "Positive electrode OCV entropic change": os.path.join(
                     input_path, "lico2_entropic_change_Moura.py"
-                )
+                ),
             },
         )
 
diff --git a/pybamm/solvers/dae_solver.py b/pybamm/solvers/dae_solver.py
index 7223c4a79..4f66b4dcf 100644
--- a/pybamm/solvers/dae_solver.py
+++ b/pybamm/solvers/dae_solver.py
@@ -246,7 +246,7 @@ class DaeSolver(pybamm.BaseSolver):
         # Return full set of consistent initial conditions (y0_diff unchanged)
         y0_consistent = np.concatenate([y0_diff, sol.x])
 
-        if sol.success and np.all(sol.fun < self.root_tol):
+        if sol.success and np.all(sol.fun < self.root_tol * len(sol.x)):
             pybamm.logger.info("Finish calculating consistent initial conditions")
             return y0_consistent
         elif not sol.success:
@@ -255,8 +255,12 @@ class DaeSolver(pybamm.BaseSolver):
             )
         else:
             raise pybamm.SolverError(
-                "Could not find consistent initial conditions: "
-                + "solver terminated successfully, but solution above tolerance"
+                """
+                Could not find consistent initial conditions: solver terminated
+                successfully, but maximum solution error ({}) above tolerance ({})
+                """.format(
+                    np.max(sol.fun), self.root_tol * len(sol.x)
+                )
             )
 
     def integrate(

check that all variables in the model appear in `disc._y_slices`
Otherwise can lead to slightly obscure `KeyError` when discretising
diff --git a/tests/integration/test_models/standard_output_tests.py b/tests/integration/test_models/standard_output_tests.py
index 22c30be13..1ba521df0 100644
--- a/tests/integration/test_models/standard_output_tests.py
+++ b/tests/integration/test_models/standard_output_tests.py
@@ -363,7 +363,7 @@ class ElectrolyteConcentrationTests(BaseOutputTest):
         during a discharge."""
 
         # TODO: uncomment when have average concentrations
-        # # small number so that can use array less
+        # small number so that can use array less
         # epsilon = 0.001
 
         # if self.operating_condition == "discharge":
diff --git a/tests/integration/test_models/test_reaction_diffusion.py b/tests/integration/test_models/test_reaction_diffusion.py
index 0826f5203..f53e8ab73 100644
--- a/tests/integration/test_models/test_reaction_diffusion.py
+++ b/tests/integration/test_models/test_reaction_diffusion.py
@@ -32,7 +32,7 @@ class TestReactionDiffusionModel(unittest.TestCase):
     def test_convergence(self):
         # Convergence of c at x=0.5
         model = pybamm.ReactionDiffusionModel()
-        # # Make ln and lp nicer for testing
+        # Make ln and lp nicer for testing
         param = model.default_parameter_values
         # Process model and geometry
         param.process_model(model)
diff --git a/tests/unit/test_discretisations/test_discretisation.py b/tests/unit/test_discretisations/test_discretisation.py
index af915a779..964a34010 100644
--- a/tests/unit/test_discretisations/test_discretisation.py
+++ b/tests/unit/test_discretisations/test_discretisation.py
@@ -163,6 +163,7 @@ class TestDiscretise(unittest.TestCase):
         # function of one variable
         def myfun(x):
             return np.exp(x)
+
         func = pybamm.Function(myfun, var)
         func_disc = disc.process_symbol(func)
         self.assertIsInstance(func_disc, pybamm.Function)
@@ -176,6 +177,7 @@ class TestDiscretise(unittest.TestCase):
         # function of multiple variables
         def myfun(x, y):
             return np.exp(x) * y
+
         func = pybamm.Function(myfun, var, scal)
         func_disc = disc.process_symbol(func)
         self.assertIsInstance(func_disc, pybamm.Function)
@@ -752,17 +754,17 @@ class TestDiscretise(unittest.TestCase):
         # check raises error if different sized key and output var
         model.variables = {c_n.name: c_s}
         with self.assertRaisesRegex(pybamm.ModelError, "variable and its eqn"):
-            disc.process_model(model, inplace=False)
+            disc.process_model(model)
 
         # check doesn't raise if concatenation
         model.variables = {c_n.name: pybamm.Concatenation(c_n, c_s)}
-        disc.process_model(model, inplace=False)
+        disc.process_model(model)
 
         # check doesn't raise if broadcast
         model.variables = {
             c_n.name: pybamm.Broadcast(pybamm.Scalar(2), ["negative electrode"])
         }
-        disc.process_model(model, inplace=False)
+        disc.process_model(model)
 
 
 if __name__ == "__main__":
diff --git a/tests/unit/test_expression_tree/test_binary_operators.py b/tests/unit/test_expression_tree/test_binary_operators.py
index ca2390d7d..4b9659228 100644
--- a/tests/unit/test_expression_tree/test_binary_operators.py
+++ b/tests/unit/test_expression_tree/test_binary_operators.py
@@ -116,19 +116,6 @@ class TestBinaryOperators(unittest.TestCase):
             expr2.evaluate(known_evals={})[1][(a @ b).id], (a @ b).evaluate()
         )
 
-        # Expect using known evals to be faster than not
-        timer = pybamm.Timer()
-        start = timer.time()
-        for _ in range(2000):
-            expr2.evaluate()
-        end = timer.time()
-        start_known_evals = timer.time()
-        for _ in range(2000):
-            expr2.evaluate(known_evals={})
-        end_known_evals = timer.time()
-        self.assertLess(end_known_evals - start_known_evals, 1.2 * (end - start))
-        self.assertGreater(end - start, (end_known_evals - start_known_evals))
-
     def test_diff(self):
         a = pybamm.StateVector(slice(0, 1))
         b = pybamm.StateVector(slice(1, 2))
diff --git a/tests/unit/test_expression_tree/test_simplify.py b/tests/unit/test_expression_tree/test_simplify.py
index f58322162..61ebe1657 100644
--- a/tests/unit/test_expression_tree/test_simplify.py
+++ b/tests/unit/test_expression_tree/test_simplify.py
@@ -420,19 +420,6 @@ class TestSimplify(unittest.TestCase):
             expr3.evaluate(y=np.ones(300)), expr3simp.evaluate(y=np.ones(300))
         )
 
-        # we expect simplified solution to be much faster
-        timer = pybamm.Timer()
-        start = timer.time()
-        for _ in range(200):
-            expr3.evaluate(y=np.ones(300))
-        end = timer.time()
-        start_simp = timer.time()
-        for _ in range(200):
-            expr3simp.evaluate(y=np.ones(300))
-        end_simp = timer.time()
-        self.assertLess(end_simp - start_simp, 1.5 * (end - start))
-        self.assertGreater(end - start, (end_simp - start_simp))
-
         m1 = pybamm.Matrix(np.ones((300, 300)))
         m2 = pybamm.Matrix(np.ones((300, 300)))
         m3 = pybamm.Matrix(np.ones((300, 300)))
diff --git a/tests/unit/test_expression_tree/test_symbol.py b/tests/unit/test_expression_tree/test_symbol.py
index dbea2d478..028f0e631 100644
--- a/tests/unit/test_expression_tree/test_symbol.py
+++ b/tests/unit/test_expression_tree/test_symbol.py
@@ -322,8 +322,6 @@ class TestSymbol(unittest.TestCase):
         self.assertEqual(
             (var + broadcast).shape_for_testing, broadcast.shape_for_testing
         )
-        broadcast2 = pybamm.Broadcast(0, domain="separator")
-        self.assertNotEqual(var.shape_for_testing, broadcast2.shape_for_testing)
 
         sym = pybamm.Symbol("sym")
         with self.assertRaises(NotImplementedError):
diff --git a/tests/unit/test_models/test_base_model.py b/tests/unit/test_models/test_base_model.py
index 92361c5fe..98c907122 100644
--- a/tests/unit/test_models/test_base_model.py
+++ b/tests/unit/test_models/test_base_model.py
@@ -335,6 +335,26 @@ class TestBaseModel(unittest.TestCase):
         for key, item in model._variables.items():
             self.assertIsNotNone(item)
 
+        # check error raised if undefined variable in list of Variables
+        model = pybamm.BaseModel()
+        model.rhs = {c: -c}
+        model.initial_conditions = {c: 1}
+        model.variables = {"d": d}
+        with self.assertRaisesRegex(pybamm.ModelError, "No key set for variable"):
+            model.check_well_posedness()
+
+        # check error is raised even if some modified form of d is in model.rhs
+        two_d = 2 * d
+        model.rhs[two_d] = -d
+        model.initial_conditions[two_d] = 1
+        with self.assertRaisesRegex(pybamm.ModelError, "No key set for variable"):
+            model.check_well_posedness()
+
+        # add d to rhs, fine
+        model.rhs[d] = -d
+        model.initial_conditions[d] = 1
+        model.check_well_posedness()
+
 
 class TestStandardBatteryBaseModel(unittest.TestCase):
     def test_default_solver(self):
diff --git a/tests/unit/test_solvers/test_dae_solver.py b/tests/unit/test_solvers/test_dae_solver.py
index fc2e73315..b0e1e2781 100644
--- a/tests/unit/test_solvers/test_dae_solver.py
+++ b/tests/unit/test_solvers/test_dae_solver.py
@@ -43,10 +43,17 @@ class TestDaeSolver(unittest.TestCase):
 
         solver = pybamm.DaeSolver(root_method="hybr")
         y0 = np.array([2])
-        with self.assertRaises(pybamm.SolverError):
+
+        with self.assertRaisesRegex(
+            pybamm.SolverError,
+            "Could not find consistent initial conditions: The iteration is not making",
+        ):
             solver.calculate_consistent_initial_conditions(rhs, algebraic, y0)
         solver = pybamm.DaeSolver()
-        with self.assertRaises(pybamm.SolverError):
+        with self.assertRaisesRegex(
+            pybamm.SolverError,
+            "Could not find consistent initial conditions: solver terminated",
+        ):
             solver.calculate_consistent_initial_conditions(rhs, algebraic, y0)
 
 

pip install -e .[dev,docs]
parse_log_pytest
pytest
flake8 sphinx pytest
apt-get update apt-get install -y gcc
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
alabaster==0.7.13
anyio==3.6.2
anytree==2.8.0
argon2-cffi==21.3.0
argon2-cffi-bindings==21.2.0
async-generator==1.10
attrs @ file:///opt/conda/conda-bld/attrs_1642510447205/work
autograd==1.6.2
Babel==2.11.0
backcall==0.2.0
bleach==4.1.0
certifi==2021.5.30
cffi==1.15.1
charset-normalizer==2.0.12
comm==0.1.4
contextvars==2.4
cycler==0.11.0
dataclasses==0.8
decorator==5.1.1
defusedxml==0.7.1
docutils==0.17.1
entrypoints==0.4
flake8==5.0.4
future==1.0.0
guzzle-sphinx-theme==0.7.11
idna==3.10
imagesize==1.4.1
immutables==0.19
importlib-metadata==4.2.0
iniconfig @ file:///home/linux1/recipes/ci/iniconfig_1610983019677/work
ipykernel==5.5.6
ipython==7.16.3
ipython-genutils==0.2.0
ipywidgets==7.8.5
jedi==0.17.2
Jinja2==3.0.3
json5==0.9.16
jsonschema==3.2.0
jupyter==1.1.1
jupyter-client==7.1.2
jupyter-console==6.4.3
jupyter-core==4.9.2
jupyter-server==1.13.1
jupyterlab==3.2.9
jupyterlab-pygments==0.1.2
jupyterlab-server==2.10.3
jupyterlab_widgets==1.1.11
kiwisolver==1.3.1
MarkupSafe==2.0.1
matplotlib==3.3.4
mccabe==0.7.0
mistune==0.8.4
more-itertools @ file:///tmp/build/80754af9/more-itertools_1637733554872/work
nbclassic==0.3.5
nbclient==0.5.9
nbconvert==6.0.7
nbformat==5.1.3
nest-asyncio==1.6.0
notebook==6.4.10
numpy==1.19.5
packaging @ file:///tmp/build/80754af9/packaging_1637314298585/work
pandas==1.1.5
pandocfilters==1.5.1
parso==0.7.1
pexpect==4.9.0
pickleshare==0.7.5
Pillow==8.4.0
pluggy @ file:///tmp/build/80754af9/pluggy_1615976315926/work
prometheus-client==0.17.1
prompt-toolkit==3.0.36
ptyprocess==0.7.0
py @ file:///opt/conda/conda-bld/py_1644396412707/work
-e git+https://github.com/pybamm-team/PyBaMM.git@42e7623e917e446252935aaa3fce615a2109ac96#egg=pybamm
pycodestyle==2.9.1
pycparser==2.21
pyflakes==2.5.0
Pygments==2.14.0
pyparsing @ file:///tmp/build/80754af9/pyparsing_1635766073266/work
pyrsistent==0.18.0
pytest==6.2.4
python-dateutil==2.9.0.post0
pytz==2025.2
pyzmq==25.1.2
requests==2.27.1
scipy==1.5.4
Send2Trash==1.8.3
six==1.17.0
sniffio==1.2.0
snowballstemmer==2.2.0
Sphinx==4.3.2
sphinxcontrib-applehelp==1.0.2
sphinxcontrib-devhelp==1.0.2
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.3
sphinxcontrib-serializinghtml==1.1.5
terminado==0.12.1
testpath==0.6.0
toml @ file:///tmp/build/80754af9/toml_1616166611790/work
tornado==6.1
traitlets==4.3.3
typing_extensions @ file:///opt/conda/conda-bld/typing_extensions_1647553014482/work
urllib3==1.26.20
wcwidth==0.2.13
webencodings==0.5.1
websocket-client==1.3.1
widgetsnbextension==3.6.10
zipp @ file:///tmp/build/80754af9/zipp_1633618647012/work

name: PyBaMM
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - attrs=21.4.0=pyhd3eb1b0_0
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - importlib_metadata=4.8.1=hd3eb1b0_0
  - iniconfig=1.1.1=pyhd3eb1b0_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - more-itertools=8.12.0=pyhd3eb1b0_0
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - packaging=21.3=pyhd3eb1b0_0
  - pip=21.2.2=py36h06a4308_0
  - pluggy=0.13.1=py36h06a4308_0
  - py=1.11.0=pyhd3eb1b0_0
  - pyparsing=3.0.4=pyhd3eb1b0_0
  - pytest=6.2.4=py36h06a4308_2
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - toml=0.10.2=pyhd3eb1b0_0
  - typing_extensions=4.1.1=pyh06a4308_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zipp=3.6.0=pyhd3eb1b0_0
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - alabaster==0.7.13
      - anyio==3.6.2
      - anytree==2.8.0
      - argon2-cffi==21.3.0
      - argon2-cffi-bindings==21.2.0
      - async-generator==1.10
      - autograd==1.6.2
      - babel==2.11.0
      - backcall==0.2.0
      - bleach==4.1.0
      - cffi==1.15.1
      - charset-normalizer==2.0.12
      - comm==0.1.4
      - contextvars==2.4
      - cycler==0.11.0
      - dataclasses==0.8
      - decorator==5.1.1
      - defusedxml==0.7.1
      - docutils==0.17.1
      - entrypoints==0.4
      - flake8==5.0.4
      - future==1.0.0
      - guzzle-sphinx-theme==0.7.11
      - idna==3.10
      - imagesize==1.4.1
      - immutables==0.19
      - importlib-metadata==4.2.0
      - ipykernel==5.5.6
      - ipython==7.16.3
      - ipython-genutils==0.2.0
      - ipywidgets==7.8.5
      - jedi==0.17.2
      - jinja2==3.0.3
      - json5==0.9.16
      - jsonschema==3.2.0
      - jupyter==1.1.1
      - jupyter-client==7.1.2
      - jupyter-console==6.4.3
      - jupyter-core==4.9.2
      - jupyter-server==1.13.1
      - jupyterlab==3.2.9
      - jupyterlab-pygments==0.1.2
      - jupyterlab-server==2.10.3
      - jupyterlab-widgets==1.1.11
      - kiwisolver==1.3.1
      - markupsafe==2.0.1
      - matplotlib==3.3.4
      - mccabe==0.7.0
      - mistune==0.8.4
      - nbclassic==0.3.5
      - nbclient==0.5.9
      - nbconvert==6.0.7
      - nbformat==5.1.3
      - nest-asyncio==1.6.0
      - notebook==6.4.10
      - numpy==1.19.5
      - pandas==1.1.5
      - pandocfilters==1.5.1
      - parso==0.7.1
      - pexpect==4.9.0
      - pickleshare==0.7.5
      - pillow==8.4.0
      - prometheus-client==0.17.1
      - prompt-toolkit==3.0.36
      - ptyprocess==0.7.0
      - pycodestyle==2.9.1
      - pycparser==2.21
      - pyflakes==2.5.0
      - pygments==2.14.0
      - pyrsistent==0.18.0
      - python-dateutil==2.9.0.post0
      - pytz==2025.2
      - pyzmq==25.1.2
      - requests==2.27.1
      - scipy==1.5.4
      - send2trash==1.8.3
      - six==1.17.0
      - sniffio==1.2.0
      - snowballstemmer==2.2.0
      - sphinx==4.3.2
      - sphinxcontrib-applehelp==1.0.2
      - sphinxcontrib-devhelp==1.0.2
      - sphinxcontrib-htmlhelp==2.0.0
      - sphinxcontrib-jsmath==1.0.1
      - sphinxcontrib-qthelp==1.0.3
      - sphinxcontrib-serializinghtml==1.1.5
      - terminado==0.12.1
      - testpath==0.6.0
      - tornado==6.1
      - traitlets==4.3.3
      - urllib3==1.26.20
      - wcwidth==0.2.13
      - webencodings==0.5.1
      - websocket-client==1.3.1
      - widgetsnbextension==3.6.10
prefix: /opt/conda/envs/PyBaMM

tests/unit/test_models/test_base_model.py::TestBaseModel::test_check_well_posedness_output_variables
tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_visualise
tests/integration/test_models/test_reaction_diffusion.py::TestReactionDiffusionModel::test_basic_processing tests/integration/test_models/test_reaction_diffusion.py::TestReactionDiffusionModel::test_convergence tests/integration/test_models/test_reaction_diffusion.py::TestReactionDiffusionModel::test_optimisations tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_broadcast tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_broadcast_2D tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_concatenate_in_order tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_concatenation tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_concatenation_of_scalars tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_discretise_slicing tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_discretise_spatial_operator tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_exceptions tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_no_mesh tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_outer tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_process_complex_expression tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_process_dict tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_process_model_concatenation tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_process_model_dae tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_process_model_not_inplace tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_process_model_ode tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_process_symbol_base tests/unit/test_discretisations/test_discretisation.py::TestDiscretise::test_process_variables_dict tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_addition tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_addition_printing tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_binary_operator tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_binary_operator_domains tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_diff tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_id tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_known_eval tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_number_overloading tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_outer tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_power tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_sparse_divide tests/unit/test_expression_tree/test_binary_operators.py::TestBinaryOperators::test_sparse_multiply tests/unit/test_expression_tree/test_binary_operators.py::TestIsZero::test_is_matrix_zero tests/unit/test_expression_tree/test_binary_operators.py::TestIsZero::test_is_scalar_zero tests/unit/test_expression_tree/test_simplify.py::test_const_function tests/unit/test_expression_tree/test_simplify.py::TestSimplify::test_domain_concatenation_simplify tests/unit/test_expression_tree/test_simplify.py::TestSimplify::test_function_simplify tests/unit/test_expression_tree/test_simplify.py::TestSimplify::test_matrix_simplifications tests/unit/test_expression_tree/test_simplify.py::TestSimplify::test_simplify_concatenation_state_vectors tests/unit/test_expression_tree/test_simplify.py::TestSimplify::test_simplify_outer tests/unit/test_expression_tree/test_simplify.py::TestSimplify::test_symbol_simplify tests/unit/test_expression_tree/test_simplify.py::TestSimplify::test_vector_zero_simplify tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_cached_children tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_has_spatial_derivatives tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_multiple_symbols tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_orphans tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_shape tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_shape_for_testing tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_diff tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_domains tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_evaluates_to_number tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_evaluation tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_init tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_is_constant tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_methods tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_symbol_repr tests/unit/test_expression_tree/test_symbol.py::TestSymbol::test_test_shape tests/unit/test_models/test_base_model.py::TestBaseModel::test_algebraic_set_get tests/unit/test_models/test_base_model.py::TestBaseModel::test_boundary_conditions_set_get tests/unit/test_models/test_base_model.py::TestBaseModel::test_check_well_posedness_initial_boundary_conditions tests/unit/test_models/test_base_model.py::TestBaseModel::test_check_well_posedness_variables tests/unit/test_models/test_base_model.py::TestBaseModel::test_initial_conditions_set_get tests/unit/test_models/test_base_model.py::TestBaseModel::test_jac_set_get tests/unit/test_models/test_base_model.py::TestBaseModel::test_model_dict_behaviour tests/unit/test_models/test_base_model.py::TestBaseModel::test_rhs_set_get tests/unit/test_models/test_base_model.py::TestBaseModel::test_update tests/unit/test_models/test_base_model.py::TestBaseModel::test_variables_set_get tests/unit/test_models/test_base_model.py::TestStandardBatteryBaseModel::test_default_solver tests/unit/test_solvers/test_dae_solver.py::TestDaeSolver::test_fail_consistent_initial_conditions tests/unit/test_solvers/test_dae_solver.py::TestDaeSolver::test_find_consistent_initial_conditions
pybamm/models/base_models.py pybamm/solvers/dae_solver.py
pybamm/models/base_models.py pybamm/solvers/dae_solver.py