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

Reply via email to