diff --git a/interfaces/cython/cantera/composite.pyx b/interfaces/cython/cantera/composite.pyx index c111726e5..140f52ab9 100644 --- a/interfaces/cython/cantera/composite.pyx +++ b/interfaces/cython/cantera/composite.pyx @@ -1,4 +1,5 @@ class Solution(ThermoPhase, Kinetics, Transport): + __slots__ = () """ A class for chemically-reacting solutions. @@ -13,6 +14,7 @@ class Solution(ThermoPhase, Kinetics, Transport): """ class Interface(InterfacePhase, InterfaceKinetics): + __slots__ = ('_phase_indices',) """ Two-dimensional interfaces. @@ -23,6 +25,7 @@ class Interface(InterfacePhase, InterfaceKinetics): """ class DustyGas(ThermoPhase, Kinetics, DustyGasTransport): + __slots__ = () """ A composite class which models a gas in a stationary, solid, porous medium. diff --git a/interfaces/cython/cantera/onedim.py b/interfaces/cython/cantera/onedim.py index df81c79ee..4dc13ea2b 100644 --- a/interfaces/cython/cantera/onedim.py +++ b/interfaces/cython/cantera/onedim.py @@ -10,6 +10,7 @@ except ImportError: class FlameBase(Sim1D): """ Base class for flames with a single flow domain """ + __slots__ = ('gas',) def __init__(self, domains, gas, grid=None): """ @@ -223,6 +224,7 @@ for attr in ['forward_rates_of_progress', 'reverse_rates_of_progress', 'net_rate class FreeFlame(FlameBase): """A freely-propagating flat flame.""" + __slots__ = ('inlet', 'outlet', 'flame') def __init__(self, gas, grid=None): """ @@ -268,6 +270,7 @@ class FreeFlame(FlameBase): class BurnerFlame(FlameBase): """A burner-stabilized flat flame.""" + __slots__ = ('burner', 'flame', 'outlet') def __init__(self, gas, grid=None): """ @@ -321,6 +324,7 @@ class BurnerFlame(FlameBase): class CounterflowDiffusionFlame(FlameBase): """ A counterflow diffusion flame """ + __slots__ = ('fuel_inlet', 'flame', 'oxidizer_inlet') def __init__(self, gas, grid=None): """ @@ -434,6 +438,8 @@ class CounterflowDiffusionFlame(FlameBase): class ImpingingJet(FlameBase): """An axisymmetric flow impinging on a surface at normal incidence.""" + __slots__ = ('inlet', 'flame', 'surface') + def __init__(self, gas, grid=None, surface=None): """ :param gas: @@ -500,6 +506,7 @@ class ImpingingJet(FlameBase): class CounterflowPremixedFlame(FlameBase): """ A premixed counterflow flame """ + __slots__ = ('reactants', 'flame', 'products') def __init__(self, gas, grid=None): """ diff --git a/interfaces/cython/cantera/test/test_mixture.py b/interfaces/cython/cantera/test/test_mixture.py index 7ee1f2c2a..7dd69f73d 100644 --- a/interfaces/cython/cantera/test/test_mixture.py +++ b/interfaces/cython/cantera/test/test_mixture.py @@ -180,3 +180,10 @@ class TestMixture(utilities.CanteraTest): self.assertArrayNear(E1, E2) self.assertNear(self.mix.T, 400) self.assertNear(self.mix.P, 2 * ct.one_atm) + + def test_invalid_property(self): + x = self.mix + with self.assertRaises(AttributeError): + x.foobar = 300 + with self.assertRaises(AttributeError): + x.foobar diff --git a/interfaces/cython/cantera/test/test_onedim.py b/interfaces/cython/cantera/test/test_onedim.py index 3c784816e..3ed41e994 100644 --- a/interfaces/cython/cantera/test/test_onedim.py +++ b/interfaces/cython/cantera/test/test_onedim.py @@ -74,6 +74,18 @@ class TestOnedim(utilities.CanteraTest): with self.assertRaises(NotImplementedError): copy.copy(flame) + def test_invalid_property(self): + gas1 = ct.Solution('h2o2.xml') + inlet = ct.Inlet1D(name='something', phase=gas1) + flame = ct.FreeFlow(gas1) + sim = ct.Sim1D((inlet, flame)) + + for x in (inlet, flame, sim): + with self.assertRaises(AttributeError): + x.foobar = 300 + with self.assertRaises(AttributeError): + x.foobar + class TestFreeFlame(utilities.CanteraTest): tol_ss = [1.0e-5, 1.0e-14] # [rtol atol] for steady-state problem diff --git a/interfaces/cython/cantera/test/test_reactor.py b/interfaces/cython/cantera/test/test_reactor.py index 86b7b2c7c..c9d323685 100644 --- a/interfaces/cython/cantera/test/test_reactor.py +++ b/interfaces/cython/cantera/test/test_reactor.py @@ -512,6 +512,14 @@ class TestReactor(utilities.CanteraTest): with self.assertRaises(NotImplementedError): copy.copy(self.net) + def test_invalid_property(self): + self.make_reactors() + for x in (self.r1, self.net): + with self.assertRaises(AttributeError): + x.foobar = 300 + with self.assertRaises(AttributeError): + x.foobar + class TestIdealGasReactor(TestReactor): reactorClass = ct.IdealGasReactor diff --git a/interfaces/cython/cantera/test/test_thermo.py b/interfaces/cython/cantera/test/test_thermo.py index bb207cb78..3c12e8a69 100644 --- a/interfaces/cython/cantera/test/test_thermo.py +++ b/interfaces/cython/cantera/test/test_thermo.py @@ -8,7 +8,7 @@ class TestThermoPhase(utilities.CanteraTest): def setUp(self): self.phase = ct.Solution('h2o2.xml') - def teste_phases(self): + def test_phases(self): self.assertEqual(self.phase.n_phases, 1) def test_species(self): @@ -308,6 +308,13 @@ class TestThermoPhase(utilities.CanteraTest): with self.assertRaises(AssertionError): self.phase.UVX = -4e5, 4.4, 'H2:1.0', -1 + def test_invalid_property(self): + x = self.phase + with self.assertRaises(AttributeError): + x.foobar = 300 + with self.assertRaises(AttributeError): + x.foobar + def check_getters(self): T,P,X = self.phase.TPX self.assertNear(T, self.phase.T)