/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.math.linearalgebra; import java.util.HashMap; import java.util.Map; /** * Factory class for different types of decompositions. */ public final class DecompositionFactory { /** Commons LU decomposition */ public static final String LU_COMMONS_NAME = "LU_COMMONS"; /** Commons QR decomposition */ public static final String QR_COMMONS_NAME = "QR_COMMONS"; /** Colt SV decomposition */ public static final String SV_COLT_NAME = "SV_COLT"; /** Commons SV decomposition */ public static final String SV_COMMONS_NAME = "SV_COMMONS"; /** {@link LUDecompositionCommons} */ public static final Decomposition<?> LU_COMMONS = new LUDecompositionCommons(); /** {@link QRDecompositionCommons} */ public static final Decomposition<?> QR_COMMONS = new QRDecompositionCommons(); /** {@link SVDecompositionColt} */ public static final Decomposition<?> SV_COLT = new SVDecompositionColt(); /** {@link SVDecompositionCommons} */ public static final Decomposition<?> SV_COMMONS = new SVDecompositionCommons(); private static final Map<String, Decomposition<?>> s_staticInstances; private static final Map<Class<?>, String> s_instanceNames; static { s_staticInstances = new HashMap<>(); s_staticInstances.put(LU_COMMONS_NAME, LU_COMMONS); s_staticInstances.put(QR_COMMONS_NAME, QR_COMMONS); s_staticInstances.put(SV_COLT_NAME, SV_COLT); s_staticInstances.put(SV_COMMONS_NAME, SV_COMMONS); s_instanceNames = new HashMap<>(); s_instanceNames.put(LU_COMMONS.getClass(), LU_COMMONS_NAME); s_instanceNames.put(QR_COMMONS.getClass(), QR_COMMONS_NAME); s_instanceNames.put(SV_COLT.getClass(), SV_COLT_NAME); s_instanceNames.put(SV_COMMONS.getClass(), SV_COMMONS_NAME); } private DecompositionFactory() { } /** * Given a name, returns an instance of that decomposition method * @param decompositionName The name of the decomposition method * @return The decomposition method * @throws IllegalArgumentException If the decomposition name is null or there is no decomposition method of that name */ public static Decomposition<?> getDecomposition(final String decompositionName) { final Decomposition<?> decomposition = s_staticInstances.get(decompositionName); if (decomposition != null) { return decomposition; } throw new IllegalArgumentException("Could not get decomposition " + decompositionName); } /** * Given a decomposition method, returns its name * @param decomposition The decomposition method * @return The name of the decomposition method (null if not found) */ public static String getDecompositionName(final Decomposition<?> decomposition) { if (decomposition == null) { return null; } return s_instanceNames.get(decomposition.getClass()); } }