 // MARK: - Algorithms on arrays of `Differentiable` values.
 
 extension ArrayBuffer where Element: Differentiable, Element.TangentVector: Vector {
+  // DWA TODO: replace this with the use of zeroTangentVectorInitializer
   /// Returns the zero `TangentVector`s of the contained elements.
   var tangentVectorZeros: ArrayBuffer<Element.TangentVector> {
     withUnsafeBufferPointer { vs in

  init<Element: Vector>(_: Type<Element>, _: () = ()) {
    let e = Type<Element>()
    add = { buffer, others in
      buffer[unsafelyAssumingElementType: e].add(.init(unsafelyDowncasting: others))
    }
    scale = { buffer, factor in
      buffer[unsafelyAssumingElementType: e].scale(by: factor)
    }
    dot = { buffer, others in
      buffer[unsafelyAssumingElementType: e].dot(.init(unsafelyDowncasting: others))

// MARK: - Algorithms on arrays of `Vector` values.

extension ArrayBuffer where Element: Vector {
  // DWA TODO: Where does this belong?  Should it be part of a protocol?
  /// Returns Jacobians that scale each element by `scalar`.
  func jacobians(scalar: Double) -> AnyGaussianFactorArrayBuffer {
    AnyGaussianFactorArrayBuffer(
