From 997cd1d0efefe88890730aa57345d109b9d4af1c Mon Sep 17 00:00:00 2001 From: songc Date: Tue, 27 Oct 2026 01:13:41 +0800 Subject: [PATCH 1/3] MATH-1679: Reject equal finite mapping bounds --- .../scalar/MultivariateFunctionMappingAdapter.java | 3 +++ .../scalar/MultivariateFunctionMappingAdapterTest.java | 8 ++++++++ 2 files changed, 11 insertions(+) diff --git a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapter.java b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapter.java index 50cfaa2d82..56aaab09b9 100644 --- a/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapter.java +++ b/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapter.java @@ -108,6 +108,9 @@ public MultivariateFunctionMappingAdapter(final MultivariateFunction bounded, if (!(upper[i] >= lower[i])) { throw new NumberIsTooSmallException(upper[i], lower[i], true); } + if (upper[i] == lower[i] && !Double.isInfinite(lower[i])) { + throw new NumberIsTooSmallException(upper[i], lower[i], false); + } } this.bounded = bounded; diff --git a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapterTest.java b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapterTest.java index a57e9312a2..9ea7ac6527 100644 --- a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapterTest.java +++ b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapterTest.java @@ -17,6 +17,7 @@ package org.apache.commons.math4.legacy.optim.nonlinear.scalar; import org.apache.commons.math4.legacy.analysis.MultivariateFunction; +import org.apache.commons.math4.legacy.exception.NumberIsTooSmallException; import org.apache.commons.math4.legacy.optim.InitialGuess; import org.apache.commons.math4.legacy.optim.MaxEval; import org.apache.commons.math4.legacy.optim.PointValuePair; @@ -27,6 +28,13 @@ import org.junit.Test; public class MultivariateFunctionMappingAdapterTest { + @Test(expected = NumberIsTooSmallException.class) + public void testEqualBoundsRejected() { + new MultivariateFunctionMappingAdapter(point -> 0.0, + new double[] { 2.0 }, + new double[] { 2.0 }); + } + @Test public void testStartSimplexInsideRange() { final BiQuadratic biQuadratic = new BiQuadratic(2.0, 2.5, 1.0, 3.0, 2.0, 3.0); From 1a060dd749ebc675fa4a772c02cad2ceacb99bf7 Mon Sep 17 00:00:00 2001 From: songc Date: Tue, 27 Oct 2026 08:44:05 +0800 Subject: [PATCH 2/3] MATH-1679: Cover infinite mapping bounds --- .../MultivariateFunctionMappingAdapterTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapterTest.java b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapterTest.java index 9ea7ac6527..1b08de824f 100644 --- a/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapterTest.java +++ b/commons-math-legacy/src/test/java/org/apache/commons/math4/legacy/optim/nonlinear/scalar/MultivariateFunctionMappingAdapterTest.java @@ -35,6 +35,21 @@ public void testEqualBoundsRejected() { new double[] { 2.0 }); } + @Test + public void testEqualInfiniteBoundsRemainUnbounded() { + final MultivariateFunctionMappingAdapter negative = + new MultivariateFunctionMappingAdapter(point -> point[0], + new double[] { Double.NEGATIVE_INFINITY }, + new double[] { Double.NEGATIVE_INFINITY }); + final MultivariateFunctionMappingAdapter positive = + new MultivariateFunctionMappingAdapter(point -> point[0], + new double[] { Double.POSITIVE_INFINITY }, + new double[] { Double.POSITIVE_INFINITY }); + + Assert.assertEquals(3.0, negative.value(new double[] { 3.0 }), 0.0); + Assert.assertEquals(3.0, positive.value(new double[] { 3.0 }), 0.0); + } + @Test public void testStartSimplexInsideRange() { final BiQuadratic biQuadratic = new BiQuadratic(2.0, 2.5, 1.0, 3.0, 2.0, 3.0); From 0b2df80d147886489f5a4ea8a835c6c83303f76e Mon Sep 17 00:00:00 2001 From: songc Date: Tue, 27 Oct 2026 16:53:52 +0800 Subject: [PATCH 3/3] MATH-1679: Relax FFT test tolerance for 64-point transform --- .../commons/math4/transform/FastFourierTransformerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/commons-math-transform/src/test/java/org/apache/commons/math4/transform/FastFourierTransformerTest.java b/commons-math-transform/src/test/java/org/apache/commons/math4/transform/FastFourierTransformerTest.java index 1f746aa12b..48960dea7f 100644 --- a/commons-math-transform/src/test/java/org/apache/commons/math4/transform/FastFourierTransformerTest.java +++ b/commons-math-transform/src/test/java/org/apache/commons/math4/transform/FastFourierTransformerTest.java @@ -317,7 +317,7 @@ public void testStandardTransformReal() { doTestTransformReal(8, 1e-13, 2 * EPSILON, norm[i], type); doTestTransformReal(16, 1e-13, 2 * EPSILON, norm[i], type); doTestTransformReal(32, 1e-12, 4 * EPSILON, norm[i], type); - doTestTransformReal(64, 1e-12, 4 * EPSILON, norm[i], type); + doTestTransformReal(64, 1e-12, 8 * EPSILON, norm[i], type); doTestTransformReal(128, 1e-11, 8 * EPSILON, norm[i], type); } }