Skip to content

Reproducibility and data provenance

crabWURCS bundles its runtime data and never downloads chemistry tables while converting user input.

  • crabwurcs-pdb/data/pdb_carbohydrate_components.tsv records the wwPDB CCD snapshot date, source URL, checksum, and regeneration command.
  • GlycoShape-derived notation and molecular tables document their columns and regeneration scripts under each crate's data/ directory.
  • SNFG documentation images are generated by cargo run -p crabwurcs --example generate_docs_assets.

Release validation runs formatting, warning-free Clippy, all targets and doctests, Python wheel tests, version consistency checks, and Cargo package construction from a clean checkout.

WURCS normalization conformance

The bundled GlycoShape IUPAC table is an offline regression oracle. It parses all populated condensed and extended fields (1,778 notations across 942 bundled rows; a GlyTouCan accession and a damaged string stored in the IUPAC column are not notations and are excluded), normalizes each source WURCS, and compares the result with a WURCS written from the IUPAC graph. Any parse/write failure is treated as a test failure:

cargo test -p crabwurcs --test glycoshape_iupac_conformance -- --nocapture

GlyCosmos verification is opt-in so normal builds remain deterministic and offline. The ignored test posts the bundled source WURCS strings to the documented GlycanFormatConverter API and requires its response to equal crabWURCS's normalized WURCS:

CRABWURCS_RUN_GLYCOSMOS=1 \
  cargo test -p crabwurcs --test glycosmos_conformance -- --ignored --nocapture

The live check defaults to 25 distinct WURCS records. Set CRABWURCS_GLYCOSMOS_LIMIT=0 (or all) to exercise the complete bundled corpus, or set CRABWURCS_GLYCOSMOS_API to use a compatible versioned endpoint. The default endpoint is the documented 2.8.2 JSON route: https://api.glycosmos.org/glycanformatconverter/2.8.2/wurcs2wurcs.