NotStrictlyPositiveException exception when using the DsvReporter

221 views
Skip to first unread message

Florin Trofin

unread,
Oct 2, 2013, 3:49:22 PM10/2/13
to scala...@googlegroups.com
Hello,

I recently discovered ScalaMeter and I have to say that I am impressed by it! Thank you all that contributed to it, you did amazing work!

I need some help with configuring the code correctly for the DsvReporter. I spend hours fiddling with the reporters and the only one I had any luck with was the LoggingReporter. Both DsvReporter and HtmlReporter throw the same exception regardless of the configuration options I tried. Below is my configuration and the exception that is raised:

 override lazy val executor = SeparateJvmsExecutor
    new Executor.Warmer.Default,
    Aggregator.complete(Aggregator.average),
    new Measurer.Default
  )

  val persistor = new SerializationPersistor

  // I also tried:  override lazy val reporter = DsvReporter(',') with exactly the same result
  def reporter: Reporter = Reporter.Composite(
    new RegressionReporter(
      RegressionReporter.Tester.Accepter(),
      RegressionReporter.Historian.Complete() ),
    DsvReporter(','))

Output from the console:
=====================

Sampling 1 measurements in separate JVM invocation 0 - MediaAPIWrite.create_video, Test-0.
Starting warmup.
[GC 19329K->5062K(76416K), 0.0206830 secs]
0. warmup run running time: 38936.049416 (covNoGC: NaN, covGC: NaN)
Ending warmup.
measurements: 4300.285917
measurements: 10264.786127
measurements: 4597.121416
measurements: 34880.456616
measurements: 13195.795346
measurements: 57764.358827
Obtained measurements:
filename -> /media/DATA/media/360-24p-wide.mp4: 4300.286
filename -> /media/DATA/media/480-25p.mp4: 10264.786
filename -> /media/DATA/media/960-30p.mp4: 4597.121
filename -> /media/DATA/media/1024-30p.mp4: 34880.457
filename -> /media/DATA/media/720-30p.mp4: 13195.795
filename -> /media/DATA/media/1080-24p.mp4: 57764.359
[32m- MediaAPIWrite.create_video.Test-0 measurements: [0m

[32m:::Summary of regression test results - Accepter()::: [0m
[32mTest group: MediaAPIWrite.create_video [0m
[32m- MediaAPIWrite.create_video.Test-0 measurements: [0m

[32m Summary: 1 tests passed, 0 tests failed.
Exception in thread "main" org.apache.commons.math3.exception.NotStrictlyPositiveException: degrees of freedom (0)
    at org.apache.commons.math3.distribution.TDistribution.<init>(TDistribution.java:59)
    at org.apache.commons.math3.distribution.TDistribution.<init>(TDistribution.java:74)
    at org.scalameter.utils.Statistics$.org$scalameter$utils$Statistics$$qt(Statistics.scala:188)
    at org.scalameter.utils.Statistics$.confidenceInterval(Statistics.scala:41)
    at org.scalameter.reporting.DsvReporter$$anonfun$org$scalameter$reporting$DsvReporter$$output$1$1.apply(DsvReporter.scala:67)
    at org.scalameter.reporting.DsvReporter$$anonfun$org$scalameter$reporting$DsvReporter$$output$1$1.apply(DsvReporter.scala:56)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
    at org.scalameter.reporting.DsvReporter.org$scalameter$reporting$DsvReporter$$output$1(DsvReporter.scala:56)
    at org.scalameter.reporting.DsvReporter$$anonfun$org$scalameter$reporting$DsvReporter$$reportCurve$1$1.apply(DsvReporter.scala:81)
    at org.scalameter.reporting.DsvReporter$$anonfun$org$scalameter$reporting$DsvReporter$$reportCurve$1$1.apply(DsvReporter.scala:81)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at org.scalameter.reporting.DsvReporter.org$scalameter$reporting$DsvReporter$$reportCurve$1(DsvReporter.scala:81)
    at org.scalameter.reporting.DsvReporter$$anonfun$report$1.apply(DsvReporter.scala:87)
    at org.scalameter.reporting.DsvReporter$$anonfun$report$1.apply(DsvReporter.scala:87)
    at org.scalameter.utils.Tree$$anonfun$foreach$2$$anonfun$apply$1.apply(Tree.scala:13)
    at org.scalameter.utils.Tree$$anonfun$foreach$2$$anonfun$apply$1.apply(Tree.scala:13)
    at org.scalameter.utils.Tree$$anonfun$foreach$1.apply(Tree.scala:12)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at org.scalameter.utils.Tree.foreach(Tree.scala:12)
    at org.scalameter.utils.Tree$$anonfun$foreach$2.apply(Tree.scala:13)
    at org.scalameter.utils.Tree$$anonfun$foreach$2.apply(Tree.scala:13)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at org.scalameter.utils.Tree.foreach(Tree.scala:13)
    at org.scalameter.utils.Tree$$anonfun$foreach$2.apply(Tree.scala:13)
    at org.scalameter.utils.Tree$$anonfun$foreach$2.apply(Tree.scala:13)
    at scala.collection.immutable.List.foreach(List.scala:318)
    at org.scalameter.utils.Tree.foreach(Tree.scala:13)
    at org.scalameter.reporting.DsvReporter.report(DsvReporter.scala:87)
    at org.scalameter.Reporter$Composite$$anonfun$1.apply(Reporter.scala:25)
    at org.scalameter.Reporter$Composite$$anonfun$1.apply(Reporter.scala:25)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
    at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
    at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:34)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
    at scala.collection.AbstractTraversable.map(Traversable.scala:105)
    at org.scalameter.Reporter$Composite.report(Reporter.scala:25)
    at org.scalameter.PerformanceTest$Initialization$class.executeTests(PerformanceTest.scala:47)
    at org.scalameter.PerformanceTest.executeTests(PerformanceTest.scala:10)
    at org.scalameter.PerformanceTest$$anonfun$1.apply$mcZ$sp(PerformanceTest.scala:15)
    at org.scalameter.PerformanceTest$$anonfun$1.apply(PerformanceTest.scala:15)
    at org.scalameter.PerformanceTest$$anonfun$1.apply(PerformanceTest.scala:15)
    at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
    at org.scalameter.PerformanceTest.main(PerformanceTest.scala:14)

Thank you in advance for your help!

Florin

Florin Trofin

unread,
Oct 4, 2013, 2:14:18 AM10/4/13
to scala...@googlegroups.com
Just in case somebody else stumbles into this: the problem was that I was collecting only one sample, you need to increase the number of iterations when doing regression or anything that involves statistics. Not the most obvious description in the error...:-)

F.

Raphael Schweizer

unread,
Feb 5, 2014, 5:20:49 PM2/5/14
to scala...@googlegroups.com
I'm having the same problem:

import org.scalameter.api._

/*
~test-only pkg.NotStrictlyPositiveException
*/
class NotStrictlyPositiveException extends PerformanceTest {

  @transient
  lazy val executor: Executor = SeparateJvmsExecutor(
    new Executor.Warmer.Default,
    Aggregator.complete(Aggregator.min),
    new Measurer.Default)
  @transient
  lazy val reporter: Reporter = Reporter.Composite(
    new LoggingReporter,
    new RegressionReporter(
      RegressionReporter.Tester.Accepter(),
      RegressionReporter.Historian.Complete()),
    HtmlReporter(true))
  @transient
  lazy val persistor: Persistor = SerializationPersistor()

  val count = Gen.range("Count")(1, 10, 1)

  performance of "A" in {
    measure method "1" in {
      using(count) in { c => Thread.sleep(c) }
    }

    measure method "2" in {
      using(count) in { c => Thread.sleep(2*c) }
    }
  }
}

gives in SBT 13.1:

> test-only NotStrictlyPositiveException
[info] ::Benchmark A.1::
[info] cores: 8
[info] hostname: RCH-main
[info] jvm-name: Java HotSpot(TM) 64-Bit Server VM
[info] jvm-vendor: Oracle Corporation
[info] jvm-version: 24.51-b03
[info] os-arch: amd64
[info] os-name: Windows 8
[info] Parameters(Count -> 1): 0.146405
[info] Parameters(Count -> 2): 1.104541
[info] Parameters(Count -> 3): 2.350816
[info] Parameters(Count -> 4): 3.696474
[info] Parameters(Count -> 5): 4.638935
[info] Parameters(Count -> 6): 5.619081
[info] Parameters(Count -> 7): 6.715951
[info] Parameters(Count -> 8): 7.603385
[info] Parameters(Count -> 9): 8.624217
[info] Parameters(Count -> 10): 9.635378
[info] 
[info] 32m- A.1.Test-0 measurements:0m
[info] ::Benchmark A.2::
[info] cores: 8
[info] hostname: RCH-main
[info] jvm-name: Java HotSpot(TM) 64-Bit Server VM
[info] jvm-vendor: Oracle Corporation
[info] jvm-version: 24.51-b03
[info] os-arch: amd64
[info] os-name: Windows 8
[info] Parameters(Count -> 1): 1.132887
[info] Parameters(Count -> 2): 3.11419
[info] Parameters(Count -> 3): 5.611411
[info] Parameters(Count -> 4): 7.731114
[info] Parameters(Count -> 5): 9.711082
[info] Parameters(Count -> 6): 11.606343
[info] Parameters(Count -> 7): 13.678355
[info] Parameters(Count -> 8): 15.413537
[info] Parameters(Count -> 9): 17.192741
[info] Parameters(Count -> 10): 19.693964
[info] 
[info] 32m- A.2.Test-1 measurements:0m
[info] 
[info] 32m:::Summary of regression test results - Accepter():::0m
[info] 32mTest group: A.10m
[info] 32m- A.1.Test-0 measurements:0m
[info] 
[info] 32mTest group: A.20m
[info] 32m- A.2.Test-1 measurements:0m
[info] 
[info] 32m Summary: 2 tests passed, 0 tests failed.0m
Test threw exception: org.apache.commons.math3.exception.NotStrictlyPositiveException: degrees of freedom (0)
org.apache.commons.math3.exception.NotStrictlyPositiveException: degrees of freedom (0)
at org.apache.commons.math3.distribution.TDistribution.<init>(TDistribution.java:92)
at org.apache.commons.math3.distribution.TDistribution.<init>(TDistribution.java:71)
at org.apache.commons.math3.distribution.TDistribution.<init>(TDistribution.java:55)
at org.scalameter.utils.Statistics$.org$scalameter$utils$Statistics$$qt(Statistics.scala:189)
at org.scalameter.utils.Statistics$.confidenceInterval(Statistics.scala:42)
at org.scalameter.reporting.DsvReporter$$anonfun$org$scalameter$reporting$DsvReporter$$output$1$1.apply(DsvReporter.scala:93)
at org.scalameter.reporting.DsvReporter$$anonfun$org$scalameter$reporting$DsvReporter$$output$1$1.apply(DsvReporter.scala:82)
at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:47)
at org.scalameter.reporting.DsvReporter$.org$scalameter$reporting$DsvReporter$$output$1(DsvReporter.scala:82)
at org.scalameter.reporting.DsvReporter$$anonfun$writeCurveData$1.apply(DsvReporter.scala:109)
at org.scalameter.reporting.DsvReporter$$anonfun$writeCurveData$1.apply(DsvReporter.scala:109)
at scala.collection.immutable.List.foreach(List.scala:318)
at org.scalameter.reporting.DsvReporter$.writeCurveData(DsvReporter.scala:109)
at org.scalameter.reporting.HtmlReporter$$anonfun$printTsv$1.apply(HtmlReporter.scala:114)
at org.scalameter.reporting.HtmlReporter$$anonfun$printTsv$1.apply(HtmlReporter.scala:111)
at scala.collection.immutable.Stream.foreach(Stream.scala:547)
at org.scalameter.reporting.HtmlReporter.printTsv(HtmlReporter.scala:111)
at org.scalameter.reporting.HtmlReporter$$anonfun$report$3.apply(HtmlReporter.scala:50)
at org.scalameter.reporting.HtmlReporter$$anonfun$report$3.apply(HtmlReporter.scala:45)
at org.scalameter.reporting.HtmlReporter$.printToFile(HtmlReporter.scala:175)
at org.scalameter.reporting.HtmlReporter.report(HtmlReporter.scala:45)
at org.scalameter.Reporter$Composite$$anonfun$1.apply(Reporter.scala:25)
at org.scalameter.Reporter$Composite$$anonfun$1.apply(Reporter.scala:25)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:244)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.WrappedArray.foreach(WrappedArray.scala:34)
at scala.collection.TraversableLike$class.map(TraversableLike.scala:244)
at scala.collection.AbstractTraversable.map(Traversable.scala:105)
at org.scalameter.Reporter$Composite.report(Reporter.scala:25)
at org.scalameter.PerformanceTest$Initialization$class.executeTests(PerformanceTest.scala:48)
at org.scalameter.PerformanceTest.executeTests(PerformanceTest.scala:10)
at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1$$anonfun$apply$1$$anonfun$apply$2.apply(ScalaMeterFramework.scala:61)
at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1$$anonfun$apply$1$$anonfun$apply$2.apply(ScalaMeterFramework.scala:56)
at org.scalameter.package$MonadicDynVar$$anon$3$$anonfun$foreach$1.apply(package.scala:25)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
at org.scalameter.package$MonadicDynVar$$anon$3.foreach(package.scala:25)
at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1$$anonfun$apply$1.apply(ScalaMeterFramework.scala:56)
at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1$$anonfun$apply$1.apply(ScalaMeterFramework.scala:55)
at org.scalameter.package$MonadicDynVar$$anon$3$$anonfun$foreach$1.apply(package.scala:25)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
at org.scalameter.package$MonadicDynVar$$anon$3.foreach(package.scala:25)
at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1.apply(ScalaMeterFramework.scala:55)
at org.scalameter.ScalaMeterFramework$$anon$1$$anonfun$run$1.apply(ScalaMeterFramework.scala:54)
at org.scalameter.package$MonadicDynVar$$anon$3$$anonfun$foreach$1.apply(package.scala:25)
at scala.util.DynamicVariable.withValue(DynamicVariable.scala:57)
at org.scalameter.package$MonadicDynVar$$anon$3.foreach(package.scala:25)
at org.scalameter.ScalaMeterFramework$$anon$1.run(ScalaMeterFramework.scala:54)
at sbt.RunnerWrapper$1.runRunner2(FrameworkWrapper.java:220)
at sbt.RunnerWrapper$1.execute(FrameworkWrapper.java:233)
at sbt.TestRunner.runTest$1(TestFramework.scala:84)
at sbt.TestRunner.run(TestFramework.scala:94)
at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:224)
at sbt.TestFramework$$anon$2$$anonfun$$init$$1$$anonfun$apply$8.apply(TestFramework.scala:224)
at sbt.TestFramework$.sbt$TestFramework$$withContextLoader(TestFramework.scala:212)
at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:224)
at sbt.TestFramework$$anon$2$$anonfun$$init$$1.apply(TestFramework.scala:224)
at sbt.TestFunction.apply(TestFramework.scala:229)
at sbt.Tests$.sbt$Tests$$processRunnable$1(Tests.scala:211)
at sbt.Tests$$anonfun$makeSerial$1.apply(Tests.scala:217)
at sbt.Tests$$anonfun$makeSerial$1.apply(Tests.scala:217)
at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:45)
at sbt.std.Transform$$anon$3$$anonfun$apply$2.apply(System.scala:45)
at sbt.std.Transform$$anon$4.work(System.scala:64)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
at sbt.Execute$$anonfun$submit$1$$anonfun$apply$1.apply(Execute.scala:237)
at sbt.ErrorHandling$.wideConvert(ErrorHandling.scala:18)
at sbt.Execute.work(Execute.scala:244)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
at sbt.Execute$$anonfun$submit$1.apply(Execute.scala:237)
at sbt.ConcurrentRestrictions$$anon$4$$anonfun$1.apply(ConcurrentRestrictions.scala:160)
at sbt.CompletionService$$anon$2.call(CompletionService.scala:30)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)
[trace] Stack trace suppressed: run 'last test:testOnly' for the full output.
[error] Could not run test NotStrictlyPositiveException: org.apache.commons.math3.exception.NotStrictlyPositiveException: degrees of freedom (0)
[info] ScalaTest
[info] Run completed in 22 seconds, 151 milliseconds.
[info] Total number of tests run: 0
[info] Suites: completed 0, aborted 0
[info] Tests: succeeded 0, failed 0, canceled 0, ignored 0, pending 0
[info] All tests passed.
[error] Error: Total 0, Failed 0, Errors 0, Passed 0
[error] Error during tests:
[error] NotStrictlyPositiveException
[error] (test:testOnly) sbt.TestsFailedException: Tests unsuccessful
[error] Total time: 22 s, completed 05.02.2014 23:19:24

Any ideas?

Thanks
- Raphael

Raphael Schweizer

unread,
Feb 5, 2014, 5:32:51 PM2/5/14
to scala...@googlegroups.com
Yet another reason for this exception: corrupt history data. Deleting the resultDir seems to have solved the issue.

- Raphael
Reply all
Reply to author
Forward
0 new messages