 
 /// Returns a tensor with the same shape and scalars as the specified tensor.
 @inlinable
-@differentiable
+@differentiable(where Scalar: TensorFlowFloatingPoint)
 public func identity<Scalar>(_ x: Tensor<Scalar>) -> Tensor<Scalar> {
     return x
 }

    /// - Parameter lowerBounds: The lower bounds at each dimension.
    /// - Parameter upperBounds: The upper bounds at each dimension.
    @inlinable
    @differentiable(wrt: self)
    func slice(lowerBounds: [Int], upperBounds: [Int]) -> Tensor {
        // TODO: Precondition `lowerBounds.count == upperBounds.count`,
        // preferably in graph.

    }

    @inlinable
    @differentiable(wrt: self, vjp: _vjpSubscript where Scalar : TensorFlowFloatingPoint)
    internal subscript(_ indexPath: IndexPath) -> Tensor {
        get {
            return Raw.stridedSlice(
