From e59c0fb340f446e3ee46425ab8b013c605dd8408 Mon Sep 17 00:00:00 2001 From: Gregor Gorjanc Date: Sun, 22 Feb 2026 09:53:29 +0100 Subject: [PATCH] Reduce time for the examples #81 --- .gitignore | 2 + AGENTS.md | 15 +- RcppTskit/NEWS.md | 10 +- RcppTskit/R/Class-TableCollection.R | 30 +-- RcppTskit/R/Class-TreeSequence.R | 32 +-- RcppTskit/R/RcppTskit.R | 207 ++++++++++-------- RcppTskit/cran-comments.md | 4 + RcppTskit/inst/examples/create_test.trees.R | 28 +-- RcppTskit/inst/examples/create_test.trees.py | 42 ++-- RcppTskit/inst/examples/test.trees | Bin 150508 -> 11892 bytes RcppTskit/inst/examples/test2.trees | Bin 150580 -> 11964 bytes RcppTskit/man/TableCollection.Rd | 64 +++--- RcppTskit/man/TreeSequence.Rd | 68 +++--- RcppTskit/man/get_tskit_py.Rd | 10 +- RcppTskit/man/tc_py_to_r.Rd | 34 +-- RcppTskit/man/ts_py_to_r.Rd | 34 +-- .../tests/testthat/test_TableCollection.R | 8 +- .../testthat/test_load_summary_and_dump.R | 136 ++++++------ RcppTskit/vignettes/RcppTskit_intro.qmd | 12 +- 19 files changed, 398 insertions(+), 338 deletions(-) diff --git a/.gitignore b/.gitignore index d588312..282651f 100644 --- a/.gitignore +++ b/.gitignore @@ -20,4 +20,6 @@ RcppTskit/src/tskit/*.o RcppTskit/vignettes/*.R RcppTskit/vignettes/*.html RcppTskit/vignettes/*_files/ +RcppTskit.Rcheck/ +RcppTskit_*.tar.gz test.trees diff --git a/AGENTS.md b/AGENTS.md index 5b71df5..b5a49b9 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -6,7 +6,7 @@ These notes apply to this repository root and the `RcppTskit/` package. ## The way of working -* We strive for planned work so we know what we want to change. +* We strive for planned work so we have a plan of what we want to change. * We strive for minimal changes, unless needed otherwise. * We provide clear examples for new functionality so useRs can be quickly onboarded. @@ -211,3 +211,16 @@ but note that others might be working with the files in this repository at the s so don't tweak or revert changes done by others. Keep track of which files you are changing and focus on those changes only. If there are conflicting edits, try to merge or ask for advice on how to merge. +In case of conflicts, save your changes and use git worktree +to work independently. + +## Proofreading + +If asked to proofread, act as an expert proofreader and editor +with a deep understanding of clear, engaging, and well-structured writing. +Work paragraph by paragraph, +always starting by making a TODO list +that includes individual items for each heading. +Fix spelling, grammar, and other minor problems without asking. Label any unclear, confusing, or ambiguous sentences with +a TODO comment. +Only report what you have changed. diff --git a/RcppTskit/NEWS.md b/RcppTskit/NEWS.md index b0b25fe..7bff30c 100644 --- a/RcppTskit/NEWS.md +++ b/RcppTskit/NEWS.md @@ -4,7 +4,7 @@ All notable changes to RcppTskit are documented in this file. The file format is based on [Keep a Changelog](https://keepachangelog.com), and releases adhere to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## [0.2.0] - 2026-02-13 +## [0.2.0] - 2026-02-22 ### Added (new features) @@ -35,10 +35,16 @@ and releases adhere to [Semantic Versioning](https://semver.org/spec/v2.0.0.html ### Maintenance +- Used `\dontrun{}` with `get_tskit_py()` calls in examples to + further reduce `R CMD check time` on CRAN. + +- Reduced bundled example tree-sequence sizes in `inst/examples/test.trees` + and `inst/examples/test2.trees` to speed up examples and checks. + - Delete temporary files in examples and tests after use. - Renamed unexported functions from `RcppTskit:::ts_load_ptr()` to - `RcppTskit:::ts_ptr_load()`. + `RcppTskit:::ts_ptr_load()` style. ## [0.1.0] - 2026-01-26 diff --git a/RcppTskit/R/Class-TableCollection.R b/RcppTskit/R/Class-TableCollection.R index 216c44b..fae2335 100644 --- a/RcppTskit/R/Class-TableCollection.R +++ b/RcppTskit/R/Class-TableCollection.R @@ -105,21 +105,23 @@ TableCollection <- R6Class( #' @seealso \code{\link{tc_py_to_r}}, \code{\link{tc_load}}, and #' \code{\link[=TableCollection]{TableCollection$dump}}. #' @examples - #' ts_file <- system.file("examples/test.trees", package = "RcppTskit") - #' tc_r <- tc_load(ts_file) - #' is(tc_r) - #' tc_r$print() + #' \dontrun{ + #' ts_file <- system.file("examples/test.trees", package = "RcppTskit") + #' tc_r <- tc_load(ts_file) + #' is(tc_r) + #' tc_r$print() #' - #' # Transfer the table collection to reticulate Python and use tskit Python API - #' tskit <- get_tskit_py() - #' if (check_tskit_py(tskit)) { - #' tc_py <- tc_r$r_to_py() - #' is(tc_py) - #' tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) - #' tmp - #' tc_py$individuals$num_rows # 2 - #' tc_py$nodes$num_rows # 10 - #' tc_py$nodes$time # 0.0 ... 7.4702817 + #' # Transfer the table collection to reticulate Python and use tskit Python API + #' tskit <- get_tskit_py() + #' if (check_tskit_py(tskit)) { + #' tc_py <- tc_r$r_to_py() + #' is(tc_py) + #' tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) + #' tmp + #' tc_py$individuals$num_rows # 2 + #' tc_py$nodes$num_rows # 8 + #' tc_py$nodes$time # 0.0 ... 5.0093910 + #' } #' } r_to_py = function(tskit_module = get_tskit_py(), cleanup = TRUE) { tc_ptr_r_to_py( diff --git a/RcppTskit/R/Class-TreeSequence.R b/RcppTskit/R/Class-TreeSequence.R index 066530e..349d6c1 100644 --- a/RcppTskit/R/Class-TreeSequence.R +++ b/RcppTskit/R/Class-TreeSequence.R @@ -126,22 +126,24 @@ TreeSequence <- R6Class( #' @seealso \code{\link{ts_py_to_r}}, \code{\link{ts_load}}, and #' \code{\link[=TreeSequence]{TreeSequence$dump}}. #' @examples - #' ts_file <- system.file("examples/test.trees", package = "RcppTskit") - #' ts_r <- ts_load(ts_file) - #' is(ts_r) - #' ts_r$num_individuals() # 80 + #' \dontrun{ + #' ts_file <- system.file("examples/test.trees", package = "RcppTskit") + #' ts_r <- ts_load(ts_file) + #' is(ts_r) + #' ts_r$num_individuals() # 8 #' - #' # Transfer the tree sequence to reticulate Python and use tskit Python API - #' tskit <- get_tskit_py() - #' if (check_tskit_py(tskit)) { - #' ts_py <- ts_r$r_to_py() - #' is(ts_py) - #' ts_py$num_individuals # 80 - #' ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) - #' ts_py$num_individuals # 80 - #' ts2_py$num_individuals # 2 - #' ts2_py$num_nodes # 10 - #' ts2_py$tables$nodes$time # 0.0 ... 7.4702817 + #' # Transfer the tree sequence to reticulate Python and use tskit Python API + #' tskit <- get_tskit_py() + #' if (check_tskit_py(tskit)) { + #' ts_py <- ts_r$r_to_py() + #' is(ts_py) + #' ts_py$num_individuals # 8 + #' ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) + #' ts_py$num_individuals # 8 + #' ts2_py$num_individuals # 2 + #' ts2_py$num_nodes # 8 + #' ts2_py$tables$nodes$time # 0.0 ... 5.0093910 + #' } #' } r_to_py = function(tskit_module = get_tskit_py(), cleanup = TRUE) { ts_ptr_r_to_py( diff --git a/RcppTskit/R/RcppTskit.R b/RcppTskit/R/RcppTskit.R index ed73019..0694aed 100644 --- a/RcppTskit/R/RcppTskit.R +++ b/RcppTskit/R/RcppTskit.R @@ -24,10 +24,12 @@ #' \code{TRUE} if \code{object} is a reticulate Python module or \code{FALSE} #' otherwise. #' @examples -#' tskit <- get_tskit_py() -#' is(tskit) -#' if (check_tskit_py(tskit)) { -#' tskit$ALLELES_01 +#' \dontrun{ +#' tskit <- get_tskit_py() +#' is(tskit) +#' if (check_tskit_py(tskit)) { +#' tskit$ALLELES_01 +#' } #' } #' @export get_tskit_py <- function(object_name = "tskit", force = FALSE) { @@ -110,6 +112,7 @@ validate_logical_arg <- function(value, name) { # @title Converting load arguments to \code{tskit} bitwise options # @param skip_tables logical # @param skip_reference_sequence logical +# @details Used in TableCollection and TreeSequence classes. # @return Bitwise options. # @examples # load_args_to_options() @@ -362,20 +365,22 @@ tc_ptr_print <- function(tc) { # and \code{\link{ts_ptr_py_to_r}}, \code{\link{ts_ptr_load}}, and # \code{ts_ptr_dump} (Rcpp) for underlying pointer functions. # @examples -# ts_file <- system.file("examples/test.trees", package = "RcppTskit") -# ts_r <- ts_load(ts_file) -# ts_r_ptr <- ts_r$pointer -# is(ts_r_ptr) -# RcppTskit:::ts_ptr_num_samples(ts_r_ptr) # 160 -# # Transfer the tree sequence to reticulate Python and use tskit Python API -# ts_py <- RcppTskit:::ts_ptr_r_to_py(ts_r_ptr) -# is(ts_py) -# ts_py$num_individuals # 80 -# ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) -# ts_py$num_individuals # 80 -# ts2_py$num_individuals # 2 -# ts2_py$num_nodes # 10 -# ts2_py$tables$nodes$time # 0.0 ... 7.4702817 +# \dontrun{ +# ts_file <- system.file("examples/test.trees", package = "RcppTskit") +# ts_r <- ts_load(ts_file) +# ts_r_ptr <- ts_r$pointer +# is(ts_r_ptr) +# RcppTskit:::ts_ptr_num_samples(ts_r_ptr) # 16 +# # Transfer the tree sequence to reticulate Python and use tskit Python API +# ts_py <- RcppTskit:::ts_ptr_r_to_py(ts_r_ptr) +# is(ts_py) +# ts_py$num_individuals # 8 +# ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) +# ts_py$num_individuals # 8 +# ts2_py$num_individuals # 2 +# ts2_py$num_nodes # 8 +# ts2_py$tables$nodes$time # 0.0 ... 5.0093910 +# } ts_ptr_r_to_py <- function(ts, tskit_module = get_tskit_py(), cleanup = TRUE) { if (!is(ts, "externalptr")) { stop("ts must be an object of externalptr class!") @@ -407,20 +412,22 @@ ts_ptr_r_to_py <- function(ts, tskit_module = get_tskit_py(), cleanup = TRUE) { # and \code{\link{tc_ptr_py_to_r}}, \code{\link{tc_ptr_load}}, and # \code{tc_ptr_dump} (Rcpp) for underlying pointer functions. # @examples -# ts_file <- system.file("examples/test.trees", package = "RcppTskit") -# tc_r <- tc_load(ts_file) -# tc_r_ptr <- tc_r$pointer -# is(tc_r_ptr) -# RcppTskit:::tc_ptr_summary(tc_r_ptr) -# # Transfer the table collection to reticulate Python and use tskit Python API -# tc_py <- RcppTskit:::tc_ptr_r_to_py(tc_r_ptr) -# is(tc_py) -# tc_py$individuals$num_rows # 80 -# tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) -# tmp -# tc_py$individuals$num_rows # 2 -# tc_py$nodes$num_rows # 10 -# tc_py$nodes$time # 0.0 ... 7.4702817 +# \dontrun{ +# ts_file <- system.file("examples/test.trees", package = "RcppTskit") +# tc_r <- tc_load(ts_file) +# tc_r_ptr <- tc_r$pointer +# is(tc_r_ptr) +# RcppTskit:::tc_ptr_summary(tc_r_ptr) +# # Transfer the table collection to reticulate Python and use tskit Python API +# tc_py <- RcppTskit:::tc_ptr_r_to_py(tc_r_ptr) +# is(tc_py) +# tc_py$individuals$num_rows # 8 +# tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) +# tmp +# tc_py$individuals$num_rows # 2 +# tc_py$nodes$num_rows # 8 +# tc_py$nodes$time # 0.0 ... 5.0093910 +# } tc_ptr_r_to_py <- function(tc, tskit_module = get_tskit_py(), cleanup = TRUE) { if (!is(tc, "externalptr")) { stop("tc must be an object of externalptr class!") @@ -447,24 +454,26 @@ tc_ptr_r_to_py <- function(tc, tskit_module = get_tskit_py(), cleanup = TRUE) { # and \code{\link{ts_ptr_r_to_py}}, \code{\link{ts_ptr_load}}, and # \code{ts_ptr_dump} (Rcpp) for underlying pointer functions. # @examples -# ts_file <- system.file("examples/test.trees", package = "RcppTskit") +# \dontrun{ +# ts_file <- system.file("examples/test.trees", package = "RcppTskit") # -# # Use the tskit Python API to work with a tree sequence (via reticulate) -# tskit <- get_tskit_py() -# if (check_tskit_py(tskit)) { -# ts_py <- tskit$load(ts_file) -# is(ts_py) -# ts_py$num_individuals # 80 -# ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) -# ts_py$num_individuals # 80 -# ts2_py$num_individuals # 2 -# ts2_py$num_nodes # 10 -# ts2_py$tables$nodes$time # 0.0 ... 7.4702817 +# # Use the tskit Python API to work with a tree sequence (via reticulate) +# tskit <- get_tskit_py() +# if (check_tskit_py(tskit)) { +# ts_py <- tskit$load(ts_file) +# is(ts_py) +# ts_py$num_individuals # 8 +# ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) +# ts_py$num_individuals # 8 +# ts2_py$num_individuals # 2 +# ts2_py$num_nodes # 8 +# ts2_py$tables$nodes$time # 0.0 ... 5.0093910 # -# # Transfer the tree sequence to R and use RcppTskit -# ts2_ptr_r <- RcppTskit:::ts_ptr_py_to_r(ts2_py) -# is(ts2_ptr_r) -# RcppTskit:::ts_ptr_num_individuals(ts2_ptr_r) # 2 +# # Transfer the tree sequence to R and use RcppTskit +# ts2_ptr_r <- RcppTskit:::ts_ptr_py_to_r(ts2_py) +# is(ts2_ptr_r) +# RcppTskit:::ts_ptr_num_individuals(ts2_ptr_r) # 2 +# } # } ts_ptr_py_to_r <- function(ts, cleanup = TRUE) { if (!reticulate::is_py_object(ts)) { @@ -492,24 +501,26 @@ ts_ptr_py_to_r <- function(ts, cleanup = TRUE) { # and \code{\link{tc_ptr_r_to_py}}, \code{\link{tc_ptr_load}}, and # \code{tc_ptr_dump} (Rcpp) for underlying pointer functions. # @examples -# ts_file <- system.file("examples/test.trees", package = "RcppTskit") +# \dontrun{ +# ts_file <- system.file("examples/test.trees", package = "RcppTskit") # -# # Use the tskit Python API to work with a table collection (via reticulate) -# tskit <- get_tskit_py() -# if (check_tskit_py(tskit)) { -# tc_py <- tskit$TableCollection$load(ts_file) -# is(tc_py) -# tc_py$individuals$num_rows # 80 -# tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) -# tmp -# tc_py$individuals$num_rows # 2 -# tc_py$nodes$num_rows # 10 -# tc_py$nodes$time # 0.0 ... 7.4702817 +# # Use the tskit Python API to work with a table collection (via reticulate) +# tskit <- get_tskit_py() +# if (check_tskit_py(tskit)) { +# tc_py <- tskit$TableCollection$load(ts_file) +# is(tc_py) +# tc_py$individuals$num_rows # 8 +# tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) +# tmp +# tc_py$individuals$num_rows # 2 +# tc_py$nodes$num_rows # 8 +# tc_py$nodes$time # 0.0 ... 5.0093910 # -# # Transfer the table collection to R and use RcppTskit -# tc2_ptr_r <- RcppTskit:::tc_ptr_py_to_r(tc_py) -# is(tc2_ptr_r) -# RcppTskit:::tc_ptr_summary(tc2_ptr_r) +# # Transfer the table collection to R and use RcppTskit +# tc2_ptr_r <- RcppTskit:::tc_ptr_py_to_r(tc_py) +# is(tc2_ptr_r) +# RcppTskit:::tc_ptr_summary(tc2_ptr_r) +# } # } tc_ptr_py_to_r <- function(tc, cleanup = TRUE) { if (!reticulate::is_py_object(tc)) { @@ -533,24 +544,26 @@ tc_ptr_py_to_r <- function(tc, cleanup = TRUE) { #' @seealso \code{\link[=TreeSequence]{TreeSequence$r_to_py}} #' \code{\link{ts_load}}, and \code{\link[=TreeSequence]{TreeSequence$dump}}. #' @examples -#' ts_file <- system.file("examples/test.trees", package = "RcppTskit") +#' \dontrun{ +#' ts_file <- system.file("examples/test.trees", package = "RcppTskit") #' -#' # Use the tskit Python API to work with a tree sequence (via reticulate) -#' tskit <- get_tskit_py() -#' if (check_tskit_py(tskit)) { -#' ts_py <- tskit$load(ts_file) -#' is(ts_py) -#' ts_py$num_individuals # 80 -#' ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) -#' ts_py$num_individuals # 80 -#' ts2_py$num_individuals # 2 -#' ts2_py$num_nodes # 10 -#' ts2_py$tables$nodes$time # 0.0 ... 7.4702817 +#' # Use the tskit Python API to work with a tree sequence (via reticulate) +#' tskit <- get_tskit_py() +#' if (check_tskit_py(tskit)) { +#' ts_py <- tskit$load(ts_file) +#' is(ts_py) +#' ts_py$num_individuals # 8 +#' ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) +#' ts_py$num_individuals # 8 +#' ts2_py$num_individuals # 2 +#' ts2_py$num_nodes # 8 +#' ts2_py$tables$nodes$time # 0.0 ... 5.0093910 #' -#' # Transfer the tree sequence to R and use RcppTskit -#' ts2_r <- ts_py_to_r(ts2_py) -#' is(ts2_r) -#' ts2_r$num_individuals() # 2 +#' # Transfer the tree sequence to R and use RcppTskit +#' ts2_r <- ts_py_to_r(ts2_py) +#' is(ts2_r) +#' ts2_r$num_individuals() # 2 +#' } #' } #' @export ts_py_to_r <- function(ts, cleanup = TRUE) { @@ -568,24 +581,26 @@ ts_py_to_r <- function(ts, cleanup = TRUE) { #' @seealso \code{\link[=TableCollection]{TableCollection$r_to_py}} #' \code{\link{tc_load}}, and \code{\link[=TableCollection]{TableCollection$dump}}. #' @examples -#' ts_file <- system.file("examples/test.trees", package = "RcppTskit") +#' \dontrun{ +#' ts_file <- system.file("examples/test.trees", package = "RcppTskit") #' -#' # Use the tskit Python API to work with a table collection (via reticulate) -#' tskit <- get_tskit_py() -#' if (check_tskit_py(tskit)) { -#' tc_py <- tskit$TableCollection$load(ts_file) -#' is(tc_py) -#' tc_py$individuals$num_rows # 80 -#' tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) -#' tmp -#' tc_py$individuals$num_rows # 2 -#' tc_py$nodes$num_rows # 10 -#' tc_py$nodes$time # 0.0 ... 7.4702817 +#' # Use the tskit Python API to work with a table collection (via reticulate) +#' tskit <- get_tskit_py() +#' if (check_tskit_py(tskit)) { +#' tc_py <- tskit$TableCollection$load(ts_file) +#' is(tc_py) +#' tc_py$individuals$num_rows # 8 +#' tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) +#' tmp +#' tc_py$individuals$num_rows # 2 +#' tc_py$nodes$num_rows # 8 +#' tc_py$nodes$time # 0.0 ... 5.0093910 #' -#' # Transfer the table collection to R and use RcppTskit -#' tc_r <- tc_py_to_r(tc_py) -#' is(tc_r) -#' tc_r$print() +#' # Transfer the table collection to R and use RcppTskit +#' tc_r <- tc_py_to_r(tc_py) +#' is(tc_r) +#' tc_r$print() +#' } #' } #' @export tc_py_to_r <- function(tc, cleanup = TRUE) { diff --git a/RcppTskit/cran-comments.md b/RcppTskit/cran-comments.md index a3b8ddf..3d53456 100644 --- a/RcppTskit/cran-comments.md +++ b/RcppTskit/cran-comments.md @@ -6,6 +6,10 @@ * Re-submitting to CRAN. +* Submitted to CRAN on 2026-02-12 and got feedback to reduce examples time. + Have addressed this by reducing size of `.trees` and `\dontrun{}` for + any function that calls `get_tskit_py()`. + * Submitted to CRAN on 2026-02-09 and got feedback to quote Python, C, and Rust and to be mindful about case sensitivity. diff --git a/RcppTskit/inst/examples/create_test.trees.R b/RcppTskit/inst/examples/create_test.trees.R index 213da2d..b23c808 100644 --- a/RcppTskit/inst/examples/create_test.trees.R +++ b/RcppTskit/inst/examples/create_test.trees.R @@ -24,29 +24,29 @@ tskit <- import("tskit") # Generate a tree sequence for testing ts <- msprime$sim_ancestry( - samples = 80, - sequence_length = 1e4, - recombination_rate = 1e-4, + samples = 8, + sequence_length = 1e2, + recombination_rate = 1e-2, random_seed = 42 ) -ts <- msprime$sim_mutations(ts, rate = 1e-2, random_seed = 42) +ts <- msprime$sim_mutations(ts, rate = 2e-2, random_seed = 42) ts cat(py_str(ts)) builtins$print(ts) ts$num_provenances # 2 ts$num_populations # 1 ts$num_migrations # 0 -ts$num_individuals # 80 -ts$num_samples # 160 -ts$num_nodes # 344 -ts$num_edges # 414 -ts$num_trees # 26 -ts$num_sites # 2376 -ts$num_mutations # 2700 -ts$sequence_length # 10000.0 +ts$num_individuals # 8 +ts$num_samples # 16 +ts$num_nodes # 39 +ts$num_edges # 59 +ts$num_trees # 9 +ts$num_sites # 25 +ts$num_mutations # 30 +ts$sequence_length # 100.0 ts$time_units # generations ts$min_time # 0.0 -ts$max_time # 7.470281689748594 +ts$max_time # 6.961993337190808 ts$metadata # b'' builtins$type(ts$metadata) # @@ -96,7 +96,7 @@ ts$dump("inst/examples/test.trees") ts <- tskit$load("inst/examples/test2.trees") ts -ts$num_individuals # 81 +ts$num_individuals # 9 ts$metadata # $mean_coverage diff --git a/RcppTskit/inst/examples/create_test.trees.py b/RcppTskit/inst/examples/create_test.trees.py index 4c00823..0879455 100644 --- a/RcppTskit/inst/examples/create_test.trees.py +++ b/RcppTskit/inst/examples/create_test.trees.py @@ -6,25 +6,25 @@ # Generate a tree sequence for testing ts = msprime.sim_ancestry( - samples=80, sequence_length=1e4, recombination_rate=1e-4, random_seed=42 + samples=8, sequence_length=1e2, recombination_rate=1e-2, random_seed=42 ) -ts = msprime.sim_mutations(ts, rate=1e-2, random_seed=42) +ts = msprime.sim_mutations(ts, rate=2e-2, random_seed=42) ts print(ts) ts.num_provenances # 2 ts.num_populations # 1 ts.num_migrations # 0 -ts.num_individuals # 80 -ts.num_samples # 160 -ts.num_nodes # 344 -ts.num_edges # 414 -ts.num_trees # 26 -ts.num_sites # 2376 -ts.num_mutations # 2700 -ts.sequence_length # 10000.0 +ts.num_individuals # 8 +ts.num_samples # 16 +ts.num_nodes # 39 +ts.num_edges # 59 +ts.num_trees # 9 +ts.num_sites # 25 +ts.num_mutations # 30 +ts.sequence_length # 100.0 ts.time_units # 'generations' ts.min_time # 0.0 -ts.max_time # 7.470281689748594 +ts.max_time # 6.961993337190808 ts.metadata # b'' type(ts.metadata) # bytes @@ -66,39 +66,41 @@ # ts = tskit.load("RcppTskit/inst/examples/test.trees") ts2_tables = ts.dump_tables() len(ts2_tables.metadata) -ts2_tables.metadata = tskit.pack_bytes('{"seed": 42, "note": "ts2"}') +# ts2_tables.metadata = tskit.pack_bytes('{"seed": 42, "note": "ts2"}') +# TypeError: string argument without an encoding # Create a second tree sequence with metadata in some tables basic_schema = tskit.MetadataSchema({"codec": "json"}) +basic_schema # {"codec":"json"} - tables = ts.dump_tables() - tables.metadata_schema = basic_schema +tables.metadata_schema # {"codec":"json"} tables.metadata = {"mean_coverage": 200.5} +tables.metadata # {'mean_coverage': 200.5} tables.individuals.metadata_schema = tskit.MetadataSchema(None) tables.individuals.metadata -len(tables.individuals) # 80 +len(tables.individuals) # 8 tables.individuals[0] # IndividualTableRow(flags=0, location=array([], dtype=float64), parents=array([], dtype=int32), metadata=b'') tables.individuals[0].metadata # b'' -tables.individuals[79] +tables.individuals[7] # ... -tables.individuals[79].metadata +tables.individuals[7].metadata # b'' tables.individuals.add_row(metadata=b"SOME CUSTOM BYTES #!@") -tables.individuals[80] +tables.individuals[8] # IndividualTableRow(flags=0, location=array([], dtype=float64), parents=array([], dtype=int32), metadata=b'SOME CUSTOM BYTES #!@') -tables.individuals[80].metadata +tables.individuals[8].metadata # b'SOME CUSTOM BYTES #!@' ts = tables.tree_sequence() ts -ts.num_individuals # 81 +ts.num_individuals # 9 ts.metadata # {'mean_coverage': 200.5} type(ts.metadata) # dict diff --git a/RcppTskit/inst/examples/test.trees b/RcppTskit/inst/examples/test.trees index 984206fb87b4896f5a772af4af6ca922e506d118..0d027c39997a65b9a0ac88b6855a2ef0c233dc4d 100644 GIT binary patch literal 11892 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
Tbo!5H(sa!{BoVu1NPiY#5O-n-fYe3euC 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 Xv2m$sePYwnQc~*oNlZ+PZ&2@lnB|Y9 diff --git a/RcppTskit/inst/examples/test2.trees b/RcppTskit/inst/examples/test2.trees index a2c00996c605319444f2a2d482ad1c9ce77ec853..930f3b8027a96d3e6934398693722d1289545cd4 100644 GIT binary patch literal 11964 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 C1J?Th literal 150580 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 coJTkBzu(;gt|Lu? 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 diff --git a/RcppTskit/man/TableCollection.Rd b/RcppTskit/man/TableCollection.Rd index 067c0f9..11c6a39 100644 --- a/RcppTskit/man/TableCollection.Rd +++ b/RcppTskit/man/TableCollection.Rd @@ -44,21 +44,23 @@ is(ts) ## Method `TableCollection$r_to_py` ## ------------------------------------------------ -ts_file <- system.file("examples/test.trees", package = "RcppTskit") -tc_r <- tc_load(ts_file) -is(tc_r) -tc_r$print() - -# Transfer the table collection to reticulate Python and use tskit Python API -tskit <- get_tskit_py() -if (check_tskit_py(tskit)) { - tc_py <- tc_r$r_to_py() - is(tc_py) - tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) - tmp - tc_py$individuals$num_rows # 2 - tc_py$nodes$num_rows # 10 - tc_py$nodes$time # 0.0 ... 7.4702817 +\dontrun{ + ts_file <- system.file("examples/test.trees", package = "RcppTskit") + tc_r <- tc_load(ts_file) + is(tc_r) + tc_r$print() + + # Transfer the table collection to reticulate Python and use tskit Python API + tskit <- get_tskit_py() + if (check_tskit_py(tskit)) { + tc_py <- tc_r$r_to_py() + is(tc_py) + tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) + tmp + tc_py$individuals$num_rows # 2 + tc_py$nodes$num_rows # 8 + tc_py$nodes$time # 0.0 ... 5.0093910 + } } ## ------------------------------------------------ @@ -255,21 +257,23 @@ Table collection in reticulate Python. } \subsection{Examples}{ \if{html}{\out{

}} diff --git a/RcppTskit/man/TreeSequence.Rd b/RcppTskit/man/TreeSequence.Rd index b89fba3..04d8f86 100644 --- a/RcppTskit/man/TreeSequence.Rd +++ b/RcppTskit/man/TreeSequence.Rd @@ -57,22 +57,24 @@ ts ## Method `TreeSequence$r_to_py` ## ------------------------------------------------ -ts_file <- system.file("examples/test.trees", package = "RcppTskit") -ts_r <- ts_load(ts_file) -is(ts_r) -ts_r$num_individuals() # 80 - -# Transfer the tree sequence to reticulate Python and use tskit Python API -tskit <- get_tskit_py() -if (check_tskit_py(tskit)) { - ts_py <- ts_r$r_to_py() - is(ts_py) - ts_py$num_individuals # 80 - ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) - ts_py$num_individuals # 80 - ts2_py$num_individuals # 2 - ts2_py$num_nodes # 10 - ts2_py$tables$nodes$time # 0.0 ... 7.4702817 +\dontrun{ + ts_file <- system.file("examples/test.trees", package = "RcppTskit") + ts_r <- ts_load(ts_file) + is(ts_r) + ts_r$num_individuals() # 8 + + # Transfer the tree sequence to reticulate Python and use tskit Python API + tskit <- get_tskit_py() + if (check_tskit_py(tskit)) { + ts_py <- ts_r$r_to_py() + is(ts_py) + ts_py$num_individuals # 8 + ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) + ts_py$num_individuals # 8 + ts2_py$num_individuals # 2 + ts2_py$num_nodes # 8 + ts2_py$tables$nodes$time # 0.0 ... 5.0093910 + } } ## ------------------------------------------------ @@ -423,22 +425,24 @@ Tree sequence in reticulate Python. } \subsection{Examples}{ \if{html}{\out{
}} -\preformatted{ts_file <- system.file("examples/test.trees", package = "RcppTskit") -ts_r <- ts_load(ts_file) -is(ts_r) -ts_r$num_individuals() # 80 - -# Transfer the tree sequence to reticulate Python and use tskit Python API -tskit <- get_tskit_py() -if (check_tskit_py(tskit)) { - ts_py <- ts_r$r_to_py() - is(ts_py) - ts_py$num_individuals # 80 - ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) - ts_py$num_individuals # 80 - ts2_py$num_individuals # 2 - ts2_py$num_nodes # 10 - ts2_py$tables$nodes$time # 0.0 ... 7.4702817 +\preformatted{\dontrun{ + ts_file <- system.file("examples/test.trees", package = "RcppTskit") + ts_r <- ts_load(ts_file) + is(ts_r) + ts_r$num_individuals() # 8 + + # Transfer the tree sequence to reticulate Python and use tskit Python API + tskit <- get_tskit_py() + if (check_tskit_py(tskit)) { + ts_py <- ts_r$r_to_py() + is(ts_py) + ts_py$num_individuals # 8 + ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) + ts_py$num_individuals # 8 + ts2_py$num_individuals # 2 + ts2_py$num_nodes # 8 + ts2_py$tables$nodes$time # 0.0 ... 5.0093910 + } } } \if{html}{\out{
}} diff --git a/RcppTskit/man/get_tskit_py.Rd b/RcppTskit/man/get_tskit_py.Rd index 855eef2..7987748 100644 --- a/RcppTskit/man/get_tskit_py.Rd +++ b/RcppTskit/man/get_tskit_py.Rd @@ -48,9 +48,11 @@ This function is meant for users running \code{tskit <- get_tskit_py()} }} \examples{ -tskit <- get_tskit_py() -is(tskit) -if (check_tskit_py(tskit)) { - tskit$ALLELES_01 +\dontrun{ + tskit <- get_tskit_py() + is(tskit) + if (check_tskit_py(tskit)) { + tskit$ALLELES_01 + } } } diff --git a/RcppTskit/man/tc_py_to_r.Rd b/RcppTskit/man/tc_py_to_r.Rd index 8c473ee..b481ad3 100644 --- a/RcppTskit/man/tc_py_to_r.Rd +++ b/RcppTskit/man/tc_py_to_r.Rd @@ -19,24 +19,26 @@ This function saves a table collection from reticulate Python to disk and reads it into R for use with \code{RcppTskit}. } \examples{ -ts_file <- system.file("examples/test.trees", package = "RcppTskit") +\dontrun{ + ts_file <- system.file("examples/test.trees", package = "RcppTskit") -# Use the tskit Python API to work with a table collection (via reticulate) -tskit <- get_tskit_py() -if (check_tskit_py(tskit)) { - tc_py <- tskit$TableCollection$load(ts_file) - is(tc_py) - tc_py$individuals$num_rows # 80 - tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) - tmp - tc_py$individuals$num_rows # 2 - tc_py$nodes$num_rows # 10 - tc_py$nodes$time # 0.0 ... 7.4702817 + # Use the tskit Python API to work with a table collection (via reticulate) + tskit <- get_tskit_py() + if (check_tskit_py(tskit)) { + tc_py <- tskit$TableCollection$load(ts_file) + is(tc_py) + tc_py$individuals$num_rows # 8 + tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) + tmp + tc_py$individuals$num_rows # 2 + tc_py$nodes$num_rows # 8 + tc_py$nodes$time # 0.0 ... 5.0093910 - # Transfer the table collection to R and use RcppTskit - tc_r <- tc_py_to_r(tc_py) - is(tc_r) - tc_r$print() + # Transfer the table collection to R and use RcppTskit + tc_r <- tc_py_to_r(tc_py) + is(tc_r) + tc_r$print() + } } } \seealso{ diff --git a/RcppTskit/man/ts_py_to_r.Rd b/RcppTskit/man/ts_py_to_r.Rd index 7dfe69f..2ab7788 100644 --- a/RcppTskit/man/ts_py_to_r.Rd +++ b/RcppTskit/man/ts_py_to_r.Rd @@ -19,24 +19,26 @@ This function saves a tree sequence from reticulate Python to disk and reads it into R for use with \code{RcppTskit}. } \examples{ -ts_file <- system.file("examples/test.trees", package = "RcppTskit") +\dontrun{ + ts_file <- system.file("examples/test.trees", package = "RcppTskit") -# Use the tskit Python API to work with a tree sequence (via reticulate) -tskit <- get_tskit_py() -if (check_tskit_py(tskit)) { - ts_py <- tskit$load(ts_file) - is(ts_py) - ts_py$num_individuals # 80 - ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) - ts_py$num_individuals # 80 - ts2_py$num_individuals # 2 - ts2_py$num_nodes # 10 - ts2_py$tables$nodes$time # 0.0 ... 7.4702817 + # Use the tskit Python API to work with a tree sequence (via reticulate) + tskit <- get_tskit_py() + if (check_tskit_py(tskit)) { + ts_py <- tskit$load(ts_file) + is(ts_py) + ts_py$num_individuals # 8 + ts2_py <- ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) + ts_py$num_individuals # 8 + ts2_py$num_individuals # 2 + ts2_py$num_nodes # 8 + ts2_py$tables$nodes$time # 0.0 ... 5.0093910 - # Transfer the tree sequence to R and use RcppTskit - ts2_r <- ts_py_to_r(ts2_py) - is(ts2_r) - ts2_r$num_individuals() # 2 + # Transfer the tree sequence to R and use RcppTskit + ts2_r <- ts_py_to_r(ts2_py) + is(ts2_r) + ts2_r$num_individuals() # 2 + } } } \seealso{ diff --git a/RcppTskit/tests/testthat/test_TableCollection.R b/RcppTskit/tests/testthat/test_TableCollection.R index b077cea..eebabd3 100644 --- a/RcppTskit/tests/testthat/test_TableCollection.R +++ b/RcppTskit/tests/testthat/test_TableCollection.R @@ -78,7 +78,7 @@ test_that("TableCollection and TreeSequence round-trip works", { "time_units", "has_metadata" ), - value = c(10000, "generations", FALSE) + value = c(100, "generations", FALSE) ), tables = data.frame( table = c( @@ -91,7 +91,7 @@ test_that("TableCollection and TreeSequence round-trip works", { "sites", "mutations" ), - number = c(2, 1, 0, 80, 344, 414, 2376, 2700), + number = c(2, 1, 0, 8, 39, 59, 25, 30), has_metadata = c( NA, # provenances have no metadata TRUE, @@ -142,7 +142,7 @@ test_that("TableCollection and TreeSequence round-trip works", { "time_units", "has_metadata" ), - value = c(10000, "generations", FALSE) + value = c(100, "generations", FALSE) ), tables = data.frame( table = c( @@ -155,7 +155,7 @@ test_that("TableCollection and TreeSequence round-trip works", { "sites", "mutations" ), - number = c(2, 1, 0, 80, 344, 414, 2376, 2700), + number = c(2, 1, 0, 8, 39, 59, 25, 30), has_metadata = c( NA, # provenances have no metadata TRUE, diff --git a/RcppTskit/tests/testthat/test_load_summary_and_dump.R b/RcppTskit/tests/testthat/test_load_summary_and_dump.R index 5b1281f..320a3be 100644 --- a/RcppTskit/tests/testthat/test_load_summary_and_dump.R +++ b/RcppTskit/tests/testthat/test_load_summary_and_dump.R @@ -135,17 +135,17 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "num_provenances" = 2L, "num_populations" = 1L, "num_migrations" = 0L, - "num_individuals" = 80L, - "num_samples" = 160L, - "num_nodes" = 344L, - "num_edges" = 414L, - "num_trees" = 26L, - "num_sites" = 2376L, - "num_mutations" = 2700L, - "sequence_length" = 10000.0, + "num_individuals" = 8L, + "num_samples" = 16L, + "num_nodes" = 39L, + "num_edges" = 59L, + "num_trees" = 9L, + "num_sites" = 25L, + "num_mutations" = 30L, + "sequence_length" = 100.0, "time_units" = "generations", "min_time" = 0, - "max_time" = 7.470281689748594 + "max_time" = 6.9619933371908083 ) ) @@ -174,57 +174,57 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { expect_error(ts_ptr_num_individuals(ts)) n_ptr <- ts_ptr_num_individuals(ts_ptr) expect_true(is.integer(n_ptr)) - expect_equal(n_ptr, 80L) - expect_equal(ts$num_individuals(), 80L) + expect_equal(n_ptr, 8L) + expect_equal(ts$num_individuals(), 8L) expect_error(ts_ptr_num_samples()) expect_error(ts_ptr_num_samples(ts)) n_ptr <- ts_ptr_num_samples(ts_ptr) expect_true(is.integer(n_ptr)) - expect_equal(n_ptr, 160L) - expect_equal(ts$num_samples(), 160L) + expect_equal(n_ptr, 16L) + expect_equal(ts$num_samples(), 16L) expect_error(ts_ptr_num_nodes()) expect_error(ts_ptr_num_nodes(ts)) n_ptr <- ts_ptr_num_nodes(ts_ptr) expect_true(is.integer(n_ptr)) - expect_equal(n_ptr, 344L) - expect_equal(ts$num_nodes(), 344L) + expect_equal(n_ptr, 39L) + expect_equal(ts$num_nodes(), 39L) expect_error(ts_ptr_num_edges()) expect_error(ts_ptr_num_edges(ts)) n_ptr <- ts_ptr_num_edges(ts_ptr) expect_true(is.integer(n_ptr)) - expect_equal(n_ptr, 414L) - expect_equal(ts$num_edges(), 414L) + expect_equal(n_ptr, 59L) + expect_equal(ts$num_edges(), 59L) expect_error(ts_ptr_num_trees()) expect_error(ts_ptr_num_trees(ts)) n_ptr <- ts_ptr_num_trees(ts_ptr) expect_true(is.integer(n_ptr)) - expect_equal(n_ptr, 26L) - expect_equal(ts$num_trees(), 26L) + expect_equal(n_ptr, 9L) + expect_equal(ts$num_trees(), 9L) expect_error(ts_ptr_num_sites()) expect_error(ts_ptr_num_sites(ts)) n_ptr <- ts_ptr_num_sites(ts_ptr) expect_true(is.integer(n_ptr)) - expect_equal(n_ptr, 2376L) - expect_equal(ts$num_sites(), 2376L) + expect_equal(n_ptr, 25L) + expect_equal(ts$num_sites(), 25L) expect_error(ts_ptr_num_mutations()) expect_error(ts_ptr_num_mutations(ts)) n_ptr <- ts_ptr_num_mutations(ts_ptr) expect_true(is.integer(n_ptr)) - expect_equal(n_ptr, 2700L) - expect_equal(ts$num_mutations(), 2700L) + expect_equal(n_ptr, 30L) + expect_equal(ts$num_mutations(), 30L) expect_error(ts_ptr_sequence_length()) expect_error(ts_ptr_sequence_length(ts)) n_ptr <- ts_ptr_sequence_length(ts_ptr) expect_true(is.numeric(n_ptr)) - expect_equal(n_ptr, 10000) - expect_equal(ts$sequence_length(), 10000) + expect_equal(n_ptr, 100) + expect_equal(ts$sequence_length(), 100) expect_error(ts_ptr_time_units()) expect_error(ts_ptr_time_units(ts)) @@ -244,8 +244,8 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { expect_error(ts_ptr_max_time(ts)) d_ptr <- ts_ptr_max_time(ts_ptr) expect_true(is.numeric(d_ptr)) - expect_equal(d_ptr, 7.470281689748594) - expect_equal(ts$max_time(), 7.470281689748594) + expect_equal(d_ptr, 6.9619933371908083) + expect_equal(ts$max_time(), 6.9619933371908083) # ---- tc_ptr_summary() ---- @@ -290,7 +290,7 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "max_time", "has_metadata" ), - value = c(160, 10000, 26, "generations", 0.0, 7.470281689748594, FALSE) + value = c(16, 100, 9, "generations", 0.0, 6.9619933371908083, FALSE) ), tables = data.frame( table = c( @@ -303,7 +303,7 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "sites", "mutations" ), - number = c(2, 1, 0, 80, 344, 414, 2376, 2700), + number = c(2, 1, 0, 8, 39, 59, 25, 30), has_metadata = c( NA, # provenances have no metadata TRUE, @@ -338,7 +338,7 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "time_units", "has_metadata" ), - value = c(10000, "generations", FALSE) + value = c(100, "generations", FALSE) ), tables = data.frame( table = c( @@ -351,7 +351,7 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "sites", "mutations" ), - number = c(2, 1, 0, 80, 344, 414, 2376, 2700), + number = c(2, 1, 0, 8, 39, 59, 25, 30), has_metadata = c( NA, # provenances have no metadata TRUE, @@ -401,17 +401,17 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "num_provenances" = 2L, "num_populations" = 1L, "num_migrations" = 0L, - "num_individuals" = 80L, - "num_samples" = 160L, - "num_nodes" = 344L, - "num_edges" = 414L, - "num_trees" = 26L, - "num_sites" = 2376L, - "num_mutations" = 2700L, - "sequence_length" = 10000.0, + "num_individuals" = 8L, + "num_samples" = 16L, + "num_nodes" = 39L, + "num_edges" = 59L, + "num_trees" = 9L, + "num_sites" = 25L, + "num_mutations" = 30L, + "sequence_length" = 100.0, "time_units" = "generations", "min_time" = 0.0, - "max_time" = 7.470281689748594 + "max_time" = 6.9619933371908083 ) ) @@ -487,17 +487,17 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "num_provenances" = 2L, "num_populations" = 1L, "num_migrations" = 0L, - "num_individuals" = 80L, - "num_samples" = 160L, - "num_nodes" = 344L, - "num_edges" = 414L, - "num_trees" = 26L, - "num_sites" = 2376L, - "num_mutations" = 2700L, - "sequence_length" = 10000.0, + "num_individuals" = 8L, + "num_samples" = 16L, + "num_nodes" = 39L, + "num_edges" = 59L, + "num_trees" = 9L, + "num_sites" = 25L, + "num_mutations" = 30L, + "sequence_length" = 100.0, "time_units" = "generations", "min_time" = 0.0, - "max_time" = 7.470281689748594 + "max_time" = 6.9619933371908083 ) ) @@ -529,12 +529,12 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "num_provenances" = 2L, "num_populations" = 1L, "num_migrations" = 0L, - "num_individuals" = 80L, - "num_nodes" = 344L, - "num_edges" = 414L, - "num_sites" = 2376L, - "num_mutations" = 2700L, - "sequence_length" = 10000.0, + "num_individuals" = 8L, + "num_nodes" = 39L, + "num_edges" = 59L, + "num_sites" = 25L, + "num_mutations" = 30L, + "sequence_length" = 100.0, "time_units" = "generations" ) ) @@ -572,17 +572,17 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "num_provenances" = 2L, "num_populations" = 1L, "num_migrations" = 0L, - "num_individuals" = 81L, - "num_samples" = 160L, - "num_nodes" = 344L, - "num_edges" = 414L, - "num_trees" = 26L, - "num_sites" = 2376L, - "num_mutations" = 2700L, - "sequence_length" = 10000.0, + "num_individuals" = 9L, + "num_samples" = 16L, + "num_nodes" = 39L, + "num_edges" = 59L, + "num_trees" = 9L, + "num_sites" = 25L, + "num_mutations" = 30L, + "sequence_length" = 100.0, "time_units" = "generations", "min_time" = 0, - "max_time" = 7.470281689748594 + "max_time" = 6.9619933371908083 ) ) @@ -620,7 +620,7 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "max_time", "has_metadata" ), - value = c(160, 10000, 26, "generations", 0.0, 7.470281689748594, TRUE) + value = c(16, 100, 9, "generations", 0.0, 6.9619933371908083, TRUE) ), tables = data.frame( table = c( @@ -633,7 +633,7 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "sites", "mutations" ), - number = c(2, 1, 0, 81, 344, 414, 2376, 2700), + number = c(2, 1, 0, 9, 39, 59, 25, 30), has_metadata = c( NA, # provenances have no metadata TRUE, @@ -698,7 +698,7 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "time_units", "has_metadata" ), - value = c(10000, "generations", TRUE) + value = c(100, "generations", TRUE) ), tables = data.frame( table = c( @@ -711,7 +711,7 @@ test_that("ts/tc_load(), ts/tc_summary*(), and ts/tc_dump(x) work", { "sites", "mutations" ), - number = c(2, 1, 0, 81, 344, 414, 2376, 2700), + number = c(2, 1, 0, 9, 39, 59, 25, 30), has_metadata = c( NA, # provenances have no metadata TRUE, diff --git a/RcppTskit/vignettes/RcppTskit_intro.qmd b/RcppTskit/vignettes/RcppTskit_intro.qmd index 8656036..2fd159b 100644 --- a/RcppTskit/vignettes/RcppTskit_intro.qmd +++ b/RcppTskit/vignettes/RcppTskit_intro.qmd @@ -252,11 +252,11 @@ tskit <- get_tskit_py() if (check_tskit_py(tskit)) { ts_py <- ts$r_to_py() # ... continue in reticulate Python ... - ts_py$num_individuals # 80 + ts_py$num_individuals # 8 ts2_py = ts_py$simplify(samples = c(0L, 1L, 2L, 3L)) ts2_py$num_individuals # 2 - ts2_py$num_nodes # 10 - ts2_py$tables$nodes$time # 0.0 ... 7.4702817 + ts2_py$num_nodes # 8 + ts2_py$tables$nodes$time # 0.0 ... 5.0093910 # ... and to bring it back to R, use ... ts2 <- ts_py_to_r(ts2_py) ts2$num_individuals() # 2 @@ -269,7 +269,7 @@ ts$dump(file = ts_file) # ... continue in standard Python ... # import tskit # ts = tskit.load("insert_ts_file_path_here") -# ts.num_individuals # 80 +# ts.num_individuals # 8 # ts2 = ts.simplify(samples = [0, 1, 2, 3]) # ts2.num_individuals # 2 # ts2.dump("insert_ts_file_path_here") @@ -286,8 +286,8 @@ if (check_tskit_py(tskit)) { tmp <- tc_py$simplify(samples = c(0L, 1L, 2L, 3L)) tmp tc_py$individuals$num_rows # 2 - tc_py$nodes$num_rows # 10 - tc_py$nodes$time # 0.0 ... 7.4702817 + tc_py$nodes$num_rows # 8 + tc_py$nodes$time # 0.0 ... 5.0093910 # ... and to bring it back to R, use ... tc2 <- tc_py_to_r(tc_py) tc2$print()