Engine.Graphmodule Optimiser : sig ... endtype graph = E.Graph.graphval shape_or_value : Optimiser.Operator.Symbol.Shape.Type.t -> stringval graph_to_dot : graph -> stringval graph_to_trace : graph -> stringval collect_rvs : 
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node array ->
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node arrayval invalidate_rvs : graph -> unitval make_graph : 
  input:Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node array ->
  output:Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node array ->
  string ->
  graphval get_inputs : 
  graph ->
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node arrayval get_outputs : 
  graph ->
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node arrayval get_node_arr_val : 
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node ->
  Optimiser.Operator.Symbol.Shape.Type.Device.A.arrval get_node_elt_val : 
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node ->
  Optimiser.Operator.Symbol.Shape.Type.Device.A.eltval set_node_arr_val : 
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node ->
  Optimiser.Operator.Symbol.Shape.Type.Device.value ->
  unitval set_node_elt_val : 
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node ->
  Optimiser.Operator.Symbol.Shape.Type.Device.value ->
  unitval is_iopair_safe : 'a Owl_graph.node -> 'a Owl_graph.node -> boolval make_iopair : 
  graph ->
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node array ->
  Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node array ->
  unitval update_iopair : graph -> unitval remove_unused_iopair : 
  'a Owl_graph.node array ->
  'b array ->
  'a Owl_graph.node array * 'b arrayval init_inputs : 
  (Optimiser.Operator.Symbol.Shape.Type.attr Owl_graph.node ->
    Optimiser.Operator.Symbol.Shape.Type.Device.value) ->
  graph ->
  unitval optimise : graph -> unit