     }
 
     print("DONE.")
+    print("rT1: ", rT1.theta, "rT2: ", rT2.theta)
+    print("model: ", model.a.theta, "Error: ", between(rT2, model(Rot2(0))).theta)
   }
 }

  /// Cosine and Sine of the rotation angle
  var c_, s_ : Double;

  @differentiable
  init(theta: Double) {
    // theta_ = theta;
    (c_, s_) = (cos(theta), sin(theta));
  }

  init(c: Double, s: Double) {
    (c_, s_) = (c, s);
  }

  public typealias TangentVector = Double;

  public mutating func move(along direction: TangentVector) {
    let r = Rot2(theta: direction) * self;
    (c_, s_) = (r.c_, r.s_)
  }

  public var zeroTangentVector: TangentVector {
    Double.zero
  }
}


}

struct Between: Differentiable {
    var a: Rot2 = Rot2(0);

    @differentiable
    func callAsFunction(_ b: Rot2) -> Rot2 {
