@@ -44,14 +44,16 @@ def _sliding_dot_product_r2c2r(Q, T):
4444 return c2r (False , np .multiply (fft_2d [0 ], fft_2d [1 ]), n = next_fast_n )[m - 1 : n ]
4545
4646
47- def _sliding_dot_product (Q , T ):
47+ def _sliding_dot_product (Q , T , block_size = None ):
4848 m = Q .shape [0 ]
4949 n = T .shape [0 ]
5050
51- # compute optimal block size
5251 overlap = m - 1
53- opt_size = - overlap * lambertw (- 1 / (2 * math .e * overlap ), k = - 1 ).real
54- block_size = next_fast_len (math .ceil (opt_size ), real = True )
52+ if block_size is None :
53+ # compute optimal block size
54+ opt_size = - overlap * lambertw (- 1 / (2 * math .e * overlap ), k = - 1 ).real
55+ block_size = next_fast_len (math .ceil (opt_size ), real = True )
56+
5557 if block_size >= n :
5658 return _sliding_dot_product_r2c2r (Q , T )
5759
@@ -70,7 +72,7 @@ def setup(Q, T):
7072 return
7173
7274
73- def sliding_dot_product (Q , T ):
75+ def sliding_dot_product (Q , T , block_size = None ):
7476 if len (Q ) == len (T ):
7577 return np .dot (Q , T )
76- return _sliding_dot_product (Q , T )
78+ return _sliding_dot_product (Q , T , block_size = block_size )
0 commit comments