diff --git a/mph/model.py b/mph/model.py index 9e4baa1..0ae42b4 100644 --- a/mph/model.py +++ b/mph/model.py @@ -526,7 +526,7 @@ def evaluate(self, expression, unit=None, dataset=None, raise RuntimeError(error) # Try to perform a global evaluation, which may fail. - eval = (self/'evaluations').create('Global') + eval = (self/'evaluations').create('EvalGlobal') eval.property('expr', expression) if unit: eval.property('unit', unit) @@ -536,26 +536,28 @@ def evaluate(self, expression, unit=None, dataset=None, try: log.debug('Trying global evaluation.') java = eval.java - results = array(java.getData()) + results = array(java.computeResult()) if java.isComplex(): - results = results.astype('complex') - results += 1j * array(java.getImagData()) - eval.remove() + results = results[0].astype('complex') + 1j*results[1] + else: + results = results[0] log.info('Finished global evaluation.') if inner is None: pass elif inner == 'first': - results = results[:, 0, :] + results = results[0] elif inner == 'last': - results = results[:, -1, :] + results = results[-1] else: if isinstance(inner, list): inner = array(inner) - results = results[:, inner-1, :] + results = results[inner-1] return results.squeeze() # Move on if this fails. Seems to not be a global expression then. except Exception: log.debug('Global evaluation failed. Moving on.') + finally: + eval.remove() # For particle datasets, create an "EvalPoint" feature. if dataset.type() == 'Particle': diff --git a/tests/test_model.py b/tests/test_model.py index e0206b8..e700dff 100644 --- a/tests/test_model.py +++ b/tests/test_model.py @@ -320,6 +320,13 @@ def test_evaluate(): D = model.evaluate(expression, unit, dataset, outer=2) assert (D[0] == Df).all() assert (D[-1] == Dl).all() + # Test varying time steps in parameter sweep. See issue #112. + study = model/'studies'/'sweep' + (study/'time-dependent').property('tlist', 'range(0, 0.01/d[1/mm], 1)') + model.solve(study) + assert len(model.evaluate('t', 's', 'parametric sweep', outer=1)) == 101 + assert len(model.evaluate('t', 's', 'parametric sweep', outer=2)) == 201 + assert len(model.evaluate('t', 's', 'parametric sweep', outer=3)) == 301 # Test evaluation of complex-valued global expressions. U = model.evaluate('U') z = model.evaluate('U + j*U')