imagej / imagej-ops

ImageJ Ops: "Write once, run anywhere" image processing
https://imagej.net/libs/imagej-ops
BSD 2-Clause "Simplified" License
88 stars 42 forks source link

Missing needed ops for element-wise arithmetic #609

Open ctrueden opened 5 years ago

ctrueden commented 5 years ago

The following script:

#@ OpService ops
#@ Dataset im1
#@ Dataset im2
#@ double alpha
#@output Dataset result

vars = [
    "im1": im1,
    "im2": im2,
    "alpha": alpha
]
result = ops.eval("alpha*im1+(1-alpha)*im2", vars)

fails with the following error:

java.lang.IllegalArgumentException: No matching 'math.multiply' op

Request:
-   math.multiply(
        Double,
        DefaultDataset)
Full details of the error ``` Candidates: 1. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyByte( ==> ArrayImg arg, byte value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 2. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyDouble( ==> ArrayImg arg, double value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 3. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyFloat( ==> ArrayImg arg, float value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 4. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyInt( ==> ArrayImg arg, int value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 5. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyLong( ==> ArrayImg arg, long value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 6. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyShort( ==> ArrayImg arg, short value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 7. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyUnsignedByte( ==> ArrayImg arg, byte value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 8. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyUnsignedInt( ==> ArrayImg arg, int value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 9. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyUnsignedLong( ==> ArrayImg arg, long value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 10. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$MultiplyUnsignedShort( ==> ArrayImg arg, short value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 11. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyByte( ==> ArrayImg arg, byte value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 12. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyDouble( ==> ArrayImg arg, double value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 13. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyFloat( ==> ArrayImg arg, float value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 14. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyInt( ==> ArrayImg arg, int value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 15. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyLong( ==> ArrayImg arg, long value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 16. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyShort( ==> ArrayImg arg, short value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 17. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyUnsignedByte( ==> ArrayImg arg, byte value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 18. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyUnsignedInt( ==> ArrayImg arg, int value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 19. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyUnsignedLong( ==> ArrayImg arg, long value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 20. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$MultiplyUnsignedShort( ==> ArrayImg arg, short value) Inconvertible type: java.lang.Double => net.imglib2.img.array.ArrayImg 21. (IterableInterval out?) = net.imagej.ops.math.IIToIIOutputII$Multiply( IterableInterval out?, ==> IterableInterval in1, IterableInterval in2) Inconvertible type: java.lang.Double => net.imglib2.IterableInterval> 22. (NumericType out?) = net.imagej.ops.math.NumericTypeBinaryMath$Multiply( NumericType out?, ==> NumericType in1, NumericType in2) Inconvertible type: java.lang.Double => capture of ? 23. (int result) = net.imagej.ops.math.PrimitiveMath$IntegerMultiply( int a, ==> int b) Inconvertible type: net.imagej.DefaultDataset => int 24. (long result) = net.imagej.ops.math.PrimitiveMath$LongMultiply( long a, ==> long b) Inconvertible type: net.imagej.DefaultDataset => long 25. (float result) = net.imagej.ops.math.PrimitiveMath$FloatMultiply( float a, ==> float b) Inconvertible type: net.imagej.DefaultDataset => float 26. (double result) = net.imagej.ops.math.PrimitiveMath$DoubleMultiply( double a, ==> double b) Inconvertible type: net.imagej.DefaultDataset => double 27. (RealType out) = net.imagej.ops.math.BinaryRealTypeMath$Multiply( RealType out, RealType in1, RealType in2) Not enough arguments: 2 < 3 28. (IterableInterval out?) = net.imagej.ops.math.ConstantToIIOutputII$Multiply( IterableInterval out?, ==> IterableInterval in, NumericType value) Inconvertible type: java.lang.Double => net.imglib2.IterableInterval> 29. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyByte( ==> PlanarImg arg, byte value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 30. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyDouble( ==> PlanarImg arg, double value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 31. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyFloat( ==> PlanarImg arg, float value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 32. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyInt( ==> PlanarImg arg, int value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 33. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyLong( ==> PlanarImg arg, long value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 34. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyShort( ==> PlanarImg arg, short value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 35. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyUnsignedByte( ==> PlanarImg arg, byte value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 36. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyUnsignedInt( ==> PlanarImg arg, int value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 37. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyUnsignedLong( ==> PlanarImg arg, long value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 38. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$MultiplyUnsignedShort( ==> PlanarImg arg, short value) Inconvertible type: java.lang.Double => net.imglib2.img.planar.PlanarImg 39. (IterableInterval out?) = net.imagej.ops.math.IIToRAIOutputII$Multiply( IterableInterval out?, ==> IterableInterval in1, RandomAccessibleInterval in2) Inconvertible type: java.lang.Double => net.imglib2.IterableInterval> 40. (RandomAccessibleInterval out) = net.imagej.ops.math.ConstantToIIOutputRAI$Multiply( RandomAccessibleInterval out, IterableInterval in, NumericType value) Not enough arguments: 2 < 3 at net.imagej.ops.DefaultOpMatchingService.singleMatch(DefaultOpMatchingService.java:432) at net.imagej.ops.DefaultOpMatchingService.findMatch(DefaultOpMatchingService.java:97) at net.imagej.ops.DefaultOpMatchingService.findMatch(DefaultOpMatchingService.java:83) at net.imagej.ops.OpEnvironment.module(OpEnvironment.java:253) at net.imagej.ops.OpEnvironment.run(OpEnvironment.java:136) at net.imagej.ops.eval.OpEvaluator.execute(OpEvaluator.java:147) at net.imagej.ops.eval.OpEvaluator.execute(OpEvaluator.java:135) at net.imagej.ops.eval.OpEvaluator.mul(OpEvaluator.java:257) at org.scijava.parse.eval.AbstractStandardStackEvaluator.execute(AbstractStandardStackEvaluator.java:214) at net.imagej.ops.eval.OpEvaluator.execute(OpEvaluator.java:405) at org.scijava.parse.eval.AbstractStackEvaluator.evaluate(AbstractStackEvaluator.java:70) at org.scijava.parse.eval.AbstractEvaluator.evaluate(AbstractEvaluator.java:87) at net.imagej.ops.eval.DefaultEval.calculate(DefaultEval.java:69) at net.imagej.ops.eval.DefaultEval.calculate(DefaultEval.java:51) at net.imagej.ops.special.function.UnaryFunctionOp.run(UnaryFunctionOp.java:74) at net.imagej.ops.special.function.AbstractUnaryFunctionOp.run(AbstractUnaryFunctionOp.java:58) at org.scijava.command.CommandModule.run(CommandModule.java:199) at net.imagej.ops.OpEnvironment.run(OpEnvironment.java:950) at net.imagej.ops.OpEnvironment.run(OpEnvironment.java:157) at net.imagej.ops.OpEnvironment.eval(OpEnvironment.java:335) at net.imagej.ops.OpEnvironment$eval.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) at Script1.run(Script1.groovy:12) at org.scijava.plugins.scripting.groovy.GroovyScriptEngine.eval(GroovyScriptEngine.java:303) at org.scijava.plugins.scripting.groovy.GroovyScriptEngine.eval(GroovyScriptEngine.java:122) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) at org.scijava.script.ScriptModule.run(ScriptModule.java:160) at org.scijava.module.ModuleRunner.run(ModuleRunner.java:168) at org.scijava.module.ModuleRunner.call(ModuleRunner.java:127) at org.scijava.module.ModuleRunner.call(ModuleRunner.java:66) at org.scijava.thread.DefaultThreadService$3.call(DefaultThreadService.java:238) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) ```

Switching the order of the arguments of * instead yields:

java.lang.IllegalArgumentException: No matching 'math.add' op

Request:
-   math.add(
        PlanarImg,
        PlanarImg)
Full details of the error ``` Candidates: 1. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddByte( ==> ArrayImg arg, byte value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 2. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddDouble( ==> ArrayImg arg, double value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 3. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddFloat( ==> ArrayImg arg, float value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 4. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddInt( ==> ArrayImg arg, int value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 5. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddLong( ==> ArrayImg arg, long value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 6. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddShort( ==> ArrayImg arg, short value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 7. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddUnsignedByte( ==> ArrayImg arg, byte value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 8. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddUnsignedInt( ==> ArrayImg arg, int value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 9. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddUnsignedLong( ==> ArrayImg arg, long value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 10. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImageP$AddUnsignedShort( ==> ArrayImg arg, short value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 11. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddByte( ==> ArrayImg arg, byte value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 12. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddDouble( ==> ArrayImg arg, double value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 13. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddFloat( ==> ArrayImg arg, float value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 14. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddInt( ==> ArrayImg arg, int value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 15. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddLong( ==> ArrayImg arg, long value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 16. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddShort( ==> ArrayImg arg, short value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 17. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddUnsignedByte( ==> ArrayImg arg, byte value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 18. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddUnsignedInt( ==> ArrayImg arg, int value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 19. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddUnsignedLong( ==> ArrayImg arg, long value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 20. (ArrayImg arg) = net.imagej.ops.math.ConstantToArrayImage$AddUnsignedShort( ==> ArrayImg arg, short value) Inconvertible type: net.imglib2.img.planar.PlanarImg => net.imglib2.img.array.ArrayImg 21. (IterableInterval out?) = net.imagej.ops.math.IIToIIOutputII$Add( IterableInterval out?, IterableInterval in1, IterableInterval in2) Inputs do not conform to op rules out = null in1 = PlanarImg [512x512] in2 = PlanarImg [720x576] 22. (NumericType out?) = net.imagej.ops.math.NumericTypeBinaryMath$Add( NumericType out?, ==> NumericType in1, NumericType in2) Inconvertible type: net.imglib2.img.planar.PlanarImg => capture of ? 23. (int result) = net.imagej.ops.math.PrimitiveMath$IntegerAdd( ==> int a, int b) Inconvertible type: net.imglib2.img.planar.PlanarImg => int 24. (long result) = net.imagej.ops.math.PrimitiveMath$LongAdd( ==> long a, long b) Inconvertible type: net.imglib2.img.planar.PlanarImg => long 25. (float result) = net.imagej.ops.math.PrimitiveMath$FloatAdd( ==> float a, float b) Inconvertible type: net.imglib2.img.planar.PlanarImg => float 26. (double result) = net.imagej.ops.math.PrimitiveMath$DoubleAdd( ==> double a, double b) Inconvertible type: net.imglib2.img.planar.PlanarImg => double 27. (RealType out) = net.imagej.ops.math.BinaryRealTypeMath$Add( RealType out, RealType in1, RealType in2) Not enough arguments: 2 < 3 28. (IterableInterval out?) = net.imagej.ops.math.ConstantToIIOutputII$Add( IterableInterval out?, IterableInterval in, ==> NumericType value) Inconvertible type: net.imglib2.img.planar.PlanarImg => capture of ? 29. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddByte( PlanarImg arg, ==> byte value) Inconvertible type: net.imglib2.img.planar.PlanarImg => byte 30. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddDouble( PlanarImg arg, ==> double value) Inconvertible type: net.imglib2.img.planar.PlanarImg => double 31. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddFloat( PlanarImg arg, ==> float value) Inconvertible type: net.imglib2.img.planar.PlanarImg => float 32. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddInt( PlanarImg arg, ==> int value) Inconvertible type: net.imglib2.img.planar.PlanarImg => int 33. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddLong( PlanarImg arg, ==> long value) Inconvertible type: net.imglib2.img.planar.PlanarImg => long 34. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddShort( PlanarImg arg, ==> short value) Inconvertible type: net.imglib2.img.planar.PlanarImg => short 35. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddUnsignedByte( PlanarImg arg, ==> byte value) Inconvertible type: net.imglib2.img.planar.PlanarImg => byte 36. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddUnsignedInt( PlanarImg arg, ==> int value) Inconvertible type: net.imglib2.img.planar.PlanarImg => int 37. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddUnsignedLong( PlanarImg arg, ==> long value) Inconvertible type: net.imglib2.img.planar.PlanarImg => long 38. (PlanarImg arg) = net.imagej.ops.math.ConstantToPlanarImage$AddUnsignedShort( PlanarImg arg, ==> short value) Inconvertible type: net.imglib2.img.planar.PlanarImg => short 39. (IterableInterval out?) = net.imagej.ops.math.IIToRAIOutputII$Add( IterableInterval out?, IterableInterval in1, RandomAccessibleInterval in2) Inputs do not conform to op rules out = null in1 = PlanarImg [512x512] in2 = PlanarImg [720x576] 40. (RandomAccessibleInterval out) = net.imagej.ops.math.ConstantToIIOutputRAI$Add( RandomAccessibleInterval out, IterableInterval in, NumericType value) Not enough arguments: 2 < 3 at net.imagej.ops.DefaultOpMatchingService.singleMatch(DefaultOpMatchingService.java:432) at net.imagej.ops.DefaultOpMatchingService.findMatch(DefaultOpMatchingService.java:97) at net.imagej.ops.DefaultOpMatchingService.findMatch(DefaultOpMatchingService.java:83) at net.imagej.ops.OpEnvironment.module(OpEnvironment.java:253) at net.imagej.ops.OpEnvironment.run(OpEnvironment.java:136) at net.imagej.ops.eval.OpEvaluator.execute(OpEvaluator.java:147) at net.imagej.ops.eval.OpEvaluator.execute(OpEvaluator.java:135) at net.imagej.ops.eval.OpEvaluator.add(OpEvaluator.java:294) at org.scijava.parse.eval.AbstractStandardStackEvaluator.execute(AbstractStandardStackEvaluator.java:221) at net.imagej.ops.eval.OpEvaluator.execute(OpEvaluator.java:405) at org.scijava.parse.eval.AbstractStackEvaluator.evaluate(AbstractStackEvaluator.java:70) at org.scijava.parse.eval.AbstractEvaluator.evaluate(AbstractEvaluator.java:87) at net.imagej.ops.eval.DefaultEval.calculate(DefaultEval.java:69) at net.imagej.ops.eval.DefaultEval.calculate(DefaultEval.java:51) at net.imagej.ops.special.function.UnaryFunctionOp.run(UnaryFunctionOp.java:74) at net.imagej.ops.special.function.AbstractUnaryFunctionOp.run(AbstractUnaryFunctionOp.java:58) at org.scijava.command.CommandModule.run(CommandModule.java:199) at net.imagej.ops.OpEnvironment.run(OpEnvironment.java:950) at net.imagej.ops.OpEnvironment.run(OpEnvironment.java:157) at net.imagej.ops.OpEnvironment.eval(OpEnvironment.java:335) at net.imagej.ops.OpEnvironment$eval.call(Unknown Source) at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) at Script2.run(Script2.groovy:12) at org.scijava.plugins.scripting.groovy.GroovyScriptEngine.eval(GroovyScriptEngine.java:303) at org.scijava.plugins.scripting.groovy.GroovyScriptEngine.eval(GroovyScriptEngine.java:122) at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:264) at org.scijava.script.ScriptModule.run(ScriptModule.java:160) at org.scijava.module.ModuleRunner.run(ModuleRunner.java:168) at org.scijava.module.ModuleRunner.call(ModuleRunner.java:127) at org.scijava.module.ModuleRunner.call(ModuleRunner.java:66) at org.scijava.thread.DefaultThreadService$3.call(DefaultThreadService.java:238) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:748) ```