Coverage for moptipy / examples / bitstrings / labs.py: 87%
76 statements
« prev ^ index » next coverage.py v7.12.0, created at 2025-11-24 08:49 +0000
« prev ^ index » next coverage.py v7.12.0, created at 2025-11-24 08:49 +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.
1873 >>> energy_to_merit(3, 1)
1874 4.5
1875 >>> energy_to_merit(4, 2)
1876 4
1877 >>> energy_to_merit(5, 2)
1878 6.25
1879 >>> print(f"{energy_to_merit(6, 7):.4}")
1880 2.571
1881 >>> print(f"{energy_to_merit(7, 3):.4}")
1882 8.167
1883 >>> energy_to_merit(8, 8)
1884 4
1885 >>> print(f"{energy_to_merit(9, 12):.4}")
1886 3.375
1887 >>> print(f"{energy_to_merit(10, 13):.4}")
1888 3.846
1889 >>> print(f"{energy_to_merit(11, 5):.4}")
1890 12.1
1891 >>> print(f"{energy_to_merit(12, 10):.4}")
1892 7.2
1893 >>> print(f"{energy_to_merit(13, 6):.5}")
1894 14.083
1895 >>> print(f"{energy_to_merit(14, 19):.4}")
1896 5.158
1897 >>> print(f"{energy_to_merit(15, 15):.4}")
1898 7.5
1899 >>> print(f"{energy_to_merit(16, 24):.4}")
1900 5.333
1901 >>> print(f"{energy_to_merit(17, 32):.4}")
1902 4.516
1903 >>> print(f"{energy_to_merit(18, 25):.4}")
1904 6.48
1905 >>> print(f"{energy_to_merit(47, 135):.4}")
1906 8.181
1907 >>> print(f"{energy_to_merit(66, 257):.4}")
1908 8.475
1909 >>> print(f"{energy_to_merit(19, 33):.4}")
1910 5.47
1911 >>> print(f"{energy_to_merit(119, 835):.4}")
1912 8.48
1913 >>> print(f"{energy_to_merit(401, 11888):.5}")
1914 6.7632
1915 """
1916 n = check_int_range(n, "n", 3)
1917 energy = check_int_range(energy, "energy", 1)
1918 return try_int_div(n * n, energy + energy)
1921def merit_to_energy(n: int, merit: int | float) -> int:
1922 """
1923 Convert a merit factor back to an energy.
1925 :param n: the energy
1926 :param merit: the merit factor
1927 :returns: the energy
1929 >>> try:
1930 ... merit_to_energy(0, 1)
1931 ... except ValueError as ve:
1932 ... print(ve)
1933 n=0 is invalid, must be in 3..1000000000.
1935 >>> try:
1936 ... merit_to_energy(3, 0)
1937 ... except ValueError as ve:
1938 ... print(ve)
1939 merit factor cannot be 0.
1941 >>> try:
1942 ... merit_to_energy(3, "x")
1943 ... except TypeError as te:
1944 ... print(str(te)[:50])
1945 merit should be an instance of any in {float, int}
1947 >>> merit_to_energy(3, 4.5)
1948 1
1949 >>> merit_to_energy(4, 4)
1950 2
1951 >>> merit_to_energy(5, 6.25)
1952 2
1953 >>> merit_to_energy(6, 2.571)
1954 7
1955 >>> merit_to_energy(7, 8.167)
1956 3
1957 >>> merit_to_energy(8, 4)
1958 8
1959 >>> merit_to_energy(9, 3.375)
1960 12
1961 >>> merit_to_energy(10, 3.846)
1962 13
1963 >>> merit_to_energy(11, 12.100)
1964 5
1965 >>> merit_to_energy(12, 7.200)
1966 10
1967 >>> merit_to_energy(13, 14.083)
1968 6
1969 >>> merit_to_energy(14, 5.158)
1970 19
1971 >>> merit_to_energy(15, 7.5)
1972 15
1973 >>> merit_to_energy(16, 5.333)
1974 24
1975 >>> merit_to_energy(17, 4.516)
1976 32
1977 >>> merit_to_energy(18, 6.48)
1978 25
1979 >>> merit_to_energy(47, 8.181)
1980 135
1981 >>> merit_to_energy(66, 8.475)
1982 257
1983 >>> merit_to_energy(19, 5.47)
1984 33
1985 >>> merit_to_energy(119, 8.48)
1986 835
1987 >>> merit_to_energy(401, 6.7632)
1988 11888
1989 >>> merit_to_energy(181, 8.9316)
1990 1834
1991 >>> merit_to_energy(201, 8.4876)
1992 2380
1993 >>> merit_to_energy(215, 8.5888)
1994 2691
1995 >>> merit_to_energy(221, 8.8544)
1996 2758
1997 >>> merit_to_energy(241, 8.0668)
1998 3600
1999 >>> merit_to_energy(249, 8.1323)
2000 3812
2001 >>> merit_to_energy(259, 8.0918)
2002 4145
2003 >>> merit_to_energy(261, 7.8517)
2004 4338
2005 >>> merit_to_energy(271, 7.5386)
2006 4871
2007 >>> merit_to_energy(281, 7.5058)
2008 5260
2009 >>> merit_to_energy(283, 7.5088)
2010 5333
2011 >>> merit_to_energy(301, 7.4827)
2012 6054
2013 >>> merit_to_energy(303, 7.2462)
2014 6335
2015 >>> merit_to_energy(341, 6.9397)
2016 8378
2017 >>> merit_to_energy(381, 7.0893)
2018 10238
2019 >>> merit_to_energy(401, 6.7632)
2020 11888
2021 """
2022 n = check_int_range(n, "n", 3)
2023 if not isinstance(merit, int | float):
2024 raise type_error(merit, "merit", (int, float))
2025 if (not isfinite(merit)) or (merit <= 0):
2026 raise ValueError(f"merit factor cannot be {merit}.")
2027 return int(0.5 + ((n * n) / merit) / 2)
2030#: The lower bounds of the LABS problem, i.e., the objective values of the
2031#: known global optima also used in the unit tests of the :func:`labs`
2032#: function. We use the data from
2033#:
2034#: Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences.
2035#: arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016
2036#: https://arxiv.org/pdf/1512.02475
2037_LBS: Final[dict[int, int]] = {
2038 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10, 13: 6,
2039 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26, 22: 39,
2040 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62, 30: 59, 31: 67,
2041 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86, 38: 87, 39: 99, 40: 108,
2042 41: 108, 42: 101, 43: 109, 44: 122, 45: 118, 46: 131, 47: 135, 48: 140,
2043 49: 136, 50: 153, 51: 153, 52: 166, 53: 170, 54: 175, 55: 171, 56: 192,
2044 57: 188, 58: 197, 59: 205, 60: 218, 61: 226, 62: 235, 63: 207, 64: 208,
2045 65: 240, 66: 257}
2048#: the internal set of related work solutions
2049__RELATED_WORKS: Final[dict[tuple[str, str], dict[int, int]]] = {
2050 ("PM2016LABS",
2051 "Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary "
2052 "Sequences. arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016"): {
2053 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10,
2054 13: 6, 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26,
2055 22: 39, 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62,
2056 30: 59, 31: 67, 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86,
2057 38: 87, 39: 99, 40: 108, 41: 108, 42: 101, 43: 109, 44: 122, 45: 118,
2058 46: 131, 47: 135, 48: 140, 49: 136, 50: 153, 51: 153, 52: 166,
2059 53: 170, 54: 175, 55: 171, 56: 192, 57: 188, 58: 197, 59: 205,
2060 60: 218, 61: 226, 62: 235, 63: 207, 64: 208, 65: 240, 66: 257,
2061 67: 241, 69: 282, 71: 275, 73: 348, 75: 341, 77: 358, 79: 407,
2062 81: 400, 83: 377, 85: 442, 87: 451, 89: 484, 91: 477, 93: 502,
2063 95: 479, 97: 536, 99: 577, 101: 578, 103: 555, 105: 620, 107: 677,
2064 109: 662, 111: 687, 113: 752, 115: 745, 117: 786, 119: 835,
2065 },
2066 ("BBB2017LABSOIMFARPTAT",
2067 "Borko Bošković, Franc Brglez, and Janez Brest. Low-Autocorrelation "
2068 "Binary Sequences: On Improved Merit Factors and Runtime Predictions"
2069 " to Achieve Them. arXiv:1406.5301v6 [cs.DS] 6 May 2017."
2070 "https://arxiv.org/pdf/1406.5301"): {
2071 181: 1834, 201: 2380, 215: 2691, 221: 2758, 241: 3600, 249: 3812,
2072 259: 4145, 261: 4338, 271: 4871, 281: 5260, 283: 5333, 301: 6054,
2073 303: 6335, 341: 8378, 381: 10238, 401: 11888,
2074 107: merit_to_energy(107, 8.4557), 109: merit_to_energy(109, 8.9736),
2075 111: merit_to_energy(111, 8.9672), 113: merit_to_energy(113, 8.49),
2076 115: merit_to_energy(115, 8.8758), 117: merit_to_energy(117, 8.708),
2077 119: merit_to_energy(119, 8.4796), 121: merit_to_energy(121, 8.6736),
2078 141: merit_to_energy(141, 8.8282), 149: merit_to_energy(149, 9.1137),
2079 157: merit_to_energy(157, 9.0223), 161: merit_to_energy(161, 8.5718),
2080 165: merit_to_energy(165, 9.2351), 169: merit_to_energy(169, 9.3215),
2081 173: merit_to_energy(173, 9.3645), 175: merit_to_energy(175, 9.0768),
2082 177: merit_to_energy(177, 9.5052), 179: merit_to_energy(179, 9.0974),
2083 183: merit_to_energy(183, 9.0073), 189: merit_to_energy(189, 9.0847),
2084 },
2085 ("MD2015NESFLLABS",
2086 "Wai Ho Mow and Ke-Lin Du. New Evolutionary Search for Long Low "
2087 "Autocorrelation Binary Sequences. IEEE Transactions on Aerospace and "
2088 "Electronic Systems. 51(1):290-303. January 2015. "
2089 "doi:10.1109/TAES.2014.130518"): {
2090 106: merit_to_energy(106, 5.0295), 107: merit_to_energy(107, 5.1805),
2091 108: merit_to_energy(108, 4.6957), 109: merit_to_energy(109, 5.0429),
2092 110: merit_to_energy(110, 4.9631), 111: merit_to_energy(111, 5.626),
2093 112: merit_to_energy(112, 5.3153), 113: merit_to_energy(113, 4.8514),
2094 114: merit_to_energy(114, 4.4114), 115: merit_to_energy(115, 4.8729),
2095 116: merit_to_energy(116, 4.3974), 117: merit_to_energy(117, 4.2832),
2096 118: merit_to_energy(118, 4.5355), 119: merit_to_energy(119, 4.7235),
2097 120: merit_to_energy(120, 5.8632), 121: merit_to_energy(121, 4.4421),
2098 122: merit_to_energy(122, 4.6368), 123: merit_to_energy(123, 4.6897),
2099 124: merit_to_energy(124, 4.9987), 125: merit_to_energy(125, 4.8646),
2100 126: merit_to_energy(126, 5.0272), 127: merit_to_energy(127, 4.8965),
2101 128: merit_to_energy(128, 4.8075), 129: merit_to_energy(129, 4.6328),
2102 130: merit_to_energy(130, 4.8872), 131: merit_to_energy(131, 4.9627),
2103 132: merit_to_energy(132, 4.343), 133: merit_to_energy(133, 4.6995),
2104 134: merit_to_energy(134, 4.438), 135: merit_to_energy(135, 4.5134),
2105 136: merit_to_energy(136, 4.472), 137: merit_to_energy(137, 4.2273),
2106 138: merit_to_energy(138, 4.3341), 139: merit_to_energy(139, 4.6602),
2107 140: merit_to_energy(140, 4.6009), 141: merit_to_energy(141, 4.418),
2108 142: merit_to_energy(142, 4.4789), 143: merit_to_energy(143, 4.5584),
2109 144: merit_to_energy(144, 4.2492), 145: merit_to_energy(145, 4.4696),
2110 146: merit_to_energy(146, 4.6239), 147: merit_to_energy(147, 4.3409),
2111 148: merit_to_energy(148, 4.3703), 149: merit_to_energy(149, 4.5531),
2112 150: merit_to_energy(150, 4.7209), 151: merit_to_energy(151, 4.3663),
2113 152: merit_to_energy(152, 5.2509), 153: merit_to_energy(153, 4.8206),
2114 154: merit_to_energy(154, 4.2517), 155: merit_to_energy(155, 4.2704),
2115 156: merit_to_energy(156, 4.5986), 157: merit_to_energy(157, 4.6368),
2116 158: merit_to_energy(158, 4.9473), 159: merit_to_energy(159, 4.7396),
2117 160: merit_to_energy(160, 4.878), 161: merit_to_energy(161, 4.7789),
2118 162: merit_to_energy(162, 4.5674), 163: merit_to_energy(163, 4.676),
2119 164: merit_to_energy(164, 5.0367), 165: merit_to_energy(165, 4.2834),
2120 166: merit_to_energy(166, 4.5337), 167: merit_to_energy(167, 4.719),
2121 168: merit_to_energy(168, 4.6057), 169: merit_to_energy(169, 4.7099),
2122 170: merit_to_energy(170, 4.6598), 171: merit_to_energy(171, 4.4077),
2123 172: merit_to_energy(172, 4.7685), 173: merit_to_energy(173, 4.7932),
2124 174: merit_to_energy(174, 4.6564), 175: merit_to_energy(175, 4.2832),
2125 176: merit_to_energy(176, 4.2549), 177: merit_to_energy(177, 4.3416),
2126 178: merit_to_energy(178, 4.1331), 179: merit_to_energy(179, 4.3287),
2127 180: merit_to_energy(180, 4.3385), 181: merit_to_energy(181, 4.5832),
2128 182: merit_to_energy(182, 4.2347), 183: merit_to_energy(183, 4.4879),
2129 184: merit_to_energy(184, 3.9331), 185: merit_to_energy(185, 4.5464),
2130 186: merit_to_energy(186, 4.6239), 187: merit_to_energy(187, 4.5285),
2131 188: merit_to_energy(188, 4.7176), 189: merit_to_energy(189, 4.809),
2132 190: merit_to_energy(190, 4.4645), 191: merit_to_energy(191, 5.0125),
2133 192: merit_to_energy(192, 4.795), 193: merit_to_energy(193, 4.5205),
2134 194: merit_to_energy(194, 4.4288), 195: merit_to_energy(195, 4.2316),
2135 196: merit_to_energy(196, 4.3048), 197: merit_to_energy(197, 4.6267),
2136 198: merit_to_energy(198, 4.5052), 199: merit_to_energy(199, 4.4889),
2137 200: merit_to_energy(200, 4.5496), 201: merit_to_energy(201, 4.008),
2138 202: merit_to_energy(202, 4.3033), 203: merit_to_energy(203, 4.3033),
2139 204: merit_to_energy(204, 4.231), 205: merit_to_energy(205, 4.705),
2140 206: merit_to_energy(206, 4.1288), 207: merit_to_energy(207, 4.1886),
2141 208: merit_to_energy(208, 4.3126), 209: merit_to_energy(209, 4.3542),
2142 210: merit_to_energy(210, 4.6392), 211: merit_to_energy(211, 4.2899),
2143 212: merit_to_energy(212, 4.3567), 213: merit_to_energy(213, 4.517),
2144 214: merit_to_energy(214, 4.4872), 215: merit_to_energy(215, 4.3584),
2145 216: merit_to_energy(216, 4.7725), 217: merit_to_energy(217, 4.1364),
2146 218: merit_to_energy(218, 4.5373), 219: merit_to_energy(219, 4.7798),
2147 220: merit_to_energy(220, 4.6414), 221: merit_to_energy(221, 4.4096),
2148 222: merit_to_energy(222, 4.5273), 223: merit_to_energy(223, 4.5216),
2149 224: merit_to_energy(224, 4.5253), 225: merit_to_energy(225, 4.6462),
2150 226: merit_to_energy(226, 4.599), 227: merit_to_energy(227, 4.5641),
2151 228: merit_to_energy(228, 4.6365), 229: merit_to_energy(229, 4.5664),
2152 230: merit_to_energy(230, 4.5299), 231: merit_to_energy(231, 4.5819),
2153 232: merit_to_energy(232, 4.4556), 233: merit_to_energy(233, 4.5423),
2154 234: merit_to_energy(234, 4.3122), 235: merit_to_energy(235, 4.4529),
2155 236: merit_to_energy(236, 4.3418), 237: merit_to_energy(237, 4.3488),
2156 238: merit_to_energy(238, 4.6992), 239: merit_to_energy(239, 4.5457),
2157 240: merit_to_energy(240, 4.6512), 241: merit_to_energy(241, 4.3921),
2158 242: merit_to_energy(242, 4.3464), 243: merit_to_energy(243, 4.6415),
2159 244: merit_to_energy(244, 4.2224), 245: merit_to_energy(245, 4.3994),
2160 246: merit_to_energy(246, 4.498), 247: merit_to_energy(247, 4.7024),
2161 248: merit_to_energy(248, 4.4414), 249: merit_to_energy(249, 4.6491),
2162 250: merit_to_energy(250, 4.4816), 251: merit_to_energy(251, 4.7291),
2163 252: merit_to_energy(252, 4.002), 253: merit_to_energy(253, 4.7163),
2164 254: merit_to_energy(254, 4.544), 255: merit_to_energy(255, 4.5902),
2165 256: merit_to_energy(256, 4.8075), 257: merit_to_energy(257, 4.8338),
2166 258: merit_to_energy(258, 4.3421), 259: merit_to_energy(259, 4.4596),
2167 260: merit_to_energy(260, 4.6492), 261: merit_to_energy(261, 4.2672),
2168 262: merit_to_energy(262, 4.4557), 263: merit_to_energy(263, 4.3344),
2169 264: merit_to_energy(264, 4.6814), 265: merit_to_energy(265, 4.6007),
2170 266: merit_to_energy(266, 4.3118), 267: merit_to_energy(267, 4.2652),
2171 268: merit_to_energy(268, 4.5912), 269: merit_to_energy(269, 4.5903),
2172 270: merit_to_energy(270, 4.3836), 271: merit_to_energy(271, 4.5028),
2173 272: merit_to_energy(272, 4.8267), 273: merit_to_energy(273, 4.4617),
2174 274: merit_to_energy(274, 4.4683), 275: merit_to_energy(275, 4.3881),
2175 276: merit_to_energy(276, 4.5032), 277: merit_to_energy(277, 4.4352),
2176 278: merit_to_energy(278, 4.579), 279: merit_to_energy(279, 4.3192),
2177 280: merit_to_energy(280, 4.2535), 281: merit_to_energy(281, 4.2325),
2178 282: merit_to_energy(282, 4.4273), 283: merit_to_energy(283, 4.4747),
2179 284: merit_to_energy(284, 4.4307), 285: merit_to_energy(285, 4.3735),
2180 286: merit_to_energy(286, 4.383), 287: merit_to_energy(287, 4.1706),
2181 288: merit_to_energy(288, 4.3858), 289: merit_to_energy(289, 4.2981),
2182 290: merit_to_energy(290, 4.5622), 291: merit_to_energy(291, 4.5621),
2183 292: merit_to_energy(292, 4.641), 293: merit_to_energy(293, 4.7599),
2184 294: merit_to_energy(294, 4.3961), 295: merit_to_energy(295, 4.3992),
2185 296: merit_to_energy(296, 4.3203), 297: merit_to_energy(297, 4.2953),
2186 298: merit_to_energy(298, 4.5771), 299: merit_to_energy(299, 4.4166),
2187 300: merit_to_energy(300, 4.4074), 303: merit_to_energy(303, 4.3507),
2188 304: merit_to_energy(304, 4.0676), 350: merit_to_energy(350, 3.9458),
2189 353: merit_to_energy(353, 4.2075), 400: merit_to_energy(400, 4.3908),
2190 449: merit_to_energy(449, 4.0547), 450: merit_to_energy(450, 4.4235),
2191 500: merit_to_energy(500, 4.3442), 512: merit_to_energy(512, 4.2656),
2192 547: merit_to_energy(547, 4.3408), 550: merit_to_energy(550, 4.0695),
2193 600: merit_to_energy(600, 3.6753), 650: merit_to_energy(650, 3.9239),
2194 653: merit_to_energy(653, 4.2287), 700: merit_to_energy(700, 4.1524),
2195 750: merit_to_energy(750, 3.7603), 751: merit_to_energy(751, 4.1537),
2196 800: merit_to_energy(800, 3.7481), 850: merit_to_energy(850, 3.8096),
2197 853: merit_to_energy(853, 4.0854), 900: merit_to_energy(900, 3.7623),
2198 950: merit_to_energy(950, 4.0438), 953: merit_to_energy(953, 3.8493),
2199 1000: merit_to_energy(1000, 3.7873),
2200 1019: merit_to_energy(1019, 4.139),
2201 1024: merit_to_energy(1024, 3.9683),
2202 1500: merit_to_energy(1500, 3.7316),
2203 2000: merit_to_energy(2000, 3.6193),
2204 2048: merit_to_energy(2048, 3.5387),
2205 2197: merit_to_energy(2197, 3.6423),
2206 3000: merit_to_energy(3000, 3.3608),
2207 4096: merit_to_energy(4096, 3.4589),
2208 },
2209 ("BB2018AHAFALABSPWOLAHMF",
2210 "Borko Bošković and Janez Brest. A Heuristic Algorithm for a Low "
2211 "Autocorrelation Binary Sequence Problem with Odd Length and High "
2212 "Merit Factor. IEEE Access 6:4127-4134. January 2018. "
2213 "doi:10.1109/ACCESS.2018.2789916 "): {
2214 191: 1903, 193: 2144, 195: 2105, 197: 2202, 199: 2195, 201: 2220,
2215 203: 2317, 205: 2430, 207: 2351, 209: 2528, 211: 2457, 213: 2378,
2216 215: 2595, 217: 2684, 219: 2733, 221: 2734, 223: 2751, 225: 2808,
2217 },
2218 ("BHB2024PSAWALABSP",
2219 "Borko Bošković, Jana Herzog, and Janez Brest. Parallel Self-Avoiding "
2220 "Walks for a Low-Autocorrelation Binary Sequences Problem. Journal of "
2221 "Computational Science 77 (2024) 102260. "
2222 "doi:10.1016/j.jocs.2024.102260"): {
2223 171: 1669, 185: 1932, 193: 2040, 197: 2162, 199: 2187, 219: 2605,
2224 223: 2727, 225: 2768, 229: 2810, 231: 2963, 235: 2965, 237: 3118,
2225 239: 3055, 241: 3216, 243: 3233, 245: 3226, 247: 3259,
2226 },
2227}
2230def __make_bkses() -> dict[int, tuple[int, tuple[str, str]]]:
2231 """Make the BKSes."""
2232 d: Final[dict[int, tuple[int, tuple[str, str]]]] = {}
2233 for citation, data in __RELATED_WORKS.items():
2234 for n, ener in data.items():
2235 # We sanity check the BKSes, too.
2236 if ((n in _LBS) and (ener < _LBS[n])) or (ener < (n // 2)):
2237 raise ValueError("Invalid BKS!")
2238 if (n not in d) or (d[n][0] > ener):
2239 d[n] = ener, citation
2240 return d
2243#: The internal lookup table for best-known solutions
2244_BKS: Final[dict[int, tuple[int, tuple[str, str]]]] = __make_bkses()
2245del __make_bkses
2248def get_bks(n: int) -> tuple[int, tuple[str, str] | None]:
2249 """
2250 Get the best currently known solution for the given dimension `n`.
2252 :param n: the dimension
2253 :returns: a tuple of the energy value and a tuple of a citation. If
2254 no solution is found in literature, the lower bound is returned and
2255 `None` is returned as literature tuple
2257 >>> try:
2258 ... get_bks(-1)
2259 ... except ValueError as ve:
2260 ... print(ve)
2261 n=-1 is invalid, must be in 3..1000000000.
2263 >>> get_bks(20)[0]
2264 26
2266 >>> get_bks(401)[0]
2267 11888
2268 >>> get_bks(401)[1][0]
2269 'BBB2017LABSOIMFARPTAT'
2271 >>> get_bks(10000)
2272 (5000, None)
2273 """
2274 n = check_int_range(n, "n", 3)
2275 if n in _BKS:
2276 return _BKS[n]
2277 return n // 2, None
2280def is_labs_objective_value_optimal(n: int, f: int) -> bool | None:
2281 """
2282 Check whether a given objective value is optimal on the LABS problem.
2284 We use the lower and upper bound of the LABS problem to check whether a
2285 given objective value can be optimal. We also use the objective values of
2286 the known global optima from
2288 Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences.
2289 arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016
2290 https://arxiv.org/pdf/1512.02475
2292 :param n: the scale of the problem
2293 :param f: the objective value
2294 :returns: `True` if the objective value `f` is optimal, `False` if it
2295 cannot be optimal, and `None` if the situation is unclear
2296 :raises TypeError: if `n` or `f` are not integers
2297 :raises ValueError: if `n` or `f` are invalid integer values
2299 >>> print(is_labs_objective_value_optimal(49, 136))
2300 True
2302 >>> print(is_labs_objective_value_optimal(49, 137))
2303 False
2305 >>> print(is_labs_objective_value_optimal(100, 50))
2306 True
2308 >>> print(is_labs_objective_value_optimal(100, 51))
2309 None
2311 >>> try:
2312 ... is_labs_objective_value_optimal("x", 3)
2313 ... except TypeError as te:
2314 ... print(te)
2315 n should be an instance of int but is str, namely 'x'.
2317 >>> try:
2318 ... is_labs_objective_value_optimal(7, "3")
2319 ... except TypeError as te:
2320 ... print(te)
2321 f should be an instance of int but is str, namely '3'.
2323 >>> try:
2324 ... is_labs_objective_value_optimal(0, 0)
2325 ... except ValueError as ve:
2326 ... print(ve)
2327 n=0 is invalid, must be in 3..1000000000.
2329 >>> try:
2330 ... is_labs_objective_value_optimal(3, 0)
2331 ... except ValueError as ve:
2332 ... print(ve)
2333 f=0 is invalid, must be in 1..5.
2335 >>> try:
2336 ... is_labs_objective_value_optimal(3, 234240)
2337 ... except ValueError as ve:
2338 ... print(ve)
2339 f=234240 is invalid, must be in 1..5.
2340 """
2341 check_int_range(n, "n", 3)
2342 lb: int = n // 2
2343 ub: int = ((n - 1) * n * (2 * n - 1)) // 6
2344 if check_int_range(f, "f", lb, ub) <= lb:
2345 return True
2346 if n in _LBS: # We know the optimum, so if it is not it, we can stop.
2347 lb = _LBS[n]
2348 return check_int_range(f, "f", lb) <= lb
2349 if f >= ub:
2350 return False
2351 return None
2354class LABS(BitStringProblem):
2355 """The Low-Autocorrelation Sequence Problem."""
2357 def __init__(self, n: int) -> None:
2358 """
2359 Initialize the LABS objective function.
2361 :param n: the dimension of the problem
2362 """
2363 super().__init__(check_int_range(n, "n", 3))
2364 self.evaluate = labs # type: ignore
2366 def lower_bound(self) -> int:
2367 """
2368 Get the lower bound of the LABS problem.
2370 The minimum amount of energy that a sequence could possibly have.
2371 For each correlation length `k`, this is `(n - k) % 2`.
2372 In total, this is just equivalent to `n // 2`.
2374 For some instances of :class:`LABS`, the global optima are known.
2375 For these instances, we return the objective values of these optima,
2376 which obviously are `>= n // 2`.
2378 :return: the lower bound of the :class:`LABS` problem
2380 >>> LABS(16).lower_bound()
2381 24
2383 >>> LABS(61).lower_bound()
2384 226
2386 >>> LABS(200).lower_bound()
2387 100
2389 >>> LABS(124200).lower_bound()
2390 62100
2391 """
2392 n: Final[int] = self.n
2393 if n in _LBS:
2394 return _LBS[n]
2395 return n // 2
2397 def upper_bound(self) -> int:
2398 """
2399 Get the upper bound of the :class:`LABS` problem.
2401 The energy of a sequence where all bits are the same is the highest.
2402 This means that each correlation basically produces its length to the
2403 square as contribution to the result. The upper bound then is the sum
2404 of all of these squares from `1..(n-1)`.
2406 :return: the upper bound of LABS
2408 >>> LABS(16).upper_bound()
2409 1240
2411 >>> LABS(63).upper_bound()
2412 81375
2414 >>> LABS(200).upper_bound()
2415 2646700
2417 >>> LABS(12316).upper_bound()
2418 622636950290
2419 """
2420 return ((self.n - 1) * self.n * (2 * self.n - 1)) // 6
2422 def __str__(self) -> str:
2423 """
2424 Get the name of the LABS objective function.
2426 :return: labs_ + length of string
2428 >>> LABS(16)
2429 labs_16
2430 """
2431 return f"labs_{self.n}"
2433 @classmethod
2434 def default_instances(
2435 cls: type, scale_min: int = 3,
2436 scale_max: int = min(1024, max(_BKS.keys()))) \
2437 -> Iterator[Callable[[], "LABS"]]:
2438 """
2439 Get the default instances of the :class:`LABS` problem.
2441 :param scale_min: the minimum permitted scale, by default `3`
2442 :param scale_max: the maximum permitted scale, by default `625`
2443 :returns: a sequence of default :class:`LABS` instances
2445 >>> len(list(LABS.default_instances()))
2446 81
2448 >>> [x() for x in LABS.default_instances()]
2449 [labs_3, labs_4, labs_5, labs_6, labs_7, labs_8, labs_9, labs_10, \
2450labs_11, labs_12, labs_13, labs_14, labs_15, labs_16, labs_17, labs_18, \
2451labs_19, labs_20, labs_21, labs_22, labs_23, labs_24, labs_25, labs_26, \
2452labs_27, labs_28, labs_29, labs_30, labs_31, labs_32, labs_33, labs_36, \
2453labs_40, labs_41, labs_42, labs_44, labs_48, labs_49, labs_50, labs_55, \
2454labs_59, labs_60, labs_64, labs_66, labs_77, labs_79, labs_81, labs_85, \
2455labs_99, labs_100, labs_107, labs_111, labs_121, labs_125, labs_128, \
2456labs_144, labs_149, labs_169, labs_170, labs_192, labs_196, labs_199, \
2457labs_200, labs_222, labs_225, labs_243, labs_256, labs_269, labs_289, \
2458labs_300, labs_341, labs_400, labs_500, labs_512, labs_600, labs_625, \
2459labs_700, labs_800, labs_900, labs_1000, labs_1024]
2460 """
2461 check_int_range(scale_max, "scale_max", check_int_range(
2462 scale_min, "scale_min", 1, 1_000_000_000) + 1, 1_000_000_000)
2463 return (cast("Callable[[], LABS]", lambda __i=i: cls(__i))
2464 for i in merge_sorted_and_return_unique((
2465 16, 64, 100, 625), (k for k in default_scale_sequence(
2466 scale_min, scale_max) if k in _BKS))
2467 if scale_min <= i <= scale_max)