← 输入框|github.com|刷新
Skip to content

Fix ops with multi-dimensional array parameters - #296

Open
ctrueden wants to merge 4 commits into
mainfrom
scijava-ops-engine/nested-array-op-names
Open

ctrueden wants to merge 4 commits into
mainfrom
scijava-ops-engine/nested-array-op-names

Conversation

@ctrueden

Copy link
Copy Markdown
Member

The class names generated for reduced and converted op wrappers only handled one level of array nesting, so an op with a double[][] parameter failed with "…double[]_Arr is not a valid class name!" when called with its optional parameters omitted, or with converted arguments.

This is a one-line fix in each of ReductionUtils and Conversions, plus engine tests covering double[][] and double[][][] parameters.

ctrueden and others added 3 commits October 22, 2026 17:36
Reduced and converted op wrappers derive a class name from the parameter
types, replacing "[]" with "_Arr". This was done only one level deep, so
a parameter such as double[][] produced an invalid class name and the op
could not be called with its optional parameters omitted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The fix for generated class names of nested array types (a14c733e9) was
only exercised indirectly by color.deconvolveStains in scijava-ops-image.
NestedArrayParameterTest calls ops with double[][] and double[][][]
parameters with a @nullable parameter omitted (reduced wrapper), and
with a converted argument and output; without the fix, the reduced
calls fail. The converted wrapper name is not compiled into a class on
that path, so ConversionTest checks Conversions.getClassName directly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@ctrueden
ctrueden requested a review from gselzer October 26, 2026 20:59

@gselzer gselzer left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ooh, yeah, that's a good bug to solve, thanks @ctrueden

Comment on lines +1 to +7
# Changelog

All notable changes to SciJava Ops Engine.

## [Unreleased]

### Fixed

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Are we going to start keeping changelogs?

Comment on lines +119 to +128
/** An Integer scale goes through a converted wrapper. */
@Test
public void testConverted() {
final Double sum = ops.op("test.nestedArraySum").input(VALUES, 3)
.outType(Double.class).apply();
assertEquals(30, sum, 0);
final Integer rounded = ops.op("test.nestedArraySum").input(VALUES)
.outType(Integer.class).apply();
assertEquals(10, rounded);
}

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This should probably go somewhere in the org.scijava.ops.engine.matcher.convert package?

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Mostly suggesting this because we are adding a bunch of Ops to the test environment above, most of which aren't needed to test the reduction fix.

@@ -174,9 +174,10 @@ private static String memberNames(ReducedOpInfo reducedInfo) {
*/
private static String getClassName(Class<?> clazz) {

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is obnoxious that we have two identical functions that we have to fix, but probably not worth unifying them?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants