Hi,
The Matrix project has just published a coordinated release of all 22
modules plus the BOM (se.alipsa.matrix:matrix-bom:2.6.0). Matrix is a
Groovy 5 / JDK 21 library (usable from Java as well) for working with
tabular data - a Matrix is essentially a typed, named List<List<?>> with
a large API around it, plus modules for I/O, statistics and charting.
See https://github.com/Alipsa/matrix for details
Getting it (Gradle):
implementation(platform('se.alipsa.matrix:matrix-bom:2.6.0'))
implementation('se.alipsa.matrix:matrix-core')
Highlights
==========
New module: matrix-jupyter 0.1.0
Matrix values returned from a cell in a jjava-based Groovy Jupyter
kernel now
render as HTML tables, and Charm/ggplot/pict charts render as inline SVG.
Row and Column render as typed single-row/single-column tables, and
renderer
failures degrade to a readable text/plain message instead of breaking
the cell.
PCA in matrix-stats 2.5.3
Pca.fit(...) adds principal component analysis with compact (thin)
SVD, so
tall matrices no longer allocate an n x n U matrix. Projections,
loadings and
explained-variance accessors are included. The same release fixes Kendall
tau-b overflow, r2 for constant actuals, KPSS/ADF lag handling and
several
K-means correctness issues.
Charting
-------------
matrix-charts 0.6.0 (the Charm grammar-of-graphics engine) fixes a
batch of
rendering defects that change default output for the better: bar/col
charts
always include zero on the y axis, stacked and interval geoms train
the axis
on their full extent, position DODGE works on discrete axes, and category
labels containing digits (Q1, g1) stay discrete instead of being
treated as
numbers. CharmRenderer.computeLayerData(chart) exposes post-stat
layer data
without rendering.
matrix-ggplot 0.6.0 adds layer_data()/ggplot_build() returning
computed layer
data as Matrix objects, honours I() constants and closure aesthetics that
return strings/booleans, and delegates the remaining
colour/shape/size scales
to Charm.
matrix-pict 0.6.0 adds HeatmapChart, CorrelationHeatmapChart (Pearson,
Spearman or Kendall on a fixed [-1,1] diverging scale) and
RadarChart, plus
named and positional seriesColors(...) overrides on every builder.
matrix-xchart 0.4.0 gains deferred, pict-like builder(Matrix) APIs for 13
chart types and a Plot facade for PNG/SVG/PDF/Swing.
Data formats and databases
-----------------------------------------
- matrix-arff 0.3.0 is a Weka compatibility release: Weka-compatible quoting
and escaping, relational attributes, spec-conformant sparse rows.
- matrix-json 2.3.2 migrates internals to Jackson 3 (tools.jackson.*); the
JsonReader/JsonWriter API is unchanged.
matrix-sql 2.5.0 derives update() match columns from the table's
primary key
and caches table metadata per connection.
matrix-spreadsheet 2.5.0 fixes a long list of XLSX/ODS import and append
defects (blank headers, sparse cells, date styles, namespace-prefixed
workbook XML).
- matrix-gsheets 0.3.0 reworks authentication.
GsAuthenticator.authenticate()
now uses existing Application Default Credentials only and no longer
starts a
browser login implicitly - when ADC are missing or lack a scope, the
thrown
SheetOperationException spells out the exact
"gcloud auth application-default login --scopes=..." command to run.
Desktop
applications that want the old behaviour can opt in with the new
authenticateInteractively(...). Each operation now requests only the
scope it
needs (readers spreadsheets.readonly, writers spreadsheets, deleteSheet
drive.file instead of full Drive access), persisted ADC files are
written with
owner-only permissions, and granted scopes are cached to avoid repeated
tokeninfo round trips. On the data side, A1 range parsing and
validation are
normalized (lowercase columns, quoted sheet names containing '!',
trailing
colon rejected, row-only ranges such as Sheet1!1:5 accepted again on
write),
serial date/time boundaries are fixed for negative dates and
midnight, and
unsafe Long, BigInteger and BigDecimal values are now rejected rather
than
silently rounded through IEEE-754.
- matrix-avro 0.3.1, matrix-parquet 0.7.0, matrix-csv 2.5.0 and
matrix-bigquery
0.7.1 all tighten numeric and encoding correctness.
Security
-----------
matrix-tablesaw 0.4.0: XmlReader now rejects any document with a DOCTYPE
declaration and disables external entities and DTD loading.
Previously an XML
file referencing an external entity could make the parser read arbitrary
files (XXE). Upgrade if you read XML through matrix-tablesaw.
Breaking changes worth knowing about
====================================
- matrix-core 3.9.0: ValueConverter.asInteger/asLong/asShort/asByte (and
therefore convert(), ListConverter and Matrix.convert) now throw
IllegalArgumentException for values whose integral part does not fit the
target type, instead of silently wrapping. asInteger(3_000_000_000L)
used to
return -1294967296. NaN and infinities return valueIfNull.
- matrix-core 3.9.0: column[1..3] now returns a Column (name and type
preserved) rather than a plain ArrayList.
- matrix-smile has been removed from the BOM and from matrix-all,
because the
GPL licence of smile-core would propagate to derived work. It is still
released (0.2.1) and can be added as a direct dependency if that
suits your
project.
- matrix-groovy-ext 0.4.0 removes the ambiguous min/max(Number, BigDecimal)
overloads and changes Double/Float ulp() to IEEE 754 semantics. Extension
syntax stays source compatible; compiled direct callers must be
recompiled.
Full per-module release notes are in each module's release.md in the
repository.
Feedback, bug reports and PRs are very welcome.
Regards,
Per Nyfelt