|
1 | 1 |
|
2 | 2 | function local_values end |
3 | 3 |
|
| 4 | +function reduce_for_distance(d, partials, init) |
| 5 | + reduce((i, j) -> Distances.eval_reduce(d, i, j), partials; init) |
| 6 | +end |
| 7 | + |
| 8 | +reduce_for_distance(::Distances.Chebyshev, partials, init) = |
| 9 | + reduce(max, partials; init) |
| 10 | + |
| 11 | +for T in (Distances.Euclidean, |
| 12 | + Distances.SqEuclidean, |
| 13 | + Distances.PeriodicEuclidean, |
| 14 | + Distances.Cityblock, |
| 15 | + Distances.TotalVariation, |
| 16 | + Distances.Minkowski, |
| 17 | + Distances.Hamming, |
| 18 | + Distances.ChiSqDist, |
| 19 | + Distances.KLDivergence, |
| 20 | + Distances.GenKLDivergence) |
| 21 | + # all Distances.metrics except Jaccard, RogersTanimoto, CosineDist, |
| 22 | + # RenyiDivergence, BrayCurtis, SpanNormDist, since these either operate with |
| 23 | + # tuples or have a complex reduction logic. |
| 24 | + @eval reduce_for_distance(::$(T), partials, init) = |
| 25 | + reduce(+, partials; init) |
| 26 | +end |
| 27 | + |
4 | 28 | function own_values end |
5 | 29 |
|
6 | 30 | function ghost_values end |
@@ -1328,10 +1352,8 @@ function distance_eval_body(d,a::PVector,b::PVector) |
1328 | 1352 | return s |
1329 | 1353 | end |
1330 | 1354 | end |
1331 | | - s = reduce((i,j)->Distances.eval_reduce(d,i,j), |
1332 | | - partials, |
1333 | | - init=Distances.eval_start(d, a, b)) |
1334 | | - s |
| 1355 | + init_val = Distances.eval_start(d, a, b) |
| 1356 | + reduce_for_distance(d, partials, init_val) |
1335 | 1357 | end |
1336 | 1358 |
|
1337 | 1359 | # New stuff |
|
0 commit comments