 
 (defprotocol PGradient
   "Protocol for a module that supports accumulated gradients for optimisation. This vector should be exactly the
-   same length as the parameter vector.
-   The default implementation returns an empty gradient vector."
+  same length as the parameter vector.
+  The default implementation returns an empty gradient vector."
   (gradient [m]
     "Gets the accumulated gradient for this module, as a vector."))
 

  "Protocol for a generic module. All cortex.nn modules must implement this."
  (calc [m input]
    "Performs module calculation, returning an updated module that includes the output and
     any intermediate states computed.")
  (output [m]
    "Returns the calculated output of a module"))



(defprotocol PNeuralTrainingOptional
  "Some layers will want to do things before the forward pass like update random number buffers.
  This allows things like dropout to play well with gradient checking in that prepare-forward can
  be called once but forward can be called multiple times (normally 1 + 2 * n-params)."
  (prepare-forward [this]))


