From 437d870fa8d168242a81c105402928069f7751c0 Mon Sep 17 00:00:00 2001 From: HARSH SINHA Date: Sat, 6 Jun 2020 03:56:56 +0530 Subject: [PATCH] Fix zero-length slicing in SolutionArray Fixes #837 --- interfaces/cython/cantera/composite.py | 2 ++ interfaces/cython/cantera/test/test_thermo.py | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/interfaces/cython/cantera/composite.py b/interfaces/cython/cantera/composite.py index a0130f962d..ee33312fc1 100644 --- a/interfaces/cython/cantera/composite.py +++ b/interfaces/cython/cantera/composite.py @@ -564,6 +564,8 @@ def __getitem__(self, index): states = self._states[index] if(isinstance(states, list)): num_rows = len(states) + if num_rows == 0: + states = None return SolutionArray(self._phase, num_rows, states) else: shape = states.shape[:-1] diff --git a/interfaces/cython/cantera/test/test_thermo.py b/interfaces/cython/cantera/test/test_thermo.py index 0bdf5cc1e8..5caecb63e6 100644 --- a/interfaces/cython/cantera/test/test_thermo.py +++ b/interfaces/cython/cantera/test/test_thermo.py @@ -1789,3 +1789,14 @@ def test_slice_SolutionArray(self): soln = ct.SolutionArray(self.gas, 10) arr = soln[2:9:3] self.assertEqual(len(arr.T), 3) + + def test_zero_length_slice_SolutionArray(self): + states = ct.SolutionArray(self.gas, 4) + arr1 = states[3:3] + self.assertEqual(len(arr1.T), 0) + self.assertEqual(arr1.X.shape, (0,9)) + self.assertEqual(arr1.n_reactions, 28) + + states.TP = [100,300,900,323.23], ct.one_atm + arr2 = states[slice(0)] + self.assertEqual(len(arr2.T), 0)