Owl_computation_engine
This functor takes a device as its input, then it generates the computation graph module without flattening the module hierarchy.
module Make_Graph (Device : Owl_types_computation_device.Sig) : sig ... end
This functor takes an engine as its input, flattens all its embedded modules into the same level. Therefore the generated module has all the functions sit at the top level, then can be passed to other functors like Algodiff.
module Flatten (Engine : Owl_types_computation_engine.Sig) : sig ... end