Thanks Alex for the feedback, I'll work on a ComplexList class that implements the List interface and is backed by a single double array in interleaved format. I'll have something ready to look at by tomorrow.
Thanks, Sumanth On Tue, 2 Aug 2022 at 03:52, Alex Herbert <alex.d.herb...@gmail.com> wrote: > On Mon, 1 Aug 2022 at 17:38, Sumanth Rajkumar <rajkumar.suma...@gmail.com> > wrote: > > > Hi, > > > > > I think that Alex's suggestion still holds: Better focus on one > > > task at a time. Are the "list" and "matrix" features related? > > > > OK, Will focus on list features first and focus on extending all existing > > methods on the Complex class to Lists. > > > > UnaryOperators will apply the operation (using refactored static methods) > > to each element. > > BinaryOperators for lists will have two variants. > > For the first variant, the second operand is a single complex number that > > is applied as second operand for all elements on List > > The second variant operates on two Lists. Can we look at this later? > > > > For an operand that is a single complex number then this should be > satisfied by passing a lambda function to the unary forEach. The same would > be the same for a single double factor. So these seem redundant and can be > covered by documentation. > > I would suggest you create a List<Complex> implementation that only > satisfies the list interface in an optimal manner. If you extend > java.util.AbstractList the minimal implementation is often not optimal for > the storage (for example the spliterator and the forEach constructs). > > The support for a JDK Collection may not have to add any additional methods > for processing. It would merely replace using ArrayList<Complex>. Numerical > processing of complex numbers could be added instead to a more focussed > data structure that does not support the entire Collection API, i.e. the > vector and matrix concepts previously proposed. > > > > > > > Do we have one use case for the "list" feature? > > > I see there a lot factory methods that seem to defeat the > > > intended purpose (AFAIU Matt's remark) of letting the caller > > > decide on the input format. > > > Similarly, the "parse" feature should be left to the code that > > > handles the input. IOW shouldn't we separate the concerns > > > of converting the input (array, stream, list of strings, ...) from > > > what can be done with a "list" instance? > > > > Since the lists can have different underlying data storage > implementations > > such as > > a) single double primitive array or DoubleBuffer in interleaved format > > b) single double primitive array or DoubleBuffer in sub array format > > c) separate arrays/DoubleBuffers for real and imaginary parts > > > > Based on earlier discussions, Alex wanted the iteration logic over the > list > > to apply the operators to be within the List implementation > > So each implementation will have its own implementation of operators that > > is optimal for its data storage > > > > For now, should we focus on more than 1 implementation? If it is just 1 > > implementation, which one can I pick up first? > > > > 1 implementation is the best start point to build the API. > > > > Should we have a common interface (minimum methods/operations that all > > implementations should support)? > > > > That makes sense. However a known backing format for the data will allow > optimal computation. So once the API is established for a single data > structure format we can test speed of computation when mixing backing data > structures. > > > > > > If so, I can first focus on finalizing the List interface and then look > at > > implementations > > > > I was also looking at the EJML api's [1]. > > They support three API styles a) Procedural b) SimpleMatrix and c) > > Equations (Matlab style) > > > > It looks like we will be implementing the SimpleMatrix style. Should we > > also consider other approaches? > > > > Equations requires parsing text input. I would put that out-of-scope. I > would say an OO style is the most natural from a Java perspective. The API > could be similar to the matrix functionality in Commons Math. > > Alex >