Contributor
Sumanth Sulur Rajkumar

Commons Numbers Library for Complex Linear Algebra


Mentors
Gilles, Matt Juntunen, Alex Herbert
Organization
Apache Software Foundation
Technologies
java
Topics
image processing, linear algebra, Complex Math
The existing Commons Numbers library for complex types uses collections of complex object instances that incur Java object allocation overhead and is inefficient for iteration and operations on large complex data sets. There are several third party Java libraries for complex math that each have their advantages and disadvantages, but Java developers currently have no single API for Complex operations that can use these libraries at runtime without rewriting their applications This project would provide Java developers with a single Complex API with abstractions that allow for efficient data structures (such as primitive arrays and value types - as proposed by Java Project Valhalla), use of Java 8 language features (Lambdas/Streams) and a Service Provider Interface (SPI) to integrate with existing (JTransforms, JBLAS, EJML) and future third party libraries (Java 17 Vector API, jcuda, aparapi) The project deliverables would include interfaces to represent complex scalar, vector, matrix types and functional interfaces for complex unary and binary operators & functions. The existing methods in Commons Numbers would be refactored as static functions for use as Lambdas with the new API. The JTransforms library will be integrated for supporting operations such as fast Fourier and Discrete Cosine transforms. Optionally, an implementation using Java 17 vector API would be provided for basic operations on complex vectors and matrices. Performance benchmarks comparing different implementations would be published. The deliverables will include complete Pull Requests meeting all Apache Commons Numbers project requirements