sig
  type neuron_typ = {
    mutable wxi : Owl_neural_neuron.t;
    mutable whi : Owl_neural_neuron.t;
    mutable wxc : Owl_neural_neuron.t;
    mutable whc : Owl_neural_neuron.t;
    mutable wxf : Owl_neural_neuron.t;
    mutable whf : Owl_neural_neuron.t;
    mutable wxo : Owl_neural_neuron.t;
    mutable who : Owl_neural_neuron.t;
    mutable bi : Owl_neural_neuron.t;
    mutable bc : Owl_neural_neuron.t;
    mutable bf : Owl_neural_neuron.t;
    mutable bo : Owl_neural_neuron.t;
    mutable c : Owl_neural_neuron.t;
    mutable h : Owl_neural_neuron.t;
    mutable init_typ : Owl_neural_neuron.Init.typ;
    mutable in_shape : int array;
    mutable out_shape : int array;
  }
  val create : ?inputs:int -> int -> Owl_neural_neuron.LSTM.neuron_typ
  val connect : int array -> Owl_neural_neuron.LSTM.neuron_typ -> unit
  val init : Owl_neural_neuron.LSTM.neuron_typ -> unit
  val reset : Owl_neural_neuron.LSTM.neuron_typ -> unit
  val mktag : int -> Owl_neural_neuron.LSTM.neuron_typ -> unit
  val mkpar : Owl_neural_neuron.LSTM.neuron_typ -> Owl_neural_neuron.t array
  val mkpri : Owl_neural_neuron.LSTM.neuron_typ -> Owl_algodiff.S.t array
  val mkadj : Owl_neural_neuron.LSTM.neuron_typ -> Owl_algodiff.S.t array
  val update :
    Owl_neural_neuron.LSTM.neuron_typ -> Owl_algodiff.S.t array -> unit
  val run :
    Owl_algodiff.S.t -> Owl_neural_neuron.LSTM.neuron_typ -> Owl_algodiff.S.t
  val to_string : Owl_neural_neuron.LSTM.neuron_typ -> string
end