         }
     }
     
-    public var nonZeroEntries: AnySequence<MatrixEntry<R>> {
-        AnySequence(data.map{ (c, a) in
-            (c.row, c.col, a)
-        })
-    }
-    
     private func mapNonZeroEntries(_ f: (Int, Int, R) -> R) -> Self {
         .init(size: size) { setEntry in
             nonZeroEntries.forEach { (i, j, a) in setEntry(i, j, f(i, j, a)) }


    public subscript(i: Int, j: Int) -> R {
        get {
            data[i, j] ?? .zero
        } set {
            data[i, j] = (newValue.isZero) ? nil : newValue
        }
    }
    

        let bCols = b.data.group{ (e, _) in e.col }
        
        let data =
        Array(bCols).parallelFlatMap { (j, bj) -> [(Index, R)] in
            bj.flatMap { (b_idx, b) -> [(Index, R)] in
                let k = b_idx.row
                guard let ak = aCols[k] else {
                    return []
                }
                return ak.map { (a_idx, a) in
                    let i = a_idx.row
                    return ( Index(i, j), a * b )
                }
            }
        }
