On 12 January 2015 at 22:21, Thomas Neidhart <thomas.neidh...@gmail.com> wrote: > On 01/12/2015 11:17 PM, Phil Steitz wrote: >> On 1/12/15 2:30 PM, Thomas Neidhart wrote: >>> On 01/12/2015 10:26 PM, Thomas Neidhart wrote: >>>> On 01/12/2015 08:09 PM, Phil Steitz wrote: >>>>> On 1/12/15 11:37 AM, sebb wrote: >>>>>> On 12 January 2015 at 18:11, Phil Steitz <phil.ste...@gmail.com> wrote: >>>>>>> On 1/12/15 10:50 AM, sebb wrote: >>>>>>>> On 11 January 2015 at 22:10, Phil Steitz <phil.ste...@gmail.com> wrote: >>>>>>>>> On 1/11/15 11:19 AM, Phil Steitz wrote: >>>>>>>>>> On 1/10/15 10:49 PM, Phil Steitz wrote: >>>>>>>>>>> On 1/9/15 6:09 PM, sebb wrote: >>>>>>>>>>>> On 10 January 2015 at 01:01, Phil Steitz <phil.ste...@gmail.com> >>>>>>>>>>>> wrote: >>>>>>>>>>>>> On 1/9/15 5:32 PM, sebb wrote: >>>>>>>>>>>>>> On 9 January 2015 at 23:48, sebb <seb...@gmail.com> wrote: >>>>>>>>>>>>>>> Of the last 6 runs, only 1 had a problem with unit test >>>>>>>>>>>>>>> failures. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> All the builds ran on ubuntu3, apart from the failure which ran >>>>>>>>>>>>>>> on H10. >>>>>>>>>>>>>>> This may have some bearing on the result; I don't yet know. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I had a quick look at 2 tests that failed: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> SimpleRegressionTest.testPerfect >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> SimpleRegressionTest.testPerfectNegative >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Although the test case has some instance data, these particular >>>>>>>>>>>>>>> tests >>>>>>>>>>>>>>> do not use any, so it does not look like a concurrency issue in >>>>>>>>>>>>>>> the >>>>>>>>>>>>>>> unit test itself. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> The SimpleRegression class has mutable instance data, but the >>>>>>>>>>>>>>> test >>>>>>>>>>>>>>> cases create their own instance. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I don't know anything about the math functions involved, but it >>>>>>>>>>>>>>> looks >>>>>>>>>>>>>>> as though Infinity might result from getSignificance() if >>>>>>>>>>>>>>> getSlopeStdErr() returns 0, as the latter is used as a divisor. >>>>>>>>>>>>>>> Or if >>>>>>>>>>>>>>> the field sumXX is 0 because that is also used as a divisor. >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Maybe the H10 host has different floating point hardware? >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> I'll try running some more tests on H10. >>>>>>>>>>>>>> the build failed again on H10; exactly the same tests failed as >>>>>>>>>>>>>> before: >>>>>>>>>>>>>> >>>>>>>>>>>>>> This test: >>>>>>>>>>>>>> https://builds.apache.org/job/Commons%20Math%20H10/1/console >>>>>>>>>>>>>> >>>>>>>>>>>>>> Previous failure: >>>>>>>>>>>>>> https://builds.apache.org/job/Commons%20Math/14/console >>>>>>>>>>>>> This is actually a bug. Thanks, sebb (and Jenkins)! >>>>>>>>>>>>> >>>>>>>>>>>>> Has been here since 1.x. What is going on is that the data sets >>>>>>>>>>>>> used in the test cases are set up to be perfect linear >>>>>>>>>>>>> relationships, which should in fact lead to mean square error (and >>>>>>>>>>>>> hence slope standard error) equal to 0. The Jenkins box must be >>>>>>>>>>>>> getting exact 0. The funny thing is the test is there to validate >>>>>>>>>>>>> correct performance for models like this. Its success >>>>>>>>>>>>> unfortunately >>>>>>>>>>>>> depends on poor precision. >>>>>>>>>>>>> >>>>>>>>>>>>> I will open a JIRA for this. I don't think it is a release >>>>>>>>>>>>> blocker >>>>>>>>>>>>> for 3.4.1, as I am sure you would get the same thing in any >>>>>>>>>>>>> earlier >>>>>>>>>>>>> version of [math]. >>>>>>>>>>>> OK good to know. >>>>>>>>>>>> >>>>>>>>>>>> I'll leave the H10 Jenkins job for now to make it easy to retest. >>>>>>>>>>> My first guess here was wrong. The infinities are being handled >>>>>>>>>>> correctly for the JDKs I have. Something must be going awry in the >>>>>>>>>>> t distribution cumulative probability computation for +INF on the >>>>>>>>>>> box that is failing. Is there a way to find out exactly what JDK >>>>>>>>>>> and OS version are being used? >>>>>>>>>> I just committed a test that tests the t distribution computations >>>>>>>>>> directly. It seems to have run clean; but the other test ran clean >>>>>>>>>> too. Is there any way to force the build to use the host that fails? >>>>>>>>> I can't make any sense of what is going on with the Jenkins builds. >>>>>>>>> Clean runs and then lots of errors. This one explains the >>>>>>>>> SimpleRegression "problem" (which is not a problem with that class >>>>>>>>> at least) >>>>>>>>> >>>>>>>>> testCumulativeProbablilityExtremes(org.apache.commons.math3.distribution.TDistributionTest) >>>>>>>>> Time elapsed: 0.001 sec <<< FAILURE! >>>>>>>>> java.lang.AssertionError: expected:<1.0> but was:<-Infinity> >>>>>>>>> at org.junit.Assert.fail(Assert.java:88) >>>>>>>>> at org.junit.Assert.failNotEquals(Assert.java:743) >>>>>>>>> at org.junit.Assert.assertEquals(Assert.java:494) >>>>>>>>> at org.junit.Assert.assertEquals(Assert.java:592) >>>>>>>>> at >>>>>>>>> org.apache.commons.math3.distribution.TDistributionTest.testCumulativeProbablilityExtremes(TDistributionTest.java:109) >>>>>>>>> >>>>>>>>> Earlier runs this ran clean. There is nothing non-deterministic about >>>>>>>>> this test (or quite a few of the others that randomly seem to fail). >>>>>>>>> >>>>>>>>> I wonder if we have a bad cpu or something somewhere. >>>>>>>> AFAICS all the failed builds ran on H10. >>>>>>>> >>>>>>>> IMO it is consistent; the apparent randomness comes from the fact the >>>>>>>> there are several Ubuntu hosts, including H10. >>>>>>> Am I reading it / looking at the wrong one, or did this one succeed? >>>>>>> >>>>>>> https://builds.apache.org/view/All/job/Commons%20Math%20H10/6/ >>>>>>> >>>>>>> That one was right after I added tests confirming that the t >>>>>>> distribution cum prob handles INFs correctly. >>>>>> That did run on H10 and did succeed; I'd not noticed that one before. >>>>>> >>>>>> I think it is still true that the failures have only occurred on H10. >>>>>> >>>>>> However, the latest one is failing: >>>>>> >>>>>> https://builds.apache.org/job/Commons%20Math/24/console >>>>>> >>>>>> This is on H11 - I think that's the first time H11 has been used. >>>>>> >>>>>> I suppose it's possible that H10 and H11 have a common failing, but it >>>>>> seems less likely. >>>>>> >>>>>> I added a bit more debug - showing the value of sumXX - but that seems >>>>>> OK on H11. >>>>>> >>>>>> I just added a bit more debug. >>>>> I am pretty sure the SimpleRegressionTest failure is actually cause >>>>> by the same thing causing the t-distribution test to fail (the >>>>> reason I added that one). >>>>> >>>>> One that is more straightforward to chase is this one, which fails >>>>> pretty consistently when "bad things happen" >>>>> >>>>> testExpInf(org.apache.commons.math3.complex.ComplexTest) Time elapsed: >>>>> 0.001 sec <<< FAILURE! >>>>> java.lang.AssertionError: expected:<0.0> but was:<Infinity> >>>>> at org.junit.Assert.fail(Assert.java:88) >>>>> at org.junit.Assert.failNotEquals(Assert.java:743) >>>>> at org.junit.Assert.assertEquals(Assert.java:494) >>>>> at org.junit.Assert.assertEquals(Assert.java:592) >>>>> at org.apache.commons.math3.TestUtils.assertSame(TestUtils.java:76) >>>>> at org.apache.commons.math3.TestUtils.assertSame(TestUtils.java:84) >>>>> at >>>>> org.apache.commons.math3.complex.ComplexTest.testExpInf(ComplexTest.java:788) >>>>> >>>>> I would wager that what is going on here is 0.0 * -INF = INF. >>>> The output returned by the debug statements added by sebb is: >>>> >>>> expReal=Infinity >>>> cosImag=0.5403023058681398 >>>> sinImag=0.8414709848078965 >>>> result=(Infinity, Infinity) >>>> >>>> while expReal should be -Infinity. >>>> >>>> of course, Math.exp(Infinity) = Infinity. >>> oh stupid mistake, please forget my last post. >>> I messed up expReal with the actual real value. >> >> But it should be 0, since expReal should be exp(-INF) > > just added a few more debug output to the test and the result is: > > real=-Infinity > -real=2147483647 > expReal=Infinity > > according to FastMath.exp(), with these values, the code path should be > as follows: > > if (x < 0.0) { > intVal = (int) -x; > > if (intVal > 746) { > if (hiPrec != null) { > hiPrec[0] = 0.0; > hiPrec[1] = 0.0; > } > --> return 0.0; > } > > > but obviously it doesn't do this. I guess we can only inspect the > generated class files for a potential compiler bug.
That suggests there should be some additional FastMath tests to show the underlying error. Perhaps compare with the basic Math versions where relevant. > Thomas > >> >> Phil >>> >>> Thomas >>> >>>> Thomas >>>> >>>>> >>>>>> I can perhaps change the H10 job to additionally run on H11. >>>>>> >>>>>> >>>>>>> Phi >>>>>>>>> Phil >>>>>>>>> >>>>>>>>> >>>>>>>>>> Phil >>>>>>>>>>> Phil >>>>>>>>>>>>> Phil >>>>>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>>>>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>>>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>>>>>>>>> >>>>>>>>>>>> --------------------------------------------------------------------- >>>>>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>> --------------------------------------------------------------------- >>>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>>>>> >>>>>>>> --------------------------------------------------------------------- >>>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> --------------------------------------------------------------------- >>>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>>> >>>>>> --------------------------------------------------------------------- >>>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>>> >>>>>> >>>>> >>>>> >>>>> --------------------------------------------------------------------- >>>>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>>>> For additional commands, e-mail: dev-h...@commons.apache.org >>>>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >>> For additional commands, e-mail: dev-h...@commons.apache.org >>> >>> >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org >> For additional commands, e-mail: dev-h...@commons.apache.org >> > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org