/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.mahout.math.flavor;
/** A set of matrix structure properties that I denote as "flavor" (by analogy to quarks) */
public interface MatrixFlavor {
/**
* Whether matrix is backed by a native system -- such as java memory, lapack/atlas, Magma etc.
*/
BackEnum getBacking();
/**
* Structure flavors
*/
TraversingStructureEnum getStructure() ;
boolean isDense();
/**
* This default for {@link org.apache.mahout.math.DenseMatrix}-like structures
*/
static final MatrixFlavor DENSELIKE = new FlavorImpl(BackEnum.JVMMEM, TraversingStructureEnum.ROWWISE, true);
/**
* This is default flavor for {@link org.apache.mahout.math.SparseRowMatrix}-like.
*/
static final MatrixFlavor SPARSELIKE = new FlavorImpl(BackEnum.JVMMEM, TraversingStructureEnum.ROWWISE, false);
/**
* This is default flavor for {@link org.apache.mahout.math.SparseMatrix}-like structures, i.e. sparse matrix blocks,
* where few, perhaps most, rows may be missing entirely.
*/
static final MatrixFlavor SPARSEROWLIKE = new FlavorImpl(BackEnum.JVMMEM, TraversingStructureEnum.SPARSEROWWISE, false);
/**
* This is default flavor for {@link org.apache.mahout.math.DiagonalMatrix} and the likes.
*/
static final MatrixFlavor DIAGONALLIKE = new FlavorImpl(BackEnum.JVMMEM, TraversingStructureEnum.VECTORBACKED, false);
static final class FlavorImpl implements MatrixFlavor {
private BackEnum pBacking;
private TraversingStructureEnum pStructure;
private boolean pDense;
public FlavorImpl(BackEnum backing, TraversingStructureEnum structure, boolean dense) {
pBacking = backing;
pStructure = structure;
pDense = dense;
}
@Override
public BackEnum getBacking() {
return pBacking;
}
@Override
public TraversingStructureEnum getStructure() {
return pStructure;
}
@Override
public boolean isDense() {
return pDense;
}
}
}