@@ -40,7 +40,7 @@ cnp.import_array()
40
40
{{for name_suffix, INPUT_DTYPE_t, INPUT_DTYPE in implementation_specific_values}}
41
41
42
42
from ._base cimport (
43
- PairwiseDistancesReduction {{name_suffix}},
43
+ BaseDistanceReducer {{name_suffix}},
44
44
_sqeuclidean_row_norms{{name_suffix}},
45
45
)
46
46
@@ -52,8 +52,8 @@ from ._datasets_pair cimport (
52
52
from ._gemm_term_computer cimport GEMMTermComputer{{name_suffix}}
53
53
54
54
55
- cdef class PairwiseDistancesArgKmin {{name_suffix}}(PairwiseDistancesReduction {{name_suffix}}):
56
- """{{name_suffix}}bit implementation of PairwiseDistancesArgKmin ."""
55
+ cdef class ArgKmin {{name_suffix}}(BaseDistanceReducer {{name_suffix}}):
56
+ """{{name_suffix}}bit implementation of the pairwise-distance reduction BaseDistanceReducer{{name_suffix}} ."""
57
57
58
58
@classmethod
59
59
def compute(
@@ -71,7 +71,7 @@ cdef class PairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistancesReduction{{n
71
71
72
72
This classmethod is responsible for introspecting the arguments
73
73
values to dispatch to the most appropriate implementation of
74
- :class:`PairwiseDistancesArgKmin {{name_suffix}}`.
74
+ :class:`ArgKmin {{name_suffix}}`.
75
75
76
76
This allows decoupling the API entirely from the implementation details
77
77
whilst maintaining RAII: all temporarily allocated datastructures necessary
@@ -90,7 +90,7 @@ cdef class PairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistancesReduction{{n
90
90
# at time to leverage a call to the BLAS GEMM routine as explained
91
91
# in more details in the docstring.
92
92
use_squared_distances = metric == "sqeuclidean"
93
- pda = FastEuclideanPairwiseDistancesArgKmin {{name_suffix}}(
93
+ pda = EuclideanArgKmin {{name_suffix}}(
94
94
X=X, Y=Y, k=k,
95
95
use_squared_distances=use_squared_distances,
96
96
chunk_size=chunk_size,
@@ -100,7 +100,7 @@ cdef class PairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistancesReduction{{n
100
100
else:
101
101
# Fall back on a generic implementation that handles most scipy
102
102
# metrics by computing the distances between 2 vectors at a time.
103
- pda = PairwiseDistancesArgKmin {{name_suffix}}(
103
+ pda = ArgKmin {{name_suffix}}(
104
104
datasets_pair=DatasetsPair{{name_suffix}}.get_for(X, Y, metric, metric_kwargs),
105
105
k=k,
<
10000
/tr>106
106
chunk_size=chunk_size,
@@ -147,8 +147,7 @@ cdef class PairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistancesReduction{{n
147
147
sizeof(ITYPE_t *) * self.chunks_n_threads
148
148
)
149
149
150
- # Main heaps which will be returned as results by
151
- # `PairwiseDistancesArgKmin{{name_suffix}}.compute`.
150
+ # Main heaps which will be returned as results by `ArgKmin{{name_suffix}}.compute`.
152
151
self.argkmin_indices = np.full((self.n_samples_X, self.k), 0, dtype=ITYPE)
153
152
self.argkmin_distances = np.full((self.n_samples_X, self.k), DBL_MAX, dtype=DTYPE)
154
153
@@ -322,19 +321,18 @@ cdef class PairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistancesReduction{{n
322
321
323
322
# Values are returned identically to the way `KNeighborsMixin.kneighbors`
324
323
# returns values. This is counter-intuitive but this allows not using
325
- # complex adaptations where
326
- # `PairwiseDistancesArgKmin{{name_suffix}}.compute` is called.
324
+ # complex adaptations where `ArgKmin{{name_suffix}}.compute` is called.
327
325
return np.asarray(self.argkmin_distances), np.asarray(self.argkmin_indices)
328
326
329
327
return np.asarray(self.argkmin_indices)
330
328
331
329
332
- cdef class FastEuclideanPairwiseDistancesArgKmin {{name_suffix}}(PairwiseDistancesArgKmin {{name_suffix}}):
333
- """EuclideanDistance-specialized {{name_suffix}} bit implementation for PairwiseDistancesArgKmin ."""
330
+ cdef class EuclideanArgKmin {{name_suffix}}(ArgKmin {{name_suffix}}):
331
+ """EuclideanDistance-specialized implementation for ArgKmin {{name_suffix}}."""
334
332
335
333
@classmethod
336
334
def is_usable_for(cls, X, Y, metric) -> bool:
337
- return (PairwiseDistancesArgKmin {{name_suffix}}.is_usable_for(X, Y, metric) and
335
+ return (ArgKmin {{name_suffix}}.is_usable_for(X, Y, metric) and
338
336
not _in_unstable_openblas_configuration())
339
337
340
338
def __init__(
@@ -354,7 +352,7 @@ cdef class FastEuclideanPairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistance
354
352
):
355
353
warnings.warn(
356
354
f"Some metric_kwargs have been passed ({metric_kwargs}) but aren't "
357
- f"usable for this case (FastEuclideanPairwiseDistancesArgKmin ) and will be ignored.",
355
+ f"usable for this case (EuclideanArgKmin64 ) and will be ignored.",
358
356
UserWarning,
359
357
stacklevel=3,
360
358
)
@@ -404,14 +402,14 @@ cdef class FastEuclideanPairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistance
404
402
@final
405
403
cdef void compute_exact_distances(self) nogil:
406
404
if not self.use_squared_distances:
407
- PairwiseDistancesArgKmin {{name_suffix}}.compute_exact_distances(self)
405
+ ArgKmin {{name_suffix}}.compute_exact_distances(self)
408
406
409
407
@final
410
408
cdef void _parallel_on_X_parallel_init(
411
409
self,
412
410
ITYPE_t thread_num,
413
411
) nogil:
414
- PairwiseDistancesArgKmin {{name_suffix}}._parallel_on_X_parallel_init(self, thread_num)
412
+ ArgKmin {{name_suffix}}._parallel_on_X_parallel_init(self, thread_num)
415
413
self.gemm_term_computer._parallel_on_X_parallel_init(thread_num)
416
414
417
415
@@ -422,7 +420,7 @@ cdef class FastEuclideanPairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistance
422
420
ITYPE_t X_start,
423
421
ITYPE_t X_end,
424
422
) nogil:
425
- PairwiseDistancesArgKmin {{name_suffix}}._parallel_on_X_init_chunk(self, thread_num, X_start, X_end)
423
+ ArgKmin {{name_suffix}}._parallel_on_X_init_chunk(self, thread_num, X_start, X_end)
426
424
self.gemm_term_computer._parallel_on_X_init_chunk(thread_num, X_start, X_end)
427
425
428
426
@@ -435,7 +433,7 @@ cdef class FastEuclideanPairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistance
435
433
ITYPE_t Y_end,
436
434
ITYPE_t thread_num,
437
435
) nogil:
438
- PairwiseDistancesArgKmin {{name_suffix}}._parallel_on_X_pre_compute_and_reduce_distances_on_chunks(
436
+ ArgKmin {{name_suffix}}._parallel_on_X_pre_compute_and_reduce_distances_on_chunks(
439
437
self,
440
438
X_start, X_end,
441
439
Y_start, Y_end,
@@ -451,7 +449,7 @@ cdef class FastEuclideanPairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistance
451
449
self,
452
450
) nogil:
453
451
cdef ITYPE_t thread_num
454
- PairwiseDistancesArgKmin {{name_suffix}}._parallel_on_Y_init(self)
452
+ ArgKmin {{name_suffix}}._parallel_on_Y_init(self)
455
453
self.gemm_term_computer._parallel_on_Y_init()
456
454
457
455
@@ -462,7 +460,7 @@ cdef class FastEuclideanPairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistance
462
460
ITYPE_t X_start,
463
461
ITYPE_t X_end,
464
462
) nogil:
465
- PairwiseDistancesArgKmin {{name_suffix}}._parallel_on_Y_parallel_init(self, thread_num, X_start, X_end)
463
+ ArgKmin {{name_suffix}}._parallel_on_Y_parallel_init(self, thread_num, X_start, X_end)
466
464
self.gemm_term_computer._parallel_on_Y_parallel_init(thread_num, X_start, X_end)
467
465
468
466
@@ -475,7 +473,7 @@ cdef class FastEuclideanPairwiseDistancesArgKmin{{name_suffix}}(PairwiseDistance
475
473
ITYPE_t Y_end,
476
474
ITYPE_t thread_num,
477
475
) nogil:
478
- PairwiseDistancesArgKmin {{name_suffix}}._parallel_on_Y_pre_compute_and_reduce_distances_on_chunks(
476
+ ArgKmin {{name_suffix}}._parallel_on_Y_pre_compute_and_reduce_distances_on_chunks(
479
477
self,
480
478
X_start, X_end,
481
479
Y_start, Y_end,
0 commit comments