Skip to content

Commit 0403de0

Browse files
nspopemergify[bot]
authored andcommitted
Change order of output dims; use summary function in pair_coalescence_stat
1 parent 1f28c11 commit 0403de0

File tree

10 files changed

+270
-171
lines changed

10 files changed

+270
-171
lines changed

c/tests/test_stats.c

Lines changed: 39 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -319,9 +319,9 @@ verify_pair_coalescence_counts(tsk_treeseq_t *ts, tsk_flags_t options)
319319
tsk_id_t sample_sets[n];
320320
tsk_size_t sample_set_sizes[P];
321321
tsk_id_t index_tuples[2 * I];
322-
tsk_id_t node_output_map[N];
322+
tsk_id_t node_bin_map[N];
323323
tsk_size_t dim = T * N * I;
324-
double C1[dim];
324+
double C[dim];
325325
tsk_size_t i, j, k;
326326

327327
for (i = 0; i < n; i++) {
@@ -343,53 +343,67 @@ verify_pair_coalescence_counts(tsk_treeseq_t *ts, tsk_flags_t options)
343343
}
344344
}
345345

346+
/* test various bin assignments */
346347
for (i = 0; i < N; i++) {
347-
node_output_map[i] = (tsk_id_t) i;
348+
node_bin_map[i] = ((tsk_id_t) i) % 8;
348349
}
350+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
351+
index_tuples, T, breakpoints, 8, node_bin_map, options, C);
352+
CU_ASSERT_EQUAL_FATAL(ret, 0);
349353

350-
ret = tsk_treeseq_pair_coalescence_stat(ts, P, sample_set_sizes, sample_sets, I,
351-
index_tuples, T, breakpoints, N, node_output_map, options, C1);
354+
for (i = 0; i < N; i++) {
355+
node_bin_map[i] = i < N / 2 ? ((tsk_id_t) i) : TSK_NULL;
356+
}
357+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
358+
index_tuples, T, breakpoints, N / 2, node_bin_map, options, C);
359+
CU_ASSERT_EQUAL_FATAL(ret, 0);
360+
361+
for (i = 0; i < N; i++) {
362+
node_bin_map[i] = (tsk_id_t) i;
363+
}
364+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
365+
index_tuples, T, breakpoints, N, node_bin_map, options, C);
352366
CU_ASSERT_EQUAL_FATAL(ret, 0);
353-
/* TODO: test against naive pairs per node per tree */
367+
/* TODO: compare against naive pairs per node per tree */
354368

355369
/* cover errors */
356370
double bad_breakpoints[2] = { breakpoints[1], 0.0 };
357-
ret = tsk_treeseq_pair_coalescence_stat(ts, P, sample_set_sizes, sample_sets, I,
358-
index_tuples, 1, bad_breakpoints, N, node_output_map, options, C1);
371+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
372+
index_tuples, 1, bad_breakpoints, N, node_bin_map, options, C);
359373
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_WINDOWS);
360374

361375
index_tuples[0] = (tsk_id_t) P;
362-
ret = tsk_treeseq_pair_coalescence_stat(ts, P, sample_set_sizes, sample_sets, I,
363-
index_tuples, 1, breakpoints, N, node_output_map, options, C1);
376+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
377+
index_tuples, 1, breakpoints, N, node_bin_map, options, C);
364378
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_SAMPLE_SET_INDEX);
365379
index_tuples[0] = 0;
366380

367381
tsk_size_t tmp = sample_set_sizes[0];
368382
sample_set_sizes[0] = 0;
369-
ret = tsk_treeseq_pair_coalescence_stat(ts, P, sample_set_sizes, sample_sets, I,
370-
index_tuples, 1, breakpoints, N, node_output_map, options, C1);
383+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
384+
index_tuples, 1, breakpoints, N, node_bin_map, options, C);
371385
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_EMPTY_SAMPLE_SET);
372386
sample_set_sizes[0] = tmp;
373387

374388
sample_sets[1] = 0;
375-
ret = tsk_treeseq_pair_coalescence_stat(ts, P, sample_set_sizes, sample_sets, I,
376-
index_tuples, 1, breakpoints, N, node_output_map, options, C1);
389+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
390+
index_tuples, 1, breakpoints, N, node_bin_map, options, C);
377391
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_DUPLICATE_SAMPLE);
378392
sample_sets[1] = 1;
379393

380-
ret = tsk_treeseq_pair_coalescence_stat(ts, P, sample_set_sizes, sample_sets, I,
381-
index_tuples, 1, breakpoints, N - 1, node_output_map, options, C1);
382-
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_NODE_OUTPUT_MAP_DIM);
394+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
395+
index_tuples, 1, breakpoints, N - 1, node_bin_map, options, C);
396+
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_NODE_BIN_MAP_DIM);
383397

384-
ret = tsk_treeseq_pair_coalescence_stat(ts, P, sample_set_sizes, sample_sets, I,
385-
index_tuples, 1, breakpoints, 0, node_output_map, options, C1);
386-
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_NODE_OUTPUT_MAP_DIM);
398+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
399+
index_tuples, 1, breakpoints, 0, node_bin_map, options, C);
400+
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_NODE_BIN_MAP_DIM);
387401

388-
node_output_map[0] = -2;
389-
ret = tsk_treeseq_pair_coalescence_stat(ts, P, sample_set_sizes, sample_sets, I,
390-
index_tuples, 1, breakpoints, N, node_output_map, options, C1);
391-
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_NODE_OUTPUT_MAP);
392-
node_output_map[0] = 0;
402+
node_bin_map[0] = -2;
403+
ret = tsk_treeseq_pair_coalescence_counts(ts, P, sample_set_sizes, sample_sets, I,
404+
index_tuples, 1, breakpoints, N, node_bin_map, options, C);
405+
CU_ASSERT_EQUAL_FATAL(ret, TSK_ERR_BAD_NODE_BIN_MAP);
406+
node_bin_map[0] = 0;
393407
}
394408

395409
typedef struct {
@@ -2880,8 +2894,6 @@ test_pair_coalescence_counts(void)
28802894
tsk_treeseq_t ts;
28812895
tsk_treeseq_from_text(&ts, 100, nonbinary_ex_nodes, nonbinary_ex_edges, NULL,
28822896
nonbinary_ex_sites, nonbinary_ex_mutations, NULL, NULL, 0);
2883-
verify_pair_coalescence_counts(&ts, TSK_STAT_NODE);
2884-
verify_pair_coalescence_counts(&ts, TSK_STAT_NODE | TSK_STAT_SPAN_NORMALISE);
28852897
verify_pair_coalescence_counts(&ts, 0);
28862898
verify_pair_coalescence_counts(&ts, TSK_STAT_SPAN_NORMALISE);
28872899
tsk_treeseq_free(&ts);

c/tskit/core.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -484,13 +484,15 @@ tsk_strerror_internal(int err)
484484
ret = "Insufficient weights provided (at least 1 required). "
485485
"(TSK_ERR_INSUFFICIENT_WEIGHTS)";
486486
break;
487-
case TSK_ERR_BAD_NODE_OUTPUT_MAP:
488-
ret = "Node output map contains values less than TSK_NULL. "
489-
"(TSK_ERR_BAD_NODE_OUTPUT_MAP)";
487+
488+
/* Pair coalescence errors */
489+
case TSK_ERR_BAD_NODE_BIN_MAP:
490+
ret = "Node-to-bin map contains values less than TSK_NULL. "
491+
"(TSK_ERR_BAD_NODE_BIN_MAP)";
490492
break;
491-
case TSK_ERR_BAD_NODE_OUTPUT_MAP_DIM:
492-
ret = "Maximum index in node output map does not match "
493-
"output dimension. (TSK_ERR_BAD_NODE_OUTPUT_MAP_DIM)";
493+
case TSK_ERR_BAD_NODE_BIN_MAP_DIM:
494+
ret = "Maximum index in node-to-bin map does not match "
495+
"output dimension. (TSK_ERR_BAD_NODE_BIN_MAP_DIM)";
494496
break;
495497

496498
/* Mutation mapping errors */

c/tskit/core.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -695,13 +695,13 @@ Insufficient weights were provided.
695695
*/
696696
#define TSK_ERR_INSUFFICIENT_WEIGHTS -913
697697
/**
698-
The node output map contains a value less than TSK_NULL.
698+
The node bin map contains a value less than TSK_NULL.
699699
*/
700-
#define TSK_ERR_BAD_NODE_OUTPUT_MAP -914
700+
#define TSK_ERR_BAD_NODE_BIN_MAP -914
701701
/**
702-
Maximum index in node output map does not match output dimension.
702+
Maximum index in node bin map does not match output dimension.
703703
*/
704-
#define TSK_ERR_BAD_NODE_OUTPUT_MAP_DIM -915
704+
#define TSK_ERR_BAD_NODE_BIN_MAP_DIM -915
705705
/** @} */
706706

707707
/**

0 commit comments

Comments
 (0)