///|
/// Analytic derivative without dividing by concentration: valid at zero.
pub fn Network::jacobian(
  self : Network,
  state : Array[Double],
) -> Array[Array[Double]] raise KineticsError {
  self.validate_concentrations(state)
  let n = self.names.length()
  let matrix = Array::makei(n, _ => Array::make(n, 0.0))
  for r in self.reactions {
    for col in 0.. Array[Array[Double]] raise KineticsError {
  let a = self.propensities(counts)
  let s = self.stoichiometry()
  let n = self.names.length()
  let result = Array::makei(n, _ => Array::make(n, 0.0))
  for i in 0..