Skip to content

MAINT Miscellaneous maintenance items the private PairwiseDistancesReductions submodule #24542

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 25 commits into from
Nov 18, 2022

Conversation

jjerphan
Copy link
Member

Reference Issues/PRs

Relates to #22587.

What does this implement/fix? Explain your changes.

This suggest various miscellaneous improvements for maintenance using atomic and independent commits.

I would recommend reviewing each commit instead of the full diff.

Any other comments?

Feel free to suggest anything.

Copy link
Member

@ogrisel ogrisel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR. Overall, this is an improvement (after fixing the failing tests). Here are a few suggestions:

Co-authored-by: Olivier Grisel <olivier.grisel@ensta.org>
@jjerphan jjerphan marked this pull request as ready for review October 7, 2022 06:37
@jjerphan jjerphan mentioned this pull request Oct 7, 2022
3 tasks
Copy link
Member

@thomasjpfan thomasjpfan left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for the PR! Although the lines changed is not big, this PR has a lot of scope:

  1. Renaming of BaseDistancesReductionDispatcher and _radius_neighbors.pxd
  2. Refactoring Tempita files to reduce the number of parameters in each configuration
  3. Improving comments throughout
  4. Refactor interface from _compute_distances_on_chunks to _compute_dist_middle_terms.
  5. Supporting X_norm_squared in metric_kwargs

If 1, 2, 3, 4 were their own PRs, I think they would be easy to merge quickly.

@jjerphan
Copy link
Member Author

#24623, #24624, #24625, #24626 have been opened to isolate orthogonal changes as proposed in #24542 (review).

Co-authored-by: Olivier Grisel <olivier.grisel@ensta.org>
Co-authored-by: Thomas J. Fan <thomasjpfan@gmail.com>
@jjerphan
Copy link
Member Author

b29c79d resolves the last discussions about the (in fact useless) NaN guard its associated check via the ternary operator (it's simpler now).

@ogrisel
Copy link
Member

ogrisel commented Oct 12, 2022

Once the sub PR are merged and this PR is updated, I would like to see if the change in the handling of -0. values has a performance impact compared to main.

Copy link
Member

@ogrisel ogrisel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM besides the following:

jjerphan and others added 4 commits October 17, 2022 15:49
Also remove the comment not to duplicate and restate
information at several place in those implementations.

Co-authored-by: Thomas J. Fan <thomasjpfan@gmail.com>
@jjerphan
Copy link
Member Author

jjerphan commented Oct 17, 2022

f2e917b might necessitate its own PR. What do you think?

Edit: 379ffae reverted f2e917b and #24715 was open for f2e917b specifically.

@jjerphan
Copy link
Member Author

jjerphan commented Nov 4, 2022

Similarly to what has been observed in #24715, there seems to be some small regressions for configurations using small datasets.

       before           after         ratio
     [b7f3fd68]       [8a44c5a7]
     <main>           <benchmarks/maint/pdr-misc>
+       84.5±20ms         114±20ms     1.35  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(1000, 1000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense')
+        639±20ms         736±30ms     1.15  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(10000, 10000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense')
+         112±6ms          128±2ms     1.14  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(1000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense')
+         1.53±0s       1.71±0.03s     1.12  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(10000000, 1000, 100, 'euclidean', 'auto', <class 'numpy.float64'>, 'dense', 'dense')
-        63.7±1ms         54.1±1ms     0.85  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(1000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float32'>, 'dense', 'dense')

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE DECREASED.

Might this be linked to some CPython process setup or runtime variability?

In any case, I do not think that they are significant enough for blocking the merge. What do you think?

Full ASV results

Run on a machine with 128 physical cores using the benchmarks/maint/pdr-misc branch.

asv continuous -b PairwiseDistancesR -e main benchmarks/maint/pdr-misc
· Creating environments
· Discovering benchmarks
· Running 2 total benchmarks (2 commits * 1 environments * 1 benchmarks)
[  0.00%] · For scikit-learn commit 8a44c5a7 <benchmarks/maint/pdr-misc> (round 1/1):
[  0.00%] ·· Benchmarking conda-py3.9-cython-joblib-numpy-pandas-scipy-threadpoolctl
[ 50.00%] ··· ...iseDistancesReductionsBenchmark.time_ArgKmin      16/108 failed
[ 50.00%] ··· ========== ======== ============ =========== =============== =============== ========= ======== ============
               n_train    n_test   n_features     metric       strategy         dtype       X_train   X_test              
              ---------- -------- ------------ ----------- --------------- --------------- --------- -------- ------------
                 1000      1000       100       euclidean        auto       numpy.float32    dense    dense     75.8±4ms  
                 1000      1000       100       euclidean        auto       numpy.float64    dense    dense    68.2±0.3ms 
                 1000      1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    22.0±0.2ms 
                 1000      1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    16.3±0.2ms 
                 1000      1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     74.2±3ms  
                 1000      1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    68.9±0.6ms 
                 1000      1000       100       manhattan        auto       numpy.float32    dense    dense     114±20ms  
                 1000      1000       100       manhattan        auto       numpy.float64    dense    dense     82.9±3ms  
                 1000      1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense    35.7±0.3ms 
                 1000      1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense    35.7±0.2ms 
                 1000      1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     83.9±3ms  
                 1000      1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense    83.1±10ms  
                 1000     10000       100       euclidean        auto       numpy.float32    dense    dense    27.5±0.3ms 
                 1000     10000       100       euclidean        auto       numpy.float64    dense    dense    19.2±0.4ms 
                 1000     10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    27.6±0.6ms 
                 1000     10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    19.2±0.3ms 
                 1000     10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    780±100ms  
                 1000     10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     779±30ms  
                 1000     10000       100       manhattan        auto       numpy.float32    dense    dense     37.9±2ms  
                 1000     10000       100       manhattan        auto       numpy.float64    dense    dense     42.9±5ms  
                 1000     10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     38.9±2ms  
                 1000     10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     43.1±2ms  
                 1000     10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     978±40ms  
                 1000     10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense     987±20ms  
                 1000     100000      100       euclidean        auto       numpy.float32    dense    dense     54.1±1ms  
                 1000     100000      100       euclidean        auto       numpy.float64    dense    dense     34.2±2ms  
                 1000     100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense     55.0±1ms  
                 1000     100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense     33.2±1ms  
                 1000     100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense    7.62±0.2s  
                 1000     100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense    7.55±0.3s  
                 1000     100000      100       manhattan        auto       numpy.float32    dense    dense    109±0.2ms  
                 1000     100000      100       manhattan        auto       numpy.float64    dense    dense     124±6ms   
                 1000     100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense    109±0.5ms  
                 1000     100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense     128±2ms   
                 1000     100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense    9.29±0.1s  
                 1000     100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense    9.71±0.03s 
                10000      1000       100       euclidean        auto       numpy.float32    dense    dense     75.4±2ms  
                10000      1000       100       euclidean        auto       numpy.float64    dense    dense     67.0±2ms  
                10000      1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    45.5±0.8ms 
                10000      1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    38.1±0.3ms 
                10000      1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     77.0±2ms  
                10000      1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     65.5±3ms  
                10000      1000       100       manhattan        auto       numpy.float32    dense    dense     85.6±2ms  
                10000      1000       100       manhattan        auto       numpy.float64    dense    dense     90.8±4ms  
                10000      1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     252±3ms   
                10000      1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     250±3ms   
                10000      1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     83.5±2ms  
                10000      1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense     90.6±2ms  
                10000     10000       100       euclidean        auto       numpy.float32    dense    dense     458±20ms  
                10000     10000       100       euclidean        auto       numpy.float64    dense    dense     477±20ms  
                10000     10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense     61.9±5ms  
                10000     10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense     48.4±5ms  
                10000     10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     461±20ms  
                10000     10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     460±20ms  
                10000     10000       100       manhattan        auto       numpy.float32    dense    dense     712±70ms  
                10000     10000       100       manhattan        auto       numpy.float64    dense    dense     774±50ms  
                10000     10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     241±3ms   
                10000     10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     242±4ms   
                10000     10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     736±30ms  
                10000     10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense     795±70ms  
                10000     100000      100       euclidean        auto       numpy.float32    dense    dense     187±6ms   
                10000     100000      100       euclidean        auto       numpy.float64    dense    dense     163±10ms  
                10000     100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense     189±10ms  
                10000     100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense     160±9ms   
                10000     100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense    5.06±0.1s  
                10000     100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense    4.72±0.09s 
                10000     100000      100       manhattan        auto       numpy.float32    dense    dense    1.03±0.07s 
                10000     100000      100       manhattan        auto       numpy.float64    dense    dense    1.04±0.05s 
                10000     100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense     982±4ms   
                10000     100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense    1.03±0.02s 
                10000     100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense    7.56±0.3s  
                10000     100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense    8.05±0.2s  
               10000000    1000       100       euclidean        auto       numpy.float32    dense    dense    1.71±0.03s 
               10000000    1000       100       euclidean        auto       numpy.float64    dense    dense    1.71±0.03s 
               10000000    1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    22.6±0.05s 
               10000000    1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    22.2±0.02s 
               10000000    1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    2.04±0.02s 
               10000000    1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    1.93±0.01s 
               10000000    1000       100       manhattan        auto       numpy.float32    dense    dense    9.08±0.06s 
               10000000    1000       100       manhattan        auto       numpy.float64    dense    dense    10.6±0.08s 
               10000000    1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense      failed   
               10000000    1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense      failed   
               10000000    1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense    10.2±0.2s  
               10000000    1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense    10.6±0.09s 
               10000000   10000       100       euclidean        auto       numpy.float32    dense    dense    15.5±0.4s  
               10000000   10000       100       euclidean        auto       numpy.float64    dense    dense    14.3±0.02s 
               10000000   10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    24.9±0.1s  
               10000000   10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    25.3±0.1s  
               10000000   10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    14.4±0.3s  
               10000000   10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    15.4±0.3s  
               10000000   10000       100       manhattan        auto       numpy.float32    dense    dense    1.38±0.02m 
               10000000   10000       100       manhattan        auto       numpy.float64    dense    dense    1.45±0.01m 
               10000000   10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense      failed   
               10000000   10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense      failed   
               10000000   10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense    1.34±0.01m 
               10000000   10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense    1.42±0.02m 
               10000000   100000      100       euclidean        auto       numpy.float32    dense    dense      failed   
               10000000   100000      100       euclidean        auto       numpy.float64    dense    dense      failed   
               10000000   100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense      failed   
               10000000   100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense      failed   
               10000000   100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense      failed   
               10000000   100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense      failed   
               10000000   100000      100       manhattan        auto       numpy.float32    dense    dense      failed   
               10000000   100000      100       manhattan        auto       numpy.float64    dense    dense      failed   
               10000000   100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense      failed   
               10000000   100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense      failed   
               10000000   100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense      failed   
               10000000   100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense      failed   
              ========== ======== ============ =========== =============== =============== ========= ======== ============

[ 50.00%] ···· For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)

[ 50.00%] · For scikit-learn commit b7f3fd68 <main> (round 1/1):
[ 50.00%] ·· Building for conda-py3.9-cython-joblib-numpy-pandas-scipy-threadpoolctl
[ 50.00%] ·· Benchmarking conda-py3.9-cython-joblib-numpy-pandas-scipy-threadpoolctl
[100.00%] ··· ...iseDistancesReductionsBenchmark.time_ArgKmin      16/108 failed
[100.00%] ··· ========== ======== ============ =========== =============== =============== ========= ======== ============
               n_train    n_test   n_features     metric       strategy         dtype       X_train   X_test              
              ---------- -------- ------------ ----------- --------------- --------------- --------- -------- ------------
                 1000      1000       100       euclidean        auto       numpy.float32    dense    dense     74.6±3ms  
                 1000      1000       100       euclidean        auto       numpy.float64    dense    dense    67.8±0.3ms 
                 1000      1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    21.6±0.2ms 
                 1000      1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    16.7±0.7ms 
                 1000      1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    75.1±0.4ms 
                 1000      1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    68.5±0.4ms 
                 1000      1000       100       manhattan        auto       numpy.float32    dense    dense    84.5±20ms  
                 1000      1000       100       manhattan        auto       numpy.float64    dense    dense    82.9±10ms  
                 1000      1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense    35.9±0.3ms 
                 1000      1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense    36.1±0.3ms 
                 1000      1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     83.8±1ms  
                 1000      1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense    83.2±20ms  
                 1000     10000       100       euclidean        auto       numpy.float32    dense    dense    27.8±0.9ms 
                 1000     10000       100       euclidean        auto       numpy.float64    dense    dense    19.3±0.3ms 
                 1000     10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    27.1±0.5ms 
                 1000     10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    19.0±0.4ms 
                 1000     10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     781±80ms  
                 1000     10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    790±100ms  
                 1000     10000       100       manhattan        auto       numpy.float32    dense    dense     38.7±2ms  
                 1000     10000       100       manhattan        auto       numpy.float64    dense    dense     41.5±4ms  
                 1000     10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     39.1±2ms  
                 1000     10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     43.7±3ms  
                 1000     10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     979±50ms  
                 1000     10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense     972±60ms  
                 1000     100000      100       euclidean        auto       numpy.float32    dense    dense     63.7±1ms  
                 1000     100000      100       euclidean        auto       numpy.float64    dense    dense    32.8±0.5ms 
                 1000     100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense    55.8±0.7ms 
                 1000     100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense    33.0±0.5ms 
                 1000     100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense    7.90±0.08s 
                 1000     100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense    7.28±0.09s 
                 1000     100000      100       manhattan        auto       numpy.float32    dense    dense    108±0.5ms  
                 1000     100000      100       manhattan        auto       numpy.float64    dense    dense     126±2ms   
                 1000     100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense    108±0.3ms  
                 1000     100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense     112±6ms   
                 1000     100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense    9.56±0.06s 
                 1000     100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense    9.44±0.1s  
                10000      1000       100       euclidean        auto       numpy.float32    dense    dense     80.9±2ms  
                10000      1000       100       euclidean        auto       numpy.float64    dense    dense     65.8±2ms  
                10000      1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    44.7±0.5ms 
                10000      1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    38.0±0.3ms 
                10000      1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     78.4±1ms  
                10000      1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     66.1±2ms  
                10000      1000       100       manhattan        auto       numpy.float32    dense    dense     85.4±2ms  
                10000      1000       100       manhattan        auto       numpy.float64    dense    dense     84.0±2ms  
                10000      1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     253±3ms   
                10000      1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     251±4ms   
                10000      1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     84.5±2ms  
                10000      1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense     90.4±3ms  
                10000     10000       100       euclidean        auto       numpy.float32    dense    dense     461±30ms  
                10000     10000       100       euclidean        auto       numpy.float64    dense    dense     462±50ms  
                10000     10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense     56.6±5ms  
                10000     10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense     44.5±5ms  
                10000     10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     449±20ms  
                10000     10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     453±30ms  
                10000     10000       100       manhattan        auto       numpy.float32    dense    dense     681±20ms  
                10000     10000       100       manhattan        auto       numpy.float64    dense    dense     791±30ms  
                10000     10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     241±3ms   
                10000     10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     246±2ms   
                10000     10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     639±20ms  
                10000     10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense     793±40ms  
                10000     100000      100       euclidean        auto       numpy.float32    dense    dense     184±4ms   
                10000     100000      100       euclidean        auto       numpy.float64    dense    dense     156±10ms  
                10000     100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense     183±10ms  
                10000     100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense     157±8ms   
                10000     100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense    4.88±0.04s 
                10000     100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense    4.58±0.09s 
                10000     100000      100       manhattan        auto       numpy.float32    dense    dense     987±60ms  
                10000     100000      100       manhattan        auto       numpy.float64    dense    dense    1.03±0.01s 
                10000     100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense     989±70ms  
                10000     100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense    1.03±0.07s 
                10000     100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense    6.60±0.2s  
                10000     100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense    7.10±0.1s  
               10000000    1000       100       euclidean        auto       numpy.float32    dense    dense    1.90±0.04s 
               10000000    1000       100       euclidean        auto       numpy.float64    dense    dense     1.53±0s   
               10000000    1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    21.7±0.01s 
               10000000    1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    21.5±0.04s 
               10000000    1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    2.13±0.02s 
               10000000    1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    1.94±0.01s 
               10000000    1000       100       manhattan        auto       numpy.float32    dense    dense    10.5±0.1s  
               10000000    1000       100       manhattan        auto       numpy.float64    dense    dense    12.2±0.2s  
               10000000    1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense      failed   
               10000000    1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense      failed   
               10000000    1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense    10.3±0.1s  
               10000000    1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense    12.1±0.3s  
               10000000   10000       100       euclidean        auto       numpy.float32    dense    dense    14.5±0.4s  
               10000000   10000       100       euclidean        auto       numpy.float64    dense    dense    15.1±0.3s  
               10000000   10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    24.1±0.05s 
               10000000   10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    24.6±0.02s 
               10000000   10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    15.3±0.1s  
               10000000   10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    15.2±0.2s  
               10000000   10000       100       manhattan        auto       numpy.float32    dense    dense    1.34±0.01m 
               10000000   10000       100       manhattan        auto       numpy.float64    dense    dense    1.45±0.02m 
               10000000   10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense      failed   
               10000000   10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense      failed   
               10000000   10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense    1.36±0.05m 
               10000000   10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense    1.42±0.02m 
               10000000   100000      100       euclidean        auto       numpy.float32    dense    dense      failed   
               10000000   100000      100       euclidean        auto       numpy.float64    dense    dense      failed   
               10000000   100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense      failed   
               10000000   100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense      failed   
               10000000   100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense      failed   
               10000000   100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense      failed   
               10000000   100000      100       manhattan        auto       numpy.float32    dense    dense      failed   
               10000000   100000      100       manhattan        auto       numpy.float64    dense    dense      failed   
               10000000   100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense      failed   
               10000000   100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense      failed   
               10000000   100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense      failed   
               10000000   100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense      failed   
              ========== ======== ============ =========== =============== =============== ========= ======== ============

[100.00%] ···· For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)

       before           after         ratio
     [b7f3fd68]       [8a44c5a7]
     <main>           <benchmarks/maint/pdr-misc>
+       84.5±20ms         114±20ms     1.35  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(1000, 1000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense')
+        639±20ms         736±30ms     1.15  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(10000, 10000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense')
+         112±6ms          128±2ms     1.14  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(1000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense')
+         1.53±0s       1.71±0.03s     1.12  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(10000000, 1000, 100, 'euclidean', 'auto', <class 'numpy.float64'>, 'dense', 'dense')
-        63.7±1ms         54.1±1ms     0.85  pairwise_distances_reductions.PairwiseDistancesReductionsBenchmark.time_ArgKmin(1000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float32'>, 'dense', 'dense')

SOME BENCHMARKS HAVE CHANGED SIGNIFICANTLY.
PERFORMANCE DECREASED.

@Vincent-Maladiere
Copy link
Contributor

Vincent-Maladiere commented Nov 8, 2022

Hey @jjerphan, does using fewer threads (say 8 or even a single one) yield the odd performances for some small datasets you observed on both this PR and #24715? Is there any possibility that using 128 threads on small datasets causes some instabilities?

Alternatively, could it be linked to some recent small changes in Cython itself? If so, have you tried fixing the Cython version to a previous one?

@jjerphan
Copy link
Member Author

That was it, @Vincent-Maladiere!

Using 8 threads, no performance regression are observed using ASV. I think using 128 threads just makes the variability due to CPython interpreter overhead more visible on configuration with at least one small dataset.

@ogrisel and @thomasjpfan: having this PR merged would unlock other PRs. Can you have a lot at this one, please? 🙏

Full ASV output
asv continuous -b PairwiseDistancesR -e main HEAD
· Creating environments
· Discovering benchmarks
·· Uninstalling from conda-py3.9-cython-joblib-numpy-pandas-scipy-threadpoolctl
·· Installing 8a44c5a7 <benchmarks/maint/pdr-misc> into conda-py3.9-cython-joblib-numpy-pandas-scipy-threadpoolctl
· Running 2 total benchmarks (2 commits * 1 environments * 1 benchmarks)
[  0.00%] · For scikit-learn commit 8a44c5a7 <benchmarks/maint/pdr-misc> (round 1/1):
[  0.00%] ·· Benchmarking conda-py3.9-cython-joblib-numpy-pandas-scipy-threadpoolctl
[ 50.00%] ··· ...iseDistancesReductionsBenchmark.time_ArgKmin      30/108 failed
[ 50.00%] ··· ========== ======== ============ =========== =============== =============== ========= ======== =============
               n_train    n_test   n_features     metric       strategy         dtype       X_train   X_test               
              ---------- -------- ------------ ----------- --------------- --------------- --------- -------- -------------
                 1000      1000       100       euclidean        auto       numpy.float32    dense    dense    9.59±0.05ms 
                 1000      1000       100       euclidean        auto       numpy.float64    dense    dense    7.18±0.04ms 
                 1000      1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    7.24±0.06ms 
                 1000      1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    5.54±0.02ms 
                 1000      1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    9.62±0.05ms 
                 1000      1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    7.16±0.03ms 
                 1000      1000       100       manhattan        auto       numpy.float32    dense    dense    38.2±0.04ms 
                 1000      1000       100       manhattan        auto       numpy.float64    dense    dense    35.1±0.07ms 
                 1000      1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense    36.7±0.02ms 
                 1000      1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense    33.7±0.08ms 
                 1000      1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense    38.2±0.03ms 
                 1000      1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense    35.1±0.09ms 
                 1000     10000       100       euclidean        auto       numpy.float32    dense    dense    46.1±0.06ms 
                 1000     10000       100       euclidean        auto       numpy.float64    dense    dense    45.2±0.05ms 
                 1000     10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    46.2±0.05ms 
                 1000     10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    45.2±0.05ms 
                 1000     10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    67.5±0.07ms 
                 1000     10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    64.4±0.08ms 
                 1000     10000       100       manhattan        auto       numpy.float32    dense    dense     333±0.1ms  
                 1000     10000       100       manhattan        auto       numpy.float64    dense    dense     236±0.04ms 
                 1000     10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     333±0.07ms 
                 1000     10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     236±0.06ms 
                 1000     10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     376±0.1ms  
                 1000     10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense     346±0.6ms  
                 1000     100000      100       euclidean        auto       numpy.float32    dense    dense     448±0.6ms  
                 1000     100000      100       euclidean        auto       numpy.float64    dense    dense     437±0.4ms  
                 1000     100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense     448±0.2ms  
                 1000     100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense     437±0.3ms  
                 1000     100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense     665±0.9ms  
                 1000     100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense     633±0.8ms  
                 1000     100000      100       manhattan        auto       numpy.float32    dense    dense      3.26±0s   
                 1000     100000      100       manhattan        auto       numpy.float64    dense    dense     2.30±0.01s 
                 1000     100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense      3.26±0s   
                 1000     100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense     2.30±0.01s 
                 1000     100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense      3.76±0s   
                 1000     100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense      3.45±0s   
                10000      1000       100       euclidean        auto       numpy.float32    dense    dense     45.8±0.1ms 
                10000      1000       100       euclidean        auto       numpy.float64    dense    dense     45.0±0.1ms 
                10000      1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    46.7±0.04ms 
                10000      1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    44.4±0.03ms 
                10000      1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     45.8±0.1ms 
                10000      1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     44.8±0.1ms 
                10000      1000       100       manhattan        auto       numpy.float32    dense    dense     333±0.3ms  
                10000      1000       100       manhattan        auto       numpy.float64    dense    dense      235±1ms   
                10000      1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     356±0.09ms 
                10000      1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     326±0.4ms  
                10000      1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     333±0.3ms  
                10000      1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense      236±1ms   
                10000     10000       100       euclidean        auto       numpy.float32    dense    dense     416±0.2ms  
                10000     10000       100       euclidean        auto       numpy.float64    dense    dense     412±0.3ms  
                10000     10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense     415±0.2ms  
                10000     10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense     412±0.3ms  
                10000     10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     442±0.1ms  
                10000     10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     435±0.8ms  
                10000     10000       100       manhattan        auto       numpy.float32    dense    dense      3.31±0s   
                10000     10000       100       manhattan        auto       numpy.float64    dense    dense      2.29±0s   
                10000     10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense      3.31±0s   
                10000     10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense      2.29±0s   
                10000     10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense      3.33±0s   
                10000     10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense      2.33±0s   
                10000     100000      100       euclidean        auto       numpy.float32    dense    dense      4.06±0s   
                10000     100000      100       euclidean        auto       numpy.float64    dense    dense      4.02±0s   
                10000     100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense      4.06±0s   
                10000     100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense      4.03±0s   
                10000     100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense      4.40±0s   
                10000     100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense      4.33±0s   
                10000     100000      100       manhattan        auto       numpy.float32    dense    dense      32.4±0s   
                10000     100000      100       manhattan        auto       numpy.float64    dense    dense     22.7±0.07s 
                10000     100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense     32.4±0.01s 
                10000     100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense     22.7±0.07s 
                10000     100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense      33.2±0s   
                10000     100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense     23.5±0.06s 
               10000000    1000       100       euclidean        auto       numpy.float32    dense    dense     39.9±0.04s 
               10000000    1000       100       euclidean        auto       numpy.float64    dense    dense     40.0±0.02s 
               10000000    1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense     44.5±0.01s 
               10000000    1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense     42.7±0.01s 
               10000000    1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     40.1±0.03s 
               10000000    1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     40.1±0.02s 
               10000000    1000       100       manhattan        auto       numpy.float32    dense    dense       failed   
               10000000    1000       100       manhattan        auto       numpy.float64    dense    dense       failed   
               10000000    1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000    1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000    1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000    1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense       failed   
               10000000   10000       100       euclidean        auto       numpy.float32    dense    dense       failed   
               10000000   10000       100       euclidean        auto       numpy.float64    dense    dense       failed   
               10000000   10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000   10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000   10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000   10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense       failed   
               10000000   10000       100       manhattan        auto       numpy.float32    dense    dense       failed   
               10000000   10000       100       manhattan        auto       numpy.float64    dense    dense       failed   
               10000000   10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000   10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000   10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000   10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense       failed   
               10000000   100000      100       euclidean        auto       numpy.float32    dense    dense       failed   
               10000000   100000      100       euclidean        auto       numpy.float64    dense    dense       failed   
               10000000   100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000   100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000   100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000   100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense       failed   
               10000000   100000      100       manhattan        auto       numpy.float32    dense    dense       failed   
               10000000   100000      100       manhattan        auto       numpy.float64    dense    dense       failed   
               10000000   100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000   100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000   100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000   100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense       failed   
              ========== ======== ============ =========== =============== =============== ========= ======== =============

[ 50.00%] ···· For parameters: 10000000, 1000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)

[ 50.00%] · For scikit-learn commit b7f3fd68 <main> (round 1/1):
[ 50.00%] ·· Building for conda-py3.9-cython-joblib-numpy-pandas-scipy-threadpoolctl
[ 50.00%] ·· Benchmarking conda-py3.9-cython-joblib-numpy-pandas-scipy-threadpoolctl
[100.00%] ··· ...iseDistancesReductionsBenchmark.time_ArgKmin      30/108 failed
[100.00%] ··· ========== ======== ============ =========== =============== =============== ========= ======== =============
               n_train    n_test   n_features     metric       strategy         dtype       X_train   X_test               
              ---------- -------- ------------ ----------- --------------- --------------- --------- -------- -------------
                 1000      1000       100       euclidean        auto       numpy.float32    dense    dense    9.46±0.05ms 
                 1000      1000       100       euclidean        auto       numpy.float64    dense    dense    7.13±0.04ms 
                 1000      1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    7.13±0.06ms 
                 1000      1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    5.50±0.02ms 
                 1000      1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense    9.47±0.05ms 
                 1000      1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    7.11±0.03ms 
                 1000      1000       100       manhattan        auto       numpy.float32    dense    dense    38.2±0.03ms 
                 1000      1000       100       manhattan        auto       numpy.float64    dense    dense    35.1±0.08ms 
                 1000      1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense    36.7±0.02ms 
                 1000      1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense    33.6±0.08ms 
                 1000      1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense    38.2±0.03ms 
                 1000      1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense    35.1±0.08ms 
                 1000     10000       100       euclidean        auto       numpy.float32    dense    dense    45.6±0.07ms 
                 1000     10000       100       euclidean        auto       numpy.float64    dense    dense    44.9±0.07ms 
                 1000     10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    45.6±0.06ms 
                 1000     10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    45.0±0.05ms 
                 1000     10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     66.0±0.1ms 
                 1000     10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense    63.8±0.06ms 
                 1000     10000       100       manhattan        auto       numpy.float32    dense    dense     333±0.07ms 
                 1000     10000       100       manhattan        auto       numpy.float64    dense    dense     235±0.06ms 
                 1000     10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     333±0.07ms 
                 1000     10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     235±0.09ms 
                 1000     10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     376±0.1ms  
                 1000     10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense     347±0.7ms  
                 1000     100000      100       euclidean        auto       numpy.float32    dense    dense     443±0.3ms  
                 1000     100000      100       euclidean        auto       numpy.float64    dense    dense     435±0.5ms  
                 1000     100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense     443±0.4ms  
                 1000     100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense     435±0.3ms  
                 1000     100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense      651±1ms   
                 1000     100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense      631±1ms   
                 1000     100000      100       manhattan        auto       numpy.float32    dense    dense      3.26±0s   
                 1000     100000      100       manhattan        auto       numpy.float64    dense    dense     2.29±0.01s 
                 1000     100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense      3.26±0s   
                 1000     100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense     2.29±0.01s 
                 1000     100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense      3.76±0s   
                 1000     100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense      3.45±0s   
                10000      1000       100       euclidean        auto       numpy.float32    dense    dense     45.1±0.1ms 
                10000      1000       100       euclidean        auto       numpy.float64    dense    dense    44.6±0.08ms 
                10000      1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense    45.7±0.04ms 
                10000      1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense    44.4±0.03ms 
                10000      1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     45.1±0.1ms 
                10000      1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     44.6±0.1ms 
                10000      1000       100       manhattan        auto       numpy.float32    dense    dense     333±0.1ms  
                10000      1000       100       manhattan        auto       numpy.float64    dense    dense      235±1ms   
                10000      1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense     356±0.09ms 
                10000      1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense     326±0.3ms  
                10000      1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense     333±0.1ms  
                10000      1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense      235±1ms   
                10000     10000       100       euclidean        auto       numpy.float32    dense    dense     409±0.3ms  
                10000     10000       100       euclidean        auto       numpy.float64    dense    dense     404±0.4ms  
                10000     10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense     409±0.6ms  
                10000     10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense     405±0.5ms  
                10000     10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     435±0.2ms  
                10000     10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     432±0.6ms  
                10000     10000       100       manhattan        auto       numpy.float32    dense    dense      3.31±0s   
                10000     10000       100       manhattan        auto       numpy.float64    dense    dense      2.28±0s   
                10000     10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense      3.31±0s   
                10000     10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense      2.28±0s   
                10000     10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense      3.32±0s   
                10000     10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense      2.32±0s   
                10000     100000      100       euclidean        auto       numpy.float32    dense    dense      4.00±0s   
                10000     100000      100       euclidean        auto       numpy.float64    dense    dense      3.95±0s   
                10000     100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense      3.99±0s   
                10000     100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense      3.95±0s   
                10000     100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense      4.33±0s   
                10000     100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense      4.31±0s   
                10000     100000      100       manhattan        auto       numpy.float32    dense    dense     32.4±0.01s 
                10000     100000      100       manhattan        auto       numpy.float64    dense    dense     22.7±0.07s 
                10000     100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense     32.4±0.01s 
                10000     100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense     22.7±0.07s 
                10000     100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense      33.2±0s   
                10000     100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense     23.4±0.06s 
               10000000    1000       100       euclidean        auto       numpy.float32    dense    dense     39.5±0.05s 
               10000000    1000       100       euclidean        auto       numpy.float64    dense    dense      39.3±0s   
               10000000    1000       100       euclidean   parallel_on_X   numpy.float32    dense    dense     43.6±0.03s 
               10000000    1000       100       euclidean   parallel_on_X   numpy.float64    dense    dense      42.9±0s   
               10000000    1000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense     39.3±0.06s 
               10000000    1000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense     39.1±0.07s 
               10000000    1000       100       manhattan        auto       numpy.float32    dense    dense       failed   
               10000000    1000       100       manhattan        auto       numpy.float64    dense    dense       failed   
               10000000    1000       100       manhattan   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000    1000       100       manhattan   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000    1000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000    1000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense       failed   
               10000000   10000       100       euclidean        auto       numpy.float32    dense    dense       failed   
               10000000   10000       100       euclidean        auto       numpy.float64    dense    dense       failed   
               10000000   10000       100       euclidean   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000   10000       100       euclidean   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000   10000       100       euclidean   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000   10000       100       euclidean   parallel_on_Y   numpy.float64    dense    dense       failed   
               10000000   10000       100       manhattan        auto       numpy.float32    dense    dense       failed   
               10000000   10000       100       manhattan        auto       numpy.float64    dense    dense       failed   
               10000000   10000       100       manhattan   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000   10000       100       manhattan   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000   10000       100       manhattan   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000   10000       100       manhattan   parallel_on_Y   numpy.float64    dense    dense       failed   
               10000000   100000      100       euclidean        auto       numpy.float32    dense    dense       failed   
               10000000   100000      100       euclidean        auto       numpy.float64    dense    dense       failed   
               10000000   100000      100       euclidean   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000   100000      100       euclidean   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000   100000      100       euclidean   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000   100000      100       euclidean   parallel_on_Y   numpy.float64    dense    dense       failed   
               10000000   100000      100       manhattan        auto       numpy.float32    dense    dense       failed   
               10000000   100000      100       manhattan        auto       numpy.float64    dense    dense       failed   
               10000000   100000      100       manhattan   parallel_on_X   numpy.float32    dense    dense       failed   
               10000000   100000      100       manhattan   parallel_on_X   numpy.float64    dense    dense       failed   
               10000000   100000      100       manhattan   parallel_on_Y   numpy.float32    dense    dense       failed   
               10000000   100000      100       manhattan   parallel_on_Y   numpy.float64    dense    dense       failed   
              ========== ======== ============ =========== =============== =============== ========= ======== =============

[100.00%] ···· For parameters: 10000000, 1000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 1000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 10000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'euclidean', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'auto', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'auto', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_X', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float32'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)
               
               For parameters: 10000000, 100000, 100, 'manhattan', 'parallel_on_Y', <class 'numpy.float64'>, 'dense', 'dense'
               
               
               asv: benchmark timed out (timeout 500s)


BENCHMARKS NOT SIGNIFICANTLY CHANGED.

Copy link
Member

@ogrisel ogrisel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@jeremiedbb jeremiedbb merged commit e179277 into scikit-learn:main Nov 18, 2022
@jjerphan jjerphan deleted the maint/pdr-misc branch November 18, 2022 10:55
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants