diff --git a/scijava-ops-engine/src/main/java/org/scijava/ops/engine/adapt/lift/ComputerToIterables.java b/scijava-ops-engine/src/main/java/org/scijava/ops/engine/adapt/lift/ComputerToIterables.java
index e8cb4b250..ec2f21a27 100644
--- a/scijava-ops-engine/src/main/java/org/scijava/ops/engine/adapt/lift/ComputerToIterables.java
+++ b/scijava-ops-engine/src/main/java/org/scijava/ops/engine/adapt/lift/ComputerToIterables.java
@@ -45,13 +45,17 @@
* that operate on {@link Iterable}s of types. N.B. it is the user's
* responsibility to pass {@link Iterable}s of the same length (otherwise the Op
* will stop when one of the {@link Iterable}s runs out of {@link Object}s).
- *
+ *
+ * Note the use of generic types for each of the {@link Iterable}s in the output
+ * Ops. This is particularly useful for matching the Ops themselves, outside of
+ * adaptation.
+ *
* @author Gabriel Selzer
*/
-public class ComputerToIterables implements OpCollection {
+public class ComputerToIterables, II1 extends Iterable, II2 extends Iterable, II3 extends Iterable, II4 extends Iterable, II5 extends Iterable, II6 extends Iterable, II7 extends Iterable, II8 extends Iterable, II9 extends Iterable, II10 extends Iterable, II11 extends Iterable, II12 extends Iterable, II13 extends Iterable, II14 extends Iterable, II15 extends Iterable, II16 extends Iterable, IO extends Iterable> implements OpCollection {
@OpField(names = "engine.adapt")
- public final Function, Computers.Arity0>> liftComputer0 =
+ public final Function, Computers.Arity0> liftComputer0 =
(computer) -> {
return (out) -> {
var itrout = out.iterator();
@@ -62,7 +66,7 @@ public class ComputerToIterables, Computers.Arity1, Iterable>> liftComputer1 =
+ public final Function, Computers.Arity1> liftComputer1 =
(computer) -> {
return (in, out) -> {
var itrin = in.iterator();
@@ -74,7 +78,7 @@ public class ComputerToIterables, Computers.Arity2, Iterable, Iterable>> liftComputer2 =
+ public final Function, Computers.Arity2> liftComputer2 =
(computer) -> {
return (in1, in2, out) -> {
var itrin1 = in1.iterator();
@@ -87,7 +91,7 @@ public class ComputerToIterables, Computers.Arity3, Iterable, Iterable, Iterable>> liftComputer3 =
+ public final Function, Computers.Arity3> liftComputer3 =
(computer) -> {
return (in1, in2, in3, out) -> {
var itrin1 = in1.iterator();
@@ -101,7 +105,7 @@ public class ComputerToIterables, Computers.Arity4, Iterable, Iterable, Iterable, Iterable>> liftComputer4 =
+ public final Function, Computers.Arity4> liftComputer4 =
(computer) -> {
return (in1, in2, in3, in4, out) -> {
var itrin1 = in1.iterator();
@@ -116,7 +120,7 @@ public class ComputerToIterables, Computers.Arity5, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer5 =
+ public final Function, Computers.Arity5> liftComputer5 =
(computer) -> {
return (in1, in2, in3, in4, in5, out) -> {
var itrin1 = in1.iterator();
@@ -132,7 +136,7 @@ public class ComputerToIterables, Computers.Arity6, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer6 =
+ public final Function, Computers.Arity6> liftComputer6 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, out) -> {
var itrin1 = in1.iterator();
@@ -149,7 +153,7 @@ public class ComputerToIterables, Computers.Arity7, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer7 =
+ public final Function, Computers.Arity7> liftComputer7 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, out) -> {
var itrin1 = in1.iterator();
@@ -167,7 +171,7 @@ public class ComputerToIterables, Computers.Arity8, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer8 =
+ public final Function, Computers.Arity8> liftComputer8 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, out) -> {
var itrin1 = in1.iterator();
@@ -186,7 +190,7 @@ public class ComputerToIterables, Computers.Arity9, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer9 =
+ public final Function, Computers.Arity9> liftComputer9 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, in9, out) -> {
var itrin1 = in1.iterator();
@@ -206,7 +210,7 @@ public class ComputerToIterables, Computers.Arity10, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer10 =
+ public final Function, Computers.Arity10> liftComputer10 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, out) -> {
var itrin1 = in1.iterator();
@@ -227,7 +231,7 @@ public class ComputerToIterables, Computers.Arity11, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer11 =
+ public final Function, Computers.Arity11> liftComputer11 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, out) -> {
var itrin1 = in1.iterator();
@@ -249,7 +253,7 @@ public class ComputerToIterables, Computers.Arity12, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer12 =
+ public final Function, Computers.Arity12> liftComputer12 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, out) -> {
var itrin1 = in1.iterator();
@@ -272,7 +276,7 @@ public class ComputerToIterables, Computers.Arity13, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer13 =
+ public final Function, Computers.Arity13> liftComputer13 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, out) -> {
var itrin1 = in1.iterator();
@@ -296,7 +300,7 @@ public class ComputerToIterables, Computers.Arity14, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer14 =
+ public final Function, Computers.Arity14> liftComputer14 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, out) -> {
var itrin1 = in1.iterator();
@@ -321,7 +325,7 @@ public class ComputerToIterables, Computers.Arity15, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer15 =
+ public final Function, Computers.Arity15> liftComputer15 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, out) -> {
var itrin1 = in1.iterator();
@@ -347,7 +351,7 @@ public class ComputerToIterables, Computers.Arity16, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable, Iterable>> liftComputer16 =
+ public final Function, Computers.Arity16> liftComputer16 =
(computer) -> {
return (in1, in2, in3, in4, in5, in6, in7, in8, in9, in10, in11, in12, in13, in14, in15, in16, out) -> {
var itrin1 = in1.iterator();
diff --git a/scijava-ops-engine/src/main/java/org/scijava/ops/engine/adapt/lift/FunctionToIterables.java b/scijava-ops-engine/src/main/java/org/scijava/ops/engine/adapt/lift/FunctionToIterables.java
index 368ee2bd9..47f6ed6b7 100644
--- a/scijava-ops-engine/src/main/java/org/scijava/ops/engine/adapt/lift/FunctionToIterables.java
+++ b/scijava-ops-engine/src/main/java/org/scijava/ops/engine/adapt/lift/FunctionToIterables.java
@@ -48,122 +48,126 @@
* that operate on {@link Iterable}s of types. N.B. it is the user's
* responsibility to pass {@link Iterable}s of the same length (otherwise the Op
* will stop when one of the {@link Iterable}s runs out of {@link Object}s).
- *
+ *
+ * Note the use of generic types for each of the {@link Iterable}s in the output
+ * Ops. This is particularly useful for matching the Ops themselves, outside of
+ * adaptation.
+ *
* @author Gabriel Selzer
*/
-public class FunctionToIterables implements OpCollection {
+public class FunctionToIterables, II1 extends Iterable, II2 extends Iterable, II3 extends Iterable, II4 extends Iterable, II5 extends Iterable, II6 extends Iterable, II7 extends Iterable, II8 extends Iterable, II9 extends Iterable, II10 extends Iterable, II11 extends Iterable, II12 extends Iterable, II13 extends Iterable, II14 extends Iterable, II15 extends Iterable, II16 extends Iterable, IO extends Iterable> implements OpCollection {
// NOTE: we cannot convert Producers since there is no way to determine the
// length of the output Iterable
@SuppressWarnings("unchecked")
@OpField(names = "engine.adapt")
- public final Function, Function, Iterable>> liftFunction1 =
+ public final Function, Function>> liftFunction1 =
(function) -> {
return (in1) -> lazyIterable(itrs -> function.apply((I) itrs[0].next()), in1);
};
@SuppressWarnings("unchecked")
@OpField(names = "engine.adapt")
- public final Function, BiFunction, Iterable, Iterable>> liftFunction2 =
+ public final Function, BiFunction>> liftFunction2 =
(function) -> {
return (in1, in2) -> lazyIterable(itrs -> function.apply((I1) itrs[0].next(), (I2) itrs[1].next()), in1, in2);
};
@SuppressWarnings("unchecked")
@OpField(names = "engine.adapt")
- public final Function