Author: Attila Kovacs <attila[AT]sigmyne.com>
jnum is a set of numerical Java classes, with an astronomy focus. It has started life inside the crush data reduction code (https://github.com/attipaci/crush), but was split from it a while back.
jnum is designed to be super-fast, while also being very easy to use. (It's floating point FFTs on 1M points beat the C FFTW handily in my tests).
jnum is not (yet) a fully stable code. It's API still continues to evolve (driven by crush), although there are signs of stabilization in many of the Java subpackages within. Also, some parts have clearly received more attention through the years as others. The javadoc markup is at best spotty at this point, although classes, methods and arguments are generally named in a self-explanatory manner.
There is more work to be done for sure. But, if you are willing to put up with occasional bugs and API changes, it might just make your scientific Java coding a breeze.
The jnum package is dependent on the nom.tam.fits packages for dealing with FITS files, also on GitHub (https://github.com/nom-tam-fits/nom-tam-fits).
Here is some more detail on the different parts of the package, by the current level of functionality they offer.
These are the parts that are pretty established, generally well-tested, and least likely to have major API changes...
-
Astronomical coordinate systems and conversions between them, including precession and FITS WCS support (
jnum.astro
). -
Spherical projections and FITS WCS support for these (
jnum.projection
) -
Blazing fast, simple, and parallel FFTs -- 1D or multi-dimensional, real and complex (
jnum.fft
), and window functions (jnum.data.WindowFunction
) -
Generic data cubes (e.g. 1D-3D) via
jnum.data.Data
-
1D (
jnum.data.samples
), 2D (jnum.data.image
), and 3D (jnum.data.cube
, andjnum.data.cube2
) data objects, supporting FITS I/O, manipulation (e.g. arithmetic, resampling, smoothing, deconvolution) and overlays (jnum.data.*.overlay
) -
Complex arithmetic (
jnum.math.Complex
) -
Values with weights and uncertainties (
jnum.data.WeightedPoint
andjnum.data.DataPoint
) -
Special functions, e.g. Bessel functions, error function etc. (
jnum.math.ExtraMath
andjnum.math.specialfunctions
) -
Parallel processing framework (
jnum.parallel
). -
A powerful text-based hierarchical configuration engine for programs (
jnum.Configurator
). This is what CRUSH uses, seeREADME.syntax
in the CRUSH repo to see what it can do... -
Parsing and formatting of time and angles (
jnum.text
)
Here are the bits that do the job, have been tested quite well, but could use additional functionality, including potential rethinking parts of the API...
-
Support for physical units (
jnum.Unit
). -
Physical constants (
jnum.Constant
). -
Common UTF symbols for math & physics (
jnum.Symbol
) -
Astronomical time measures (except UT1) and leap seconds (
jnum.astro
) -
Statistics on data (
jnum.data.Statistics
,jnum.data.Data
, andjnum.data.LinearRegression
) -
Support for generic multidimensional arrays and iterators on them (
jnum.mesh
andjnum.data.ArrayUtil
) -
Interpolation (
jnum.data.interpolator
) -
Dirfile I/O (
jnum.io.dirfile
) -
Easy-to-use custom messaging support (
jnum.reporting
) -
A generic framework for bitwise flag management (
jnum.util.Flag
)
Here are the parts that may undergo substantial development, which may also change the API significantly.
-
Matrices by
jnum.math.matrix
(real and complex), with algebra and inversions and decompositions (but no eigenvalues or eigenvectors yet). -
Fitting of data (
jnum.data.fitting
). Currently, only a downhill simplex method is implemented, although there is a decent generic framework that it is built on...
Finally, the parts that are heavily under construction at this point...
-
Plotting capabilities (
jnum.plot
) -
Symbolic math (
jnum.devel.symbolic
). It may be abandoned in favor of a dependence on an external package that would provide that functionality
Copyright (C) 2019 Attila Kovacs <attila[AT]sigmyne.com>