 }
 
 public extension Tensor where Scalar : BinaryFloatingPoint,
-                       Scalar.RawSignificand : FixedWidthInteger {
-    @differentiable(wrt: (self) where Scalar : Differentiable)
-    func droppedOut(withProbability probability: Double) -> Tensor {
+                              Scalar.RawSignificand : FixedWidthInteger {
+    @differentiable(wrt: self where Scalar : Differentiable)
+    func droppingOut(probability: Double) -> Tensor {
         let noise = Tensor(randomUniform: shape)
         let keepMask = noise .>= Scalar(probability)
         let keepProbability = Scalar(1.0 - probability)

    }

    @differentiable(wrt: (self, input))
    func applyTraining(to input: Tensor<Scalar>) -> Tensor<Scalar> {
        return input.droppedOut(withProbability: probability)
    }

    @differentiable(wrt: (self, input))
    func applyInference(to input: Tensor<Scalar>) -> Tensor<Scalar> {
        return input
    }


/// need to be toggled or threaded through in more than one place.
public class LearningPhaseIndicator {
    public var training: Bool = true
    public init() { }
}

/// A mutable, shareable reference to a tensor
