(defn metric->connection-2 [metric basis]
(let [vector-basis (b/basis->vector-basis basis)
oneform-basis (b/basis->oneform-basis basis)
inverse-metric (metric/invert metric basis)
half (g// 1 2)]
(cov/make-Christoffel
(s/mapr
(fn [e_k]
(s/mapr
(fn [e_j]
(s/mapr
(fn [w_i]
(b/contract
(fn [e_m w_m]
(g/* (inverse-metric w_i w_m)
(g/*
half
(g/+ (g/- (g/+ (e_k (metric e_m e_j))
(e_j (metric e_m e_k)))
(e_m (metric e_j e_k)))
(g/- (g/+ (structure-constant
e_m e_j e_k basis metric)
(structure-constant
e_m e_k e_j basis metric))
(structure-constant
e_j e_k e_m basis metric))))))
basis))
oneform-basis))
vector-basis))
vector-basis)
basis)))