Hi,

I have made a preliminary complex list implementation class which is backed
by a single double array in interleaved format.
I made some test cases for the forEach methods as well.
This can be viewed here [1]. Please let me know what you think and if I'm
on the right track.

Thanks,

Sumanth

[1]
https://github.com/sumanth-rajkumar/commons-numbers/tree/NUMBERS-186.complex_list_support/commons-numbers-complex/src

On Tue, 2 Aug 2022 at 13:26, Sumanth Rajkumar <rajkumar.suma...@gmail.com>
wrote:

> 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
>>
>

Reply via email to