Analytical jacobian and rate derivative.
Change rate derivative function to return an array derivative for all reactions
Perform direct local sensitivity calculation within dassl solver if turned on

Should be adaptable for additional reaction systems other than the
isothermal/isobaric system SimpleReactor.  Each new reaction system will need
an analytical jacobian and rate derivative function.
Some refactoring of KineticsFamily.__generateReactions().

This refactoring is intended to speed things up a bit by reducing the
number of calls to generateResonanceIsomers(). To accomplish this, the
steps of removing reactions that don't match a given set of products
and combining reactions that give the same products are once again
performed separately.

The refactored algorithm also removes some duplicated code.
Some Cythonization added to Molecule.generateResonanceIsomers() et al.

We do this often enough that we want to make it as fast as possible.
Some minor Cythonization tweaks to the molecule isomorphism functions.

I don't think these actually make things any faster, but they can't hurt.
Added basic fingerprinting support for functional groups.

This is inspired by a similar implementation in RMG-Java. The idea is
that we can skip the full subgraph isomorphism by first checking that the
molecule has at least as many carbon, oxygen, and sulfur atoms and radical
electrons as the subgraph. If not, the group cannot be a subgraph of the
molecule. This especially helps in the forbidden structures checking,
which often has to deal with crazy functionalities like O-O-O-O.

I suspect that more could be done with this idea, but this is a good
first step. About 75% of the subgraph isomorphisms were eliminated in the
minimal example with this change.
Save an annotated chemkin file in addition to clean chemkin files during rmg job.

Comments for some reactions are way too long and sometimes cause problems when
used in CHEMKIN, in addition to making files way too large. Now there a
`chem_annotated.inp` file is saved in addition to clean  `chem.inp` files.

Also added group addivity comments to the species thermo in output chemkin file
and prettified some formatting.
Merge remote-tracking branch 'official/master'
Created new class-based implementation of the VF2 algorithm.

The use of a class lets us store some variables as attributes, so we don't
have to keep passing them around as parameters. It also offers a cleaner
API that encapsulates the details of calling the algorithm inside the
class.

I don't expect a significant speed change from this commit.
Fixed version of Molecule.getFormula().

The previous implementation would print a 1 for atoms that only appear
once in the molecule, e.g. C3H6O1 instead of C3H6O.
Added a few methods to make CanTherm easier to run from a script.

The common use case here is running CanTherm jobs and making custom plots
of the results, e.g. for a paper.
Fixed indexing bug in generateFullMEMatrix().

The bug was that the algorithm was trying to access the Fim value for
a product channel, which does not exist.
Added Network.solveReducedME() method.

This method takes the results from the MSC, RS, or CSE method and uses
them to compute the approximate total populations and population
distributions for a given set of time points and a given initial
condition (much like solveFullME() does).
Fixed scaling bug in computing of uij(E) and vim(E) via CSE method.

Amazing the things you find when trying to reproduce two-year-old
figures for your thesis.
Can now specify optional energy offset to network drawing algorithm.

This allows you to shift all of the wells up or down in energy on the
PES drawing, which is sometimes useful for setting one of the
configurations to have a ground-state energy of zero.
Move thermo database unittest out of deprecated unittest folder.
Merge branch 'master' of git://github.com/jwallen/RMG-Py
Merge branch 'jacobian'
In reservoir state method, use the deepest well to choose the matrix bandwidth.

We use a banded matrix in the reservoir state method to accelerate the
linear solve. The halfbandwidth of this matrix is chosen by neglecting
P(E,E') values below a certain threshold. It is important to choose the
deepest isomer well for this, as it gives the largest halfbandwidth and
therefore the safest banded matrix.

I noticed this issue in a PES where I had a very shallow adduct as the
first isomer well. Since the previous implementation used the first isomer
only to choose the halfbandwith, it was choosing a value that was far too
small for the other isomer well.