anchor.diff:        (loop for i below (chunk-size (chunk1 cloud)) do
               (setf (matlisp:matrix-ref weights i i) #.(flt 0))))))
   
  -(defmethod activate-cloud ((cloud full-cloud) reversep)
  -  (declare (optimize (speed 3) #.*no-array-bounds-check*))
  +(defmethod activate-cloud* ((cloud full-cloud) reversep from-fn to-fn)
     (if (not reversep)
         (let ((weights (weights cloud))
  -            (from (old-nodes (chunk1 cloud)))
  -            (to (nodes (chunk2 cloud)))
  +            (from (funcall from-fn (chunk1 cloud)))
  +            (to (funcall to-fn (chunk2 cloud)))
               (scale (scale2 cloud)))
  -        (declare (type flt scale))
  +        (declare (type flt scale)
  +                 (optimize (speed 3) #.*no-array-bounds-check*))
           (if (use-blas-on-chunk-p (cost-of-gemm weights from :nn)
                                    (chunk1 cloud))
               (matlisp:gemm! scale weights from (flt 1) to)
  
positive.code: (defgeneric zero-weight-to-self (cloud)
    (:documentation "In a BM W_{i,i} is always zero."))
  
  (defmethod activate-cloud :before (cloud reversep)
    (zero-weight-to-self cloud))
  
  ;;; Return the chunk of CLOUD that's among CHUNKS and the other chunk
  
negative.code:                       (incf (aref to j)
                              (* x (aref weights weight-index))))))))))
        (let ((weights (weights cloud))
              (from (funcall from-fn (chunk2 cloud)))
              (to (funcall to-fn (chunk1 cloud)))
              (scale (scale1 cloud)))
          (declare (type flt scale)
                   (optimize (speed 3) #.*no-array-bounds-check*))
          (if (use-blas-on-chunk-p (cost-of-gemm weights from :tn)
                                   (chunk1 cloud))
              (matlisp:gemm! scale weights from (flt 1) to :tn)
  