         let bRows = b.data.group{ (e, _) in e.row }
         
         let data =
-        Array(aRows).parallelFlatMap { (i, ai) -> [(Coord, R)] in
-            ai.flatMap { (a_idx, a) -> [(Coord, R)] in
+        Array(aRows).parallelFlatMap { (i, ai) -> [(Index, R)] in
+            ai.flatMap { (a_idx, a) -> [(Index, R)] in
                 let k = a_idx.col
                 guard let bk = bRows[k] else {
                     return []
                 }
                 return bk.map { (b_idx, b) in
                     let j = b_idx.col
-                    return ( Coord(i, j), a * b )
+                    return ( Index(i, j), a * b )
                 }
             }
         }

        data.count
    }
    
    public var nonZeroComponents: AnySequence<(row: Int, col: Int, value: R)> {
        AnySequence( data.lazy.map{ (c, a) -> MatrixEntry<R> in (c.row, c.col, a) } )
    }
    
    public var isZero: Bool {

        }
    }
    
    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)) }
