/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.interpolation;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
public final class Interpolator1DFactory {
/** Linear */
public static final String LINEAR = "Linear";
/** Exponential */
public static final String EXPONENTIAL = "Exponential";
/** Log-linear */
public static final String LOG_LINEAR = "LogLinear";
/** Natural cubic spline */
public static final String NATURAL_CUBIC_SPLINE = "NaturalCubicSpline";
/** Barycentric rational function */
public static final String BARYCENTRIC_RATIONAL_FUNCTION = "BarycentricRationalFunction";
/** Polynomial */
public static final String POLYNOMIAL = "Polynomial";
/** Rational function */
public static final String RATIONAL_FUNCTION = "RationalFunction";
/** Step */
public static final String STEP = "Step";
/** Step with the value in the interval equal to the value at the upper bound */
public static final String STEP_UPPER = "StepUpper";
/** Double quadratic */
public static final String DOUBLE_QUADRATIC = "DoubleQuadratic";
/**Monotonicity-Preserving-Cubic-Spline
* @deprecated Use the name PCHIP instead
* */
@Deprecated
public static final String MONOTONIC_CUBIC = "MonotonicityPreservingCubicSpline";
/**Piecewise Cubic Hermite Interpolating Polynomial (PCHIP)*/
public static final String PCHIP = "PCHIP";
/**Modified Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) for yield curves*/
public static final String MOD_PCHIP = "ModifiedPCHIP";
/** Time square */
public static final String TIME_SQUARE = "TimeSquare";
/** Flat extrapolator */
public static final String FLAT_EXTRAPOLATOR = "FlatExtrapolator";
/** Linear extrapolator */
public static final String LINEAR_EXTRAPOLATOR = "LinearExtrapolator";
/** Log-linear extrapolator */
public static final String LOG_LINEAR_EXTRAPOLATOR = "LogLinearExtrapolator";
/** Quadratic polynomial left extrapolator */
public static final String QUADRATIC_LEFT_EXTRAPOLATOR = "QuadraticLeftExtrapolator";
/** Linear extrapolator */
public static final String EXPONENTIAL_EXTRAPOLATOR = "ExponentialExtrapolator";
/** ISDA interpolator */
public static final String ISDA_INTERPOLATOR = "ISDAInterpolator";
/** ISDA extrapolator */
public static final String ISDA_EXTRAPOLATOR = "ISDAExtrapolator";
/** Linear instance */
public static final LinearInterpolator1D LINEAR_INSTANCE = new LinearInterpolator1D();
/** Exponential instance */
public static final ExponentialInterpolator1D EXPONENTIAL_INSTANCE = new ExponentialInterpolator1D();
/** Log-linear instance */
public static final LogLinearInterpolator1D LOG_LINEAR_INSTANCE = new LogLinearInterpolator1D();
/** Natural cubic spline instance */
public static final NaturalCubicSplineInterpolator1D NATURAL_CUBIC_SPLINE_INSTANCE = new NaturalCubicSplineInterpolator1D();
/** Step instance */
public static final StepInterpolator1D STEP_INSTANCE = new StepInterpolator1D();
/** Step-Upper instance */
public static final StepUpperInterpolator1D STEP_UPPER_INSTANCE = new StepUpperInterpolator1D();
/** Double quadratic instance */
public static final DoubleQuadraticInterpolator1D DOUBLE_QUADRATIC_INSTANCE = new DoubleQuadraticInterpolator1D();
/** MonotonicityPreservingCubicSpline
* @deprecated use PCHIP_INSTANCE instead
* */
@Deprecated
public static final PCHIPInterpolator1D MONOTONIC_CUBIC_INSTANCE = new PCHIPInterpolator1D();
/**Piecewise Cubic Hermite Interpolating Polynomial (PCHIP)*/
public static final PCHIPInterpolator1D PCHIP_INSTANCE = new PCHIPInterpolator1D();
/**Modified Piecewise Cubic Hermite Interpolating Polynomial (PCHIP) for yield curves*/
public static final PCHIPYieldCurveInterpolator1D MOD_PCHIP_INSTANCE = new PCHIPYieldCurveInterpolator1D();
/** Time square instance */
public static final TimeSquareInterpolator1D TIME_SQUARE_INSTANCE = new TimeSquareInterpolator1D();
/** Flat extrapolator instance */
public static final FlatExtrapolator1D FLAT_EXTRAPOLATOR_INSTANCE = new FlatExtrapolator1D();
/** Exponential extrapolator instance */
public static final ExponentialExtrapolator1D EXPONENTIAL_EXTRAPOLATOR_INSTANCE = new ExponentialExtrapolator1D();
/**Cubic spline with clamped endpoint conditions*/
public static final String CLAMPED_CUBIC = "ClampedCubicSpline";
/**Instance of cubic spline with clamped endpoint conditions*/
public static final ClampedCubicSplineInterpolator1D CLAMPED_CUBIC_INSTANCE = new ClampedCubicSplineInterpolator1D();
/**Cubic spline with clamped endpoint conditions and monotonicity filter*/
public static final String CLAMPED_CUBIC_MONOTONE = "ClampedCubicSplineWithMonotonicity";
/**Instance of cubic spline with clamped endpoint conditions and monotonicity filter*/
public static final MonotonicityPreservingCubicSplineInterpolator1D CLAMPED_CUBIC_MONOTONE_INSTANCE = new MonotonicityPreservingCubicSplineInterpolator1D(new CubicSplineInterpolator());
/**Cubic spline with clamped endpoint conditions and nonnegativity filter*/
public static final String CLAMPED_CUBIC_NONNEGATIVE = "ClampedCubicSplineWithNonnegativity";
/**Instance of cubic spline with clamped endpoint conditions and nonnegativity filter*/
public static final NonnegativityPreservingCubicSplineInterpolator1D CLAMPED_CUBIC_NONNEGATIVE_INSTANCE = new NonnegativityPreservingCubicSplineInterpolator1D(new CubicSplineInterpolator());
/**Quintic spline with clamped endpoint conditions and monotonicity filter*/
public static final String CLAMPED_QUINTIC_MONOTONE = "ClampedQuinticSplineWithMonotonicity";
/**Instance of quintic spline with clamped endpoint conditions and monotonicity filter*/
public static final MonotonicityPreservingQuinticSplineInterpolator1D CLAMPED_QUINTIC_MONOTONE_INSTANCE = new MonotonicityPreservingQuinticSplineInterpolator1D(new CubicSplineInterpolator());
/**Quintic spline with clamped endpoint conditions and nonnegativity filter*/
public static final String CLAMPED_QUINTIC_NONNEGATIVE = "ClampedQuinticSplineWithNonnegativity";
/**Instance of quintic spline with clamped endpoint conditions nonnegativity filter*/
public static final NonnegativityPreservingQuinticSplineInterpolator1D CLAMPED_QUINTIC_NONNEGATIVE_INSTANCE = new NonnegativityPreservingQuinticSplineInterpolator1D(new CubicSplineInterpolator());
/**Cubic spline with natural endpoint conditions and monotonicity filter*/
public static final String NATURAL_CUBIC_MONOTONE = "NaturalCubicSplineWithMonotonicity";
/**Instance of cubic spline with clamped endpoint conditions and monotonicity filter*/
public static final MonotonicityPreservingCubicSplineInterpolator1D NATURAL_CUBIC_MONOTONE_INSTANCE = new MonotonicityPreservingCubicSplineInterpolator1D(new NaturalSplineInterpolator());
/**Cubic spline with natural endpoint conditions and nonnegativity filter*/
public static final String NATURAL_CUBIC_NONNEGATIVE = "NaturalCubicSplineWithNonnegativity";
/**Instance of cubic spline with clamped endpoint conditions and nonnegativity filter*/
public static final NonnegativityPreservingCubicSplineInterpolator1D NATURAL_CUBIC_NONNEGATIVE_INSTANCE = new NonnegativityPreservingCubicSplineInterpolator1D(new NaturalSplineInterpolator());
/**Quintic spline with natural endpoint conditions and monotonicity filter*/
public static final String NATURAL_QUINTIC_MONOTONE = "NaturalQuinticSplineWithMonotonicity";
/**Instance of quintic spline with clamped endpoint conditions and monotonicity filter*/
public static final MonotonicityPreservingQuinticSplineInterpolator1D NATURAL_QUINTIC_MONOTONE_INSTANCE = new MonotonicityPreservingQuinticSplineInterpolator1D(new NaturalSplineInterpolator());
/**Quintic spline with natural endpoint conditions and nonnegativity filter*/
public static final String NATURAL_QUINTIC_NONNEGATIVE = "NaturalQuinticSplineWithNonnegativity";
/**Instance of quintic spline with clamped endpoint conditions and nonnegativity filter*/
public static final NonnegativityPreservingQuinticSplineInterpolator1D NATURAL_QUINTIC_NONNEGATIVE_INSTANCE = new NonnegativityPreservingQuinticSplineInterpolator1D(new NaturalSplineInterpolator());
/**Cubic spline with not-a-knot endpoint conditions*/
public static final String NOTAKNOT_CUBIC = "NotAKnotCubicSpline";
/**Instance of cubic spline with not-a-knot endpoint conditions*/
public static final NotAKnotCubicSplineInterpolator1D NOTAKNOT_CUBIC_INSTANCE = new NotAKnotCubicSplineInterpolator1D();
/**Cubic spline with not-a-knot endpoint conditions and monotonicity filter*/
public static final String NOTAKNOT_CUBIC_MONOTONE = "NotAKnotCubicSplineWithMonotonicity";
/**Instance of quintic spline with not-a-knot endpoint conditions and monotonicity filter*/
public static final MonotonicityPreservingCubicSplineInterpolator1D NOTAKNOT_CUBIC_MONOTONE_INSTANCE = new MonotonicityPreservingCubicSplineInterpolator1D(new CubicSplineInterpolator());
/**Cubic spline with not-a-knot endpoint conditions and nonnegativity filter*/
public static final String NOTAKNOT_CUBIC_NONNEGATIVE = "NotAKnotCubicSplineWithNonnegativity";
/**Instance of quintic spline with not-a-knot endpoint conditions and nonnegativity filter*/
public static final NonnegativityPreservingCubicSplineInterpolator1D NOTAKNOT_CUBIC_NONNEGATIVE_INSTANCE = new NonnegativityPreservingCubicSplineInterpolator1D(new CubicSplineInterpolator());
/**Quintic spline with not-a-knot endpoint conditions and monotonicity filter*/
public static final String NOTAKNOT_QUINTIC_MONOTONE = "NotAKnotQuinticSplineWithMonotonicity";
/**Instance of quintic spline with not-a-knot endpoint conditions and monotonicity filter*/
public static final MonotonicityPreservingQuinticSplineInterpolator1D NOTAKNOT_QUINTIC_MONOTONE_INSTANCE = new MonotonicityPreservingQuinticSplineInterpolator1D(new CubicSplineInterpolator());
/**Quintic spline with not-a-knot endpoint conditions and nonnegativity filter*/
public static final String NOTAKNOT_QUINTIC_NONNEGATIVE = "NotAKnotQuinticSplineWithNonnegativity";
/**Instance of quintic spline with not-a-knot endpoint conditions and nonnegativity filter*/
public static final NonnegativityPreservingQuinticSplineInterpolator1D NOTAKNOT_QUINTIC_NONNEGATIVE_INSTANCE = new NonnegativityPreservingQuinticSplineInterpolator1D(new CubicSplineInterpolator());
/**Constrained cubic interpolation*/
public static final String CONSTRAINED_CUBIC = "ConstrainedCubicSpline";
/**Instance of constrained cubic interpolation*/
public static final ConstrainedCubicSplineInterpolator1D CONSTRAINED_CUBIC_INSTANCE = new ConstrainedCubicSplineInterpolator1D();
/**Constrained cubic interpolation with monotonicity filter*/
public static final String CONSTRAINED_CUBIC_MONOTONE = "ConstrainedCubicSplineWithMonotonicity";
/**Instance of constrained cubic interpolation with monotonicity filter*/
public static final MonotonicityPreservingCubicSplineInterpolator1D CONSTRAINED_CUBIC_MONOTONE_INSTANCE = new MonotonicityPreservingCubicSplineInterpolator1D(
new ConstrainedCubicSplineInterpolator());
/**Constrained cubic interpolation with nonnegativity filter*/
public static final String CONSTRAINED_CUBIC_NONNEGATIVE = "ConstrainedCubicSplineWithNonnegativity";
/**Instance of constrained cubic interpolation with nonnegativity filter*/
public static final NonnegativityPreservingCubicSplineInterpolator1D CONSTRAINED_CUBIC_NONNEGATIVE_INSTANCE = new NonnegativityPreservingCubicSplineInterpolator1D(
new ConstrainedCubicSplineInterpolator());
/**Akima cubic interpolation*/
public static final String AKIMA_CUBIC = "AkimaCubicSpline";
/**Instance of Akima cubic interpolation*/
public static final SemiLocalCubicSplineInterpolator1D AKIMA_CUBIC_INSTANCE = new SemiLocalCubicSplineInterpolator1D();
/**Akima cubic interpolation with monotonicity filter*/
public static final String AKIMA_CUBIC_MONOTONE = "AkimaCubicSplineWithMonotonicity";
/**Instance of Akima cubic interpolation with monotonicity filter*/
public static final MonotonicityPreservingCubicSplineInterpolator1D AKIMA_CUBIC_MONOTONE_INSTANCE = new MonotonicityPreservingCubicSplineInterpolator1D(new SemiLocalCubicSplineInterpolator());
/**Akima cubic interpolation with nonnegativity filter*/
public static final String AKIMA_CUBIC_NONNEGATIVE = "AkimaCubicSplineWithNonnegativity";
/**Instance of Akima cubic interpolation with nonnegativity filter*/
public static final NonnegativityPreservingCubicSplineInterpolator1D AKIMA_CUBIC_NONNEGATIVE_INSTANCE = new NonnegativityPreservingCubicSplineInterpolator1D(new SemiLocalCubicSplineInterpolator());
/**Monotone convex cubic interpolation*/
public static final String MONOTONE_CONVEX_CUBIC = "MonotoneConvexCubicSpline";
/**Instance of monotone convex cubic interpolation*/
public static final MonotoneConvexSplineInterpolator1D MONOTONE_CONVEX_CUBIC_INSTANCE = new MonotoneConvexSplineInterpolator1D();
/**C2 shape preserving cubic interpolation*/
public static final String C2_SHAPE_PRESERVING_CUBIC = "C2ShapePreservingCubicSpline";
/**Instance of C2 shape preserving cubic interpolation*/
public static final ShapePreservingCubicSplineInterpolator1D C2_SHAPE_PRESERVING_CUBIC_INSTANCE = new ShapePreservingCubicSplineInterpolator1D();
/**Log natural cubic interpolation with monotonicity filter*/
public static final String LOG_NATURAL_CUBIC_MONOTONE = "LogNaturalCubicWithMonotonicity";
/**Instance of log natural cubic interpolation with monotonicity filter*/
public static final LogNaturalCubicMonotonicityPreservingInterpolator1D LOG_NATURAL_CUBIC_MONOTONE_INSTANCE = new LogNaturalCubicMonotonicityPreservingInterpolator1D();
/**Log natural cubic interpolation*/
public static final String LOG_NATURAL_CUBIC = "LogNaturalCubic";
/**Instance of log natural cubic interpolation*/
public static final LogNaturalCubicInterpolator1D LOG_NATURAL_CUBIC_INSTANCE = new LogNaturalCubicInterpolator1D();
/**Log cubic spline with not-a-knot endpoint conditions*/
public static final String LOG_NOTAKNOT_CUBIC = "LogNotAKnotCubic";
/**Instance of log cubic spline with not-a-knot endpoint conditions*/
public static final LogNotAKnotCubicSplineInterpolator1D LOG_NOTAKNOT_CUBIC_INSTANCE = new LogNotAKnotCubicSplineInterpolator1D();
/**Log cubic spline with clamped endpoint conditions*/
public static final String LOG_CLAMPED_CUBIC = "LogClampedCubic";
/**Instance of log cubic spline with clamped endpoint conditions*/
public static final LogClampedCubicSplineInterpolator1D LOG_CLAMPED_CUBIC_INSTANCE = new LogClampedCubicSplineInterpolator1D();
/**Product natural cubic spline*/
public static final String PRODUCT_NATURAL_CUBIC = "ProductNaturalCubic";
/**Instance of product cubic spline*/
public static final ProductPiecewisePolynomialInterpolator1D PRODUCT_NATURAL_CUBIC_INSTANCE = new ProductPiecewisePolynomialInterpolator1D(
new NaturalSplineInterpolator());
/** Product polynomial extrapolator */
public static final String PRODUCT_POLYNOMIAL_EXTRAPOLATOR = "ProductPolynomialExtrapolator";
/** Reciprocal extrapolator */
public static final String RECIPROCAL_EXTRAPOLATOR = "ReciprocalExtrapolator";
/**Square linear interpolation*/
public static final String SQUARE_LINEAR = "SquareLinear";
/**Instance of square linear interpolation*/
public static final SquareLinearInterpolator1D SQUARE_LINEAR_INSTANCE = new SquareLinearInterpolator1D();
private static final Map<String, Interpolator1D> s_staticInstances;
private static final Map<Class<?>, String> s_instanceNames;
static {
final Map<String, Interpolator1D> staticInstances = new HashMap<>();
final Map<Class<?>, String> instanceNames = new HashMap<>();
staticInstances.put(LINEAR, LINEAR_INSTANCE);
instanceNames.put(LinearInterpolator1D.class, LINEAR);
staticInstances.put(EXPONENTIAL, EXPONENTIAL_INSTANCE);
instanceNames.put(ExponentialInterpolator1D.class, EXPONENTIAL);
staticInstances.put(LOG_LINEAR, LOG_LINEAR_INSTANCE);
instanceNames.put(LogLinearInterpolator1D.class, LOG_LINEAR);
staticInstances.put(NATURAL_CUBIC_SPLINE, NATURAL_CUBIC_SPLINE_INSTANCE);
instanceNames.put(NaturalCubicSplineInterpolator1D.class, NATURAL_CUBIC_SPLINE);
staticInstances.put(STEP, STEP_INSTANCE);
instanceNames.put(StepInterpolator1D.class, STEP);
staticInstances.put(STEP_UPPER, STEP_UPPER_INSTANCE);
instanceNames.put(StepUpperInterpolator1D.class, STEP_UPPER);
staticInstances.put(DOUBLE_QUADRATIC, DOUBLE_QUADRATIC_INSTANCE);
instanceNames.put(DoubleQuadraticInterpolator1D.class, DOUBLE_QUADRATIC);
staticInstances.put(MONOTONIC_CUBIC, MONOTONIC_CUBIC_INSTANCE);
instanceNames.put(PCHIPInterpolator1D.class, MONOTONIC_CUBIC);
staticInstances.put(PCHIP, PCHIP_INSTANCE);
instanceNames.put(PCHIPInterpolator1D.class, PCHIP);
staticInstances.put(MOD_PCHIP, MOD_PCHIP_INSTANCE);
instanceNames.put(PCHIPYieldCurveInterpolator1D.class, MOD_PCHIP);
staticInstances.put(TIME_SQUARE, TIME_SQUARE_INSTANCE);
instanceNames.put(TimeSquareInterpolator1D.class, TIME_SQUARE);
staticInstances.put(FLAT_EXTRAPOLATOR, FLAT_EXTRAPOLATOR_INSTANCE);
instanceNames.put(FlatExtrapolator1D.class, FLAT_EXTRAPOLATOR);
staticInstances.put(EXPONENTIAL_EXTRAPOLATOR, EXPONENTIAL_EXTRAPOLATOR_INSTANCE);
instanceNames.put(ExponentialExtrapolator1D.class, EXPONENTIAL_EXTRAPOLATOR);
staticInstances.put(CLAMPED_CUBIC, CLAMPED_CUBIC_INSTANCE);
instanceNames.put(ClampedCubicSplineInterpolator1D.class, CLAMPED_CUBIC);
staticInstances.put(CLAMPED_CUBIC_MONOTONE, CLAMPED_CUBIC_MONOTONE_INSTANCE);
instanceNames.put(MonotonicityPreservingCubicSplineInterpolator1D.class, CLAMPED_CUBIC_MONOTONE);
staticInstances.put(CLAMPED_CUBIC_NONNEGATIVE, CLAMPED_CUBIC_NONNEGATIVE_INSTANCE);
instanceNames.put(NonnegativityPreservingCubicSplineInterpolator1D.class, CLAMPED_CUBIC_NONNEGATIVE);
staticInstances.put(CLAMPED_QUINTIC_MONOTONE, CLAMPED_QUINTIC_MONOTONE_INSTANCE);
instanceNames.put(MonotonicityPreservingQuinticSplineInterpolator1D.class, CLAMPED_QUINTIC_MONOTONE);
staticInstances.put(CLAMPED_QUINTIC_NONNEGATIVE, CLAMPED_QUINTIC_NONNEGATIVE_INSTANCE);
instanceNames.put(NonnegativityPreservingQuinticSplineInterpolator1D.class, CLAMPED_QUINTIC_NONNEGATIVE);
staticInstances.put(NATURAL_CUBIC_MONOTONE, NATURAL_CUBIC_MONOTONE_INSTANCE);
instanceNames.put(MonotonicityPreservingCubicSplineInterpolator1D.class, NATURAL_CUBIC_MONOTONE);
staticInstances.put(NATURAL_CUBIC_NONNEGATIVE, NATURAL_CUBIC_NONNEGATIVE_INSTANCE);
instanceNames.put(NonnegativityPreservingCubicSplineInterpolator1D.class, NATURAL_CUBIC_NONNEGATIVE);
staticInstances.put(NATURAL_QUINTIC_MONOTONE, NATURAL_QUINTIC_MONOTONE_INSTANCE);
instanceNames.put(MonotonicityPreservingQuinticSplineInterpolator1D.class, NATURAL_QUINTIC_MONOTONE);
staticInstances.put(NATURAL_QUINTIC_NONNEGATIVE, NATURAL_QUINTIC_NONNEGATIVE_INSTANCE);
instanceNames.put(NonnegativityPreservingQuinticSplineInterpolator1D.class, NATURAL_QUINTIC_NONNEGATIVE);
staticInstances.put(NOTAKNOT_CUBIC, NOTAKNOT_CUBIC_INSTANCE);
instanceNames.put(NotAKnotCubicSplineInterpolator1D.class, NOTAKNOT_CUBIC);
staticInstances.put(NOTAKNOT_CUBIC_MONOTONE, NOTAKNOT_CUBIC_MONOTONE_INSTANCE);
instanceNames.put(MonotonicityPreservingCubicSplineInterpolator1D.class, NOTAKNOT_CUBIC_MONOTONE);
staticInstances.put(NOTAKNOT_CUBIC_NONNEGATIVE, NOTAKNOT_CUBIC_NONNEGATIVE_INSTANCE);
instanceNames.put(NonnegativityPreservingCubicSplineInterpolator1D.class, NOTAKNOT_CUBIC_NONNEGATIVE);
staticInstances.put(NOTAKNOT_QUINTIC_MONOTONE, NOTAKNOT_QUINTIC_MONOTONE_INSTANCE);
instanceNames.put(MonotonicityPreservingQuinticSplineInterpolator1D.class, NOTAKNOT_QUINTIC_MONOTONE);
staticInstances.put(NOTAKNOT_QUINTIC_NONNEGATIVE, NOTAKNOT_QUINTIC_NONNEGATIVE_INSTANCE);
instanceNames.put(NonnegativityPreservingQuinticSplineInterpolator1D.class, NOTAKNOT_QUINTIC_NONNEGATIVE);
staticInstances.put(CONSTRAINED_CUBIC, CONSTRAINED_CUBIC_INSTANCE);
instanceNames.put(ConstrainedCubicSplineInterpolator1D.class, CONSTRAINED_CUBIC);
staticInstances.put(CONSTRAINED_CUBIC_MONOTONE, CONSTRAINED_CUBIC_MONOTONE_INSTANCE);
instanceNames.put(MonotonicityPreservingCubicSplineInterpolator1D.class, CONSTRAINED_CUBIC_MONOTONE);
staticInstances.put(CONSTRAINED_CUBIC_NONNEGATIVE, CONSTRAINED_CUBIC_NONNEGATIVE_INSTANCE);
instanceNames.put(NonnegativityPreservingCubicSplineInterpolator1D.class, CONSTRAINED_CUBIC_NONNEGATIVE);
staticInstances.put(AKIMA_CUBIC, AKIMA_CUBIC_INSTANCE);
instanceNames.put(SemiLocalCubicSplineInterpolator1D.class, AKIMA_CUBIC);
staticInstances.put(AKIMA_CUBIC_MONOTONE, AKIMA_CUBIC_MONOTONE_INSTANCE);
instanceNames.put(MonotonicityPreservingCubicSplineInterpolator1D.class, AKIMA_CUBIC_MONOTONE);
staticInstances.put(AKIMA_CUBIC_NONNEGATIVE, AKIMA_CUBIC_NONNEGATIVE_INSTANCE);
instanceNames.put(NonnegativityPreservingCubicSplineInterpolator1D.class, AKIMA_CUBIC_NONNEGATIVE);
staticInstances.put(MONOTONE_CONVEX_CUBIC, MONOTONE_CONVEX_CUBIC_INSTANCE);
instanceNames.put(MonotoneConvexSplineInterpolator1D.class, MONOTONE_CONVEX_CUBIC);
staticInstances.put(C2_SHAPE_PRESERVING_CUBIC, C2_SHAPE_PRESERVING_CUBIC_INSTANCE);
instanceNames.put(ShapePreservingCubicSplineInterpolator1D.class, C2_SHAPE_PRESERVING_CUBIC);
staticInstances.put(LOG_NATURAL_CUBIC_MONOTONE, LOG_NATURAL_CUBIC_MONOTONE_INSTANCE);
instanceNames.put(LogNaturalCubicMonotonicityPreservingInterpolator1D.class, LOG_NATURAL_CUBIC_MONOTONE);
staticInstances.put(LOG_NATURAL_CUBIC, LOG_NATURAL_CUBIC_INSTANCE);
instanceNames.put(LogNaturalCubicInterpolator1D.class, LOG_NATURAL_CUBIC);
staticInstances.put(LOG_NOTAKNOT_CUBIC, LOG_NOTAKNOT_CUBIC_INSTANCE);
instanceNames.put(LogNotAKnotCubicSplineInterpolator1D.class, LOG_NOTAKNOT_CUBIC);
staticInstances.put(LOG_CLAMPED_CUBIC, LOG_CLAMPED_CUBIC_INSTANCE);
instanceNames.put(LogClampedCubicSplineInterpolator1D.class, LOG_CLAMPED_CUBIC);
staticInstances.put(PRODUCT_NATURAL_CUBIC, PRODUCT_NATURAL_CUBIC_INSTANCE);
instanceNames.put(ProductPiecewisePolynomialInterpolator1D.class, PRODUCT_NATURAL_CUBIC);
staticInstances.put(SQUARE_LINEAR, SQUARE_LINEAR_INSTANCE);
instanceNames.put(SquareLinearInterpolator1D.class, SQUARE_LINEAR);
s_staticInstances = new HashMap<>(staticInstances);
s_instanceNames = new HashMap<>(instanceNames);
}
private Interpolator1DFactory() {
}
public static Interpolator1D getInterpolator(final String interpolatorName) {
final Interpolator1D interpolator = s_staticInstances.get(interpolatorName);
if (interpolator != null) {
return interpolator;
}
// TODO kirk 2009-12-30 -- Deal with degree for Barycentric, Polynomial, and
// RationalFunction
throw new IllegalArgumentException("Interpolator not handled: " + interpolatorName);
}
public static String getInterpolatorName(final Interpolator1D interpolator) {
if (interpolator == null) {
return null;
}
final String interpolatorName = s_instanceNames.get(interpolator.getClass());
// TODO kirk 2010-03-31 -- Deal with the more complicated rules for
// Barycentric, Polynomial, and RationalFunction.
if (interpolator instanceof LinearExtrapolator1D) {
return LINEAR_EXTRAPOLATOR;
}
if (interpolator instanceof LogLinearExtrapolator1D) {
return LOG_LINEAR_EXTRAPOLATOR;
}
if (interpolator instanceof QuadraticPolynomialLeftExtrapolator) {
return QUADRATIC_LEFT_EXTRAPOLATOR;
}
if (interpolator instanceof ReciprocalExtrapolator1D) {
return RECIPROCAL_EXTRAPOLATOR;
}
if (interpolator instanceof ProductPolynomialExtrapolator1D) {
return PRODUCT_POLYNOMIAL_EXTRAPOLATOR;
}
return interpolatorName;
}
}