 
   public func gathering(atIndices indices: Tensor<Int64>) -> Self {
     var result = self
+    for kp in result.recursivelyAllWritableKeyPaths(to: Tensor<UInt8>.self) {
+      result[keyPath: kp] = result[keyPath: kp].gathering(atIndices: indices)
+    }
     for kp in result.recursivelyAllWritableKeyPaths(to: Tensor<Int32>.self) {
       result[keyPath: kp] = result[keyPath: kp].gathering(atIndices: indices)
     }


  public func unstacked() -> [Self] {
    var result = [Self]()
    for kp in recursivelyAllWritableKeyPaths(to: Tensor<Int32>.self) {
      let unstacked = self[keyPath: kp].unstacked()
      if result.isEmpty {

  }
}

extension Tensor where Scalar: TensorFlowFloatingPoint {
  public mutating func update(using other: Tensor, forgetFactor: Float) {
    let forgetFactor = Scalar(forgetFactor)
