úο     None&'ST+ To define a sparseT dimension we need a cumulative array, an index array and a dimensionality parameter To define a dense4 dimension we only need the dimensionality parameterNone&'ST ³A statically-typed tensor shape parameter that supports both sparse and dense dimensions. Dimensions are indexed with Int32 indices, which should be enough for most applications. #Constructor for a dense dimension #Constructor for a sparse dimension +Rank of a shape (i.e. number of dimensions)3Dimension of a shape (i.e. list of dimension sizes))Shape of a dense rank-2 tensor (a matrix)MShape of a rank-2 CSR tensor (dense in the first index, sparse in the second)5Shape of a rank-2 COO tensor (sparse in both indices)  None&'3STà The  9 type. Tensor data entries are stored as one single array/IN: Tensor reduction syntax (Einstein notation).OUT: stride program (how to read/write memory)Ytaco compiles a tensor expression (e.g. C = A_{ijk}B_{k} ) into a series of nested loops.*dimensions : can be either dense or sparse%internally, tensor data is stored in dense vectors,"contract A_{ijk}B_{k} over the third index"@A generic tensor type, polymorphic in the container type as well 8Construct a tensor given a shape and a vector of entriesAccess the shape of a tensor!Number of nonzero tensor elements     !None &'<>?FST$"tensor elements may be indexed#sparse vector union as 2-way merge$sparse vector component-wise intersection as 2-way merge%AND&OR'()*"+,-./01#$2345%&6789:'()*".-,+/0;        !"!#$%&'(())*+,-./0123456789:#taco-0.1.0.0-HX3MjVDRhp3Fze1wIPgMho Data.TensorData.Dim Data.ShapeData.TensorTestSdsCmlsIdxsDimDddDimShZDSTensorTshapennz $fShowTensor $fEqTensor$fFunctorTensorrankdimmkD2mkCSRmkCOOCOOCSRD2D1:.:#GTensormkTElemspUnion spIntersect conjunction disjunctionE2E1prodprojEvIxExpLiftspUnion'spAddspMulv0v1sumMaybe prodMaybechunks chunksWhile chunksWhile'