Skip to content

v0.1.1

Choose a tag to compare

@PoHsuanLai PoHsuanLai released this 11 Apr 12:09
· 58 commits to master since this release

Second release of GenomicSEM-rs. Patch release on top of v0.1.0 with
pre-built R binaries, Windows R support, the CHANGELOG.md file, and
a handful of R CMD check fixes.

Full diff: v0.1.0...v0.1.1

Added

  • Pre-built R binary packages for Linux, macOS, and Windows attached
    to every GitHub release. Users no longer need a Rust toolchain to
    install gsemr — pick the platform-native file from the release page
    and run install.packages(<url>, repos = NULL). Source tarball +
    remotes::install_github remain as the "from source" fallback for
    unmatched R versions and dev builds.
  • R package now ships with full Windows build support: configure.win,
    src/Makevars.win, and -Wl,--export-all-symbols in the MinGW link
    line so R .Call("wrap__*_rust", ...) resolves at runtime on
    Windows. R CMD check is green on ubuntu / macos / windows.
  • workflow_dispatch trigger on publish.yml with a release_tag
    input, so the R-only job path can be manually re-run against an
    existing release (to ship a late R binary or fix without burning a
    crates.io / PyPI version slot).
  • readme = "README.md" and [project.urls] in
    bindings/python/pyproject.toml so the PyPI project page renders a
    description with links to the repo, issue tracker, and architecture
    docs. (The 0.1.0 wheels shipped before this landed — the PyPI 0.1.0
    page will continue to show "no project description" until 0.1.1 is
    uploaded.)

Changed

  • bindings/python/README.md: absolute GitHub URLs instead of
    relative ../../API_COMPAT.md / ../../ARCHITECTURE.md links
    (which don't render on PyPI); function list expanded from 10 to all
    17 exports and grouped as Core pipeline vs Advanced.
  • Root README.md: R install section restructured — binary
    packages as the primary path, source install demoted to a "From
    source" subsection. New Rust MSRV (1.88+) badge.
  • R package internal cleanup:
    • Explicit importFrom(stats, pnorm, setNames) /
      importFrom(utils, read.table, write.table) in NAMESPACE,
      clearing the "no visible global function definition" notes.
    • @param out added to sumstats.R + regenerated sumstats.Rd
      (fixes an "Undocumented arguments in Rd file" WARNING).
    • {chr} in ldsc.R's @param ld description escaped to
      \code{<chr>.l2.ldscore.gz} (fixes "Lost braces" NOTE).
    • configure / configure.win print rustc --version / cargo --version before the build (fixes "No rustc version reported"
      WARNING).
    • configure / configure.win now rm -rf src/rust/target after
      copying out libgsemr.a, so R CMD check doesn't scan a duplicate
      rust/target/release/libgsemr.a and double-report the Rust
      stdlib's _exit / abort / exit symbols.

Removed

  • PyLdscResult.to_json() and gsem.LdscResult.from_json(s) — the
    json: String field and the conversions::json_to_ldsc helper that
    backed them. These were dead compat from the pre-NumPy era; every hot
    path has been reading s / v / i_mat through NumPy getters for a
    while. This is the only user-visible break in 0.1.1. Callers who
    were serializing LDSC results to disk should use pickle or pass the
    result object directly into downstream functions (all 17 exported
    functions accept it).

Fixed

  • read_sumstats aborted on NA tokens, so .sumstats.gz files that
    worked in GenomicSEM::ldsc failed in gsemr::ldsc with a cryptic
    gsemr::ldsc error: invalid N long before sample.prev /
    population.prev were even evaluated. GenomicSEM tolerates these
    files because its reader calls na.omit(read_delim(...)); gsemr now
    matches that behaviour — rows whose N or Z field is an NA token
    (empty, ., NA, NaN, N/A, NULL; case-insensitive) are
    silently dropped, with a one-line INFO log naming the file and the
    dropped-row count. Genuine parse failures now report file path, line
    number, and the offending value, and load_trait_data wraps the
    error with the failing file path so multi-trait runs tell you which
    input went bad. (crates/gsem/src/io/gwas_reader.rs)
  • publish.yml skip cascade: check-r-package and
    upload-r-to-release no longer inherit the implicit if: success()
    gate, which was evaluating to false on workflow_dispatch runs
    (because publish-crates is skipped there). They now use
    if: always() && needs.<upstream>.result == 'success' and proceed
    as long as their direct needs are green.
  • Versioned workspace deps: root Cargo.toml internal deps now
    carry version = "0.1.0" alongside path, required by
    cargo publish for inter-crate references.
  • R binding Cargo patch: bindings/r/src/rust/Cargo.toml declares
    internal crates at crates.io versions and uses [patch.crates-io]
    to redirect to the in-repo sources when available. configure
    strips the patch block when the local crates aren't reachable
    (tarball install), so cargo falls back to the published crates
    cleanly.