(defn vector-basis->dual [vector-basis coordinate-system]
(let [prototype (m/coordinate-prototype coordinate-system)
vector-basis-coefficient-functions
(s/mapr #(vf/vector-field->components % coordinate-system)
vector-basis)
guts (fn [coords]
(let [shape (s/compatible-shape prototype)
invert #(matrix/s:inverse shape % prototype)
transpose #(matrix/s:transpose shape % prototype)]
(-> (s/mapr #(% coords) vector-basis-coefficient-functions)
(invert)
(transpose))))
oneform-basis-coefficient-functions (m/c:generate
(:dimension
(m/manifold coordinate-system))
::s/up
#(comp (s/component %) guts))
oneform-basis (s/mapr #(ff/components->oneform-field % coordinate-system)
oneform-basis-coefficient-functions)]
oneform-basis))