@@ -23,37 +23,47 @@ def exponential_loop_array(
2323 loop_size ,
2424 spacing ,
2525 min_loop_size = 3 ,
26- loop_spacing_distr = 'uniform' ):
26+ loop_spacing_distr = 'uniform' ,
27+ skip_first_spacer = True ,
28+ resize = True ):
2729
2830 looplens = []
2931 spacers = []
3032 cumL = 0
3133 while True :
32- looplens .append (min_loop_size
33- + np .round (np .random .exponential (loop_size - min_loop_size )))
34- if loop_spacing_distr == 'exp' :
35- spacers .append (
36- max (1 , int (np .round (np .random .exponential (spacing - 1 )))))
37- elif loop_spacing_distr == 'uniform' :
38- spacers .append (spacing )
34+ if cumL == 0 and skip_first_spacer :
35+ spacer = 0
3936 else :
40- raise ValueError ('Unknown distribution of loop spacers' )
37+ if loop_spacing_distr == 'exp' :
38+ spacer = max (1 , int (np .round (np .random .exponential (spacing - 1 ))))
39+ elif loop_spacing_distr == 'uniform' :
40+ spacer = spacing
41+ else :
42+ raise ValueError ('Unknown distribution of loop spacers' )
43+
44+ spacers .append (spacer )
45+
46+ loop_len = min_loop_size + np .round (np .random .exponential (loop_size - min_loop_size ))
47+ looplens .append (loop_len )
48+
4149
42- cumL += looplens [- 1 ] + spacers [- 1 ]
50+ cumL += + spacers [- 1 ] + looplens [- 1 ]
4351 if cumL > N - 1 :
4452 if len (looplens ) > 1 :
45- looplens .pop (len (looplens ) - 1 )
4653 spacers .pop (len (spacers ) - 1 )
54+ looplens .pop (len (looplens ) - 1 )
4755 break
4856
4957 looplens , spacers = np .array (looplens ), np .array (spacers )
50- looplens = looplens * float (N - 1 - spacers .sum ()) / (looplens .sum ())
58+ if resize :
59+ looplens = looplens * float (N - 1 - spacers .sum ()) / (looplens .sum ())
5160
52- loopstarts = np .r_ [0 , np .cumsum (looplens + spacers ) [:- 1 ]]
61+ loopstarts = spacers [ 0 ] + np .r_ [0 , np .cumsum (looplens [:- 1 ]+ spacers [ 1 :]) ]
5362 loops = np .vstack ([np .round (loopstarts ), np .round (loopstarts + looplens )]).T
5463 loops = loops .astype ('int' )
5564
56- return loops
65+ return loops , looplens , spacers
66+
5767
5868
5969def exponential_overlapping_loop_array (
0 commit comments