From 89d0c5601f2850faba3e861abdd33f780dc7d572 Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Tue, 18 Oct 2016 12:53:01 -0400 Subject: [PATCH] [Python] Add CanteraError class for execptions Anything that raises a CanteraError in C++ will now raise CanteraError in Python, instead of the more generic RuntimeError. This change increases the required Cython version to 0.23 or newer. --- SConstruct | 2 +- doc/sphinx/compiling.rst | 2 +- include/cantera/cython/funcWrapper.h | 7 + interfaces/cython/cantera/_cantera.pxd | 538 +++++++++--------- interfaces/cython/cantera/composite.py | 2 +- interfaces/cython/cantera/onedim.pyx | 8 +- interfaces/cython/cantera/reactor.pyx | 22 +- .../cython/cantera/test/test_convert.py | 2 +- interfaces/cython/cantera/test/test_onedim.py | 6 +- .../cython/cantera/test/test_reactor.py | 10 +- interfaces/cython/cantera/test/test_thermo.py | 14 +- .../cython/cantera/test/test_transport.py | 2 +- interfaces/cython/cantera/thermo.pyx | 2 +- interfaces/cython/cantera/utils.pyx | 7 + 14 files changed, 319 insertions(+), 305 deletions(-) diff --git a/SConstruct b/SConstruct index 39724ed8e..ca00b2669 100644 --- a/SConstruct +++ b/SConstruct @@ -990,7 +990,7 @@ if env['VERBOSE']: env['python_cmd_esc'] = quoted(env['python_cmd']) # Python 2 Package Settings -cython_min_version = LooseVersion('0.19') +cython_min_version = LooseVersion('0.23') env['install_python2_action'] = '' if env['python_package'] == 'new': env['python_package'] = 'full' # Allow 'new' as a synonym for 'full' diff --git a/doc/sphinx/compiling.rst b/doc/sphinx/compiling.rst index 9eaac7136..a9b613f5e 100644 --- a/doc/sphinx/compiling.rst +++ b/doc/sphinx/compiling.rst @@ -59,7 +59,7 @@ Linux * Checking out the source code from version control requires Git (install ``git``). -* The minimum compatible Cython version is 0.19. If your distribution does not +* The minimum compatible Cython version is 0.23. If your distribution does not contain a suitable version, you may be able to install a more recent version using `pip`. diff --git a/include/cantera/cython/funcWrapper.h b/include/cantera/cython/funcWrapper.h index 825eaca9b..4dd1695ca 100644 --- a/include/cantera/cython/funcWrapper.h +++ b/include/cantera/cython/funcWrapper.h @@ -8,6 +8,8 @@ #include "cantera/base/ctexceptions.h" #include +#define CANTERA_USE_INTERNAL +#include "cantera/clib/clib_defs.h" #include "Python.h" typedef double(*callback_wrapper)(double, void*, void**); @@ -88,6 +90,9 @@ private: void* m_pyobj; }; +extern "C" { + CANTERA_CAPI PyObject* pyCanteraError; +} // Translate C++ Exceptions generated by Cantera to appropriate Python // exceptions. Used with Cython function declarations, e.g: @@ -105,6 +110,8 @@ inline int translate_exception() PyErr_SetObject(exn.m_type, exn.m_value); } catch (const std::out_of_range& exn) { PyErr_SetString(PyExc_IndexError, exn.what()); + } catch (const Cantera::CanteraError& exn) { + PyErr_SetString(pyCanteraError, exn.what()); } catch (const std::exception& exn) { PyErr_SetString(PyExc_RuntimeError, exn.what()); } catch (...) { diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index 20170d696..c120069f2 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -28,23 +28,6 @@ cdef extern from "" namespace "std": pair[iterator, bint] insert(pair[T, U]) nogil iterator find(T&) nogil -cdef extern from "cantera/base/xml.h" namespace "Cantera": - cdef cppclass XML_Node: - XML_Node* findByName(string) - XML_Node* findID(string) - int nChildren() - -cdef extern from "cantera/base/stringUtils.h" namespace "Cantera": - cdef Composition parseCompString(string) except + - -cdef extern from "cantera/base/global.h" namespace "Cantera": - cdef void CxxAddDirectory "Cantera::addDirectory" (string) - cdef size_t CxxNpos "Cantera::npos" - cdef void CxxAppdelete "Cantera::appdelete" () - cdef XML_Node* CxxGetXmlFile "Cantera::get_XML_File" (string) except + - cdef XML_Node* CxxGetXmlFromString "Cantera::get_XML_from_string" (string) except + - cdef void Cxx_make_deprecation_warnings_fatal "Cantera::make_deprecation_warnings_fatal" () - cdef extern from "cantera/cython/funcWrapper.h": ctypedef double (*callback_wrapper)(double, void*, void**) cdef int translate_exception() @@ -53,6 +36,23 @@ cdef extern from "cantera/cython/funcWrapper.h": CxxFunc1(callback_wrapper, void*) double eval(double) except +translate_exception +cdef extern from "cantera/base/xml.h" namespace "Cantera": + cdef cppclass XML_Node: + XML_Node* findByName(string) + XML_Node* findID(string) + int nChildren() + +cdef extern from "cantera/base/stringUtils.h" namespace "Cantera": + cdef Composition parseCompString(string) except +translate_exception + +cdef extern from "cantera/base/global.h" namespace "Cantera": + cdef void CxxAddDirectory "Cantera::addDirectory" (string) + cdef size_t CxxNpos "Cantera::npos" + cdef void CxxAppdelete "Cantera::appdelete" () + cdef XML_Node* CxxGetXmlFile "Cantera::get_XML_File" (string) except +translate_exception + cdef XML_Node* CxxGetXmlFromString "Cantera::get_XML_from_string" (string) except +translate_exception + cdef void Cxx_make_deprecation_warnings_fatal "Cantera::make_deprecation_warnings_fatal" () + cdef extern from "": cppclass shared_ptr "std::shared_ptr" [T]: T* get() @@ -69,15 +69,15 @@ cdef extern from "cantera/thermo/SpeciesThermoInterpType.h": cdef cppclass CxxSpeciesThermo "Cantera::SpeciesThermoInterpType": CxxSpeciesThermo() int reportType() - void updatePropertiesTemp(double, double*, double*, double*) except + + void updatePropertiesTemp(double, double*, double*, double*) except +translate_exception double minTemp() double maxTemp() double refPressure() - void reportParameters(size_t&, int&, double&, double&, double&, double* const) except + + void reportParameters(size_t&, int&, double&, double&, double&, double* const) except +translate_exception cdef extern from "cantera/thermo/SpeciesThermoFactory.h": cdef CxxSpeciesThermo* CxxNewSpeciesThermo "Cantera::newSpeciesThermoInterpType"\ - (int, double, double, double, double*) except + + (int, double, double, double, double*) except +translate_exception cdef extern from "cantera/thermo/Species.h" namespace "Cantera": cdef cppclass CxxTransportData "Cantera::TransportData" @@ -102,118 +102,118 @@ cdef extern from "cantera/thermo/ThermoPhase.h" namespace "Cantera": # miscellaneous string type() - string report(cbool, double) except + + string report(cbool, double) except +translate_exception string name() void setName(string) string id() void setID(string) - double minTemp() except + - double maxTemp() except + - double refPressure() except + - cbool getElementPotentials(double*) except + - void equilibrate(string, string, double, int, int, int, int) except + + double minTemp() except +translate_exception + double maxTemp() except +translate_exception + double refPressure() except +translate_exception + cbool getElementPotentials(double*) except +translate_exception + void equilibrate(string, string, double, int, int, int, int) except +translate_exception void saveState(size_t, double*) void restoreState(size_t, double*) # initialization - void addUndefinedElements() except + - cbool addSpecies(shared_ptr[CxxSpecies]) except + - void modifySpecies(size_t, shared_ptr[CxxSpecies]) except + - void initThermo() except + - void invalidateCache() except + + void addUndefinedElements() except +translate_exception + cbool addSpecies(shared_ptr[CxxSpecies]) except +translate_exception + void modifySpecies(size_t, shared_ptr[CxxSpecies]) except +translate_exception + void initThermo() except +translate_exception + void invalidateCache() except +translate_exception # basic thermodynamic properties - double temperature() except + - double pressure() except + - double density() except + - double molarDensity() except + - double molarVolume() except + - double isothermalCompressibility() except + - double thermalExpansionCoeff() except + - double electricPotential() except + - void setElectricPotential(double) except + + double temperature() except +translate_exception + double pressure() except +translate_exception + double density() except +translate_exception + double molarDensity() except +translate_exception + double molarVolume() except +translate_exception + double isothermalCompressibility() except +translate_exception + double thermalExpansionCoeff() except +translate_exception + double electricPotential() except +translate_exception + void setElectricPotential(double) except +translate_exception # element properties size_t nElements() - size_t elementIndex(string) except + - string elementName(size_t) except + - double atomicWeight(size_t) except + + size_t elementIndex(string) except +translate_exception + string elementName(size_t) except +translate_exception + double atomicWeight(size_t) except +translate_exception # species properties size_t nSpecies() - shared_ptr[CxxSpecies] species(string) except + - shared_ptr[CxxSpecies] species(size_t) except + - size_t speciesIndex(string) except + - string speciesName(size_t) except + - double nAtoms(size_t, size_t) except + - void getAtoms(size_t, double*) except + + shared_ptr[CxxSpecies] species(string) except +translate_exception + shared_ptr[CxxSpecies] species(size_t) except +translate_exception + size_t speciesIndex(string) except +translate_exception + string speciesName(size_t) except +translate_exception + double nAtoms(size_t, size_t) except +translate_exception + void getAtoms(size_t, double*) except +translate_exception - double molecularWeight(size_t) except + + double molecularWeight(size_t) except +translate_exception double meanMolecularWeight() # composition - void setMassFractionsByName(string) except + - void setMassFractionsByName(Composition&) except + - void setMassFractions_NoNorm(double*) except + + void setMassFractionsByName(string) except +translate_exception + void setMassFractionsByName(Composition&) except +translate_exception + void setMassFractions_NoNorm(double*) except +translate_exception Composition getMassFractionsByName(double) - double massFraction(size_t) except + - double massFraction(string) except + + double massFraction(size_t) except +translate_exception + double massFraction(string) except +translate_exception - void setMoleFractionsByName(string) except + - void setMoleFractionsByName(Composition&) except + - void setMoleFractions_NoNorm(double*) except + - void getMoleFractions(double*) except + + void setMoleFractionsByName(string) except +translate_exception + void setMoleFractionsByName(Composition&) except +translate_exception + void setMoleFractions_NoNorm(double*) except +translate_exception + void getMoleFractions(double*) except +translate_exception Composition getMoleFractionsByName(double) - double moleFraction(size_t) except + - double moleFraction(string) except + + double moleFraction(size_t) except +translate_exception + double moleFraction(string) except +translate_exception - double concentration(size_t) except + - double elementalMassFraction(size_t) except + - double elementalMoleFraction(size_t) except + + double concentration(size_t) except +translate_exception + double elementalMassFraction(size_t) except +translate_exception + double elementalMoleFraction(size_t) except +translate_exception # state setters - void setState_TR(double, double) except + - void setState_TP(double, double) except + - void setState_HP(double, double) except + - void setState_UV(double, double) except + - void setState_SP(double, double) except + - void setState_SV(double, double) except + - void setState_RP(double, double) except + - void setState_ST(double, double) except + - void setState_TV(double, double) except + - void setState_PV(double, double) except + - void setState_UP(double, double) except + - void setState_VH(double, double) except + - void setState_TH(double, double) except + - void setState_SH(double, double) except + + void setState_TR(double, double) except +translate_exception + void setState_TP(double, double) except +translate_exception + void setState_HP(double, double) except +translate_exception + void setState_UV(double, double) except +translate_exception + void setState_SP(double, double) except +translate_exception + void setState_SV(double, double) except +translate_exception + void setState_RP(double, double) except +translate_exception + void setState_ST(double, double) except +translate_exception + void setState_TV(double, double) except +translate_exception + void setState_PV(double, double) except +translate_exception + void setState_UP(double, double) except +translate_exception + void setState_VH(double, double) except +translate_exception + void setState_TH(double, double) except +translate_exception + void setState_SH(double, double) except +translate_exception # molar thermodynamic properties: - double enthalpy_mole() except + - double intEnergy_mole() except + - double entropy_mole() except + - double gibbs_mole() except + - double cp_mole() except + - double cv_mole() except + + double enthalpy_mole() except +translate_exception + double intEnergy_mole() except +translate_exception + double entropy_mole() except +translate_exception + double gibbs_mole() except +translate_exception + double cp_mole() except +translate_exception + double cv_mole() except +translate_exception # specific (mass) properties: - double enthalpy_mass() except + - double intEnergy_mass() except + - double entropy_mass() except + - double gibbs_mass() except + - double cp_mass() except + - double cv_mass() except + + double enthalpy_mass() except +translate_exception + double intEnergy_mass() except +translate_exception + double entropy_mass() except +translate_exception + double gibbs_mass() except +translate_exception + double cp_mass() except +translate_exception + double cv_mass() except +translate_exception # PureFluid properties - double critTemperature() except + - double critPressure() except + - double critDensity() except + + double critTemperature() except +translate_exception + double critPressure() except +translate_exception + double critDensity() except +translate_exception - double satTemperature(double P) except + - double satPressure(double T) except + - double vaporFraction() except + + double satTemperature(double P) except +translate_exception + double satPressure(double T) except +translate_exception + double vaporFraction() except +translate_exception - void setState_Tsat(double T, double x) except + - void setState_Psat(double P, double x) except + + void setState_Tsat(double T, double x) except +translate_exception + void setState_Psat(double P, double x) except +translate_exception cdef extern from "cantera/thermo/IdealGasPhase.h": @@ -224,16 +224,16 @@ cdef extern from "cantera/thermo/SurfPhase.h": cdef cppclass CxxSurfPhase "Cantera::SurfPhase": CxxSurfPhase() double siteDensity() - void setSiteDensity(double) except + - void setCoverages(double*) except + - void setCoveragesByName(Composition&) except + - void setCoveragesNoNorm(double*) except + - void getCoverages(double*) except + + void setSiteDensity(double) except +translate_exception + void setCoverages(double*) except +translate_exception + void setCoveragesByName(Composition&) except +translate_exception + void setCoveragesNoNorm(double*) except +translate_exception + void getCoverages(double*) except +translate_exception cdef extern from "cantera/kinetics/Reaction.h" namespace "Cantera": - cdef shared_ptr[CxxReaction] CxxNewReaction "newReaction" (XML_Node&) except + - cdef vector[shared_ptr[CxxReaction]] CxxGetReactions "getReactions" (XML_Node&) except + + cdef shared_ptr[CxxReaction] CxxNewReaction "newReaction" (XML_Node&) except +translate_exception + cdef vector[shared_ptr[CxxReaction]] CxxGetReactions "getReactions" (XML_Node&) except +translate_exception cdef cppclass CxxArrhenius "Cantera::Arrhenius": CxxArrhenius() @@ -252,7 +252,7 @@ cdef extern from "cantera/kinetics/Reaction.h" namespace "Cantera": string reactantString() string productString() string equation() - void validate() except + + void validate() except +translate_exception int reaction_type Composition reactants Composition products @@ -353,21 +353,21 @@ cdef extern from "cantera/kinetics/Kinetics.h" namespace "Cantera": CxxThermoPhase& thermo(int) - void addPhase(CxxThermoPhase&) except + - void init() except + + void addPhase(CxxThermoPhase&) except +translate_exception + void init() except +translate_exception void skipUndeclaredThirdBodies(cbool) - void addReaction(shared_ptr[CxxReaction]) except + - void modifyReaction(int, shared_ptr[CxxReaction]) except + - void invalidateCache() except + + void addReaction(shared_ptr[CxxReaction]) except +translate_exception + void modifyReaction(int, shared_ptr[CxxReaction]) except +translate_exception + void invalidateCache() except +translate_exception - shared_ptr[CxxReaction] reaction(size_t) except + - cbool isReversible(int) except + - int reactionType(int) except + - string reactionString(int) except + - string reactantString(int) except + - string productString(int) except + - double reactantStoichCoeff(int, int) except + - double productStoichCoeff(int, int) except + + shared_ptr[CxxReaction] reaction(size_t) except +translate_exception + cbool isReversible(int) except +translate_exception + int reactionType(int) except +translate_exception + string reactionString(int) except +translate_exception + string reactantString(int) except +translate_exception + string productString(int) except +translate_exception + double reactantStoichCoeff(int, int) except +translate_exception + double productStoichCoeff(int, int) except +translate_exception double multiplier(int) void setMultiplier(int, double) @@ -375,26 +375,26 @@ cdef extern from "cantera/kinetics/Kinetics.h" namespace "Cantera": cdef extern from "cantera/kinetics/InterfaceKinetics.h": cdef cppclass CxxInterfaceKinetics "Cantera::InterfaceKinetics": - void advanceCoverages(double) except + + void advanceCoverages(double) except +translate_exception cdef extern from "cantera/transport/TransportBase.h" namespace "Cantera": cdef cppclass CxxTransport "Cantera::Transport": CxxTransport(CxxThermoPhase*) string transportType() - double viscosity() except + - double thermalConductivity() except + - double electricalConductivity() except + + double viscosity() except +translate_exception + double thermalConductivity() except +translate_exception + double electricalConductivity() except +translate_exception cdef extern from "cantera/transport/DustyGasTransport.h" namespace "Cantera": cdef cppclass CxxDustyGasTransport "Cantera::DustyGasTransport": - void setPorosity(double) except + - void setTortuosity(double) except + - void setMeanPoreRadius(double) except + - void setMeanParticleDiameter(double) except + - void setPermeability(double) except + - void getMolarFluxes(double*, double*, double, double*) except + + void setPorosity(double) except +translate_exception + void setTortuosity(double) except +translate_exception + void setMeanPoreRadius(double) except +translate_exception + void setMeanParticleDiameter(double) except +translate_exception + void setPermeability(double) except +translate_exception + void getMolarFluxes(double*, double*, double, double*) except +translate_exception cdef extern from "cantera/transport/TransportData.h" namespace "Cantera": @@ -418,43 +418,43 @@ cdef extern from "cantera/transport/TransportData.h" namespace "Cantera": cdef extern from "cantera/equil/MultiPhase.h" namespace "Cantera": cdef cppclass CxxMultiPhase "Cantera::MultiPhase": CxxMultiPhase() - void addPhase(CxxThermoPhase*, double) except + - void init() except + - void updatePhases() except + + void addPhase(CxxThermoPhase*, double) except +translate_exception + void init() except +translate_exception + void updatePhases() except +translate_exception - void equilibrate(string, string, double, int, int, int, int) except + + void equilibrate(string, string, double, int, int, int, int) except +translate_exception size_t nSpecies() size_t nElements() size_t nPhases() - size_t elementIndex(string) except + - size_t speciesIndex(size_t, size_t) except + - string speciesName(size_t) except + - double nAtoms(size_t, size_t) except + + size_t elementIndex(string) except +translate_exception + size_t speciesIndex(size_t, size_t) except +translate_exception + string speciesName(size_t) except +translate_exception + double nAtoms(size_t, size_t) except +translate_exception - double phaseMoles(size_t) except + - void setPhaseMoles(size_t, double) except + - void setMoles(double*) except + - void setMolesByName(string) except + + double phaseMoles(size_t) except +translate_exception + void setPhaseMoles(size_t, double) except +translate_exception + void setMoles(double*) except +translate_exception + void setMolesByName(string) except +translate_exception - double speciesMoles(size_t) except + - double elementMoles(size_t) except + + double speciesMoles(size_t) except +translate_exception + double elementMoles(size_t) except +translate_exception - void setTemperature(double) except + + void setTemperature(double) except +translate_exception double temperature() - void setPressure(double) except + + void setPressure(double) except +translate_exception double pressure() - double minTemp() except + - double maxTemp() except + - double charge() except + - double phaseCharge(size_t) except + - void getChemPotentials(double*) except + - double enthalpy() except + - double entropy() except + - double gibbs() except + - double cp() except + - double volume() except + + double minTemp() except +translate_exception + double maxTemp() except +translate_exception + double charge() except +translate_exception + double phaseCharge(size_t) except +translate_exception + void getChemPotentials(double*) except +translate_exception + double enthalpy() except +translate_exception + double entropy() except +translate_exception + double gibbs() except +translate_exception + double cp() except +translate_exception + double volume() except +translate_exception cdef extern from "cantera/zeroD/ReactorBase.h" namespace "Cantera": @@ -464,9 +464,9 @@ cdef extern from "cantera/zeroD/ReactorBase.h" namespace "Cantera": cdef cppclass CxxReactorBase "Cantera::ReactorBase": CxxReactorBase() - void setThermoMgr(CxxThermoPhase&) except + - void restoreState() except + - void syncState() except + + void setThermoMgr(CxxThermoPhase&) except +translate_exception + void restoreState() except +translate_exception + void syncState() except +translate_exception double volume() string name() void setName(string) @@ -482,20 +482,20 @@ cdef extern from "cantera/zeroD/Reactor.h": void setEnergy(int) cbool energyEnabled() size_t componentIndex(string&) - string componentName(size_t) except + + string componentName(size_t) except +translate_exception size_t neq() void getState(double*) void addSurface(CxxReactorSurface*) - void addSensitivityReaction(size_t) except + - void addSensitivitySpeciesEnthalpy(size_t) except + + void addSensitivityReaction(size_t) except +translate_exception + void addSensitivitySpeciesEnthalpy(size_t) except +translate_exception size_t nSensParams() cdef extern from "cantera/zeroD/FlowReactor.h": cdef cppclass CxxFlowReactor "Cantera::FlowReactor" (CxxReactor): CxxFlowReactor() - void setMassFlowRate(double) except + + void setMassFlowRate(double) except +translate_exception double speed() double distance() @@ -511,18 +511,18 @@ cdef extern from "cantera/zeroD/Wall.h": double getArea() void setHeatTransferCoeff(double) double getHeatTransferCoeff() - void setEmissivity(double) except + + void setEmissivity(double) except +translate_exception double getEmissivity() void setVelocity(CxxFunc1*) void setHeatFlux(CxxFunc1*) void setKinetics(CxxKinetics*, CxxKinetics*) void setCoverages(int, double*) - void setCoverages(int, Composition&) except + + void setCoverages(int, Composition&) except +translate_exception void syncCoverages(int) double vdot(double) double Q(double) - void addSensitivityReaction(int, size_t) except + + void addSensitivityReaction(int, size_t) except +translate_exception size_t nSensParams(int) @@ -533,17 +533,17 @@ cdef extern from "cantera/zeroD/ReactorSurface.h": void setArea(double) void setKinetics(CxxKinetics*) void setCoverages(double*) - void setCoverages(Composition&) except + + void setCoverages(Composition&) except +translate_exception void syncCoverages() - void addSensitivityReaction(size_t) except + + void addSensitivityReaction(size_t) except +translate_exception size_t nSensParams() cdef extern from "cantera/zeroD/flowControllers.h": cdef cppclass CxxFlowDevice "Cantera::FlowDevice": CxxFlowDevice() - double massFlowRate(double) except + - cbool install(CxxReactorBase&, CxxReactorBase&) except + + double massFlowRate(double) except +translate_exception + cbool install(CxxReactorBase&, CxxReactorBase&) except +translate_exception void setFunction(CxxFunc1*) cdef cppclass CxxMassFlowController "Cantera::MassFlowController" (CxxFlowDevice): @@ -563,9 +563,9 @@ cdef extern from "cantera/zeroD/ReactorNet.h": cdef cppclass CxxReactorNet "Cantera::ReactorNet": CxxReactorNet() void addReactor(CxxReactor&) - void advance(double) except + - double step(double) except + - void reinitialize() except + + void advance(double) except +translate_exception + double step(double) except +translate_exception + void reinitialize() except +translate_exception double time() void setInitialTime(double) void setTolerances(double, double) @@ -577,40 +577,40 @@ cdef extern from "cantera/zeroD/ReactorNet.h": void setVerbose(cbool) size_t neq() void getState(double*) - string componentName(size_t) except + + string componentName(size_t) except +translate_exception void setSensitivityTolerances(double, double) double rtolSensitivity() double atolSensitivity() - double sensitivity(size_t, size_t) except + - double sensitivity(string&, size_t, int) except + + double sensitivity(size_t, size_t) except +translate_exception + double sensitivity(string&, size_t, int) except +translate_exception size_t nparams() - string sensitivityParameterName(size_t) except + + string sensitivityParameterName(size_t) except +translate_exception cdef extern from "cantera/thermo/ThermoFactory.h" namespace "Cantera": - cdef CxxThermoPhase* newPhase(string, string) except + - cdef CxxThermoPhase* newPhase(XML_Node&) except + - cdef CxxThermoPhase* newThermoPhase(string) except + + cdef CxxThermoPhase* newPhase(string, string) except +translate_exception + cdef CxxThermoPhase* newPhase(XML_Node&) except +translate_exception + cdef CxxThermoPhase* newThermoPhase(string) except +translate_exception cdef extern from "cantera/kinetics/KineticsFactory.h" namespace "Cantera": - cdef CxxKinetics* newKineticsMgr(XML_Node&, vector[CxxThermoPhase*]) except + - cdef CxxKinetics* CxxNewKinetics "Cantera::newKineticsMgr" (string) except + + cdef CxxKinetics* newKineticsMgr(XML_Node&, vector[CxxThermoPhase*]) except +translate_exception + cdef CxxKinetics* CxxNewKinetics "Cantera::newKineticsMgr" (string) except +translate_exception cdef extern from "cantera/transport/TransportFactory.h" namespace "Cantera": - cdef CxxTransport* newDefaultTransportMgr(CxxThermoPhase*) except + - cdef CxxTransport* newTransportMgr(string, CxxThermoPhase*) except + + cdef CxxTransport* newDefaultTransportMgr(CxxThermoPhase*) except +translate_exception + cdef CxxTransport* newTransportMgr(string, CxxThermoPhase*) except +translate_exception cdef extern from "cantera/zeroD/ReactorFactory.h" namespace "Cantera": - cdef CxxReactorBase* newReactor(string) except + + cdef CxxReactorBase* newReactor(string) except +translate_exception cdef extern from "cantera/oneD/Domain1D.h": cdef cppclass CxxDomain1D "Cantera::Domain1D": size_t domainIndex() size_t nComponents() size_t nPoints() - string componentName(size_t) except + - size_t componentIndex(string) except + + string componentName(size_t) except +translate_exception + size_t componentIndex(string) except +translate_exception void setBounds(size_t, double, double) double upperBound(size_t) double lowerBound(size_t) @@ -625,7 +625,7 @@ cdef extern from "cantera/oneD/Domain1D.h": double transient_rtol(size_t) double transient_atol(size_t) double grid(size_t) - void setupGrid(size_t, double*) except + + void setupGrid(size_t, double*) except +translate_exception void setID(string) string& id() void setDesc(string) @@ -639,8 +639,8 @@ cdef extern from "cantera/oneD/Inlet1D.h": double mdot() void setMdot(double) size_t nSpecies() - void setMoleFractions(double*) except + - void setMoleFractions(string) except + + void setMoleFractions(double*) except +translate_exception + void setMoleFractions(string) except +translate_exception double massFraction(size_t) cdef cppclass CxxInlet1D "Cantera::Inlet1D": @@ -662,16 +662,16 @@ cdef extern from "cantera/oneD/Inlet1D.h": cdef cppclass CxxReactingSurf1D "Cantera::ReactingSurf1D": CxxRreactingSurf1D() - void setKineticsMgr(CxxInterfaceKinetics*) except + - void enableCoverageEquations(cbool) except + + void setKineticsMgr(CxxInterfaceKinetics*) except +translate_exception + void enableCoverageEquations(cbool) except +translate_exception cdef extern from "cantera/oneD/StFlow.h": cdef cppclass CxxStFlow "Cantera::StFlow": CxxStFlow(CxxIdealGasPhase*, int, int) - void setKinetics(CxxKinetics&) except + - void setTransport(CxxTransport&, cbool) except + - void setTransport(CxxTransport&) except + + void setKinetics(CxxKinetics&) except +translate_exception + void setTransport(CxxTransport&, cbool) except +translate_exception + void setTransport(CxxTransport&) except +translate_exception void setPressure(double) void enableRadiation(cbool) cbool radiationEnabled() @@ -681,7 +681,7 @@ cdef extern from "cantera/oneD/StFlow.h": void solveEnergyEqn() void fixTemperature() cbool doEnergy(size_t) - void enableSoret(cbool) except + + void enableSoret(cbool) except +translate_exception cbool withSoret() cdef cppclass CxxFreeFlame "Cantera::FreeFlame": @@ -693,25 +693,25 @@ cdef extern from "cantera/oneD/StFlow.h": cdef extern from "cantera/oneD/Sim1D.h": cdef cppclass CxxSim1D "Cantera::Sim1D": - CxxSim1D(vector[CxxDomain1D*]&) except + - void setValue(size_t, size_t, size_t, double) except + - void setProfile(size_t, size_t, vector[double]&, vector[double]&) except + - void setFlatProfile(size_t, size_t, double) except + - void showSolution() except + - void setTimeStep(double, size_t, int*) except + - void restoreTimeSteppingSolution() except + - void restoreSteadySolution() except + + CxxSim1D(vector[CxxDomain1D*]&) except +translate_exception + void setValue(size_t, size_t, size_t, double) except +translate_exception + void setProfile(size_t, size_t, vector[double]&, vector[double]&) except +translate_exception + void setFlatProfile(size_t, size_t, double) except +translate_exception + void showSolution() except +translate_exception + void setTimeStep(double, size_t, int*) except +translate_exception + void restoreTimeSteppingSolution() except +translate_exception + void restoreSteadySolution() except +translate_exception void setMaxTimeStepCount(int) int maxTimeStepCount() - void getInitialSoln() except + + void getInitialSoln() except +translate_exception void solve(int, cbool) except +translate_exception - void refine(int) except + - void setRefineCriteria(size_t, double, double, double, double) except + - void save(string, string, string, int) except + - void restore(string, string, int) except + - void writeStats(int) except + + void refine(int) except +translate_exception + void setRefineCriteria(size_t, double, double, double, double) except +translate_exception + void save(string, string, string, int) except +translate_exception + void restore(string, string, int) except +translate_exception + void writeStats(int) except +translate_exception void clearStats() - void resize() except + + void resize() except +translate_exception vector[size_t]& gridSizeStats() vector[double]& jacobianTimeStats() vector[double]& evalTimeStats() @@ -719,17 +719,17 @@ cdef extern from "cantera/oneD/Sim1D.h": vector[int]& evalCountStats() vector[int]& timeStepStats() - int domainIndex(string) except + - double value(size_t, size_t, size_t) except + - double workValue(size_t, size_t, size_t) except + - void eval(double, int) except + + int domainIndex(string) except +translate_exception + double value(size_t, size_t, size_t) except +translate_exception + double workValue(size_t, size_t, size_t) except +translate_exception + void eval(double, int) except +translate_exception void setJacAge(int, int) void setTimeStepFactor(double) void setMinTimeStep(double) void setMaxTimeStep(double) - void setGridMin(int, double) except + + void setGridMin(int, double) except +translate_exception void setFixedTemperature(double) - void setInterrupt(CxxFunc1*) except + + void setInterrupt(CxxFunc1*) except +translate_exception void setTimeStepCallback(CxxFunc1*) void setSteadyCallback(CxxFunc1*) @@ -758,13 +758,13 @@ cdef extern from "cantera/kinetics/ReactionPath.h": string title void setFont(string) string m_font - void add(CxxReactionPathDiagram&) except + + void add(CxxReactionPathDiagram&) except +translate_exception void exportToDot(CxxStringStream&) void writeData(CxxStringStream&) void displayOnly(size_t) cdef cppclass CxxReactionPathBuilder "Cantera::ReactionPathBuilder": - void init(CxxStringStream&, CxxKinetics&) except + + void init(CxxStringStream&, CxxKinetics&) except +translate_exception void build(CxxKinetics&, string&, CxxStringStream&, CxxReactionPathDiagram&, cbool) @@ -782,67 +782,67 @@ cdef extern from "cantera/cython/wrappers.h": cdef void CxxArray2D_set(CxxArray2D, size_t, size_t, double) # ThermoPhase composition - cdef void thermo_getMassFractions(CxxThermoPhase*, double*) except + - cdef void thermo_setMassFractions(CxxThermoPhase*, double*) except + - cdef void thermo_getMoleFractions(CxxThermoPhase*, double*) except + - cdef void thermo_setMoleFractions(CxxThermoPhase*, double*) except + - cdef void thermo_getConcentrations(CxxThermoPhase*, double*) except + - cdef void thermo_setConcentrations(CxxThermoPhase*, double*) except + + cdef void thermo_getMassFractions(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_setMassFractions(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_getMoleFractions(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_setMoleFractions(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_getConcentrations(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_setConcentrations(CxxThermoPhase*, double*) except +translate_exception # ThermoPhase partial molar properties - cdef void thermo_getChemPotentials(CxxThermoPhase*, double*) except + - cdef void thermo_getElectrochemPotentials(CxxThermoPhase*, double*) except + - cdef void thermo_getPartialMolarEnthalpies(CxxThermoPhase*, double*) except + - cdef void thermo_getPartialMolarEntropies(CxxThermoPhase*, double*) except + - cdef void thermo_getPartialMolarIntEnergies(CxxThermoPhase*, double*) except + - cdef void thermo_getPartialMolarCp(CxxThermoPhase*, double*) except + - cdef void thermo_getPartialMolarVolumes(CxxThermoPhase*, double*) except + + cdef void thermo_getChemPotentials(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_getElectrochemPotentials(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_getPartialMolarEnthalpies(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_getPartialMolarEntropies(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_getPartialMolarIntEnergies(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_getPartialMolarCp(CxxThermoPhase*, double*) except +translate_exception + cdef void thermo_getPartialMolarVolumes(CxxThermoPhase*, double*) except +translate_exception # ThermoPhase partial non-dimensional properties - void thermo_getEnthalpy_RT(CxxThermoPhase*, double*) except + - void thermo_getEntropy_R(CxxThermoPhase*, double*) except + - void thermo_getIntEnergy_RT(CxxThermoPhase*, double*) except + - void thermo_getGibbs_RT(CxxThermoPhase*, double*) except + - void thermo_getCp_R(CxxThermoPhase*, double*) except + + void thermo_getEnthalpy_RT(CxxThermoPhase*, double*) except +translate_exception + void thermo_getEntropy_R(CxxThermoPhase*, double*) except +translate_exception + void thermo_getIntEnergy_RT(CxxThermoPhase*, double*) except +translate_exception + void thermo_getGibbs_RT(CxxThermoPhase*, double*) except +translate_exception + void thermo_getCp_R(CxxThermoPhase*, double*) except +translate_exception # other ThermoPhase methods - cdef void thermo_getMolecularWeights(CxxThermoPhase*, double*) except + + cdef void thermo_getMolecularWeights(CxxThermoPhase*, double*) except +translate_exception # Kinetics per-reaction properties - cdef void kin_getFwdRatesOfProgress(CxxKinetics*, double*) except + - cdef void kin_getRevRatesOfProgress(CxxKinetics*, double*) except + - cdef void kin_getNetRatesOfProgress(CxxKinetics*, double*) except + + cdef void kin_getFwdRatesOfProgress(CxxKinetics*, double*) except +translate_exception + cdef void kin_getRevRatesOfProgress(CxxKinetics*, double*) except +translate_exception + cdef void kin_getNetRatesOfProgress(CxxKinetics*, double*) except +translate_exception - cdef void kin_getEquilibriumConstants(CxxKinetics*, double*) except + - cdef void kin_getFwdRateConstants(CxxKinetics*, double*) except + - cdef void kin_getRevRateConstants(CxxKinetics*, double*) except + + cdef void kin_getEquilibriumConstants(CxxKinetics*, double*) except +translate_exception + cdef void kin_getFwdRateConstants(CxxKinetics*, double*) except +translate_exception + cdef void kin_getRevRateConstants(CxxKinetics*, double*) except +translate_exception - cdef void kin_getDeltaEnthalpy(CxxKinetics*, double*) except + - cdef void kin_getDeltaGibbs(CxxKinetics*, double*) except + - cdef void kin_getDeltaEntropy(CxxKinetics*, double*) except + - cdef void kin_getDeltaSSEnthalpy(CxxKinetics*, double*) except + - cdef void kin_getDeltaSSGibbs(CxxKinetics*, double*) except + - cdef void kin_getDeltaSSEntropy(CxxKinetics*, double*) except + + cdef void kin_getDeltaEnthalpy(CxxKinetics*, double*) except +translate_exception + cdef void kin_getDeltaGibbs(CxxKinetics*, double*) except +translate_exception + cdef void kin_getDeltaEntropy(CxxKinetics*, double*) except +translate_exception + cdef void kin_getDeltaSSEnthalpy(CxxKinetics*, double*) except +translate_exception + cdef void kin_getDeltaSSGibbs(CxxKinetics*, double*) except +translate_exception + cdef void kin_getDeltaSSEntropy(CxxKinetics*, double*) except +translate_exception # Kinetics per-species properties - cdef void kin_getCreationRates(CxxKinetics*, double*) except + - cdef void kin_getDestructionRates(CxxKinetics*, double*) except + - cdef void kin_getNetProductionRates(CxxKinetics*, double*) except + + cdef void kin_getCreationRates(CxxKinetics*, double*) except +translate_exception + cdef void kin_getDestructionRates(CxxKinetics*, double*) except +translate_exception + cdef void kin_getNetProductionRates(CxxKinetics*, double*) except +translate_exception # Transport properties - cdef void tran_getMixDiffCoeffs(CxxTransport*, double*) except + - cdef void tran_getMixDiffCoeffsMass(CxxTransport*, double*) except + - cdef void tran_getMixDiffCoeffsMole(CxxTransport*, double*) except + - cdef void tran_getThermalDiffCoeffs(CxxTransport*, double*) except + + cdef void tran_getMixDiffCoeffs(CxxTransport*, double*) except +translate_exception + cdef void tran_getMixDiffCoeffsMass(CxxTransport*, double*) except +translate_exception + cdef void tran_getMixDiffCoeffsMole(CxxTransport*, double*) except +translate_exception + cdef void tran_getThermalDiffCoeffs(CxxTransport*, double*) except +translate_exception - cdef void tran_getMultiDiffCoeffs(CxxTransport*, size_t, double*) except + - cdef void tran_getBinaryDiffCoeffs(CxxTransport*, size_t, double*) except + + cdef void tran_getMultiDiffCoeffs(CxxTransport*, size_t, double*) except +translate_exception + cdef void tran_getBinaryDiffCoeffs(CxxTransport*, size_t, double*) except +translate_exception # typedefs -ctypedef void (*thermoMethod1d)(CxxThermoPhase*, double*) except + -ctypedef void (*transportMethod1d)(CxxTransport*, double*) except + -ctypedef void (*transportMethod2d)(CxxTransport*, size_t, double*) except + -ctypedef void (*kineticsMethod1d)(CxxKinetics*, double*) except + +ctypedef void (*thermoMethod1d)(CxxThermoPhase*, double*) except +translate_exception +ctypedef void (*transportMethod1d)(CxxTransport*, double*) except +translate_exception +ctypedef void (*transportMethod2d)(CxxTransport*, size_t, double*) except +translate_exception +ctypedef void (*kineticsMethod1d)(CxxKinetics*, double*) except +translate_exception # classes cdef class Species: @@ -1051,11 +1051,11 @@ cdef wrapSpeciesThermo(shared_ptr[CxxSpeciesThermo] spthermo) cdef Reaction wrapReaction(shared_ptr[CxxReaction] reaction) cdef extern from "cantera/thermo/Elements.h" namespace "Cantera": - double getElementWeight(string ename) except + - double getElementWeight(int atomicNumber) except + + double getElementWeight(string ename) except +translate_exception + double getElementWeight(int atomicNumber) except +translate_exception int numElementsDefined() - int getAtomicNumber(string ename) except + - string getElementSymbol(string ename) except + - string getElementSymbol(int atomicNumber) except + - string getElementName(string ename) except + - string getElementName(int atomicNumber) except + + int getAtomicNumber(string ename) except +translate_exception + string getElementSymbol(string ename) except +translate_exception + string getElementSymbol(int atomicNumber) except +translate_exception + string getElementName(string ename) except +translate_exception + string getElementName(int atomicNumber) except +translate_exception diff --git a/interfaces/cython/cantera/composite.py b/interfaces/cython/cantera/composite.py index a48c1de3d..a1d0fd8f1 100644 --- a/interfaces/cython/cantera/composite.py +++ b/interfaces/cython/cantera/composite.py @@ -615,7 +615,7 @@ class SolutionArray(object): single_species = True collabels = ['{}_{}'.format(species, c)] else: - raise Exception('property "{}" not supported'.format(c)) + raise CanteraError('property "{}" not supported'.format(c)) # Get the data for the current group of columns if single_species: diff --git a/interfaces/cython/cantera/onedim.pyx b/interfaces/cython/cantera/onedim.pyx index ae1bdfc5a..3da18388b 100644 --- a/interfaces/cython/cantera/onedim.pyx +++ b/interfaces/cython/cantera/onedim.pyx @@ -850,7 +850,7 @@ cdef class Sim1D: self.energy_enabled = True self.sim.solve(loglevel, False) solved = True - except Exception as e: + except CanteraError as e: log(str(e)) solved = False @@ -866,7 +866,7 @@ cdef class Sim1D: self.energy_enabled = True self.sim.solve(loglevel, False) solved = True - except Exception as e: + except CanteraError as e: log(str(e)) if solved and not self.extinct(): @@ -875,7 +875,7 @@ cdef class Sim1D: try: self.sim.solve(loglevel, True) solved = True - except Exception as e: + except CanteraError as e: log(str(e)) solved = False @@ -887,7 +887,7 @@ cdef class Sim1D: log('Flame is extinct on {} point grid', N) if not solved: - raise Exception('Could not find a solution for the 1D problem') + raise CanteraError('Could not find a solution for the 1D problem') if solve_multi: log('Solving with multicomponent transport') diff --git a/interfaces/cython/cantera/reactor.pyx b/interfaces/cython/cantera/reactor.pyx index 24b2c680a..9ff207253 100644 --- a/interfaces/cython/cantera/reactor.pyx +++ b/interfaces/cython/cantera/reactor.pyx @@ -310,7 +310,7 @@ cdef class Reactor(ReactorBase): name from the index. """ if not self.n_vars: - raise Exception('Reactor empty or network not initialized.') + raise CanteraError('Reactor empty or network not initialized.') cdef np.ndarray[np.double_t, ndim=1] y = np.zeros(self.n_vars) self.reactor.getState(&y[0]) return y @@ -402,12 +402,12 @@ cdef class WallSurface: """ def __get__(self): if self._kinetics is None: - raise Exception('No kinetics manager present') + raise CanteraError('No kinetics manager present') self.cxxwall.syncCoverages(self.side) return self._kinetics.coverages def __set__(self, coverages): if self._kinetics is None: - raise Exception("Can't set coverages before assigning kinetics manager.") + raise CanteraError("Can't set coverages before assigning kinetics manager.") if isinstance(coverages, (dict, str, unicode, bytes)): self.cxxwall.setCoverages(self.side, comp_map(coverages)) @@ -474,12 +474,12 @@ cdef class ReactorSurface: """ def __get__(self): if self._kinetics is None: - raise Exception('No kinetics manager present') + raise CanteraError('No kinetics manager present') self.surface.syncCoverages() return self._kinetics.coverages def __set__(self, coverages): if self._kinetics is None: - raise Exception("Can't set coverages before assigning kinetics manager.") + raise CanteraError("Can't set coverages before assigning kinetics manager.") if isinstance(coverages, (dict, str, unicode, bytes)): self.surface.setCoverages(comp_map(coverages)) @@ -1116,7 +1116,7 @@ cdef class ReactorNet: all entities contained. """ if not self.n_vars: - raise Exception('ReactorNet empty or not initialized.') + raise CanteraError('ReactorNet empty or not initialized.') cdef np.ndarray[np.double_t, ndim=1] y = np.zeros(self.n_vars) self.net.getState(&y[0]) return y @@ -1153,9 +1153,9 @@ cdef class ReactorNet: if not residual_threshold: residual_threshold = 10. * self.rtol if residual_threshold <= self.rtol: - raise Exception('Residual threshold (' + str(residual_threshold) + - ') should be below solver rtol (' + - str(self.rtol) + ')') + raise CanteraError('Residual threshold (' + str(residual_threshold) + + ') should be below solver rtol (' + + str(self.rtol) + ')') if return_residuals: residuals = np.empty(max_steps) # check if system is initialized @@ -1177,8 +1177,8 @@ cdef class ReactorNet: if residual < residual_threshold: break if step == max_steps - 1: - raise Exception('Maximum number of steps reached before convergence' - ' below maximum residual') + raise CanteraError('Maximum number of steps reached before' + ' convergence below maximum residual') if return_residuals: return residuals[:step + 1] diff --git a/interfaces/cython/cantera/test/test_convert.py b/interfaces/cython/cantera/test/test_convert.py index 350bf25cd..f055f59d0 100644 --- a/interfaces/cython/cantera/test/test_convert.py +++ b/interfaces/cython/cantera/test/test_convert.py @@ -424,7 +424,7 @@ class CtmlConverterTest(utilities.CanteraTest): def test_invalid(self): try: gas = ct.Solution('../data/invalid.cti') - except RuntimeError as e: + except ct.CanteraError as e: err = e self.assertIn('already contains', err.args[0]) diff --git a/interfaces/cython/cantera/test/test_onedim.py b/interfaces/cython/cantera/test/test_onedim.py index a10ace5c2..f960fb6bb 100644 --- a/interfaces/cython/cantera/test/test_onedim.py +++ b/interfaces/cython/cantera/test/test_onedim.py @@ -54,10 +54,10 @@ class TestOnedim(utilities.CanteraTest): gas = ct.Solution('h2o2.xml') flame = ct.FreeFlow(gas) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): flame.grid = [0, 0.1, 0.1, 0.2] - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): flame.grid = [0, 0.1, 0.2, 0.05] def test_unpicklable(self): @@ -279,7 +279,7 @@ class TestFreeFlame(utilities.CanteraTest): def test_soret_flag(self): self.create_sim(101325, 300, 'H2:1.0, O2:1.0') self.assertFalse(self.sim.soret_enabled) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): self.sim.soret_enabled = True self.sim.transport_model = 'Multi' self.sim.soret_enabled = True diff --git a/interfaces/cython/cantera/test/test_reactor.py b/interfaces/cython/cantera/test/test_reactor.py index 6db9aaa65..674fb0eef 100644 --- a/interfaces/cython/cantera/test/test_reactor.py +++ b/interfaces/cython/cantera/test/test_reactor.py @@ -458,12 +458,12 @@ class TestReactor(utilities.CanteraTest): self.make_reactors() res = ct.Reservoir() - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): # Must assign contents of both reactors before creating Valve v = ct.Valve(self.r1, res) v = ct.Valve(self.r1, self.r2) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): # inlet and outlet cannot be reassigned v._install(self.r2, self.r1) @@ -497,15 +497,15 @@ class TestReactor(utilities.CanteraTest): p = ct.PressureController(self.r1, self.r2, master=mfc, K=0.5) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): p = ct.PressureController(self.r1, self.r2, K=0.5) p.mdot(0.0) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): p = ct.PressureController(self.r1, self.r2, master=mfc) p.mdot(0.0) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): p = ct.PressureController(self.r1, self.r2) p.mdot(0.0) diff --git a/interfaces/cython/cantera/test/test_thermo.py b/interfaces/cython/cantera/test/test_thermo.py index 63fd79580..2fd0f7a68 100644 --- a/interfaces/cython/cantera/test/test_thermo.py +++ b/interfaces/cython/cantera/test/test_thermo.py @@ -601,21 +601,21 @@ class TestThermoPhase(utilities.CanteraTest): ref = ct.Solution('gri30.xml') reactor = ct.IdealGasReactor(self.phase) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): self.phase.add_species(ref.species('CH4')) del reactor gc.collect() self.phase.add_species(ref.species('CH4')) flame = ct.FreeFlame(self.phase, width=0.1) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): self.phase.add_species(ref.species('CO')) del flame gc.collect() self.phase.add_species(ref.species('CO')) mix = ct.Mixture([(self.phase, 2.0)]) - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): self.phase.add_species(ref.species('CH2O')) del mix gc.collect() @@ -623,7 +623,7 @@ class TestThermoPhase(utilities.CanteraTest): def test_add_species_duplicate(self): species = self.phase.species('H2O2') - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): self.phase.add_species(species) @@ -1160,16 +1160,16 @@ class TestElement(utilities.CanteraTest): self.assertEqual(self.ar_num.atomic_number, 18) def test_element_name_not_present(self): - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): ct.Element('I am not an element') def test_element_atomic_number_small(self): - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): ct.Element(0) def test_element_atomic_number_big(self): num_elements = ct.Element.num_elements_defined - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): ct.Element(num_elements + 1) def test_element_bad_input(self): diff --git a/interfaces/cython/cantera/test/test_transport.py b/interfaces/cython/cantera/test/test_transport.py index c033ca3c1..87812c74d 100644 --- a/interfaces/cython/cantera/test/test_transport.py +++ b/interfaces/cython/cantera/test/test_transport.py @@ -132,7 +132,7 @@ species(name="H2O", {'H':'atom', 'H2':'nonlinear', 'H2O':'nonlinear'}, {'H':'atom', 'H2':'linear', 'H2O':'atom'}] for geoms in bad: - with self.assertRaises(RuntimeError): + with self.assertRaises(ct.CanteraError): ct.Solution(source=self.phase_data.format(**geoms)) diff --git a/interfaces/cython/cantera/thermo.pyx b/interfaces/cython/cantera/thermo.pyx index add10252d..63d5b466d 100644 --- a/interfaces/cython/cantera/thermo.pyx +++ b/interfaces/cython/cantera/thermo.pyx @@ -461,7 +461,7 @@ cdef class ThermoPhase(_SolutionBase): automatically. """ if self._references: - raise RuntimeError('Cannot add species to ThermoPhase object if it' + raise CanteraError('Cannot add species to ThermoPhase object if it' ' is linked to a Reactor, Domain1D (flame), or Mixture object.') self.thermo.addUndefinedElements() self.thermo.addSpecies(species._species) diff --git a/interfaces/cython/cantera/utils.pyx b/interfaces/cython/cantera/utils.pyx index ac8095a2d..a93a02996 100644 --- a/interfaces/cython/cantera/utils.pyx +++ b/interfaces/cython/cantera/utils.pyx @@ -2,6 +2,8 @@ # at http://www.cantera.org/license.txt for license and copyright information. import sys +from cpython.ref cimport PyObject + cdef int _pythonMajorVersion = sys.version_info[0] cdef CxxPythonLogger* _logger = new CxxPythonLogger() @@ -52,3 +54,8 @@ cdef Composition comp_map(X) except *: cdef comp_map_to_dict(Composition m): return {pystr(species):value for species,value in m.items()} + +class CanteraError(RuntimeError): + pass + +cdef public PyObject* pyCanteraError = CanteraError