 (set! *warn-on-reflection* true)
 (set! *unchecked-math* :warn-on-boxed)
 
+;; default to assuming zero parameters
 (extend-protocol cp/PParameters
   Object
 	  (parameters 

        (when (> 0 (long (m/ecount parameters))) (error "Non-zero length for parameter update"))
        m)))

(extend-protocol cp/PGradient
  ;; default to assuming zero parameters
  Object
    (gradient 
      ([m]
        EMPTY-VECTOR)))

(extend-protocol cp/PParameterCount
  Object
    (parameter-count 

;; default training implementation is to:
;; 1. Run forward pass
;; 2. Compute gradient of loss function
;; 3. Run backward pass
(extend-protocol cp/PTraining
  Object
    (train 
