///|
/// Checks compatibility by replay, not merely matching vector dimensions.
fn verify_path(net : Network, path : Path) -> Unit raise KineticsError {
  net.validate_counts(path.states[0])
  let mut state = path.states[0].copy()
  for k in 0.. Double raise KineticsError {
  verify_path(self, path)
  let mut result = 0.0
  let mut previous = 0.0
  for k in 0.. Array[Double] raise KineticsError {
  verify_path(self, path)
  for r in self.reactions {
    if r.rate <= 0.0 {
      raise Invalid("path score requires positive rate constants")
    }
  }
  let result = Array::make(self.reactions.length(), 0.0)
  let mut previous = 0.0
  for k in 0..<(path.channels.length() + 1) {
    let next = if k == path.channels.length() {
      path.horizon
    } else {
      path.times[k]
    }
    let a = self.propensities(path.states[k])
    for j in 0..