|
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 |
@@ -834,9 +858,8 @@ for M in Distances.metrics |
834 | 858 | return s |
835 | 859 | end |
836 | 860 | end |
837 | | - s = reduce((i,j)->Distances.eval_reduce(d,i,j), |
838 | | - partials, |
839 | | - init=Distances.eval_start(d, a, b)) |
| 861 | + init_val = Distances.eval_start(d, a, b) |
| 862 | + s = reduce_for_distance(d, partials, init_val) |
840 | 863 | Distances.eval_end(d,s) |
841 | 864 | end |
842 | 865 | end |
|
0 commit comments