         return d.mDegree
     }
     
+    public var mDegrees: [IntList] {
+        return base.mDegrees
+    }
+    
     public func shifted(_ I: IntList) -> ChainComplexN<n, A, R> {
         return ChainComplexN(base: base.shifted(I), differential: d.shifted(I))
     }

        typealias D = ChainComplexN<n, Dual<A>, R>
        
        let dName = name ?? "\(base.name)^*"
        let dList: [(IntList, [Dual<A>]?)] = base.mDegrees.map { I -> (IntList, [Dual<A>]?) in
            guard let o = self[I] else {
                return (I, nil)
            }

        }
    }
    
    public var bidegrees: [(Int, Int)] {
        return base.bidegrees
    }
    
    public func shifted(_ i: Int, _ j: Int) -> ChainComplex2<A, R> {
        return shifted(IntList(i, j))
    }
