Hello.

Le jeu. 26 mai 2022 à 07:04, Sumanth Rajkumar
<rajkumar.suma...@gmail.com> a écrit :
>
> Hi,
>
> My proposal was accepted into GSoC 2022 to work on the Numbers-186 [1] Jira
> of the Commons Numbers project.
>
> I first want to ask if I can be assigned to this Jira

Done.

> since my GSoC
> proposal was accepted.
>
> Next, I wanted to mention how I plan to start this project and was hoping
> to get some feedback.
>
> As per my proposal, the first thing I wanted to start with was the API
> design which would have interfaces to represent complex numbers, methods to
> convert to/from linear primitive arrays, Java 8 functional interfaces for
> unary/binary operators and for functions for complex operations and
> transforms involving: complex number and real numbers, complex vectors and
> scalars, complex matrix, vectors and scalars.

For each of the mentioned functionalities, types and operations,
please provide a concrete example of what you propose, indicating
whether it is a new feature or a change and whethe it is backwards
comptable (BC) or not.  [These details can be further discussed on
the JIRA page.]

Whenever possible, please ensure that the proposed changes do
not break the build.  [You can test this by opening a PR, which should
trigger an automated build.]

>
> Working on the API, am I on the right track to start with refactoring all
> the existing methods in the Complex class as static functions for use as
> lambdas?
>
> I already refactored some methods which can be viewed here [2]

Renaming is typically something to be first discussed here and/or
on JIRA.
Unless other non BC changes are foreseen for the next release,
such "cosmetic" changes must be avoided.

Thanks,
Gilles

>
> Thanks,
>
> Sumanth
>
> [1] https://issues.apache.org/jira/browse/NUMBERS-186
>
> [2]
> https://github.com/sumanth-rajkumar/commons-numbers/tree/sumanth-gsoc-22/commons-numbers-complex/src/main/java/org/apache/commons/numbers/complex
>
> On Mon, Mar 28, 2022, 7:01 PM Gilles Sadowski <gillese...@gmail.com> wrote:
>
> > Hello.
> >
> > Le lun. 28 mars 2022 à 00:32, Sumanth Rajkumar
> > <rajkumar.suma...@gmail.com> a écrit :
> > >
> > > Thanks Alex and Gilles for your feedback
> > >
> > > So currently Commons Math transform depends on Common complex numbers,
> > and
> > > the API involves usage of Complex Object Arrays instead of primitive
> > array
> > > data structures
> > >
> > > I also briefly looked into other library implementations besides
> > Jtransform
> > > and EJML that are not pure java but have java bindings such as JBLAS[1]
> > and
> > > NAG[2]
> > > All of the implementation use single array data structures to represent
> > > Complex Lists and higher dimensional matrices
> > >
> > > Since these involve parallel data pipelines I looked into libraries that
> > > use SIMD [3] operations that use GP GPU (jcuda [4][5] /aparapi [6]) and
> > CPU
> > > (Java 17 Vector API [7])
> >
> > Thanks for the investigation!
> >
> > >
> > > Given all the alternative implementations, I agree it does not make sense
> > > to re implement transforms here.
> >
> > Some transforms are (already) implemented here.
> > Of course, it makes sense to wonder whether to keep maintaining those
> > codes, or rely on external dependencies.  The decision would depend on
> > performance comparisons and whether users are able (or allowed) to
> > interface with native libraries.  [I know of one project where "pure Java"
> > was a requirement...]
> >
> > >
> > > So instead would it be useful to provide users with
> > > 1) a complex numbers Linear Algebra and transforms API to compile against
> > > and run with any of existing providers (apache commons, jtransform, EJML,
> > > jblas)
> > > AND
> > > 2) a service provider interface to allow adapter implementations to
> > > integrate existing and future providers such as jcudas/aparapi/vector
> > APIs
> > >
> > > Do the commons library modularization dependency requirements apply to
> > > compile time dependencies only or runtime also?
> >
> > Which "dependency requirements" are you referring to?
> >
> > > To minimize bloat, the runtime dependencies could be made optional and
> > need
> > > not be transitively included by default
> >
> > Flexibility would be ideal, indeed.
> >
> > >
> > > Providing a Complex linear algebra and transforms API that can run with
> > > different runtime providers would allow users to take advantage of
> > hardware
> > > capabilities and gracefully fallback to reference implementations
> > > It could allow users to take advantage of Java 17 Vector APIs when
> > > available without refactoring their existing libraries
> >
> > That looks great.
> >
> > >
> > > Also do the Apache projects/ license allow for integration with non
> > Apache
> > > software (jtransform /jblas do not use Apache license, jcuda uses MIT
> > > license) ?
> >
> > Licence issues are detailed here:
> >   https://www.apache.org/legal/resolved.html
> >
> > Best regards,
> > Gilles
> >
> > >
> > > Thanks
> > > Sumanth
> > >
> > > [1] http://jblas.org/
> > >
> > > [2]
> > https://www.nag.com/numeric/nl/nagdoc_latest/clhtml/c06/c06conts.html
> > >
> > > [3]
> > https://blogs.oracle.com/javamagazine/post/programming-the-gpu-in-java
> > >
> > > [4] http://jcuda.org/jcuda/jcufft/JCufft.html
> > >
> > > [5]
> > >
> > https://github.com/jcuda/jcuda-samples/tree/master/JCudaSamples/src/main/java/jcuda/jcufft/samples
> > >
> > > [6] http://aparapi.github.io/
> > >
> > > [7] https://openjdk.java.net/jeps/414
> > >
> > >
> > > On Tue, 22 Mar 2022 at 10:07, Gilles Sadowski <gillese...@gmail.com>
> > wrote:
> > >
> > > > Hello.
> > > >
> > > > > [...]
> > > > > >
> > > > > > Are we expecting complex-numbers to be an efficient pure java
> > library
> > > > that
> > > > > > could be used by other java libraries such as commons-imaging for
> > data
> > > > > > compression (DCT /JPEG lossy compression)?
> > > > > >
> > > > >
> > > > > Numbers should be seen as a toolbox to be used by other Java
> > > > applications.
> > > > > The best location for routines is something to discuss on the mailing
> > > > list.
> > > > > In the example of DCT, I am not aware if imaging currently has an
> > encoder
> > > > > implementation for this. There is a decoder:
> > > > > org/apache/commons/imaging/formats/jpeg/decoder/Dct.jav
> > > >
> > > > Also:
> > > >
> > > >
> > https://gitbox.apache.org/repos/asf?p=commons-math.git;a=blob;f=commons-math-transform/src/main/java/org/apache/commons/math4/transform/FastCosineTransform.java
> > > >
> > > > It would be a maintenance boon if "Commons" could come up with
> > > > a consensus about which components must be dependency-free and
> > > > which could depend on other (lower-level) "Commons" components.
> > > >
> > > > [Imaging] is clearly higher-level than [Math] and that such non-obvious
> > > > algorithms should be maintained in a single place.  Through the process
> > > > of modularizing [Math], we have "commons-math-transform" module,
> > > > with zero dependency, so it would bring zero bloat to [Imaging] users
> > if
> > > > we consolidate usage.
> > > >
> > > > Of course, that would imply testing and benchmarking all current
> > > > implementations, and retain the best (taking various axes into account:
> > > > performance, robustness, flexibility).
> > > >
> > > > Regards,
> > > > 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

Reply via email to