             assert( 0 <= i && i < size.0 )
             assert( 0 <= j && j < size.1 )
             if !a.isZero {
-                data[Coord(i, j)] = a
+                data[Index(i, j)] = a
             }
         }
         self.init(size: size, data: data)

        let bCols = b.data.group{ (e, _) in e.col }
        
        let data =
        Array(bCols).parallelFlatMap { (j, bj) -> [(Coord, R)] in
            bj.flatMap { (b_idx, b) -> [(Coord, 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 ( Coord(i, j), a * b )
                }
            }
        }

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