Skip to content

Commit 30383cc

Browse files
committed
Don't flip the image shape
Appose already takes care of F-order <-> C-order conversions as needed. There is no reason to manually flip the axes; see apposed/appose#20.
1 parent 28d2b6d commit 30383cc

File tree

1 file changed

+12
-19
lines changed

1 file changed

+12
-19
lines changed

src/main/java/org/scijava/plugins/scripting/appose/python/ApposePythonScriptEngine.java

Lines changed: 12 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public Object eval(final String script) throws ScriptException {
115115
}
116116

117117
// Collect declared inputs, converting array-like values to NDArray.
118-
// Track which inputs were converted for the Python flip preamble.
118+
// Track which inputs were converted for the Python preamble.
119119
final Map<String, Object> taskInputs = new HashMap<>();
120120
final List<String> arrayInputNames = new ArrayList<>();
121121
final List<NDArray> ownedNDArrays = new ArrayList<>(); // closed after task
@@ -157,7 +157,7 @@ public Object eval(final String script) throws ScriptException {
157157
}
158158
}
159159

160-
// Wrap the user's script with preamble (flip inputs) and postamble
160+
// Wrap the user's script with preamble (unpack inputs) and postamble
161161
// (pack outputs into task.outputs).
162162
final String wrappedScript = buildWrappedScript(
163163
script, arrayInputNames, arrayOutputNames, plainOutputNames);
@@ -284,12 +284,12 @@ private static String sanitizeEnvName(final String scriptPath) {
284284

285285
/**
286286
* Wraps the user's script with a preamble and postamble that handle
287-
* axis-order flipping and {@code task.outputs} capture for array types.
287+
* input transformations and {@code task.outputs} capture for array types.
288288
* <p>
289-
* The preamble defines {@code _flip} and {@code _pack_img} helpers, then
290-
* converts each array-typed input from its incoming NDArray (Java F-order)
291-
* to a C-order numpy array. The postamble captures each declared output into
292-
* {@code task.outputs}, packing array outputs back into NDArray for Java.
289+
* The preamble defines a {@code _pack_img} helper, then converts each
290+
* array-typed input from its incoming NDArray to a numpy array. The
291+
* postamble captures each declared output into {@code task.outputs},
292+
* packing array outputs back into NDArray for Java.
293293
* </p>
294294
*/
295295
private static String buildWrappedScript(
@@ -304,23 +304,16 @@ private static String buildWrappedScript(
304304
sb.append("import numpy as _np\n");
305305
sb.append("from appose import NDArray as _NDArray\n");
306306
sb.append("\n");
307-
sb.append("def _flip(arr):\n");
308-
sb.append(" \"\"\"Reverse all axes: Java F-order <-> Python C-order.\"\"\"\n");
309-
sb.append(" return _np.ascontiguousarray(\n");
310-
sb.append(" _np.transpose(arr, tuple(reversed(range(arr.ndim)))))\n");
311-
sb.append("\n");
312307
sb.append("def _pack_img(arr):\n");
313-
sb.append(" \"\"\"Pack a C-order numpy array into a new shared-memory NDArray.\"\"\"\n");
314-
sb.append(" f_arr = _np.asfortranarray(\n");
315-
sb.append(" _np.transpose(arr, tuple(reversed(range(arr.ndim)))))\n");
316-
sb.append(" nd = _NDArray(str(f_arr.dtype), f_arr.shape)\n");
317-
sb.append(" nd.ndarray()[:] = f_arr\n");
308+
sb.append(" \"\"\"Pack a numpy array into a new shared-memory NDArray.\"\"\"\n");
309+
sb.append(" nd = _NDArray(str(arr.dtype), arr.shape)\n");
310+
sb.append(" nd.ndarray()[:] = arr\n");
318311
sb.append(" return nd\n");
319312
sb.append("\n");
320313

321-
// Convert each array input: NDArray (F-order) → numpy array (C-order).
314+
// Convert each array input: NDArray → numpy array.
322315
for (final String name : arrayInputNames) {
323-
sb.append(name).append(" = _flip(").append(name).append(".ndarray())\n");
316+
sb.append(name).append(" = ").append(name).append(".ndarray()\n");
324317
}
325318
if (!arrayInputNames.isEmpty()) sb.append("\n");
326319

0 commit comments

Comments
 (0)