Skip to content

Commit 7f69040

Browse files
committed
Address that tsk_size_t is uint64_t
Fixes #108
1 parent cdb656e commit 7f69040

12 files changed

Lines changed: 482 additions & 173 deletions

RcppTskit/DESCRIPTION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ BugReports: https://github.com/HighlanderLab/RcppTskit/issues
3232
Depends:
3333
R (>= 4.0.0)
3434
Imports:
35+
bit64,
3536
methods,
3637
R6,
3738
Rcpp (>= 1.0.8),

RcppTskit/NAMESPACE

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ export(tskit_version)
1515
importFrom(R6,R6Class)
1616
importFrom(Rcpp,cppFunction)
1717
importFrom(Rcpp,registerPlugin)
18+
importFrom(bit64,as.integer64)
19+
importFrom(bit64,is.integer64)
1820
importFrom(methods,is)
1921
importFrom(reticulate,import)
2022
importFrom(reticulate,is_py_object)

RcppTskit/NEWS.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ and releases adhere to [Semantic Versioning](https://semver.org/spec/v2.0.0.html
3939
constructor argument from `pointer` to `xptr`.
4040
- Ensured `TableCollection$tree_sequence()` matches `tskit Python` API:
4141
it now builds indexes on the `TableCollection`, if indexes are not present.
42+
- We now use `bit64::integer64` (signed 64 bit integer) instead of `int` aiming
43+
to approach `tsk_size_t` in `tskit C` (unsigned 64 bit integer); in low-level
44+
`rtsk_treeseq_get_num_*()` wrappers and count/metadata-length fields.
4245
- TODO
4346

4447
### Maintenance

RcppTskit/R/RcppExports.R

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
# Generated by using Rcpp::compileAttributes() -> do not edit by hand
22
# Generator token: 10BE3573-1514-4C36-9D1C-5A225CD40393
33

4+
test_validate_options <- function(options, supported) {
5+
.Call(`_RcppTskit_test_validate_options`, options, supported)
6+
}
7+
8+
test_rtsk_wrap_tsk_size_t_as_integer64 <- function(value, force_range_error = FALSE) {
9+
.Call(`_RcppTskit_test_rtsk_wrap_tsk_size_t_as_integer64`, value, force_range_error)
10+
}
11+
412
#' @title Report the version of installed kastore C API
513
#' @details The version is stored in the installed header \code{kastore.h}.
614
#' @return A named vector with three elements \code{major}, \code{minor}, and

RcppTskit/R/RcppTskit-package.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#' @keywords internal
2121
#'
2222
#' @useDynLib RcppTskit, .registration = TRUE
23+
#' @importFrom bit64 as.integer64 is.integer64
2324
#' @importFrom methods is
2425
#' @importFrom R6 R6Class
2526
#' @importFrom Rcpp cppFunction registerPlugin

RcppTskit/R/RcppTskit.R

Lines changed: 53 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,9 @@ tc_read <- tc_load
214214
# compared to Python API, so also not available here.
215215
# @return A list with two data.frames; the first contains tree sequence
216216
# properties and their value; the second contains the numbers of rows in
217-
# tables and the length of their metadata.
217+
# tables and the length of their metadata. All columns are character as they
218+
# contain different types of values. Use specific functions if you want to
219+
# obtain non-character values
218220
# @seealso \code{\link[=TreeSequence]{TreeSequence$print}} on how this
219221
# function is used and presented to users.
220222
# @examples
@@ -243,17 +245,17 @@ rtsk_treeseq_print <- function(ts) {
243245
"file_uuid"
244246
),
245247
value = c(
246-
tmp_summary[["num_samples"]],
247-
tmp_summary[["num_trees"]],
248-
tmp_summary[["sequence_length"]],
249-
tmp_summary[["discrete_genome"]],
250-
tmp_summary[["has_reference_sequence"]],
251-
tmp_summary[["time_units"]],
252-
tmp_summary[["discrete_time"]],
253-
tmp_summary[["min_time"]],
254-
tmp_summary[["max_time"]],
255-
tmp_metadata[["ts"]] > 0,
256-
tmp_summary[["file_uuid"]]
248+
as.character(tmp_summary[["num_samples"]]),
249+
as.character(tmp_summary[["num_trees"]]),
250+
as.character(tmp_summary[["sequence_length"]]),
251+
as.character(tmp_summary[["discrete_genome"]]),
252+
as.character(tmp_summary[["has_reference_sequence"]]),
253+
as.character(tmp_summary[["time_units"]]),
254+
as.character(tmp_summary[["discrete_time"]]),
255+
as.character(tmp_summary[["min_time"]]),
256+
as.character(tmp_summary[["max_time"]]),
257+
as.character(tmp_metadata[["ts"]] > 0),
258+
as.character(tmp_summary[["file_uuid"]])
257259
)
258260
),
259261
tables = data.frame(
@@ -268,24 +270,24 @@ rtsk_treeseq_print <- function(ts) {
268270
"mutations"
269271
),
270272
number = c(
271-
tmp_summary[["num_provenances"]],
272-
tmp_summary[["num_populations"]],
273-
tmp_summary[["num_migrations"]],
274-
tmp_summary[["num_individuals"]],
275-
tmp_summary[["num_nodes"]],
276-
tmp_summary[["num_edges"]],
277-
tmp_summary[["num_sites"]],
278-
tmp_summary[["num_mutations"]]
273+
as.character(tmp_summary[["num_provenances"]]),
274+
as.character(tmp_summary[["num_populations"]]),
275+
as.character(tmp_summary[["num_migrations"]]),
276+
as.character(tmp_summary[["num_individuals"]]),
277+
as.character(tmp_summary[["num_nodes"]]),
278+
as.character(tmp_summary[["num_edges"]]),
279+
as.character(tmp_summary[["num_sites"]]),
280+
as.character(tmp_summary[["num_mutations"]])
279281
),
280282
has_metadata = c(
281283
NA, # provenances have no metadata
282-
tmp_metadata[["populations"]] > 0,
283-
tmp_metadata[["migrations"]] > 0,
284-
tmp_metadata[["individuals"]] > 0,
285-
tmp_metadata[["nodes"]] > 0,
286-
tmp_metadata[["edges"]] > 0,
287-
tmp_metadata[["sites"]] > 0,
288-
tmp_metadata[["mutations"]] > 0
284+
as.character(tmp_metadata[["populations"]] > 0),
285+
as.character(tmp_metadata[["migrations"]] > 0),
286+
as.character(tmp_metadata[["individuals"]] > 0),
287+
as.character(tmp_metadata[["nodes"]] > 0),
288+
as.character(tmp_metadata[["edges"]] > 0),
289+
as.character(tmp_metadata[["sites"]] > 0),
290+
as.character(tmp_metadata[["mutations"]] > 0)
289291
)
290292
)
291293
)
@@ -299,7 +301,9 @@ rtsk_treeseq_print <- function(ts) {
299301
# \code{\link{rtsk_table_collection_metadata_length}}.
300302
# @return A list with two data.frames; the first contains table collection
301303
# properties and their value; the second contains the numbers of rows in
302-
# tables and the length of their metadata.
304+
# tables and the length of their metadata. All columns are character as they
305+
# contain different types of values. Use specific functions if you want to
306+
# obtain non-character values
303307
# @seealso \code{\link[=TableCollection]{TableCollection$print}} on how this
304308
# function is used and presented to users.
305309
# @examples
@@ -323,12 +327,12 @@ rtsk_table_collection_print <- function(tc) {
323327
"has_index"
324328
),
325329
value = c(
326-
tmp_summary[["sequence_length"]],
327-
tmp_summary[["has_reference_sequence"]],
328-
tmp_summary[["time_units"]],
329-
tmp_metadata[["tc"]] > 0,
330-
tmp_summary[["file_uuid"]],
331-
tmp_summary[["has_index"]]
330+
as.character(tmp_summary[["sequence_length"]]),
331+
as.character(tmp_summary[["has_reference_sequence"]]),
332+
as.character(tmp_summary[["time_units"]]),
333+
as.character(tmp_metadata[["tc"]] > 0),
334+
as.character(tmp_summary[["file_uuid"]]),
335+
as.character(tmp_summary[["has_index"]])
332336
)
333337
),
334338
tables = data.frame(
@@ -343,24 +347,24 @@ rtsk_table_collection_print <- function(tc) {
343347
"mutations"
344348
),
345349
number = c(
346-
tmp_summary[["num_provenances"]],
347-
tmp_summary[["num_populations"]],
348-
tmp_summary[["num_migrations"]],
349-
tmp_summary[["num_individuals"]],
350-
tmp_summary[["num_nodes"]],
351-
tmp_summary[["num_edges"]],
352-
tmp_summary[["num_sites"]],
353-
tmp_summary[["num_mutations"]]
350+
as.character(tmp_summary[["num_provenances"]]),
351+
as.character(tmp_summary[["num_populations"]]),
352+
as.character(tmp_summary[["num_migrations"]]),
353+
as.character(tmp_summary[["num_individuals"]]),
354+
as.character(tmp_summary[["num_nodes"]]),
355+
as.character(tmp_summary[["num_edges"]]),
356+
as.character(tmp_summary[["num_sites"]]),
357+
as.character(tmp_summary[["num_mutations"]])
354358
),
355359
has_metadata = c(
356360
NA, # provenances have no metadata
357-
tmp_metadata[["populations"]] > 0,
358-
tmp_metadata[["migrations"]] > 0,
359-
tmp_metadata[["individuals"]] > 0,
360-
tmp_metadata[["nodes"]] > 0,
361-
tmp_metadata[["edges"]] > 0,
362-
tmp_metadata[["sites"]] > 0,
363-
tmp_metadata[["mutations"]] > 0
361+
as.character(tmp_metadata[["populations"]] > 0),
362+
as.character(tmp_metadata[["migrations"]] > 0),
363+
as.character(tmp_metadata[["individuals"]] > 0),
364+
as.character(tmp_metadata[["nodes"]] > 0),
365+
as.character(tmp_metadata[["edges"]] > 0),
366+
as.character(tmp_metadata[["sites"]] > 0),
367+
as.character(tmp_metadata[["mutations"]] > 0)
364368
)
365369
)
366370
)

RcppTskit/inst/include/RcppTskit_public.hpp

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ void rtsk_table_collection_dump(SEXP tc, std::string &filename,
1919
SEXP rtsk_treeseq_copy_tables(SEXP ts, int options = 0);
2020
SEXP rtsk_treeseq_init(SEXP tc, int options = 0);
2121

22-
int rtsk_treeseq_get_num_provenances(SEXP ts);
23-
int rtsk_treeseq_get_num_populations(SEXP ts);
24-
int rtsk_treeseq_get_num_migrations(SEXP ts);
25-
int rtsk_treeseq_get_num_individuals(SEXP ts);
26-
int rtsk_treeseq_get_num_samples(SEXP ts);
27-
int rtsk_treeseq_get_num_nodes(SEXP ts);
28-
int rtsk_treeseq_get_num_edges(SEXP ts);
29-
int rtsk_treeseq_get_num_trees(SEXP ts);
30-
int rtsk_treeseq_get_num_sites(SEXP ts);
31-
int rtsk_treeseq_get_num_mutations(SEXP ts);
22+
SEXP rtsk_treeseq_get_num_provenances(SEXP ts);
23+
SEXP rtsk_treeseq_get_num_populations(SEXP ts);
24+
SEXP rtsk_treeseq_get_num_migrations(SEXP ts);
25+
SEXP rtsk_treeseq_get_num_individuals(SEXP ts);
26+
SEXP rtsk_treeseq_get_num_samples(SEXP ts);
27+
SEXP rtsk_treeseq_get_num_nodes(SEXP ts);
28+
SEXP rtsk_treeseq_get_num_edges(SEXP ts);
29+
SEXP rtsk_treeseq_get_num_trees(SEXP ts);
30+
SEXP rtsk_treeseq_get_num_sites(SEXP ts);
31+
SEXP rtsk_treeseq_get_num_mutations(SEXP ts);
3232
double rtsk_treeseq_get_sequence_length(SEXP ts);
3333
bool rtsk_treeseq_get_discrete_genome(SEXP ts);
3434
bool rtsk_treeseq_has_reference_sequence(SEXP ts);

RcppTskit/src/RcppExports.cpp

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,30 @@ Rcpp::Rostream<true>& Rcpp::Rcout = Rcpp::Rcpp_cout_get();
1010
Rcpp::Rostream<false>& Rcpp::Rcerr = Rcpp::Rcpp_cerr_get();
1111
#endif
1212

13+
// test_validate_options
14+
int test_validate_options(const int options, const int supported);
15+
RcppExport SEXP _RcppTskit_test_validate_options(SEXP optionsSEXP, SEXP supportedSEXP) {
16+
BEGIN_RCPP
17+
Rcpp::RObject rcpp_result_gen;
18+
Rcpp::RNGScope rcpp_rngScope_gen;
19+
Rcpp::traits::input_parameter< const int >::type options(optionsSEXP);
20+
Rcpp::traits::input_parameter< const int >::type supported(supportedSEXP);
21+
rcpp_result_gen = Rcpp::wrap(test_validate_options(options, supported));
22+
return rcpp_result_gen;
23+
END_RCPP
24+
}
25+
// test_rtsk_wrap_tsk_size_t_as_integer64
26+
SEXP test_rtsk_wrap_tsk_size_t_as_integer64(const std::string value, const bool force_range_error);
27+
RcppExport SEXP _RcppTskit_test_rtsk_wrap_tsk_size_t_as_integer64(SEXP valueSEXP, SEXP force_range_errorSEXP) {
28+
BEGIN_RCPP
29+
Rcpp::RObject rcpp_result_gen;
30+
Rcpp::RNGScope rcpp_rngScope_gen;
31+
Rcpp::traits::input_parameter< const std::string >::type value(valueSEXP);
32+
Rcpp::traits::input_parameter< const bool >::type force_range_error(force_range_errorSEXP);
33+
rcpp_result_gen = Rcpp::wrap(test_rtsk_wrap_tsk_size_t_as_integer64(value, force_range_error));
34+
return rcpp_result_gen;
35+
END_RCPP
36+
}
1337
// kastore_version
1438
Rcpp::IntegerVector kastore_version();
1539
RcppExport SEXP _RcppTskit_kastore_version() {
@@ -103,7 +127,7 @@ BEGIN_RCPP
103127
END_RCPP
104128
}
105129
// rtsk_treeseq_get_num_provenances
106-
int rtsk_treeseq_get_num_provenances(const SEXP ts);
130+
SEXP rtsk_treeseq_get_num_provenances(const SEXP ts);
107131
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_provenances(SEXP tsSEXP) {
108132
BEGIN_RCPP
109133
Rcpp::RObject rcpp_result_gen;
@@ -114,7 +138,7 @@ BEGIN_RCPP
114138
END_RCPP
115139
}
116140
// rtsk_treeseq_get_num_populations
117-
int rtsk_treeseq_get_num_populations(const SEXP ts);
141+
SEXP rtsk_treeseq_get_num_populations(const SEXP ts);
118142
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_populations(SEXP tsSEXP) {
119143
BEGIN_RCPP
120144
Rcpp::RObject rcpp_result_gen;
@@ -125,7 +149,7 @@ BEGIN_RCPP
125149
END_RCPP
126150
}
127151
// rtsk_treeseq_get_num_migrations
128-
int rtsk_treeseq_get_num_migrations(const SEXP ts);
152+
SEXP rtsk_treeseq_get_num_migrations(const SEXP ts);
129153
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_migrations(SEXP tsSEXP) {
130154
BEGIN_RCPP
131155
Rcpp::RObject rcpp_result_gen;
@@ -136,7 +160,7 @@ BEGIN_RCPP
136160
END_RCPP
137161
}
138162
// rtsk_treeseq_get_num_individuals
139-
int rtsk_treeseq_get_num_individuals(const SEXP ts);
163+
SEXP rtsk_treeseq_get_num_individuals(const SEXP ts);
140164
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_individuals(SEXP tsSEXP) {
141165
BEGIN_RCPP
142166
Rcpp::RObject rcpp_result_gen;
@@ -147,7 +171,7 @@ BEGIN_RCPP
147171
END_RCPP
148172
}
149173
// rtsk_treeseq_get_num_samples
150-
int rtsk_treeseq_get_num_samples(const SEXP ts);
174+
SEXP rtsk_treeseq_get_num_samples(const SEXP ts);
151175
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_samples(SEXP tsSEXP) {
152176
BEGIN_RCPP
153177
Rcpp::RObject rcpp_result_gen;
@@ -158,7 +182,7 @@ BEGIN_RCPP
158182
END_RCPP
159183
}
160184
// rtsk_treeseq_get_num_nodes
161-
int rtsk_treeseq_get_num_nodes(const SEXP ts);
185+
SEXP rtsk_treeseq_get_num_nodes(const SEXP ts);
162186
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_nodes(SEXP tsSEXP) {
163187
BEGIN_RCPP
164188
Rcpp::RObject rcpp_result_gen;
@@ -169,7 +193,7 @@ BEGIN_RCPP
169193
END_RCPP
170194
}
171195
// rtsk_treeseq_get_num_edges
172-
int rtsk_treeseq_get_num_edges(const SEXP ts);
196+
SEXP rtsk_treeseq_get_num_edges(const SEXP ts);
173197
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_edges(SEXP tsSEXP) {
174198
BEGIN_RCPP
175199
Rcpp::RObject rcpp_result_gen;
@@ -180,7 +204,7 @@ BEGIN_RCPP
180204
END_RCPP
181205
}
182206
// rtsk_treeseq_get_num_trees
183-
int rtsk_treeseq_get_num_trees(const SEXP ts);
207+
SEXP rtsk_treeseq_get_num_trees(const SEXP ts);
184208
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_trees(SEXP tsSEXP) {
185209
BEGIN_RCPP
186210
Rcpp::RObject rcpp_result_gen;
@@ -191,7 +215,7 @@ BEGIN_RCPP
191215
END_RCPP
192216
}
193217
// rtsk_treeseq_get_num_sites
194-
int rtsk_treeseq_get_num_sites(const SEXP ts);
218+
SEXP rtsk_treeseq_get_num_sites(const SEXP ts);
195219
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_sites(SEXP tsSEXP) {
196220
BEGIN_RCPP
197221
Rcpp::RObject rcpp_result_gen;
@@ -202,7 +226,7 @@ BEGIN_RCPP
202226
END_RCPP
203227
}
204228
// rtsk_treeseq_get_num_mutations
205-
int rtsk_treeseq_get_num_mutations(const SEXP ts);
229+
SEXP rtsk_treeseq_get_num_mutations(const SEXP ts);
206230
RcppExport SEXP _RcppTskit_rtsk_treeseq_get_num_mutations(SEXP tsSEXP) {
207231
BEGIN_RCPP
208232
Rcpp::RObject rcpp_result_gen;
@@ -502,6 +526,8 @@ END_RCPP
502526
}
503527

504528
static const R_CallMethodDef CallEntries[] = {
529+
{"_RcppTskit_test_validate_options", (DL_FUNC) &_RcppTskit_test_validate_options, 2},
530+
{"_RcppTskit_test_rtsk_wrap_tsk_size_t_as_integer64", (DL_FUNC) &_RcppTskit_test_rtsk_wrap_tsk_size_t_as_integer64, 2},
505531
{"_RcppTskit_kastore_version", (DL_FUNC) &_RcppTskit_kastore_version, 0},
506532
{"_RcppTskit_tskit_version", (DL_FUNC) &_RcppTskit_tskit_version, 0},
507533
{"_RcppTskit_rtsk_treeseq_load", (DL_FUNC) &_RcppTskit_rtsk_treeseq_load, 2},

0 commit comments

Comments
 (0)