//-------------------------------------------------------------------------
        public virtual void test_curve()
        {
            ParameterizedFunctionalCurveDefinition test = ParameterizedFunctionalCurveDefinition.builder().dayCount(ACT_365F).valueFunction(VALUE_FUNCTION).derivativeFunction(DERIVATIVE_FUNCTION).sensitivityFunction(SENSITIVITY_FUNCTION).initialGuess(INITIAL_PARAMS).name(CURVE_NAME).nodes(NODES).parameterMetadata(PARAM_METADATA).xValueType(ValueType.YEAR_FRACTION).yValueType(ValueType.ZERO_RATE).build();
            DefaultCurveMetadata         metadata       = DefaultCurveMetadata.builder().curveName(CURVE_NAME).xValueType(ValueType.YEAR_FRACTION).yValueType(ValueType.ZERO_RATE).dayCount(ACT_365F).parameterMetadata(PARAM_METADATA).build();
            DoubleArray                  parameters     = DoubleArray.of(1d, 1.5d, -0.5d);
            ParameterizedFunctionalCurve expected       = ParameterizedFunctionalCurve.builder().metadata(metadata).valueFunction(VALUE_FUNCTION).derivativeFunction(DERIVATIVE_FUNCTION).sensitivityFunction(SENSITIVITY_FUNCTION).parameters(parameters).build();

            assertEquals(test.curve(VAL_DATE, metadata, parameters), expected);
        }
        private readonly IList <ParameterMetadata> parameterMetadata;  // derived, not a property

        //-------------------------------------------------------------------------
        /// <summary>
        /// Obtains an instance.
        /// </summary>
        /// <param name="metadata">  the metadata </param>
        /// <param name="parameters">  the parameters </param>
        /// <param name="valueFunction">  the value function </param>
        /// <param name="derivativeFunction">  the derivative function </param>
        /// <param name="sensitivityFunction">  the parameter sensitivity function </param>
        /// <returns> the instance </returns>
        public static ParameterizedFunctionalCurve of(CurveMetadata metadata, DoubleArray parameters, System.Func <DoubleArray, double, double> valueFunction, System.Func <DoubleArray, double, double> derivativeFunction, System.Func <DoubleArray, double, DoubleArray> sensitivityFunction)
        {
            return(ParameterizedFunctionalCurve.builder().metadata(metadata).parameters(parameters).valueFunction(valueFunction).derivativeFunction(derivativeFunction).sensitivityFunction(sensitivityFunction).build());
        }