@@ -209,9 +209,7 @@ def setup_random_uniform_ndim_data(request):
209209 return _generate_random_uniform_nd_data (request , size , a , b )
210210
211211
212- def _generate_random_choices (request , values , count ):
213- rng = request .node .rng
214-
212+ def _generate_random_choices (rng , values , count ):
215213 values = set (values )
216214
217215 num_elements = len (values )
@@ -235,6 +233,46 @@ def _generate_random_choices(request, values, count):
235233 return sorted (selected_values )
236234
237235
236+ def _generate_random_bvals (rng , b0s , shells , n_gradients ):
237+ # Generate a random number of elements for each shell
238+ bvals_shells = _generate_random_choices (rng , shells , n_gradients )
239+
240+ bvals = np .hstack ([b0s * [0 ], bvals_shells ])
241+
242+ return bvals
243+
244+
245+ def _generate_random_bvecs (rng , b0s , n_gradients ):
246+ return np .hstack ([np .zeros ((3 , b0s )), normalized_vector (rng .random ((3 , n_gradients )), axis = 0 )])
247+
248+
249+ @pytest .fixture (autouse = True )
250+ def setup_random_bval_data (request ):
251+ """Automatically generate random b-val data for tests."""
252+ marker = request .node .get_closest_marker ("random_bval_data" )
253+
254+ n_gradients = 10
255+ shells = (1000 , 2000 , 3000 )
256+ b0s = 1
257+ if marker :
258+ n_gradients , shells , b0s = marker .args
259+
260+ rng = request .node .rng
261+ return _generate_random_bvals (rng , b0s , shells , n_gradients )
262+
263+
264+ @pytest .fixture
265+ def setup_random_bvec_data (request , bvals , bval_tolerance ):
266+ """Automatically generate random b-vec data for tests."""
267+ rng = request .node .rng
268+
269+ is_b0 = np .abs (bvals ) <= bval_tolerance
270+ b0s = np .sum (is_b0 )
271+ n_gradients = np .sum (~ is_b0 )
272+
273+ return _generate_random_bvecs (rng , b0s , n_gradients )
274+
275+
238276@pytest .fixture (autouse = True )
239277def setup_random_gtab_data (request ):
240278 """Automatically generate random gtab data for tests."""
@@ -248,13 +286,8 @@ def setup_random_gtab_data(request):
248286
249287 rng = request .node .rng
250288
251- # Generate a random number of elements for each shell
252- bvals_shells = _generate_random_choices (request , shells , n_gradients )
253-
254- bvals = np .hstack ([b0s * [0 ], bvals_shells ])
255- bvecs = np .hstack (
256- [np .zeros ((3 , b0s )), normalized_vector (rng .random ((3 , n_gradients )), axis = 0 )]
257- )
289+ bvals = _generate_random_bvals (rng , b0s , shells , n_gradients )
290+ bvecs = _generate_random_bvecs (rng , b0s , n_gradients )
258291
259292 return bvals , bvecs
260293
0 commit comments