Hello, Good discussion here! This is great!
I lost track of what the overall goal here is while reading through the conversation. The goal of NUMBERS-186 is to "allow operations to be performed on lists of complex numbers". My first thought when looking at this is "how are we going to represent lists of complex numbers?" I don't think there is a single answer to this since the correct format for a list of complex numbers is whatever format the user already has them in. They could be in a file, in separate double arrays, in a single double array (alternating real and imaginary), in a float array, in a java.nio.Buffer, etc. So far, I haven't seen an API that can accomodate all of these. What I would like to see us create is an interface or abstract class like java.util.Buffer that allows us to wrap an underlying storage mechanism with complex number semantics. For example, if you have real and imaginary parts in two separate arrays, you could do something like ComplexBuffer buf = ComplexBuffer.fromRealAndImaginaryArrays(realArr, imArr); Similarly, with a DoubleBuffer: ComplexBuffer buf = ComplexBuffer.fromDoubleBuffer(buf); We can completely hide the classes implementing the wrappings here from the public API so that things are straightforward for the user. If we can first create a simple public API like this, then we can safely focus on performance improvements within the private code. Regards, Matt J On Sat, Jun 11, 2022 at 8:32 AM Gilles Sadowski <gillese...@gmail.com> wrote: > > Hello. > > > [...] > > > > interface ComplexDoubleArray { > > Stream<ComplexDoubleArray> stream(int start, int length); > > } > > > > ComplexDoubleArray a; > > // Will use the Java 8 ForkJoinPool.commonPool() for parallel execution > > a.stream(start, length).parallel().forEach(x -> ComplexFunctions.conj(x, > > x)); > > > > class ComplexFunctions { > > static void conj(ComplexDoubleArray in, ComplexDoubleArray out); > > } > > > > [...] > > I have a hard time figuring out whether these bits of code are > intended to become the application developer API... > What data-structure(s) will be visible (from the application)? > What will be hidden ("implementation details")? > Do we have use-cases of non-trivial processing of N-dimensional > cubes of complex numbers? [I imagine that the same API should > be able to also process cubes of real numbers (without storing the > "0" imaginary parts).] > > Gilles > > --------------------------------------------------------------------- > To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org > For additional commands, e-mail: dev-h...@commons.apache.org > --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org