From 2cc472aa16b745471b99d78aba2f1d4538e45c29 Mon Sep 17 00:00:00 2001 From: Joseph Weston <joseph@weston.cloud> Date: Tue, 12 Feb 2019 18:52:04 +0100 Subject: [PATCH] check for missing system parameters in 'hamiltonian_submatrix' --- kwant/_system.pyx | 14 ++++++++++++++ kwant/tests/test_builder.py | 6 ++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/kwant/_system.pyx b/kwant/_system.pyx index 257377ac..fcc3987c 100644 --- a/kwant/_system.pyx +++ b/kwant/_system.pyx @@ -242,6 +242,17 @@ def make_dense_full(ham, args, params, CGraph gr, diag, return h_sub +def _check_parameters_match(expected_parameters, params): + if params is None: + params = {} + missing = set(expected_parameters) - set(params) + + if missing: + msg = ('System is missing required parameters: ', + ', '.join(map('"{}"'.format, missing))) + raise TypeError(''.join(msg)) + + @cython.embedsignature(True) def hamiltonian_submatrix(self, args=(), to_sites=None, from_sites=None, sparse=False, return_norb=False, *, params=None): @@ -287,6 +298,9 @@ def hamiltonian_submatrix(self, args=(), to_sites=None, from_sites=None, n = self.graph.num_nodes matrix = ta.matrix + if not args: # Then perhaps parameters + _check_parameters_match(self.parameters, params) + if from_sites is None: diag = n * [None] from_norb = np.empty(n, gint_dtype) diff --git a/kwant/tests/test_builder.py b/kwant/tests/test_builder.py index 2d35df20..cb2cb9c7 100644 --- a/kwant/tests/test_builder.py +++ b/kwant/tests/test_builder.py @@ -1225,9 +1225,11 @@ def test_argument_passing(): with raises(TypeError): inf_syst.hamiltonian(0, 0, *(2, 1), params=dict(p1=2, p2=1)) - # test that missing any parameters raises TypeError + # Missing parameters raises TypeError with raises(TypeError): - syst.hamiltonian(0, 0, params=dict(fake=10)) + syst.hamiltonian(0, 0, params=dict(p1=2)) + with raises(TypeError): + syst.hamiltonian_submatrix(params=dict(p1=2)) # test that passing parameters without default values works, and that # passing parameters with default values fails -- GitLab