Coverage for moptipy / examples / bitstrings / labs.py: 87%
76 statements
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-15 11:18 +0000
« prev ^ index » next coverage.py v7.13.0, created at 2025-12-15 11:18 +0000
1"""
2The Low Autocorrelation Binary Sequence problem.
4The `k`-step autocorrelations of a bit string `x` are defined as
6`C_k(x) = sum(i = 0, n - k - 1, 1 if x[i] == x[i + k] else -1)`
8The energy of the bit string, which is equivalent to the objective value of
9this benchmark problem, is then:
11`E(x) = sum(k = 1, n - 1, C_k(x) ** 2)`
13The low-autocorrelation binary sequence (LABS) problem is to find a minimum
14autocorrelated bit string is equivalent to minimizing `E`. We use the energy
15directly as objective function. Others who define LABS as a maximization
16problem try to maximize the merit factor `F` instead, which is equivalent to
17minimizing the energy:
19`F(x) = n² / (n * E(X))`
21This problem is different from the other bit-string based problems, because we
22only know the optimal solutions for few, smaller instances. For larger
23instances, we only have lower bounds of the energy.
251. Carola Doerr and Furong Ye and Naama Horesh and Hao Wang and Ofer M. Shir
26 and Thomas Bäck. Benchmarking Discrete Optimization Heuristics with
27 IOHprofiler. Applied Soft Computing 88:106027, March 2020,
28 doi: https://doi.org/10.1016/j.asoc.2019.106027.
292. Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences.
30 arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016
31 https://arxiv.org/pdf/1512.02475
323. Burkhard Militzer, Michele Zamparelli, and Dieter Beule. Evolutionary
33 Search for Low Autocorrelated Binary Sequences. IEEE Transactions on
34 Evolutionary Computation. 2(1):34-39}. 1998.
35 doi: https://doi.org/10.1109/4235.728212
364. Wai Ho Mow and Ke-Lin Du. New Evolutionary Search for Long Low
37 Autocorrelation Binary Sequences. IEEE Transactions on Aerospace and
38 Electronic Systems. 51(1):290-303. January 2015.
39 doi: https://doi.org/10.1109/TAES.2014.130518
405. Borko Bošković, Franc Brglez, and Janez Brest. Low-Autocorrelation Binary
41 Sequences: On Improved Merit Factors and Runtime Predictions to Achieve
42 Them. arXiv:1406.5301v6 [cs.DS] 6 May 2017. See [6] below.
43 https://arxiv.org/pdf/1406.5301
446. Borko Bošković, Franc Brglez, and Janez Brest. Low-Autocorrelation Binary
45 Sequences: On Improved Merit Factors and Runtime Predictions to Achieve
46 Them. Applied Soft Computing. 56:262-285, July 2017.
47 doi: https://doi.org/10.1016/j.asoc.2017.02.024
49This is code is part of the research work of Mr. Jiazheng ZENG (曾嘉政),
50a Master's student at the Institute of Applied Optimization
51(应用优化研究所) of the School of Artificial
52Intelligence and Big Data (人工智能与大数据学院) at
53Hefei University (合肥大学) in
54Hefei, Anhui, China (中国安徽省合肥市) under the supervision of
55Prof. Dr. Thomas Weise (汤卫思教授).
56"""
57from math import isfinite
58from typing import Callable, Final, Iterator, cast
60import numba # type: ignore
61import numpy as np
62from pycommons.ds.sequences import merge_sorted_and_return_unique
63from pycommons.math.int_math import try_int_div
64from pycommons.types import check_int_range, type_error
66from moptipy.examples.bitstrings.bitstring_problem import (
67 BitStringProblem,
68 default_scale_sequence,
69)
72@numba.njit(nogil=True, cache=True)
73def labs(x: np.ndarray) -> int:
74 """
75 Calculate the objective value of the LABS problem.
77 :param x: the flat numpy array representing the bitstring
78 :return: the LABS objective
80 # N = 3, E = 1, FN = 4.50000
81 >>> labs(np.array([0, 0, 1]))
82 1
84 # N = 3, E = 1, FN = 4.50000
85 >>> labs(np.array([1, 1, 0]))
86 1
88 # N = 4, E = 2, FN = 4.00000
89 >>> labs(np.array([0, 1, 0, 0]))
90 2
92 # N = 4, E = 2, FN = 4.00000
93 >>> labs(np.array([1, 0, 1, 1]))
94 2
96 # N = 5, E = 2, FN = 6.25000
97 >>> labs(np.array([0, 0, 0, 1, 0]))
98 2
100 # N = 5, E = 2, FN = 6.25000
101 >>> labs(np.array([1, 1, 1, 0, 1]))
102 2
104 # N = 6, E = 7, FN = 2.57143
105 >>> labs(np.array([0, 1, 1, 1, 1, 0]))
106 7
108 # N = 6, E = 7, FN = 2.57143
109 >>> labs(np.array([1, 0, 0, 0, 0, 1]))
110 7
112 # N = 6, E = 7, FN = 2.57143
113 >>> labs(np.array([0, 1, 1, 0, 0, 0]))
114 7
116 # N = 6, E = 7, FN = 2.57143
117 >>> labs(np.array([1, 0, 0, 1, 1, 1]))
118 7
120 # N = 6, E = 7, FN = 2.57143
121 >>> labs(np.array([0, 0, 0, 1, 0, 0]))
122 7
124 # N = 6, E = 7, FN = 2.57143
125 >>> labs(np.array([1, 1, 1, 0, 1, 1]))
126 7
128 # N = 6, E = 7, FN = 2.57143
129 >>> labs(np.array([0, 1, 0, 1, 1, 1]))
130 7
132 # N = 6, E = 7, FN = 2.57143
133 >>> labs(np.array([1, 0, 1, 0, 0, 0]))
134 7
136 # N = 7, E = 3, FN = 8.16667
137 >>> labs(np.array([0, 1, 0, 0, 1, 1, 1]))
138 3
140 # N = 7, E = 3, FN = 8.16667
141 >>> labs(np.array([1, 0, 1, 1, 0, 0, 0]))
142 3
144 # N = 8, E = 8, FN = 4.00000
145 >>> labs(np.array([0, 0, 0, 1, 1, 0, 1, 0]))
146 8
148 # N = 8, E = 8, FN = 4.00000
149 >>> labs(np.array([1, 1, 1, 0, 0, 1, 0, 1]))
150 8
152 # N = 8, E = 8, FN = 4.00000
153 >>> labs(np.array([0, 0, 0, 1, 0, 1, 1, 0]))
154 8
156 # N = 8, E = 8, FN = 4.00000
157 >>> labs(np.array([1, 1, 1, 0, 1, 0, 0, 1]))
158 8
160 # N = 9, E = 12, FN = 3.37500
161 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 0, 1]))
162 12
164 # N = 9, E = 12, FN = 3.37500
165 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 1, 0]))
166 12
168 # N = 9, E = 12, FN = 3.37500
169 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 1, 0]))
170 12
172 # N = 9, E = 12, FN = 3.37500
173 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 0, 1]))
174 12
176 # N = 9, E = 12, FN = 3.37500
177 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 1, 0]))
178 12
180 # N = 9, E = 12, FN = 3.37500
181 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 0, 1]))
182 12
184 # N = 9, E = 12, FN = 3.37500
185 >>> labs(np.array([0, 0, 0, 1, 0, 1, 1, 0, 0]))
186 12
188 # N = 9, E = 12, FN = 3.37500
189 >>> labs(np.array([1, 1, 1, 0, 1, 0, 0, 1, 1]))
190 12
192 # N = 10, E = 13, FN = 3.84615
193 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0]))
194 13
196 # N = 10, E = 13, FN = 3.84615
197 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1]))
198 13
200 # N = 10, E = 13, FN = 3.84615
201 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 1, 0]))
202 13
204 # N = 10, E = 13, FN = 3.84615
205 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 0, 1]))
206 13
208 # N = 10, E = 13, FN = 3.84615
209 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 0, 1, 1]))
210 13
212 # N = 10, E = 13, FN = 3.84615
213 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 1, 0, 0]))
214 13
216 # N = 10, E = 13, FN = 3.84615
217 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 1, 0, 0]))
218 13
220 # N = 10, E = 13, FN = 3.84615
221 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 0, 1, 1]))
222 13
224 # N = 10, E = 13, FN = 3.84615
225 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 1, 0]))
226 13
228 # N = 10, E = 13, FN = 3.84615
229 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 0, 1]))
230 13
232 # N = 11, E = 5, FN = 12.10000
233 >>> labs(np.array([0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1]))
234 5
236 # N = 11, E = 5, FN = 12.10000
237 >>> labs(np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0]))
238 5
240 # N = 12, E = 10, FN = 7.20000
241 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]))
242 10
244 # N = 12, E = 10, FN = 7.20000
245 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]))
246 10
248 # N = 12, E = 10, FN = 7.20000
249 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0]))
250 10
252 # N = 12, E = 10, FN = 7.20000
253 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1]))
254 10
256 # N = 13, E = 6, FN = 14.08333
257 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]))
258 6
260 # N = 13, E = 6, FN = 14.08333
261 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]))
262 6
264 # N = 14, E = 19, FN = 5.15789
265 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1]))
266 19
268 # N = 14, E = 19, FN = 5.15789
269 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0]))
270 19
272 # N = 14, E = 19, FN = 5.15789
273 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]))
274 19
276 # N = 14, E = 19, FN = 5.15789
277 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]))
278 19
280 # N = 14, E = 19, FN = 5.15789
281 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0]))
282 19
284 # N = 14, E = 19, FN = 5.15789
285 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1]))
286 19
288 # N = 14, E = 19, FN = 5.15789
289 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1]))
290 19
292 # N = 14, E = 19, FN = 5.15789
293 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0]))
294 19
296 # N = 14, E = 19, FN = 5.15789
297 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1]))
298 19
300 # N = 14, E = 19, FN = 5.15789
301 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0]))
302 19
304 # N = 14, E = 19, FN = 5.15789
305 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]))
306 19
308 # N = 14, E = 19, FN = 5.15789
309 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0]))
310 19
312 # N = 14, E = 19, FN = 5.15789
313 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0]))
314 19
316 # N = 14, E = 19, FN = 5.15789
317 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1]))
318 19
320 # N = 14, E = 19, FN = 5.15789
321 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0]))
322 19
324 # N = 14, E = 19, FN = 5.15789
325 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1]))
326 19
328 # N = 15, E = 15, FN = 7.50000
329 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]))
330 15
332 # N = 15, E = 15, FN = 7.50000
333 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]))
334 15
336 # N = 15, E = 15, FN = 7.50000
337 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1]))
338 15
340 # N = 15, E = 15, FN = 7.50000
341 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]))
342 15
344 # N = 16, E = 24, FN = 5.33333
345 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0]))
346 24
348 # N = 16, E = 24, FN = 5.33333
349 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1]))
350 24
352 # N = 16, E = 24, FN = 5.33333
353 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0]))
354 24
356 # N = 16, E = 24, FN = 5.33333
357 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1]))
358 24
360 # N = 16, E = 24, FN = 5.33333
361 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0]))
362 24
364 # N = 16, E = 24, FN = 5.33333
365 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1]))
366 24
368 # N = 16, E = 24, FN = 5.33333
369 >>> labs(np.array([0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0]))
370 24
372 # N = 16, E = 24, FN = 5.33333
373 >>> labs(np.array([1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1]))
374 24
376 # N = 17, E = 32, FN = 4.51562
377 >>> labs(np.array([0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0]))
378 32
380 # N = 17, E = 32, FN = 4.51562
381 >>> labs(np.array([1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1]))
382 32
384 # N = 17, E = 32, FN = 4.51562
385 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1]))
386 32
388 # N = 17, E = 32, FN = 4.51562
389 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0]))
390 32
392 # N = 17, E = 32, FN = 4.51562
393 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]))
394 32
396 # N = 17, E = 32, FN = 4.51562
397 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0]))
398 32
400 # N = 17, E = 32, FN = 4.51562
401 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1]))
402 32
404 # N = 17, E = 32, FN = 4.51562
405 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0]))
406 32
408 # N = 17, E = 32, FN = 4.51562
409 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1]))
410 32
412 # N = 17, E = 32, FN = 4.51562
413 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0]))
414 32
416 # N = 17, E = 32, FN = 4.51562
417 >>> labs(np.array([0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1]))
418 32
420 # N = 17, E = 32, FN = 4.51562
421 >>> labs(np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0]))
422 32
424 # N = 18, E = 25, FN = 6.48000
425 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0]))
426 25
428 # N = 18, E = 25, FN = 6.48000
429 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1]))
430 25
432 # N = 18, E = 25, FN = 6.48000
433 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0]))
434 25
436 # N = 18, E = 25, FN = 6.48000
437 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1]))
438 25
440 # N = 19, E = 29, FN = 6.22414
441 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1,
442 ... 1]))
443 29
445 # N = 19, E = 29, FN = 6.22414
446 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0,
447 ... 0]))
448 29
450 # N = 20, E = 26, FN = 7.69231
451 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0,
452 ... 0, 1]))
453 26
455 # N = 20, E = 26, FN = 7.69231
456 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1,
457 ... 1, 0]))
458 26
460 # N = 21, E = 26, FN = 8.48077
461 >>> labs(np.array([0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0,
462 ... 1, 1, 0]))
463 26
465 # N = 21, E = 26, FN = 8.48077
466 >>> labs(np.array([1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1,
467 ... 0, 0, 1]))
468 26
470 # N = 22, E = 39, FN = 6.20513
471 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1,
472 ... 1, 0, 0, 0]))
473 39
475 # N = 22, E = 39, FN = 6.20513
476 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0,
477 ... 0, 1, 1, 1]))
478 39
480 # N = 22, E = 39, FN = 6.20513
481 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0,
482 ... 1, 1, 0, 1]))
483 39
485 # N = 22, E = 39, FN = 6.20513
486 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1,
487 ... 0, 0, 1, 0]))
488 39
490 # N = 22, E = 39, FN = 6.20513
491 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0,
492 ... 0, 0, 1, 1]))
493 39
495 # N = 22, E = 39, FN = 6.20513
496 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1,
497 ... 1, 1, 0, 0]))
498 39
500 # N = 23, E = 47, FN = 5.62766
501 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
502 ... 0, 0, 0, 1, 1]))
503 47
505 # N = 23, E = 47, FN = 5.62766
506 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
507 ... 1, 1, 1, 0, 0]))
508 47
510 # N = 23, E = 47, FN = 5.62766
511 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1,
512 ... 1, 0, 0, 1, 0]))
513 47
515 # N = 23, E = 47, FN = 5.62766
516 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0,
517 ... 0, 1, 1, 0, 1]))
518 47
520 # N = 23, E = 47, FN = 5.62766
521 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1,
522 ... 0, 0, 0, 1, 1]))
523 47
525 # N = 23, E = 47, FN = 5.62766
526 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0,
527 ... 1, 1, 1, 0, 0]))
528 47
530 # N = 24, E = 36, FN = 8.00000
531 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
532 ... 1, 1, 0, 1, 1, 0]))
533 36
535 # N = 24, E = 36, FN = 8.00000
536 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1,
537 ... 0, 0, 1, 0, 0, 1]))
538 36
540 # N = 25, E = 36, FN = 8.68056
541 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1,
542 ... 1, 0, 1, 1, 0, 0, 1]))
543 36
545 # N = 25, E = 36, FN = 8.68056
546 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
547 ... 0, 1, 0, 0, 1, 1, 0]))
548 36
550 # N = 26, E = 45, FN = 7.51111
551 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
552 ... 0, 1, 1, 1, 0, 0, 1, 1]))
553 45
555 # N = 26, E = 45, FN = 7.51111
556 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1,
557 ... 1, 0, 0, 0, 1, 1, 0, 0]))
558 45
560 # N = 26, E = 45, FN = 7.51111
561 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1,
562 ... 0, 1, 1, 0, 1, 1, 0, 1]))
563 45
565 # N = 26, E = 45, FN = 7.51111
566 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0,
567 ... 1, 0, 0, 1, 0, 0, 1, 0]))
568 45
570 # N = 26, E = 45, FN = 7.51111
571 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
572 ... 0, 1, 1, 0, 1, 1, 0, 1]))
573 45
575 # N = 26, E = 45, FN = 7.51111
576 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
577 ... 1, 0, 0, 1, 0, 0, 1, 0]))
578 45
580 # N = 27, E = 37, FN = 9.85135
581 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
582 ... 1, 0, 0, 1, 0, 1, 1, 0, 1]))
583 37
585 # N = 27, E = 37, FN = 9.85135
586 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
587 ... 0, 1, 1, 0, 1, 0, 0, 1, 0]))
588 37
590 # N = 28, E = 50, FN = 7.84000
591 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
592 ... 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]))
593 50
595 # N = 28, E = 50, FN = 7.84000
596 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
597 ... 0, 1, 1, 0, 1, 0, 0, 1, 0, 0]))
598 50
600 # N = 29, E = 62, FN = 6.78226
601 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0,
602 ... 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0]))
603 62
605 # N = 29, E = 62, FN = 6.78226
606 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1,
607 ... 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1]))
608 62
610 # N = 29, E = 62, FN = 6.78226
611 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0,
612 ... 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0]))
613 62
615 # N = 29, E = 62, FN = 6.78226
616 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
617 ... 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1]))
618 62
620 # N = 30, E = 59, FN = 7.62712
621 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,
622 ... 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0]))
623 59
625 # N = 30, E = 59, FN = 7.62712
626 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
627 ... 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1]))
628 59
630 # N = 30, E = 59, FN = 7.62712
631 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,
632 ... 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0]))
633 59
635 # N = 30, E = 59, FN = 7.62712
636 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
637 ... 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1]))
638 59
640 # N = 31, E = 67, FN = 7.17164
641 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1,
642 ... 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1]))
643 67
645 # N = 31, E = 67, FN = 7.17164
646 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0,
647 ... 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0]))
648 67
650 # N = 32, E = 64, FN = 8.00000
651 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1,
652 ... 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0]))
653 64
655 # N = 32, E = 64, FN = 8.00000
656 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0,
657 ... 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1]))
658 64
660 # N = 33, E = 64, FN = 8.50781
661 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0,
662 ... 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1]))
663 64
665 # N = 33, E = 64, FN = 8.50781
666 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1,
667 ... 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0]))
668 64
670 # N = 34, E = 65, FN = 8.89231
671 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1,
672 ... 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1]))
673 65
675 # N = 34, E = 65, FN = 8.89231
676 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0,
677 ... 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0]))
678 65
680 # N = 35, E = 73, FN = 8.39041
681 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1,
682 ... 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0]))
683 73
685 # N = 35, E = 73, FN = 8.39041
686 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0,
687 ... 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1]))
688 73
690 # N = 36, E = 82, FN = 7.90244
691 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1,
692 ... 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0]))
693 82
695 # N = 36, E = 82, FN = 7.90244
696 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0,
697 ... 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1]))
698 82
700 # N = 37, E = 86, FN = 7.95930
701 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1,
702 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1]))
703 86
705 # N = 37, E = 86, FN = 7.95930
706 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
707 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0]))
708 86
710 # N = 38, E = 87, FN = 8.29885
711 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1,
712 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0]))
713 87
715 # N = 38, E = 87, FN = 8.29885
716 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
717 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1]))
718 87
720 # N = 39, E = 99, FN = 7.68182
721 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
722 ... 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1]))
723 99
725 # N = 39, E = 99, FN = 7.68182
726 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
727 ... 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0]))
728 99
730 # N = 39, E = 99, FN = 7.68182
731 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
732 ... 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1]))
733 99
735 # N = 39, E = 99, FN = 7.68182
736 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1,
737 ... 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0]))
738 99
740 # N = 40, E = 108, FN = 7.40741
741 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1,
742 ... 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
743 ... 1]))
744 108
746 # N = 40, E = 108, FN = 7.40741
747 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0,
748 ... 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
749 ... 0]))
750 108
752 # N = 41, E = 108, FN = 7.78241
753 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1,
754 ... 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0,
755 ... 1, 0]))
756 108
758 # N = 41, E = 108, FN = 7.78241
759 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0,
760 ... 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1,
761 ... 0, 1]))
762 108
764 # N = 42, E = 101, FN = 8.73267
765 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1,
766 ... 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0,
767 ... 1, 0, 0]))
768 101
770 # N = 42, E = 101, FN = 8.73267
771 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0,
772 ... 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1,
773 ... 0, 1, 1]))
774 101
776 # N = 43, E = 109, FN = 8.48165
777 >>> labs(np.array([0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0,
778 ... 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1,
779 ... 0, 1, 1, 1]))
780 109
782 # N = 43, E = 109, FN = 8.48165
783 >>> labs(np.array([1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1,
784 ... 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0,
785 ... 1, 0, 0, 0]))
786 109
788 # N = 44, E = 122, FN = 7.93443
789 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1,
790 ... 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1,
791 ... 0, 1, 0, 0, 1]))
792 122
794 # N = 44, E = 122, FN = 7.93443
795 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,
796 ... 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0,
797 ... 1, 0, 1, 1, 0]))
798 122
800 # N = 45, E = 118, FN = 8.58051
801 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
802 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0,
803 ... 1, 0, 1, 0, 1, 0]))
804 118
806 # N = 45, E = 118, FN = 8.58051
807 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
808 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,
809 ... 0, 1, 0, 1, 0, 1]))
810 118
812 # N = 46, E = 131, FN = 8.07634
813 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,
814 ... 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0,
815 ... 1, 0, 1, 0, 1, 0, 1]))
816 131
818 # N = 46, E = 131, FN = 8.07634
819 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
820 ... 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1,
821 ... 0, 1, 0, 1, 0, 1, 0]))
822 131
824 # N = 46, E = 131, FN = 8.07634
825 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
826 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0,
827 ... 1, 0, 1, 0, 1, 0, 1]))
828 131
830 # N = 46, E = 131, FN = 8.07634
831 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
832 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,
833 ... 0, 1, 0, 1, 0, 1, 0]))
834 131
836 # N = 46, E = 131, FN = 8.07634
837 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0,
838 ... 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1,
839 ... 0, 1, 1, 0, 1, 1, 0]))
840 131
842 # N = 46, E = 131, FN = 8.07634
843 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1,
844 ... 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0,
845 ... 1, 0, 0, 1, 0, 0, 1]))
846 131
848 # N = 47, E = 135, FN = 8.18148
849 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1,
850 ... 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1,
851 ... 0, 1, 0, 1, 0, 1, 0, 1]))
852 135
854 # N = 47, E = 135, FN = 8.18148
855 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0,
856 ... 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0,
857 ... 1, 0, 1, 0, 1, 0, 1, 0]))
858 135
860 # N = 47, E = 135, FN = 8.18148
861 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
862 ... 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1,
863 ... 0, 1, 1, 0, 0, 1, 0, 1]))
864 135
866 # N = 47, E = 135, FN = 8.18148
867 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
868 ... 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0,
869 ... 1, 0, 0, 1, 1, 0, 1, 0]))
870 135
872 # N = 47, E = 135, FN = 8.18148
873 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
874 ... 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0,
875 ... 1, 1, 0, 0, 0, 0, 1, 1]))
876 135
878 # N = 47, E = 135, FN = 8.18148
879 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1,
880 ... 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1,
881 ... 0, 0, 1, 1, 1, 1, 0, 0]))
882 135
884 # N = 47, E = 135, FN = 8.18148
885 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,
886 ... 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0,
887 ... 1, 0, 1, 0, 1, 1, 0, 1]))
888 135
890 # N = 47, E = 135, FN = 8.18148
891 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
892 ... 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1,
893 ... 0, 1, 0, 1, 0, 0, 1, 0]))
894 135
896 # N = 47, E = 135, FN = 8.18148
897 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,
898 ... 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,
899 ... 0, 1, 0, 0, 1, 0, 0, 1]))
900 135
902 # N = 47, E = 135, FN = 8.18148
903 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
904 ... 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
905 ... 1, 0, 1, 1, 0, 1, 1, 0]))
906 135
908 # N = 47, E = 135, FN = 8.18148
909 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
910 ... 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0,
911 ... 1, 0, 1, 1, 0, 0, 0, 1]))
912 135
914 # N = 47, E = 135, FN = 8.18148
915 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
916 ... 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1,
917 ... 0, 1, 0, 0, 1, 1, 1, 0]))
918 135
920 # N = 48, E = 140, FN = 8.22857
921 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
922 ... 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1,
923 ... 0, 1, 0, 0, 1, 0, 1, 1, 0]))
924 140
926 # N = 48, E = 140, FN = 8.22857
927 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
928 ... 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0,
929 ... 1, 0, 1, 1, 0, 1, 0, 0, 1]))
930 140
932 # N = 49, E = 136, FN = 8.82721
933 >>> labs(np.array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,
934 ... 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1,
935 ... 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]))
936 136
938 # N = 49, E = 136, FN = 8.82721
939 >>> labs(np.array([1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1,
940 ... 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0,
941 ... 0, 0, 0, 1, 0, 1, 1, 1, 1, 0]))
942 136
944 # N = 49, E = 136, FN = 8.82721
945 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
946 ... 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1,
947 ... 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]))
948 136
950 # N = 49, E = 136, FN = 8.82721
951 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
952 ... 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0,
953 ... 1, 1, 0, 1, 1, 0, 1, 1, 0, 1]))
954 136
956 # N = 50, E = 153, FN = 8.16993
957 >>> labs(np.array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,
958 ... 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1,
959 ... 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1]))
960 153
962 # N = 50, E = 153, FN = 8.16993
963 >>> labs(np.array([1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1,
964 ... 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0,
965 ... 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0]))
966 153
968 # N = 50, E = 153, FN = 8.16993
969 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
970 ... 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0,
971 ... 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1]))
972 153
974 # N = 50, E = 153, FN = 8.16993
975 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
976 ... 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1,
977 ... 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0]))
978 153
980 # N = 50, E = 153, FN = 8.16993
981 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
982 ... 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0,
983 ... 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]))
984 153
986 # N = 50, E = 153, FN = 8.16993
987 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
988 ... 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1,
989 ... 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1]))
990 153
992 # N = 51, E = 153, FN = 8.50000
993 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,
994 ... 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1,
995 ... 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1]))
996 153
998 # N = 51, E = 153, FN = 8.50000
999 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1,
1000 ... 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0,
1001 ... 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0]))
1002 153
1004 # N = 52, E = 166, FN = 8.14458
1005 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1,
1006 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0,
1007 ... 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1]))
1008 166
1010 # N = 52, E = 166, FN = 8.14458
1011 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
1012 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1,
1013 ... 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0]))
1014 166
1016 # N = 53, E = 170, FN = 8.26176
1017 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1018 ... 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0,
1019 ... 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1]))
1020 170
1022 # N = 53, E = 170, FN = 8.26176
1023 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1,
1024 ... 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1,
1025 ... 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0]))
1026 170
1028 # N = 53, E = 170, FN = 8.26176
1029 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1030 ... 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0,
1031 ... 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0]))
1032 170
1034 # N = 53, E = 170, FN = 8.26176
1035 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
1036 ... 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1,
1037 ... 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1]))
1038 170
1040 # N = 54, E = 175, FN = 8.33143
1041 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
1042 ... 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
1043 ... 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0]))
1044 175
1046 # N = 54, E = 175, FN = 8.33143
1047 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1048 ... 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
1049 ... 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1]))
1050 175
1052 # N = 55, E = 171, FN = 8.84503
1053 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0,
1054 ... 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0,
1055 ... 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1]))
1056 171
1058 # N = 55, E = 171, FN = 8.84503
1059 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
1060 ... 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1,
1061 ... 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0]))
1062 171
1064 # N = 55, E = 171, FN = 8.84503
1065 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1066 ... 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
1067 ... 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1]))
1068 171
1070 # N = 55, E = 171, FN = 8.84503
1071 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1072 ... 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0,
1073 ... 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0]))
1074 171
1076 # N = 56, E = 192, FN = 8.16667
1077 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0,
1078 ... 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0,
1079 ... 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1]))
1080 192
1082 # N = 56, E = 192, FN = 8.16667
1083 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1,
1084 ... 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1,
1085 ... 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0]))
1086 192
1088 # N = 57, E = 188, FN = 8.64096
1089 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
1090 ... 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
1091 ... 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0]))
1092 188
1094 # N = 57, E = 188, FN = 8.64096
1095 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
1096 ... 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
1097 ... 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1]))
1098 188
1100 # N = 58, E = 197, FN = 8.53807
1101 >>> labs(np.array([0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1,
1102 ... 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0,
1103 ... 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1]))
1104 197
1106 # N = 58, E = 197, FN = 8.53807
1107 >>> labs(np.array([1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0,
1108 ... 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1,
1109 ... 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0]))
1110 197
1112 # N = 59, E = 205, FN = 8.49024
1113 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1114 ... 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1,
1115 ... 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1]))
1116 205
1118 # N = 59, E = 205, FN = 8.49024
1119 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
1120 ... 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0,
1121 ... 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0]))
1122 205
1124 # N = 59, E = 205, FN = 8.49024
1125 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
1126 ... 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0,
1127 ... 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0]))
1128 205
1130 # N = 59, E = 205, FN = 8.49024
1131 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1,
1132 ... 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1,
1133 ... 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1]))
1134 205
1136 # N = 60, E = 218, FN = 8.25688
1137 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,
1138 ... 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1,
1139 ... 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1]))
1140 218
1142 # N = 60, E = 218, FN = 8.25688
1143 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
1144 ... 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0,
1145 ... 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0]))
1146 218
1148 # N = 60, E = 218, FN = 8.25688
1149 >>> labs(np.array([0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
1150 ... 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1,
1151 ... 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1]))
1152 218
1154 # N = 60, E = 218, FN = 8.25688
1155 >>> labs(np.array([1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0,
1156 ... 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,
1157 ... 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0]))
1158 218
1160 # N = 61, E = 226, FN = 8.23230
1161 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0,
1162 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1163 ... 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0,
1164 ... 1]))
1165 226
1167 # N = 61, E = 226, FN = 8.23230
1168 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,
1169 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1,
1170 ... 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1,
1171 ... 0]))
1172 226
1174 # N = 62, E = 235, FN = 8.17872
1175 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0,
1176 ... 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
1177 ... 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0,
1178 ... 1, 1]))
1179 235
1181 # N = 62, E = 235, FN = 8.17872
1182 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1,
1183 ... 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1184 ... 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1,
1185 ... 0, 0]))
1186 235
1188 # N = 62, E = 235, FN = 8.17872
1189 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0,
1190 ... 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
1191 ... 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0,
1192 ... 1, 1]))
1193 235
1195 # N = 62, E = 235, FN = 8.17872
1196 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1,
1197 ... 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
1198 ... 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1,
1199 ... 0, 0]))
1200 235
1202 # N = 63, E = 207, FN = 9.58696
1203 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1,
1204 ... 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
1205 ... 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0,
1206 ... 1, 1, 0]))
1207 207
1209 # N = 63, E = 207, FN = 9.58696
1210 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
1211 ... 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,
1212 ... 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1,
1213 ... 0, 0, 1]))
1214 207
1216 # N = 64, E = 208, FN = 9.84615
1217 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1,
1218 ... 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
1219 ... 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0,
1220 ... 1, 1, 0, 0]))
1221 208
1223 # N = 64, E = 208, FN = 9.84615
1224 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
1225 ... 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,
1226 ... 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1,
1227 ... 0, 0, 1, 1]))
1228 208
1230 # N = 65, E = 240, FN = 8.80208
1231 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1,
1232 ... 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0,
1233 ... 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1,
1234 ... 0, 0, 1, 0, 0]))
1235 240
1237 # N = 65, E = 240, FN = 8.80208
1238 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0,
1239 ... 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,
1240 ... 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0,
1241 ... 1, 1, 0, 1, 1]))
1242 240
1244 # N = 66, E = 257, FN = 8.47471
1245 >>> labs(np.array([0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0,
1246 ... 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1,
1247 ... 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0,
1248 ... 1, 1, 1, 1, 0, 0]))
1249 257
1251 # N = 66, E = 257, FN = 8.47471
1252 >>> labs(np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1,
1253 ... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0,
1254 ... 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1255 ... 0, 0, 0, 0, 1, 1]))
1256 257
1258 # N = 3, all bits are True
1259 >>> labs(np.array([1, 1, 1]))
1260 5
1262 # N = 4, all bits are True
1263 >>> labs(np.array([1, 1, 1, 1]))
1264 14
1266 # N = 5, all bits are True
1267 >>> labs(np.array([1, 1, 1, 1, 1]))
1268 30
1270 # N = 6, all bits are True
1271 >>> labs(np.array([1, 1, 1, 1, 1, 1]))
1272 55
1274 # N = 7, all bits are True
1275 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1]))
1276 91
1278 # N = 8, all bits are False
1279 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0]))
1280 140
1282 # N = 9, all bits are False
1283 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]))
1284 204
1286 # N = 10, all bits are True
1287 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1288 285
1290 # N = 11, all bits are True
1291 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1292 385
1294 # N = 12, all bits are True
1295 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1296 506
1298 # N = 13, all bits are False
1299 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1300 650
1302 # N = 14, all bits are False
1303 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1304 819
1306 # N = 15, all bits are False
1307 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1308 1015
1310 # N = 16, all bits are False
1311 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1312 1240
1314 # N = 17, all bits are True
1315 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1316 1496
1318 # N = 18, all bits are True
1319 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1320 1785
1322 # N = 19, all bits are False
1323 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1324 ... 0]))
1325 2109
1327 # N = 20, all bits are False
1328 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1329 ... 0, 0]))
1330 2470
1332 # N = 21, all bits are True
1333 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1334 ... 1, 1, 1]))
1335 2870
1337 # N = 22, all bits are True
1338 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1339 ... 1, 1, 1, 1]))
1340 3311
1342 # N = 23, all bits are True
1343 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1344 ... 1, 1, 1, 1, 1]))
1345 3795
1347 # N = 24, all bits are False
1348 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1349 ... 0, 0, 0, 0, 0, 0]))
1350 4324
1352 # N = 25, all bits are True
1353 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1354 ... 1, 1, 1, 1, 1, 1, 1]))
1355 4900
1357 # N = 26, all bits are True
1358 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1359 ... 1, 1, 1, 1, 1, 1, 1, 1]))
1360 5525
1362 # N = 27, all bits are True
1363 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1364 ... 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1365 6201
1367 # N = 28, all bits are True
1368 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1369 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1370 6930
1372 # N = 29, all bits are False
1373 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1374 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1375 7714
1377 # N = 30, all bits are False
1378 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1379 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1380 8555
1382 # N = 31, all bits are True
1383 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1384 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1385 9455
1387 # N = 32, all bits are False
1388 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1389 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1390 10416
1392 # N = 33, all bits are True
1393 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1394 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1395 11440
1397 # N = 34, all bits are False
1398 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1399 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1400 12529
1402 # N = 35, all bits are False
1403 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1404 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1405 13685
1407 # N = 36, all bits are True
1408 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1409 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1410 14910
1412 # N = 37, all bits are False
1413 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1414 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1415 16206
1417 # N = 38, all bits are True
1418 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1419 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1420 17575
1422 # N = 39, all bits are True
1423 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1424 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1425 19019
1427 # N = 40, all bits are False
1428 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1429 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1430 ... 0]))
1431 20540
1433 # N = 41, all bits are False
1434 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1435 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1436 ... 0, 0]))
1437 22140
1439 # N = 42, all bits are True
1440 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1441 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1442 ... 1, 1, 1]))
1443 23821
1445 # N = 43, all bits are True
1446 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1447 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1448 ... 1, 1, 1, 1]))
1449 25585
1451 # N = 44, all bits are False
1452 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1453 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1454 ... 0, 0, 0, 0, 0]))
1455 27434
1457 # N = 45, all bits are False
1458 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1459 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1460 ... 0, 0, 0, 0, 0, 0]))
1461 29370
1463 # N = 46, all bits are True
1464 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1465 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1466 ... 1, 1, 1, 1, 1, 1, 1]))
1467 31395
1469 # N = 47, all bits are True
1470 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1471 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1472 ... 1, 1, 1, 1, 1, 1, 1, 1]))
1473 33511
1475 # N = 48, all bits are True
1476 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1477 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1478 ... 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1479 35720
1481 # N = 49, all bits are False
1482 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1483 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1484 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1485 38024
1487 # N = 50, all bits are False
1488 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1489 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1490 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1491 40425
1493 # N = 51, all bits are True
1494 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1495 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1496 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1497 42925
1499 # N = 52, all bits are True
1500 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1501 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1502 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1503 45526
1505 # N = 53, all bits are True
1506 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1507 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1508 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1509 48230
1511 # N = 54, all bits are True
1512 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1513 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1514 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1515 51039
1517 # N = 55, all bits are True
1518 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1519 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1520 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1521 53955
1523 # N = 56, all bits are False
1524 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1525 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1526 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1527 56980
1529 # N = 57, all bits are False
1530 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1531 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1532 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1533 60116
1535 # N = 58, all bits are True
1536 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1537 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1538 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1539 63365
1541 # N = 59, all bits are True
1542 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1543 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1544 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1545 66729
1547 # N = 60, all bits are True
1548 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1549 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1550 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1551 70210
1553 # N = 61, all bits are False
1554 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1555 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1556 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1557 ... 0]))
1558 73810
1560 # N = 62, all bits are True
1561 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1562 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1563 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1564 ... 1, 1]))
1565 77531
1567 # N = 63, all bits are True
1568 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1569 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1570 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1571 ... 1, 1, 1]))
1572 81375
1574 # N = 64, all bits are True
1575 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1576 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1577 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1578 ... 1, 1, 1, 1]))
1579 85344
1581 # N = 65, all bits are True
1582 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1583 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1584 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1585 ... 1, 1, 1, 1, 1]))
1586 89440
1588 # N = 66, all bits are True
1589 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1590 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1591 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1592 ... 1, 1, 1, 1, 1, 1]))
1593 93665
1595 # N = 67, all bits are False
1596 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1597 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1598 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1599 ... 0, 0, 0, 0, 0, 0, 0]))
1600 98021
1602 # N = 68, all bits are False
1603 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1604 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1605 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1606 ... 0, 0, 0, 0, 0, 0, 0, 0]))
1607 102510
1609 # N = 69, all bits are False
1610 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1611 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1612 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1613 ... 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1614 107134
1616 # N = 70, all bits are False
1617 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1618 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1619 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1620 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1621 111895
1623 # N = 71, all bits are False
1624 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1625 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1626 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1627 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1628 116795
1630 # N = 72, all bits are False
1631 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1632 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1633 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1634 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1635 121836
1637 # N = 73, all bits are True
1638 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1639 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1640 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1641 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1642 127020
1644 # N = 74, all bits are False
1645 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1646 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1647 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1648 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1649 132349
1651 # N = 75, all bits are True
1652 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1653 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1654 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1655 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1656 137825
1658 # N = 76, all bits are True
1659 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1660 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1661 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1662 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1663 143450
1665 # N = 77, all bits are False
1666 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1667 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1668 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1669 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1670 149226
1672 # N = 78, all bits are False
1673 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1674 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1675 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1676 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1677 155155
1679 # N = 79, all bits are False
1680 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1681 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1682 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1683 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1684 161239
1686 # N = 80, all bits are False
1687 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1688 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1689 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1690 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1691 167480
1693 # N = 81, all bits are True
1694 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1695 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1696 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1697 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1698 173880
1700 # N = 82, all bits are False
1701 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1702 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1703 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1704 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1705 ... 0]))
1706 180441
1708 # N = 83, all bits are False
1709 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1710 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1711 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1712 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1713 ... 0, 0]))
1714 187165
1716 # N = 84, all bits are False
1717 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1718 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1719 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1720 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1721 ... 0, 0, 0]))
1722 194054
1724 # N = 85, all bits are False
1725 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1726 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1727 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1728 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1729 ... 0, 0, 0, 0]))
1730 201110
1732 # N = 86, all bits are True
1733 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1734 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1735 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1736 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1737 ... 1, 1, 1, 1, 1]))
1738 208335
1740 # N = 87, all bits are False
1741 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1742 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1743 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1744 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1745 ... 0, 0, 0, 0, 0, 0]))
1746 215731
1748 # N = 88, all bits are True
1749 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1750 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1751 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1752 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1753 ... 1, 1, 1, 1, 1, 1, 1]))
1754 223300
1756 # N = 89, all bits are False
1757 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1758 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1759 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1760 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1761 ... 0, 0, 0, 0, 0, 0, 0, 0]))
1762 231044
1764 # N = 90, all bits are False
1765 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1766 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1767 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1768 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1769 ... 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1770 238965
1772 # N = 91, all bits are True
1773 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1774 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1775 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1776 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1777 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1778 247065
1780 # N = 92, all bits are True
1781 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1782 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1783 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1784 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1785 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1786 255346
1788 # N = 93, all bits are True
1789 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1790 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1791 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1792 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1793 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1794 263810
1796 # N = 94, all bits are True
1797 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1798 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1799 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1800 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1801 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1802 272459
1804 # N = 95, all bits are True
1805 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1806 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1807 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1808 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1809 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1810 281295
1812 # N = 96, all bits are False
1813 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1814 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1815 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1816 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1817 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1818 290320
1820 # N = 97, all bits are False
1821 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1822 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1823 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1824 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1825 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1826 299536
1828 # N = 98, all bits are False
1829 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1830 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1831 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1832 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1833 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1834 308945
1836 # N = 99, all bits are True
1837 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1838 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1839 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1840 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1841 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1842 318549
1843 """
1844 n: Final[int] = len(x) # Get the length of the bit string.
1845 result: int = 0
1846 for k in range(1, n):
1847 sqr: int = 0
1848 for i in range(n - k):
1849 sqr += 1 if x[i] == x[i + k] else -1
1850 result += sqr * sqr
1851 return result
1854def energy_to_merit(n: int, energy: int) -> int | float:
1855 """
1856 Convert an energy value to a merit factor.
1858 :param n: the length of the bit sequence
1859 :param energy: the integer energy factor, computed based on :func:`labs`.
1860 :returns: a merit factor
1862 >>> try:
1863 ... energy_to_merit(0, 1)
1864 ... except ValueError as ve:
1865 ... print(ve)
1866 n=0 is invalid, must be in 3..1000000000.
1868 >>> try:
1869 ... energy_to_merit(4, 0)
1870 ... except ValueError as ve:
1871 ... print(ve)
1872 energy=0 is invalid, must be in 1..1000000000.
1874 >>> energy_to_merit(3, 1)
1875 4.5
1876 >>> energy_to_merit(4, 2)
1877 4
1878 >>> energy_to_merit(5, 2)
1879 6.25
1880 >>> print(f"{energy_to_merit(6, 7):.4}")
1881 2.571
1882 >>> print(f"{energy_to_merit(7, 3):.4}")
1883 8.167
1884 >>> energy_to_merit(8, 8)
1885 4
1886 >>> print(f"{energy_to_merit(9, 12):.4}")
1887 3.375
1888 >>> print(f"{energy_to_merit(10, 13):.4}")
1889 3.846
1890 >>> print(f"{energy_to_merit(11, 5):.4}")
1891 12.1
1892 >>> print(f"{energy_to_merit(12, 10):.4}")
1893 7.2
1894 >>> print(f"{energy_to_merit(13, 6):.5}")
1895 14.083
1896 >>> print(f"{energy_to_merit(14, 19):.4}")
1897 5.158
1898 >>> print(f"{energy_to_merit(15, 15):.4}")
1899 7.5
1900 >>> print(f"{energy_to_merit(16, 24):.4}")
1901 5.333
1902 >>> print(f"{energy_to_merit(17, 32):.4}")
1903 4.516
1904 >>> print(f"{energy_to_merit(18, 25):.4}")
1905 6.48
1906 >>> print(f"{energy_to_merit(47, 135):.4}")
1907 8.181
1908 >>> print(f"{energy_to_merit(66, 257):.4}")
1909 8.475
1910 >>> print(f"{energy_to_merit(19, 33):.4}")
1911 5.47
1912 >>> print(f"{energy_to_merit(119, 835):.4}")
1913 8.48
1914 >>> print(f"{energy_to_merit(401, 11888):.5}")
1915 6.7632
1916 """
1917 n = check_int_range(n, "n", 3)
1918 energy = check_int_range(energy, "energy", 1)
1919 return try_int_div(n * n, energy + energy)
1922def merit_to_energy(n: int, merit: int | float) -> int:
1923 """
1924 Convert a merit factor back to an energy.
1926 :param n: the energy
1927 :param merit: the merit factor
1928 :returns: the energy
1930 >>> try:
1931 ... merit_to_energy(0, 1)
1932 ... except ValueError as ve:
1933 ... print(ve)
1934 n=0 is invalid, must be in 3..1000000000.
1936 >>> try:
1937 ... merit_to_energy(3, 0)
1938 ... except ValueError as ve:
1939 ... print(ve)
1940 merit factor cannot be 0.
1942 >>> try:
1943 ... merit_to_energy(3, "x")
1944 ... except TypeError as te:
1945 ... print(str(te)[:50])
1946 merit should be an instance of any in {float, int}
1948 >>> merit_to_energy(3, 4.5)
1949 1
1950 >>> merit_to_energy(4, 4)
1951 2
1952 >>> merit_to_energy(5, 6.25)
1953 2
1954 >>> merit_to_energy(6, 2.571)
1955 7
1956 >>> merit_to_energy(7, 8.167)
1957 3
1958 >>> merit_to_energy(8, 4)
1959 8
1960 >>> merit_to_energy(9, 3.375)
1961 12
1962 >>> merit_to_energy(10, 3.846)
1963 13
1964 >>> merit_to_energy(11, 12.100)
1965 5
1966 >>> merit_to_energy(12, 7.200)
1967 10
1968 >>> merit_to_energy(13, 14.083)
1969 6
1970 >>> merit_to_energy(14, 5.158)
1971 19
1972 >>> merit_to_energy(15, 7.5)
1973 15
1974 >>> merit_to_energy(16, 5.333)
1975 24
1976 >>> merit_to_energy(17, 4.516)
1977 32
1978 >>> merit_to_energy(18, 6.48)
1979 25
1980 >>> merit_to_energy(47, 8.181)
1981 135
1982 >>> merit_to_energy(66, 8.475)
1983 257
1984 >>> merit_to_energy(19, 5.47)
1985 33
1986 >>> merit_to_energy(119, 8.48)
1987 835
1988 >>> merit_to_energy(401, 6.7632)
1989 11888
1990 >>> merit_to_energy(181, 8.9316)
1991 1834
1992 >>> merit_to_energy(201, 8.4876)
1993 2380
1994 >>> merit_to_energy(215, 8.5888)
1995 2691
1996 >>> merit_to_energy(221, 8.8544)
1997 2758
1998 >>> merit_to_energy(241, 8.0668)
1999 3600
2000 >>> merit_to_energy(249, 8.1323)
2001 3812
2002 >>> merit_to_energy(259, 8.0918)
2003 4145
2004 >>> merit_to_energy(261, 7.8517)
2005 4338
2006 >>> merit_to_energy(271, 7.5386)
2007 4871
2008 >>> merit_to_energy(281, 7.5058)
2009 5260
2010 >>> merit_to_energy(283, 7.5088)
2011 5333
2012 >>> merit_to_energy(301, 7.4827)
2013 6054
2014 >>> merit_to_energy(303, 7.2462)
2015 6335
2016 >>> merit_to_energy(341, 6.9397)
2017 8378
2018 >>> merit_to_energy(381, 7.0893)
2019 10238
2020 >>> merit_to_energy(401, 6.7632)
2021 11888
2022 """
2023 n = check_int_range(n, "n", 3)
2024 if not isinstance(merit, int | float):
2025 raise type_error(merit, "merit", (int, float))
2026 if (not isfinite(merit)) or (merit <= 0):
2027 raise ValueError(f"merit factor cannot be {merit}.")
2028 return int(0.5 + ((n * n) / merit) / 2)
2031#: The lower bounds of the LABS problem, i.e., the objective values of the
2032#: known global optima also used in the unit tests of the :func:`labs`
2033#: function. We use the data from
2034#:
2035#: Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences.
2036#: arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016
2037#: https://arxiv.org/pdf/1512.02475
2038_LBS: Final[dict[int, int]] = {
2039 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10, 13: 6,
2040 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26, 22: 39,
2041 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62, 30: 59, 31: 67,
2042 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86, 38: 87, 39: 99, 40: 108,
2043 41: 108, 42: 101, 43: 109, 44: 122, 45: 118, 46: 131, 47: 135, 48: 140,
2044 49: 136, 50: 153, 51: 153, 52: 166, 53: 170, 54: 175, 55: 171, 56: 192,
2045 57: 188, 58: 197, 59: 205, 60: 218, 61: 226, 62: 235, 63: 207, 64: 208,
2046 65: 240, 66: 257}
2049#: the internal set of related work solutions
2050__RELATED_WORKS: Final[dict[tuple[str, str], dict[int, int]]] = {
2051 ("PM2016LABS",
2052 "Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary "
2053 "Sequences. arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016"): {
2054 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10,
2055 13: 6, 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26,
2056 22: 39, 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62,
2057 30: 59, 31: 67, 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86,
2058 38: 87, 39: 99, 40: 108, 41: 108, 42: 101, 43: 109, 44: 122, 45: 118,
2059 46: 131, 47: 135, 48: 140, 49: 136, 50: 153, 51: 153, 52: 166,
2060 53: 170, 54: 175, 55: 171, 56: 192, 57: 188, 58: 197, 59: 205,
2061 60: 218, 61: 226, 62: 235, 63: 207, 64: 208, 65: 240, 66: 257,
2062 67: 241, 69: 282, 71: 275, 73: 348, 75: 341, 77: 358, 79: 407,
2063 81: 400, 83: 377, 85: 442, 87: 451, 89: 484, 91: 477, 93: 502,
2064 95: 479, 97: 536, 99: 577, 101: 578, 103: 555, 105: 620, 107: 677,
2065 109: 662, 111: 687, 113: 752, 115: 745, 117: 786, 119: 835,
2066 },
2067 ("BBB2017LABSOIMFARPTAT",
2068 "Borko Bošković, Franc Brglez, and Janez Brest. Low-Autocorrelation "
2069 "Binary Sequences: On Improved Merit Factors and Runtime Predictions"
2070 " to Achieve Them. arXiv:1406.5301v6 [cs.DS] 6 May 2017."
2071 "https://arxiv.org/pdf/1406.5301"): {
2072 181: 1834, 201: 2380, 215: 2691, 221: 2758, 241: 3600, 249: 3812,
2073 259: 4145, 261: 4338, 271: 4871, 281: 5260, 283: 5333, 301: 6054,
2074 303: 6335, 341: 8378, 381: 10238, 401: 11888,
2075 107: merit_to_energy(107, 8.4557), 109: merit_to_energy(109, 8.9736),
2076 111: merit_to_energy(111, 8.9672), 113: merit_to_energy(113, 8.49),
2077 115: merit_to_energy(115, 8.8758), 117: merit_to_energy(117, 8.708),
2078 119: merit_to_energy(119, 8.4796), 121: merit_to_energy(121, 8.6736),
2079 141: merit_to_energy(141, 8.8282), 149: merit_to_energy(149, 9.1137),
2080 157: merit_to_energy(157, 9.0223), 161: merit_to_energy(161, 8.5718),
2081 165: merit_to_energy(165, 9.2351), 169: merit_to_energy(169, 9.3215),
2082 173: merit_to_energy(173, 9.3645), 175: merit_to_energy(175, 9.0768),
2083 177: merit_to_energy(177, 9.5052), 179: merit_to_energy(179, 9.0974),
2084 183: merit_to_energy(183, 9.0073), 189: merit_to_energy(189, 9.0847),
2085 },
2086 ("MD2015NESFLLABS",
2087 "Wai Ho Mow and Ke-Lin Du. New Evolutionary Search for Long Low "
2088 "Autocorrelation Binary Sequences. IEEE Transactions on Aerospace and "
2089 "Electronic Systems. 51(1):290-303. January 2015. "
2090 "doi:10.1109/TAES.2014.130518"): {
2091 106: merit_to_energy(106, 5.0295), 107: merit_to_energy(107, 5.1805),
2092 108: merit_to_energy(108, 4.6957), 109: merit_to_energy(109, 5.0429),
2093 110: merit_to_energy(110, 4.9631), 111: merit_to_energy(111, 5.626),
2094 112: merit_to_energy(112, 5.3153), 113: merit_to_energy(113, 4.8514),
2095 114: merit_to_energy(114, 4.4114), 115: merit_to_energy(115, 4.8729),
2096 116: merit_to_energy(116, 4.3974), 117: merit_to_energy(117, 4.2832),
2097 118: merit_to_energy(118, 4.5355), 119: merit_to_energy(119, 4.7235),
2098 120: merit_to_energy(120, 5.8632), 121: merit_to_energy(121, 4.4421),
2099 122: merit_to_energy(122, 4.6368), 123: merit_to_energy(123, 4.6897),
2100 124: merit_to_energy(124, 4.9987), 125: merit_to_energy(125, 4.8646),
2101 126: merit_to_energy(126, 5.0272), 127: merit_to_energy(127, 4.8965),
2102 128: merit_to_energy(128, 4.8075), 129: merit_to_energy(129, 4.6328),
2103 130: merit_to_energy(130, 4.8872), 131: merit_to_energy(131, 4.9627),
2104 132: merit_to_energy(132, 4.343), 133: merit_to_energy(133, 4.6995),
2105 134: merit_to_energy(134, 4.438), 135: merit_to_energy(135, 4.5134),
2106 136: merit_to_energy(136, 4.472), 137: merit_to_energy(137, 4.2273),
2107 138: merit_to_energy(138, 4.3341), 139: merit_to_energy(139, 4.6602),
2108 140: merit_to_energy(140, 4.6009), 141: merit_to_energy(141, 4.418),
2109 142: merit_to_energy(142, 4.4789), 143: merit_to_energy(143, 4.5584),
2110 144: merit_to_energy(144, 4.2492), 145: merit_to_energy(145, 4.4696),
2111 146: merit_to_energy(146, 4.6239), 147: merit_to_energy(147, 4.3409),
2112 148: merit_to_energy(148, 4.3703), 149: merit_to_energy(149, 4.5531),
2113 150: merit_to_energy(150, 4.7209), 151: merit_to_energy(151, 4.3663),
2114 152: merit_to_energy(152, 5.2509), 153: merit_to_energy(153, 4.8206),
2115 154: merit_to_energy(154, 4.2517), 155: merit_to_energy(155, 4.2704),
2116 156: merit_to_energy(156, 4.5986), 157: merit_to_energy(157, 4.6368),
2117 158: merit_to_energy(158, 4.9473), 159: merit_to_energy(159, 4.7396),
2118 160: merit_to_energy(160, 4.878), 161: merit_to_energy(161, 4.7789),
2119 162: merit_to_energy(162, 4.5674), 163: merit_to_energy(163, 4.676),
2120 164: merit_to_energy(164, 5.0367), 165: merit_to_energy(165, 4.2834),
2121 166: merit_to_energy(166, 4.5337), 167: merit_to_energy(167, 4.719),
2122 168: merit_to_energy(168, 4.6057), 169: merit_to_energy(169, 4.7099),
2123 170: merit_to_energy(170, 4.6598), 171: merit_to_energy(171, 4.4077),
2124 172: merit_to_energy(172, 4.7685), 173: merit_to_energy(173, 4.7932),
2125 174: merit_to_energy(174, 4.6564), 175: merit_to_energy(175, 4.2832),
2126 176: merit_to_energy(176, 4.2549), 177: merit_to_energy(177, 4.3416),
2127 178: merit_to_energy(178, 4.1331), 179: merit_to_energy(179, 4.3287),
2128 180: merit_to_energy(180, 4.3385), 181: merit_to_energy(181, 4.5832),
2129 182: merit_to_energy(182, 4.2347), 183: merit_to_energy(183, 4.4879),
2130 184: merit_to_energy(184, 3.9331), 185: merit_to_energy(185, 4.5464),
2131 186: merit_to_energy(186, 4.6239), 187: merit_to_energy(187, 4.5285),
2132 188: merit_to_energy(188, 4.7176), 189: merit_to_energy(189, 4.809),
2133 190: merit_to_energy(190, 4.4645), 191: merit_to_energy(191, 5.0125),
2134 192: merit_to_energy(192, 4.795), 193: merit_to_energy(193, 4.5205),
2135 194: merit_to_energy(194, 4.4288), 195: merit_to_energy(195, 4.2316),
2136 196: merit_to_energy(196, 4.3048), 197: merit_to_energy(197, 4.6267),
2137 198: merit_to_energy(198, 4.5052), 199: merit_to_energy(199, 4.4889),
2138 200: merit_to_energy(200, 4.5496), 201: merit_to_energy(201, 4.008),
2139 202: merit_to_energy(202, 4.3033), 203: merit_to_energy(203, 4.3033),
2140 204: merit_to_energy(204, 4.231), 205: merit_to_energy(205, 4.705),
2141 206: merit_to_energy(206, 4.1288), 207: merit_to_energy(207, 4.1886),
2142 208: merit_to_energy(208, 4.3126), 209: merit_to_energy(209, 4.3542),
2143 210: merit_to_energy(210, 4.6392), 211: merit_to_energy(211, 4.2899),
2144 212: merit_to_energy(212, 4.3567), 213: merit_to_energy(213, 4.517),
2145 214: merit_to_energy(214, 4.4872), 215: merit_to_energy(215, 4.3584),
2146 216: merit_to_energy(216, 4.7725), 217: merit_to_energy(217, 4.1364),
2147 218: merit_to_energy(218, 4.5373), 219: merit_to_energy(219, 4.7798),
2148 220: merit_to_energy(220, 4.6414), 221: merit_to_energy(221, 4.4096),
2149 222: merit_to_energy(222, 4.5273), 223: merit_to_energy(223, 4.5216),
2150 224: merit_to_energy(224, 4.5253), 225: merit_to_energy(225, 4.6462),
2151 226: merit_to_energy(226, 4.599), 227: merit_to_energy(227, 4.5641),
2152 228: merit_to_energy(228, 4.6365), 229: merit_to_energy(229, 4.5664),
2153 230: merit_to_energy(230, 4.5299), 231: merit_to_energy(231, 4.5819),
2154 232: merit_to_energy(232, 4.4556), 233: merit_to_energy(233, 4.5423),
2155 234: merit_to_energy(234, 4.3122), 235: merit_to_energy(235, 4.4529),
2156 236: merit_to_energy(236, 4.3418), 237: merit_to_energy(237, 4.3488),
2157 238: merit_to_energy(238, 4.6992), 239: merit_to_energy(239, 4.5457),
2158 240: merit_to_energy(240, 4.6512), 241: merit_to_energy(241, 4.3921),
2159 242: merit_to_energy(242, 4.3464), 243: merit_to_energy(243, 4.6415),
2160 244: merit_to_energy(244, 4.2224), 245: merit_to_energy(245, 4.3994),
2161 246: merit_to_energy(246, 4.498), 247: merit_to_energy(247, 4.7024),
2162 248: merit_to_energy(248, 4.4414), 249: merit_to_energy(249, 4.6491),
2163 250: merit_to_energy(250, 4.4816), 251: merit_to_energy(251, 4.7291),
2164 252: merit_to_energy(252, 4.002), 253: merit_to_energy(253, 4.7163),
2165 254: merit_to_energy(254, 4.544), 255: merit_to_energy(255, 4.5902),
2166 256: merit_to_energy(256, 4.8075), 257: merit_to_energy(257, 4.8338),
2167 258: merit_to_energy(258, 4.3421), 259: merit_to_energy(259, 4.4596),
2168 260: merit_to_energy(260, 4.6492), 261: merit_to_energy(261, 4.2672),
2169 262: merit_to_energy(262, 4.4557), 263: merit_to_energy(263, 4.3344),
2170 264: merit_to_energy(264, 4.6814), 265: merit_to_energy(265, 4.6007),
2171 266: merit_to_energy(266, 4.3118), 267: merit_to_energy(267, 4.2652),
2172 268: merit_to_energy(268, 4.5912), 269: merit_to_energy(269, 4.5903),
2173 270: merit_to_energy(270, 4.3836), 271: merit_to_energy(271, 4.5028),
2174 272: merit_to_energy(272, 4.8267), 273: merit_to_energy(273, 4.4617),
2175 274: merit_to_energy(274, 4.4683), 275: merit_to_energy(275, 4.3881),
2176 276: merit_to_energy(276, 4.5032), 277: merit_to_energy(277, 4.4352),
2177 278: merit_to_energy(278, 4.579), 279: merit_to_energy(279, 4.3192),
2178 280: merit_to_energy(280, 4.2535), 281: merit_to_energy(281, 4.2325),
2179 282: merit_to_energy(282, 4.4273), 283: merit_to_energy(283, 4.4747),
2180 284: merit_to_energy(284, 4.4307), 285: merit_to_energy(285, 4.3735),
2181 286: merit_to_energy(286, 4.383), 287: merit_to_energy(287, 4.1706),
2182 288: merit_to_energy(288, 4.3858), 289: merit_to_energy(289, 4.2981),
2183 290: merit_to_energy(290, 4.5622), 291: merit_to_energy(291, 4.5621),
2184 292: merit_to_energy(292, 4.641), 293: merit_to_energy(293, 4.7599),
2185 294: merit_to_energy(294, 4.3961), 295: merit_to_energy(295, 4.3992),
2186 296: merit_to_energy(296, 4.3203), 297: merit_to_energy(297, 4.2953),
2187 298: merit_to_energy(298, 4.5771), 299: merit_to_energy(299, 4.4166),
2188 300: merit_to_energy(300, 4.4074), 303: merit_to_energy(303, 4.3507),
2189 304: merit_to_energy(304, 4.0676), 350: merit_to_energy(350, 3.9458),
2190 353: merit_to_energy(353, 4.2075), 400: merit_to_energy(400, 4.3908),
2191 449: merit_to_energy(449, 4.0547), 450: merit_to_energy(450, 4.4235),
2192 500: merit_to_energy(500, 4.3442), 512: merit_to_energy(512, 4.2656),
2193 547: merit_to_energy(547, 4.3408), 550: merit_to_energy(550, 4.0695),
2194 600: merit_to_energy(600, 3.6753), 650: merit_to_energy(650, 3.9239),
2195 653: merit_to_energy(653, 4.2287), 700: merit_to_energy(700, 4.1524),
2196 750: merit_to_energy(750, 3.7603), 751: merit_to_energy(751, 4.1537),
2197 800: merit_to_energy(800, 3.7481), 850: merit_to_energy(850, 3.8096),
2198 853: merit_to_energy(853, 4.0854), 900: merit_to_energy(900, 3.7623),
2199 950: merit_to_energy(950, 4.0438), 953: merit_to_energy(953, 3.8493),
2200 1000: merit_to_energy(1000, 3.7873),
2201 1019: merit_to_energy(1019, 4.139),
2202 1024: merit_to_energy(1024, 3.9683),
2203 1500: merit_to_energy(1500, 3.7316),
2204 2000: merit_to_energy(2000, 3.6193),
2205 2048: merit_to_energy(2048, 3.5387),
2206 2197: merit_to_energy(2197, 3.6423),
2207 3000: merit_to_energy(3000, 3.3608),
2208 4096: merit_to_energy(4096, 3.4589),
2209 },
2210 ("BB2018AHAFALABSPWOLAHMF",
2211 "Borko Bošković and Janez Brest. A Heuristic Algorithm for a Low "
2212 "Autocorrelation Binary Sequence Problem with Odd Length and High "
2213 "Merit Factor. IEEE Access 6:4127-4134. January 2018. "
2214 "doi:10.1109/ACCESS.2018.2789916 "): {
2215 191: 1903, 193: 2144, 195: 2105, 197: 2202, 199: 2195, 201: 2220,
2216 203: 2317, 205: 2430, 207: 2351, 209: 2528, 211: 2457, 213: 2378,
2217 215: 2595, 217: 2684, 219: 2733, 221: 2734, 223: 2751, 225: 2808,
2218 },
2219 ("BHB2024PSAWALABSP",
2220 "Borko Bošković, Jana Herzog, and Janez Brest. Parallel Self-Avoiding "
2221 "Walks for a Low-Autocorrelation Binary Sequences Problem. Journal of "
2222 "Computational Science 77 (2024) 102260. "
2223 "doi:10.1016/j.jocs.2024.102260"): {
2224 171: 1669, 185: 1932, 193: 2040, 197: 2162, 199: 2187, 219: 2605,
2225 223: 2727, 225: 2768, 229: 2810, 231: 2963, 235: 2965, 237: 3118,
2226 239: 3055, 241: 3216, 243: 3233, 245: 3226, 247: 3259,
2227 },
2228}
2231def __make_bkses() -> dict[int, tuple[int, tuple[str, str]]]:
2232 """Make the BKSes."""
2233 d: Final[dict[int, tuple[int, tuple[str, str]]]] = {}
2234 for citation, data in __RELATED_WORKS.items():
2235 for n, ener in data.items():
2236 # We sanity check the BKSes, too.
2237 if ((n in _LBS) and (ener < _LBS[n])) or (ener < (n // 2)):
2238 raise ValueError("Invalid BKS!")
2239 if (n not in d) or (d[n][0] > ener):
2240 d[n] = ener, citation
2241 return d
2244#: The internal lookup table for best-known solutions
2245_BKS: Final[dict[int, tuple[int, tuple[str, str]]]] = __make_bkses()
2246del __make_bkses
2249def get_bks(n: int) -> tuple[int, tuple[str, str] | None]:
2250 """
2251 Get the best currently known solution for the given dimension `n`.
2253 :param n: the dimension
2254 :returns: a tuple of the energy value and a tuple of a citation. If
2255 no solution is found in literature, the lower bound is returned and
2256 `None` is returned as literature tuple
2258 >>> try:
2259 ... get_bks(-1)
2260 ... except ValueError as ve:
2261 ... print(ve)
2262 n=-1 is invalid, must be in 3..1000000000.
2264 >>> get_bks(20)[0]
2265 26
2267 >>> get_bks(401)[0]
2268 11888
2269 >>> get_bks(401)[1][0]
2270 'BBB2017LABSOIMFARPTAT'
2272 >>> get_bks(10000)
2273 (5000, None)
2274 """
2275 n = check_int_range(n, "n", 3)
2276 if n in _BKS:
2277 return _BKS[n]
2278 return n // 2, None
2281def is_labs_objective_value_optimal(n: int, f: int) -> bool | None:
2282 """
2283 Check whether a given objective value is optimal on the LABS problem.
2285 We use the lower and upper bound of the LABS problem to check whether a
2286 given objective value can be optimal. We also use the objective values of
2287 the known global optima from
2289 Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences.
2290 arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016
2291 https://arxiv.org/pdf/1512.02475
2293 :param n: the scale of the problem
2294 :param f: the objective value
2295 :returns: `True` if the objective value `f` is optimal, `False` if it
2296 cannot be optimal, and `None` if the situation is unclear
2297 :raises TypeError: if `n` or `f` are not integers
2298 :raises ValueError: if `n` or `f` are invalid integer values
2300 >>> print(is_labs_objective_value_optimal(49, 136))
2301 True
2303 >>> print(is_labs_objective_value_optimal(49, 137))
2304 False
2306 >>> print(is_labs_objective_value_optimal(100, 50))
2307 True
2309 >>> print(is_labs_objective_value_optimal(100, 51))
2310 None
2312 >>> try:
2313 ... is_labs_objective_value_optimal("x", 3)
2314 ... except TypeError as te:
2315 ... print(te)
2316 n should be an instance of int but is str, namely 'x'.
2318 >>> try:
2319 ... is_labs_objective_value_optimal(7, "3")
2320 ... except TypeError as te:
2321 ... print(te)
2322 f should be an instance of int but is str, namely '3'.
2324 >>> try:
2325 ... is_labs_objective_value_optimal(0, 0)
2326 ... except ValueError as ve:
2327 ... print(ve)
2328 n=0 is invalid, must be in 3..1000000000.
2330 >>> try:
2331 ... is_labs_objective_value_optimal(3, 0)
2332 ... except ValueError as ve:
2333 ... print(ve)
2334 f=0 is invalid, must be in 1..5.
2336 >>> try:
2337 ... is_labs_objective_value_optimal(3, 234240)
2338 ... except ValueError as ve:
2339 ... print(ve)
2340 f=234240 is invalid, must be in 1..5.
2341 """
2342 check_int_range(n, "n", 3)
2343 lb: int = n // 2
2344 ub: int = ((n - 1) * n * (2 * n - 1)) // 6
2345 if check_int_range(f, "f", lb, ub) <= lb:
2346 return True
2347 if n in _LBS: # We know the optimum, so if it is not it, we can stop.
2348 lb = _LBS[n]
2349 return check_int_range(f, "f", lb) <= lb
2350 if f >= ub:
2351 return False
2352 return None
2355class LABS(BitStringProblem):
2356 """The Low-Autocorrelation Sequence Problem."""
2358 def __init__(self, n: int) -> None:
2359 """
2360 Initialize the LABS objective function.
2362 :param n: the dimension of the problem
2363 """
2364 super().__init__(check_int_range(n, "n", 3))
2365 self.evaluate = labs # type: ignore
2367 def lower_bound(self) -> int:
2368 """
2369 Get the lower bound of the LABS problem.
2371 The minimum amount of energy that a sequence could possibly have.
2372 For each correlation length `k`, this is `(n - k) % 2`.
2373 In total, this is just equivalent to `n // 2`.
2375 For some instances of :class:`LABS`, the global optima are known.
2376 For these instances, we return the objective values of these optima,
2377 which obviously are `>= n // 2`.
2379 :return: the lower bound of the :class:`LABS` problem
2381 >>> LABS(16).lower_bound()
2382 24
2384 >>> LABS(61).lower_bound()
2385 226
2387 >>> LABS(200).lower_bound()
2388 100
2390 >>> LABS(124200).lower_bound()
2391 62100
2392 """
2393 n: Final[int] = self.n
2394 if n in _LBS:
2395 return _LBS[n]
2396 return n // 2
2398 def upper_bound(self) -> int:
2399 """
2400 Get the upper bound of the :class:`LABS` problem.
2402 The energy of a sequence where all bits are the same is the highest.
2403 This means that each correlation basically produces its length to the
2404 square as contribution to the result. The upper bound then is the sum
2405 of all of these squares from `1..(n-1)`.
2407 :return: the upper bound of LABS
2409 >>> LABS(16).upper_bound()
2410 1240
2412 >>> LABS(63).upper_bound()
2413 81375
2415 >>> LABS(200).upper_bound()
2416 2646700
2418 >>> LABS(12316).upper_bound()
2419 622636950290
2420 """
2421 return ((self.n - 1) * self.n * (2 * self.n - 1)) // 6
2423 def __str__(self) -> str:
2424 """
2425 Get the name of the LABS objective function.
2427 :return: labs_ + length of string
2429 >>> LABS(16)
2430 labs_16
2431 """
2432 return f"labs_{self.n}"
2434 @classmethod
2435 def default_instances(
2436 cls: type, scale_min: int = 3,
2437 scale_max: int = min(1024, max(_BKS.keys()))) \
2438 -> Iterator[Callable[[], "LABS"]]:
2439 """
2440 Get the default instances of the :class:`LABS` problem.
2442 :param scale_min: the minimum permitted scale, by default `3`
2443 :param scale_max: the maximum permitted scale, by default `625`
2444 :returns: a sequence of default :class:`LABS` instances
2446 >>> len(list(LABS.default_instances()))
2447 81
2449 >>> [x() for x in LABS.default_instances()]
2450 [labs_3, labs_4, labs_5, labs_6, labs_7, labs_8, labs_9, labs_10, \
2451labs_11, labs_12, labs_13, labs_14, labs_15, labs_16, labs_17, labs_18, \
2452labs_19, labs_20, labs_21, labs_22, labs_23, labs_24, labs_25, labs_26, \
2453labs_27, labs_28, labs_29, labs_30, labs_31, labs_32, labs_33, labs_36, \
2454labs_40, labs_41, labs_42, labs_44, labs_48, labs_49, labs_50, labs_55, \
2455labs_59, labs_60, labs_64, labs_66, labs_77, labs_79, labs_81, labs_85, \
2456labs_99, labs_100, labs_107, labs_111, labs_121, labs_125, labs_128, \
2457labs_144, labs_149, labs_169, labs_170, labs_192, labs_196, labs_199, \
2458labs_200, labs_222, labs_225, labs_243, labs_256, labs_269, labs_289, \
2459labs_300, labs_341, labs_400, labs_500, labs_512, labs_600, labs_625, \
2460labs_700, labs_800, labs_900, labs_1000, labs_1024]
2461 """
2462 check_int_range(scale_max, "scale_max", check_int_range(
2463 scale_min, "scale_min", 1, 1_000_000_000) + 1, 1_000_000_000)
2464 return (cast("Callable[[], LABS]", lambda __i=i: cls(__i))
2465 for i in merge_sorted_and_return_unique((
2466 16, 64, 100, 625), (k for k in default_scale_sequence(
2467 scale_min, scale_max) if k in _BKS))
2468 if scale_min <= i <= scale_max)