@@ -37,8 +37,10 @@ def diversity(
37
37
if len (ds .samples ) < 2 :
38
38
return xr .DataArray (np .nan )
39
39
if allele_counts not in ds :
40
- ds = count_variant_alleles (ds )
41
- ac = ds [allele_counts ]
40
+ ds_new = count_variant_alleles (ds )
41
+ else :
42
+ ds_new = ds
43
+ ac = ds_new [allele_counts ]
42
44
an = ac .sum (axis = 1 )
43
45
n_pairs = an * (an - 1 ) / 2
44
46
n_same = (ac * (ac - 1 ) / 2 ).sum (axis = 1 )
@@ -67,13 +69,17 @@ def divergence(
67
69
divergence value between the two datasets.
68
70
"""
69
71
if allele_counts not in ds1 :
70
- ds1 = count_variant_alleles (ds1 )
71
- ac1 = ds1 [allele_counts ]
72
+ ds1_new = count_variant_alleles (ds1 )
73
+ else :
74
+ ds1_new = ds1
75
+ ac1 = ds1_new [allele_counts ]
72
76
if allele_counts not in ds2 :
73
- ds2 = count_variant_alleles (ds2 )
74
- ac2 = ds2 [allele_counts ]
75
- an1 = ds1 [allele_counts ].sum (axis = 1 )
76
- an2 = ds2 [allele_counts ].sum (axis = 1 )
77
+ ds2_new = count_variant_alleles (ds2 )
78
+ else :
79
+ ds2_new = ds2
80
+ ac2 = ds2_new [allele_counts ]
81
+ an1 = ds1_new [allele_counts ].sum (axis = 1 )
82
+ an2 = ds2_new [allele_counts ].sum (axis = 1 )
77
83
78
84
n_pairs = an1 * an2
79
85
n_same = (ac1 * ac2 ).sum (axis = 1 )
@@ -126,8 +132,10 @@ def Tajimas_D(
126
132
Tajimas' D value.
127
133
"""
128
134
if allele_counts not in ds :
129
- ds = count_variant_alleles (ds )
130
- ac = ds [allele_counts ]
135
+ ds_new = count_variant_alleles (ds )
136
+ else :
137
+ ds_new = ds
138
+ ac = ds_new [allele_counts ]
131
139
132
140
# count segregating
133
141
S = ((ac > 0 ).sum (axis = 1 ) > 1 ).sum ()
@@ -142,7 +150,7 @@ def Tajimas_D(
142
150
theta = S / a1
143
151
144
152
# calculate diversity
145
- div = diversity (ds )
153
+ div = diversity (ds_new )
146
154
147
155
# N.B., both theta estimates are usually divided by the number of
148
156
# (accessible) bases but here we want the absolute difference
0 commit comments