Functions released in 1.0.0 are no longer marked experimental; like the package, they are stable. The NumPy readers and writers added in this version are experimental.
The MCQuant, segmantR and inForm readers derive image and sample identifiers of an RDS table from its file name, as for delimited files; before, they came from a temporary copy and differed between reads.
Standardize the named v5 package logo across README, documentation pages and available application headers, with matching light and dark artwork.
cs_read_npy() and cs_read_npz() read NumPy array files and archives in
base R (booleans, integers, floats, complex, fixed-width strings; C or
Fortran order); cs_write_npy() and cs_write_npz() write them without an
external zip program.
Signal policies can declare separate preferred and fallback finite domains, including negative finite measurements. Existing minimum-domain defaults and five-column policies remain unchanged. Extended seven-column policies preserve both domains through JSON and CSV.
Signal-policy I/O preserves structured error classes when parser diagnostics or paths contain literal braces.
Canonical TSV decimal conversion now preserves double precision on platforms where extended precision equals double precision, including macOS ARM. The 17-digit file format and exact-value round-trip contract are unchanged.
Header-only TSV exports now write a complete gzip stream, including empty cell and adjacency tables. Their declared column types survive read-back.
QuPath readers recognize compartment-first cell area and nuclear morphology with explicit units. Whole-cell area is kept separately from nuclear area; shape dictionaries retain the original headers and dimensional units.
The segmantR reader converts one-based pixel-index centroid means to the image's pixel-edge coordinate frame and converts pixel area to square micrometres. Unrecognised centroid conventions are rejected. Crop, pyramid and anisotropic transforms must be handled explicitly before image integration. Raw shape measurements retain their pixel or radian units.
cs_formats() reports segmantR 0.2.0, the version the segmantR reader
was tested with, instead of the non-existent segmantR 0.5.
cs_write(overwrite = TRUE) now replaces only an empty directory or
earlier cs_write() output: a directory whose cellspec.json carries the
cellspec format marker and which holds no files other than those
cs_write() creates. Any other directory is left untouched and an error
names the unexpected entries.
Tiled QuPath done markers with header_sha256 now verify header lines
longer than 1,024 bytes instead of reporting a missing header, and check
the decompressed header line of gzip-compressed (.gz) tiles instead of
their compressed bytes.
cs_app() now applies max_upload_mb as the Shiny upload limit while the
application runs and restores the previous limit when it stops; uploads
were previously capped at the 5 MB Shiny default.
The default plot() overview leaves out the area panel when the cells table
has no area column and the marker panel when there are no intensity
features, instead of failing.
cs_as_anndata() now defaults to policy = NULL and derives the policy
the same way as cs_as_spe().
other features whose source names clean to the same identifier are
numbered with make.unique(sep = "_") instead of aborting the read. This
covers unmapped numeric columns kept by keep_other = TRUE and
measurements mapped with kind = "other", also with keep_other = FALSE.
Suffixes already in use are skipped: columns "a b", "a_b" and "a_b_1"
become other:a_b, other:a_b_2 and other:a_b_1.
summary() and its print method handle valid objects without images.
cs_read_cellspec() checks the row counts declared in cellspec.json
before reading and reports a missing or malformed n_rows as a
cellspec_error_format.
cs_write() no longer advances the session random number generator when
it names its staging and backup directories.
Gzip-compressed tables and canonical tsv.gz files are decompressed in R
on every platform instead of through an external gzip program. The
result is checked against the gzip trailer (CRC-32 and length), so a
truncated or corrupt file raises a cellspec_error_format instead of
loading only part of its rows. A file whose tail was zero-filled back to its
original size counts as truncated. BGZF files (bgzip) are checked block by
block, may hold nothing but BGZF blocks and must end with the BGZF
end-of-file block; other files made of several gzip members, which cannot
be checked completely, are read with a cellspec_warning_integrity
warning.
cellspecR now requires data.table 1.17.0 or later. Earlier versions write
fwrite(compress = "gzip") output as several gzip members, which
cs_read_cellspec() cannot fully check, so it would warn on the tsv.gz
files written by cs_write().
First public release, on GitHub.