Commit b4ed6f0
authored
Fix Hierarchical hanging on non-finite dissimilarities (#353)
A non-finite dissimilarity, from NaN or infinite values in the data or
in a precomputed matrix, can make argmin's tie-breaking point two
clades at each other without either being picked as the other's mutual
nearest neighbor. No merge happens that round, and since nothing about
the state changes, no merge ever happens again: fit/2 loops forever.
This cannot happen for finite dissimilarities, where the globally
closest pair of live clades is always mutually nearest, guaranteeing at
least one merge per round.
Stop the loop when a round makes no progress instead of running
forever. The merges that could not be made are reported as clades of
[-1, -1], sizes of 0, and NaN dissimilarities sorted to the end, rather
than guessing a pairing that has no finite distance to justify it.
Finite input is unaffected, since a round with no progress is
impossible there.1 parent 21be3c5 commit b4ed6f0
2 files changed
Lines changed: 96 additions & 6 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
135 | 135 | | |
136 | 136 | | |
137 | 137 | | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
138 | 149 | | |
139 | 150 | | |
140 | 151 | | |
| |||
231 | 242 | | |
232 | 243 | | |
233 | 244 | | |
234 | | - | |
235 | | - | |
236 | | - | |
| 245 | + | |
| 246 | + | |
| 247 | + | |
| 248 | + | |
| 249 | + | |
| 250 | + | |
237 | 251 | | |
238 | 252 | | |
239 | 253 | | |
| |||
261 | 275 | | |
262 | 276 | | |
263 | 277 | | |
264 | | - | |
| 278 | + | |
| 279 | + | |
| 280 | + | |
| 281 | + | |
| 282 | + | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
265 | 290 | | |
266 | 291 | | |
267 | 292 | | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
268 | 301 | | |
269 | 302 | | |
270 | 303 | | |
| |||
276 | 309 | | |
277 | 310 | | |
278 | 311 | | |
279 | | - | |
280 | | - | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
281 | 326 | | |
282 | 327 | | |
283 | 328 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
280 | 280 | | |
281 | 281 | | |
282 | 282 | | |
| 283 | + | |
| 284 | + | |
| 285 | + | |
| 286 | + | |
| 287 | + | |
| 288 | + | |
| 289 | + | |
| 290 | + | |
| 291 | + | |
| 292 | + | |
| 293 | + | |
| 294 | + | |
| 295 | + | |
| 296 | + | |
| 297 | + | |
| 298 | + | |
| 299 | + | |
| 300 | + | |
| 301 | + | |
| 302 | + | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
283 | 328 | | |
284 | 329 | | |
285 | 330 | | |
| |||
0 commit comments