Coverage for moptipy / examples / bitstrings / labs.py: 87%
78 statements
« prev ^ index » next coverage.py v7.13.2, created at 2026-01-28 04:20 +0000
« prev ^ index » next coverage.py v7.13.2, created at 2026-01-28 04:20 +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
487. Janez Brest and Borko Boskovic. A Heuristic Algorithm for a Low
49 Autocorrelation Binary Sequence Problem With Odd Length and High Merit
50 Factor. IEEE Access 6:4127-4134. 2018.
51 https://doi.org/10.1109/ACCESS.2018.2789916,
53This is code is part of the research work of Mr. Jiazheng ZENG (曾嘉政),
54a Master's student at the Institute of Applied Optimization
55(应用优化研究所) of the School of Artificial
56Intelligence and Big Data (人工智能与大数据学院) at
57Hefei University (合肥大学) in
58Hefei, Anhui, China (中国安徽省合肥市) under the supervision of
59Prof. Dr. Thomas Weise (汤卫思教授).
61>>> from moptipy.spaces.bitstrings import BitStrings
63>>> def write_labs_values(x: np.ndarray):
64... labs = LABS(len(x))
65... energy = labs.evaluate(x)
66... nn = labs.n
67... merit = energy_to_merit(nn, energy)
68... print(f"n: {nn}, energy: {energy}, merit: {merit}")
70>>> def write_rle(s: str):
71... splt = s.split(",")
72... nn = sum(map(int, splt))
73... bs = BitStrings(nn)
74... xx = bs.create()
75... bs.from_rle_str(xx, f"T:{';'.join(splt)}")
76... write_labs_values(xx)
78Let's check some results from the paper "A Heuristic Algorithm for a Low
79Autocorrelation Binary Sequence Problem With Odd Length and High Merit Factor"
80by Janez Brest and Borko Boskovic in IEEE Access 6:4127-4134. 2018:
82>>> write_rle("2,2,3,1,1,2,2,3,1,2,4,3,2,4,3,3,1,1,2,2,3,1,2,1,1,1,2,1,4,1,1,"
83... "1,3,3,1,4,6,7,1,1,1,1,1,1,3,1,8,1,1,1,1,1,2,1,1,1,1,2,1,1,3,1,"
84... "2,1,5,1,1,3,5,3,1,2,2,4,1,2,1,2,1,1,2,2,1,2,1,1,2,3,1,2,2,4,1,"
85... "2,2,1") # they get: energy=1903, merit=9.5851
86n: 191, energy: 1903, merit: 9.585128744088282
88>>> write_rle("2,1,1,1,1,1,3,1,1,5,1,3,1,1,1,1,1,1,2,1,7,2,1,2,2,4,1,1,1,1,1,"
89... "2,1,1,2,1,2,4,2,1,3,2,1,2,3,1,2,2,1,2,1,2,2,1,1,2,3,4,3,1,2,1,"
90... "1,2,1,2,4,2,3,3,2,3,1,2,3,2,1,3,2,1,1,2,3,4,7,1,1,2,2,3,2,1,1,"
91... "1,1,1,3,8,1,3,1,1,1,4,1,7,1") # energy=2378, merit=9.5393
92n: 213, energy: 2378, merit: 9.539318755256518
94>>> write_rle("6,3,6,2,6,2,7,4,1,8,1,4,2,3,8,4,1,3,3,2,1,3,2,3,2,2,1,1,3,4,1,"
95... "1,1,2,3,3,3,2,1,2,1,2,1,2,5,1,1,2,1,4,2,2,1,2,2,1,3,2,1,2,1,3,"
96... "1,1,2,1,1,1,1,1,1,2,1,2,2,1,1,3,1,1,1,1,1,1,3,1,1,2,1,1,1,1,1,"
97... "2,2,1,1,1,1,2,2,1,1,1,1,2,1,2,1,1,1,1,1") # merit=9.0144
98n: 225, energy: 2808, merit: 9.014423076923077
100Let's test some solutions from Tom Packebusch and Stephan Mertens. "Low
101Autocorrelation Binary Sequences." arXiv:1512.02475v2 [cond-mat.stat-mech]
10224 Mar 2016.
104>>> write_rle("2,1,1,3,1,1,4,1,4,1") # energy=33, merit=5.470
105n: 19, energy: 33, merit: 5.46969696969697
107>>> write_rle("2,1,1,2,1,1,1,2,1,1,2,2,2,11,2,2,2,1,1,1,1,1,1,1,1,1,2,2,2,"
108... "4,5,4,2") # energy=257, merit=8.475
109n: 66, energy: 257, merit: 8.474708171206226
111>>> write_rle("3,1,2,1,6,1,4,1,2,1,2,2,1,2,3,4,1,1,1,2,1,1,1,1,3,1,4,1,1,1,"
112... "3,2,1,5,1,1,3,1,6,5,1,1,2,1,2,"
113... "3,2,3,3,1,1,3,1,1,1,1,3,3,1,1") # energy=835, merit=8.480
114n: 119, energy: 835, merit: 8.479640718562875
116And now we check some from Stephan Mertens. Exhaustive search for
117low-autocorrelation binary sequences. Journal of Physics A:
118Mathematical and General. 29(18):L473. September 1996.
119doi:10.1088/0305-4470/29/18/00
121>>> write_rle("8,2,1,2,1,1,2,1,2,3,4,3,2,1,1,1,1,1,1,1") # energy=99
122n: 39, energy: 99, merit: 7.681818181818182
124>>> write_rle("3,1,1,1,1,1,1,8,3,2,1,4,3,2,1,2,2,2,1,1,2,1,1,2,1") # E=140
125n: 48, energy: 140, merit: 8.228571428571428
127>>> def write_hex(ll: int, s: str):
128... bs = BitStrings(ll)
129... xx = bs.create()
130... bs.from_hex_string(xx, s)
131... write_labs_values(xx)
133Now let's check some results from the paper "New Evolutionary Search for Long
134Low Autocorrelation Binary Sequences" by Wai Ho Mow and Ke-Lin Du which was
135published in the IEEE Transactions on Aerospace and Electronic Systems
13651(1):290-303. January 2015. https://doi.org/10.1109/TAES.2014.130518.
138>>> write_hex(236, "76B3EABB81A847C4DA6B6D204C68407E30"
139... "5CC22FD9F148372B64587284C") # they get: merit=4.3418
140n: 236, energy: 6414, merit: 4.3417524165887125
142>>> write_hex(300,
143... "5AAAF7F284E43542CCFFD096BA42E7C784BA0BA6E9CC7DE4FC"
144... "5E34433349D60837235C11164") # they get: merit=4.4074
145n: 300, energy: 10210, merit: 4.407443682664055
147>>> write_hex(2000,
148... "9300DC650BB35F244E59742D8848E894E9BC0CB6E07FE3700C1AA19DAB48DE771363"
149... "D8F8D3CCB7FA78CE77054202A3DE0B087572813A1CB889437130C723FCFFD7E53BDF"
150... "26CA3A73ADCBF889A612D32BA3AE9112F25E9817FC933E833A50D7EF85916D446F25"
151... "526C767ECC52CA9E590D2DA7222A97C4FCCA1A64DFD474C018C3DAA150F2286B10EB"
152... "12A031D07357D53866B24D6C2156109A40AED50D7F388ABF376CEC0D155125070F70"
153... "C26DF3C76AD94F1531053E29DDD2A02B041C062263BD95698150CC8697DA03B20B2C"
154... "6689097320BA14FBCD9425121CBC7AB6AFEFE38105571F9A740A03A7895BDE60645E"
155... "96C607A11C35B0792F588740") # they get: merit=3.6193
156n: 2000, energy: 552588, merit: 3.619333029309359
158>>> write_hex(4096,
159... "E30A5D894A09A4CE0D11987EFC7E8DC88127C078FBD569A4AD05AB26D86A2D067C1E"
160... "274783B891CBF64617E0906673F029AED144133B3FF48DF2DB8A18786780075E9C2B"
161... "0CC46E6D0DA623CF1F50F1DF94177C28076F3CE44BC24C69D242E8D6F49F678E71C2"
162... "D4D72C9412C828734AA39CA28EA2A7E5891B451ADA9B2408E666BA052C81509DE817"
163... "897E4AF9FE4F504846D80D6B14CEEBDD9402A35C03AFD4EAE97B7ECB690094681EFD"
164... "13837398ACECAA9AB5FC10682B00CA74BD15B5C0D7C53BAF35BF70612CB4DDE55EB4"
165... "CF2F028596ED83823F5D1A73463B9953326AE6950CF1299AB6ACB432887A56E9F042"
166... "957BAE604C003E982152DFEAFA75968C0D8B0FEAA2ED33FC20DE73FBA4E21F154CB2"
167... "9129158F8BB5B9977C57B6F77A73634D9164A6FEA9647EAA1E1D63114B6BA1E9F065"
168... "D66E5F5BF15B0D46EF9CED3216DB9DF0298E1CFBE0AF7596E9EB4BCBBBDA108A2B60"
169... "88380B8D73797F9E9DB094FCC06FF0544F46E261FE4EF60AABCA0A32A5D1694B818B"
170... "03A6D5351B28BAF523D1AE65D6048136003CFBA56CF22E0E1A2F2973C81637312722"
171... "192558261DC2BEC886EBBBD73B5D1EFC29BB7E91F72964943D6D3560C3A8E20D11EC"
172... "5A81C106E04D5F59218D9FD9D823B118AD4FB1D6C1435461E338D9F171B337E5DD73"
173... "20CCD9CFE5DC651051E0F6678550BA09F9892E76D6E17C49ECD63F71B71FF351EEAF"
174... "6DEB") # they get: merit=3.4589
175n: 4096, energy: 2425236, merit: 3.458883176730017
177Now let's test the result included in report "On the Skew-Symmetric Binary
178Sequences and the Merit Factor Problem" by Miroslav Dimitrov to be found at
179arXiv:2106.03377v1 [cs.IT] 7 Jun 2021. https://arxiv.org/pdf/2106.03377.
181>>> write_hex(449,
182... "96f633d86fe825794ed23a9dfd7d4c3abd080cf76cbf9bdab9a7b2533e3161901d19"
183... "50c774ca8bd012cfd7d5d8123c4f97e285469d327478") # merit=6.5319
184n: 449, energy: 15432, merit: 6.531914204250907
187Let's test some results from the paper "Computational Search of Long
188Skew-Symmetric Binary Sequences with High Merit Factors" by Janez Brest and
189Borko Bošković in MENDEL - Soft Computing Journal 28(2):17-24. December 2022.
190doi:10.13164/mendel.202k.k.017.
191These results are skew-symmetric, so we need to expand them.
193>>> def write_skew(ll: int, s: str):
194... bs = BitStrings(ll)
195... xx = bs.create()
196... bs.from_hex_string(xx, s)
197... d = (ll + 1) // 2
198... for ii in range(1, d):
199... dmi = d - ii - 1
200... dpi = d + ii - 1
201... xx[dpi] = xx[dmi] ^ (ii & 1 != 0)
202... write_labs_values(xx)
204>>> write_skew(201, # theirs: F=9.0993
205... "00FC7C04C5DF914630C9E3AF60A741258CB26FB95DECEAD6D4A")
206n: 201, energy: 2220, merit: 9.099324324324325
208>>> write_skew(303, # theirs: F=8.0718
209... "14A29CEB1AEA5CA5A43D99B1250A3155FEF3433432EA80137D0713"
210... "998B4787C87EF93EC9F7C1")
211n: 303, energy: 5687, merit: 8.07183049059258
213And now we test some results from Borko Bošković, Franc Brglez, and Janez
214Brest. A GitHub Archive for Solvers and Solutions of the LABS Problem.
215https://github.com/borkob/git_labs. January 2016.
216>>> def write_bits(s: str):
217... ll = len(s.strip())
218... bs = BitStrings(ll)
219... xx = bs.create()
220... for ii, vv in enumerate(s):
221... xx[ii] = int(vv) > 0
222... write_labs_values(xx)
224>>> write_bits("00011000111111101010110110010") # merit: 6.7823, energy: 62
225n: 29, energy: 62, merit: 6.782258064516129
227>>> write_bits("0000000000000111011110111001000110111001110011001111110011101"
228... "0010111110011000000000110001110000001000000111101111110101101"
229... "1000001011010011101101011111111001111001011110101111011110001"
230... "1010010110110111000110101110111001111011110100010110010001000"
231... "0011011011100011110000110110100010111110100001101001101010100"
232... "0001110110000111101011000111110101000101101010001010110110110"
233... "0101010100110010100001111011001010110011001001101110010001101"
234... "1101000100101010101010") # merit: 6.5218, energy: 15456
235n: 449, energy: 15456, merit: 6.521771480331263
237>>> write_bits("0010110010011001010101011010011010101011011011001100010101001"
238... "1101001010000100100110010101011011000110010101111010110101001"
239... "1011111100101110001010000110100001101000001001000011010100011"
240... "0000001111101000000110010011100000000110011100010111110000100"
241... "1111111011001100011100000000011000011111111"
242... "1100110001100001") # merit: 7.2462, energy: 6335
243n: 303, energy: 6335, merit: 7.2461720599842145
245Let's check one solution from
247>>> write_rle("1,1,1,1,1,1,1,9,1,3,4,2,2,2,2,4,3,1,1,2,3,3,1,2,2,1,3,4,1,1,2,"
248... "1,2,1,1,2,1,1,2") # energy=366, merit=8.1
249n: 77, energy: 366, merit: 8.099726775956285
250"""
251from math import isfinite
252from typing import Callable, Final, Iterator, cast
254import numba # type: ignore
255import numpy as np
256from pycommons.ds.sequences import merge_sorted_and_return_unique
257from pycommons.math.int_math import try_int_div
258from pycommons.types import check_int_range, type_error
260from moptipy.examples.bitstrings.bitstring_problem import (
261 BitStringProblem,
262 default_scale_sequence,
263)
266@numba.njit(nogil=True, cache=True)
267def labs(x: np.ndarray) -> int:
268 """
269 Calculate the objective value of the LABS problem.
271 :param x: the flat numpy array representing the bitstring
272 :return: the LABS objective
274 # N = 3, E = 1, FN = 4.50000
275 >>> labs(np.array([0, 0, 1]))
276 1
278 # N = 3, E = 1, FN = 4.50000
279 >>> labs(np.array([1, 1, 0]))
280 1
282 # N = 4, E = 2, FN = 4.00000
283 >>> labs(np.array([0, 1, 0, 0]))
284 2
286 # N = 4, E = 2, FN = 4.00000
287 >>> labs(np.array([1, 0, 1, 1]))
288 2
290 # N = 5, E = 2, FN = 6.25000
291 >>> labs(np.array([0, 0, 0, 1, 0]))
292 2
294 # N = 5, E = 2, FN = 6.25000
295 >>> labs(np.array([1, 1, 1, 0, 1]))
296 2
298 # N = 6, E = 7, FN = 2.57143
299 >>> labs(np.array([0, 1, 1, 1, 1, 0]))
300 7
302 # N = 6, E = 7, FN = 2.57143
303 >>> labs(np.array([1, 0, 0, 0, 0, 1]))
304 7
306 # N = 6, E = 7, FN = 2.57143
307 >>> labs(np.array([0, 1, 1, 0, 0, 0]))
308 7
310 # N = 6, E = 7, FN = 2.57143
311 >>> labs(np.array([1, 0, 0, 1, 1, 1]))
312 7
314 # N = 6, E = 7, FN = 2.57143
315 >>> labs(np.array([0, 0, 0, 1, 0, 0]))
316 7
318 # N = 6, E = 7, FN = 2.57143
319 >>> labs(np.array([1, 1, 1, 0, 1, 1]))
320 7
322 # N = 6, E = 7, FN = 2.57143
323 >>> labs(np.array([0, 1, 0, 1, 1, 1]))
324 7
326 # N = 6, E = 7, FN = 2.57143
327 >>> labs(np.array([1, 0, 1, 0, 0, 0]))
328 7
330 # N = 7, E = 3, FN = 8.16667
331 >>> labs(np.array([0, 1, 0, 0, 1, 1, 1]))
332 3
334 # N = 7, E = 3, FN = 8.16667
335 >>> labs(np.array([1, 0, 1, 1, 0, 0, 0]))
336 3
338 # N = 8, E = 8, FN = 4.00000
339 >>> labs(np.array([0, 0, 0, 1, 1, 0, 1, 0]))
340 8
342 # N = 8, E = 8, FN = 4.00000
343 >>> labs(np.array([1, 1, 1, 0, 0, 1, 0, 1]))
344 8
346 # N = 8, E = 8, FN = 4.00000
347 >>> labs(np.array([0, 0, 0, 1, 0, 1, 1, 0]))
348 8
350 # N = 8, E = 8, FN = 4.00000
351 >>> labs(np.array([1, 1, 1, 0, 1, 0, 0, 1]))
352 8
354 # N = 9, E = 12, FN = 3.37500
355 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 0, 1]))
356 12
358 # N = 9, E = 12, FN = 3.37500
359 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 1, 0]))
360 12
362 # N = 9, E = 12, FN = 3.37500
363 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 1, 0]))
364 12
366 # N = 9, E = 12, FN = 3.37500
367 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 0, 1]))
368 12
370 # N = 9, E = 12, FN = 3.37500
371 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 1, 0]))
372 12
374 # N = 9, E = 12, FN = 3.37500
375 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 0, 1]))
376 12
378 # N = 9, E = 12, FN = 3.37500
379 >>> labs(np.array([0, 0, 0, 1, 0, 1, 1, 0, 0]))
380 12
382 # N = 9, E = 12, FN = 3.37500
383 >>> labs(np.array([1, 1, 1, 0, 1, 0, 0, 1, 1]))
384 12
386 # N = 10, E = 13, FN = 3.84615
387 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0]))
388 13
390 # N = 10, E = 13, FN = 3.84615
391 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1]))
392 13
394 # N = 10, E = 13, FN = 3.84615
395 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 1, 0]))
396 13
398 # N = 10, E = 13, FN = 3.84615
399 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 0, 1]))
400 13
402 # N = 10, E = 13, FN = 3.84615
403 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 0, 1, 1]))
404 13
406 # N = 10, E = 13, FN = 3.84615
407 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 1, 0, 0]))
408 13
410 # N = 10, E = 13, FN = 3.84615
411 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 1, 0, 0]))
412 13
414 # N = 10, E = 13, FN = 3.84615
415 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 0, 1, 1]))
416 13
418 # N = 10, E = 13, FN = 3.84615
419 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 1, 0]))
420 13
422 # N = 10, E = 13, FN = 3.84615
423 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 0, 1]))
424 13
426 # N = 11, E = 5, FN = 12.10000
427 >>> labs(np.array([0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1]))
428 5
430 # N = 11, E = 5, FN = 12.10000
431 >>> labs(np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0]))
432 5
434 # N = 12, E = 10, FN = 7.20000
435 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]))
436 10
438 # N = 12, E = 10, FN = 7.20000
439 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]))
440 10
442 # N = 12, E = 10, FN = 7.20000
443 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0]))
444 10
446 # N = 12, E = 10, FN = 7.20000
447 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1]))
448 10
450 # N = 13, E = 6, FN = 14.08333
451 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]))
452 6
454 # N = 13, E = 6, FN = 14.08333
455 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]))
456 6
458 # N = 14, E = 19, FN = 5.15789
459 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1]))
460 19
462 # N = 14, E = 19, FN = 5.15789
463 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0]))
464 19
466 # N = 14, E = 19, FN = 5.15789
467 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]))
468 19
470 # N = 14, E = 19, FN = 5.15789
471 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]))
472 19
474 # N = 14, E = 19, FN = 5.15789
475 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0]))
476 19
478 # N = 14, E = 19, FN = 5.15789
479 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1]))
480 19
482 # N = 14, E = 19, FN = 5.15789
483 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1]))
484 19
486 # N = 14, E = 19, FN = 5.15789
487 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0]))
488 19
490 # N = 14, E = 19, FN = 5.15789
491 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1]))
492 19
494 # N = 14, E = 19, FN = 5.15789
495 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0]))
496 19
498 # N = 14, E = 19, FN = 5.15789
499 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1]))
500 19
502 # N = 14, E = 19, FN = 5.15789
503 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0]))
504 19
506 # N = 14, E = 19, FN = 5.15789
507 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0]))
508 19
510 # N = 14, E = 19, FN = 5.15789
511 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1]))
512 19
514 # N = 14, E = 19, FN = 5.15789
515 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0]))
516 19
518 # N = 14, E = 19, FN = 5.15789
519 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1]))
520 19
522 # N = 15, E = 15, FN = 7.50000
523 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1]))
524 15
526 # N = 15, E = 15, FN = 7.50000
527 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0]))
528 15
530 # N = 15, E = 15, FN = 7.50000
531 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1]))
532 15
534 # N = 15, E = 15, FN = 7.50000
535 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0]))
536 15
538 # N = 16, E = 24, FN = 5.33333
539 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0]))
540 24
542 # N = 16, E = 24, FN = 5.33333
543 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1]))
544 24
546 # N = 16, E = 24, FN = 5.33333
547 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0]))
548 24
550 # N = 16, E = 24, FN = 5.33333
551 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1]))
552 24
554 # N = 16, E = 24, FN = 5.33333
555 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0]))
556 24
558 # N = 16, E = 24, FN = 5.33333
559 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1]))
560 24
562 # N = 16, E = 24, FN = 5.33333
563 >>> labs(np.array([0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0]))
564 24
566 # N = 16, E = 24, FN = 5.33333
567 >>> labs(np.array([1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1]))
568 24
570 # N = 17, E = 32, FN = 4.51562
571 >>> labs(np.array([0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0]))
572 32
574 # N = 17, E = 32, FN = 4.51562
575 >>> labs(np.array([1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1]))
576 32
578 # N = 17, E = 32, FN = 4.51562
579 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1]))
580 32
582 # N = 17, E = 32, FN = 4.51562
583 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0]))
584 32
586 # N = 17, E = 32, FN = 4.51562
587 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1]))
588 32
590 # N = 17, E = 32, FN = 4.51562
591 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0]))
592 32
594 # N = 17, E = 32, FN = 4.51562
595 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1]))
596 32
598 # N = 17, E = 32, FN = 4.51562
599 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0]))
600 32
602 # N = 17, E = 32, FN = 4.51562
603 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1]))
604 32
606 # N = 17, E = 32, FN = 4.51562
607 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0]))
608 32
610 # N = 17, E = 32, FN = 4.51562
611 >>> labs(np.array([0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1]))
612 32
614 # N = 17, E = 32, FN = 4.51562
615 >>> labs(np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0]))
616 32
618 # N = 18, E = 25, FN = 6.48000
619 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0]))
620 25
622 # N = 18, E = 25, FN = 6.48000
623 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1]))
624 25
626 # N = 18, E = 25, FN = 6.48000
627 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0]))
628 25
630 # N = 18, E = 25, FN = 6.48000
631 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1]))
632 25
634 # N = 19, E = 29, FN = 6.22414
635 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1,
636 ... 1]))
637 29
639 # N = 19, E = 29, FN = 6.22414
640 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0,
641 ... 0]))
642 29
644 # N = 20, E = 26, FN = 7.69231
645 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0,
646 ... 0, 1]))
647 26
649 # N = 20, E = 26, FN = 7.69231
650 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1,
651 ... 1, 0]))
652 26
654 # N = 21, E = 26, FN = 8.48077
655 >>> labs(np.array([0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0,
656 ... 1, 1, 0]))
657 26
659 # N = 21, E = 26, FN = 8.48077
660 >>> labs(np.array([1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1,
661 ... 0, 0, 1]))
662 26
664 # N = 22, E = 39, FN = 6.20513
665 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1,
666 ... 1, 0, 0, 0]))
667 39
669 # N = 22, E = 39, FN = 6.20513
670 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0,
671 ... 0, 1, 1, 1]))
672 39
674 # N = 22, E = 39, FN = 6.20513
675 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0,
676 ... 1, 1, 0, 1]))
677 39
679 # N = 22, E = 39, FN = 6.20513
680 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1,
681 ... 0, 0, 1, 0]))
682 39
684 # N = 22, E = 39, FN = 6.20513
685 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0,
686 ... 0, 0, 1, 1]))
687 39
689 # N = 22, E = 39, FN = 6.20513
690 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1,
691 ... 1, 1, 0, 0]))
692 39
694 # N = 23, E = 47, FN = 5.62766
695 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1,
696 ... 0, 0, 0, 1, 1]))
697 47
699 # N = 23, E = 47, FN = 5.62766
700 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0,
701 ... 1, 1, 1, 0, 0]))
702 47
704 # N = 23, E = 47, FN = 5.62766
705 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1,
706 ... 1, 0, 0, 1, 0]))
707 47
709 # N = 23, E = 47, FN = 5.62766
710 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0,
711 ... 0, 1, 1, 0, 1]))
712 47
714 # N = 23, E = 47, FN = 5.62766
715 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1,
716 ... 0, 0, 0, 1, 1]))
717 47
719 # N = 23, E = 47, FN = 5.62766
720 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0,
721 ... 1, 1, 1, 0, 0]))
722 47
724 # N = 24, E = 36, FN = 8.00000
725 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
726 ... 1, 1, 0, 1, 1, 0]))
727 36
729 # N = 24, E = 36, FN = 8.00000
730 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1,
731 ... 0, 0, 1, 0, 0, 1]))
732 36
734 # N = 25, E = 36, FN = 8.68056
735 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1,
736 ... 1, 0, 1, 1, 0, 0, 1]))
737 36
739 # N = 25, E = 36, FN = 8.68056
740 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
741 ... 0, 1, 0, 0, 1, 1, 0]))
742 36
744 # N = 26, E = 45, FN = 7.51111
745 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0,
746 ... 0, 1, 1, 1, 0, 0, 1, 1]))
747 45
749 # N = 26, E = 45, FN = 7.51111
750 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1,
751 ... 1, 0, 0, 0, 1, 1, 0, 0]))
752 45
754 # N = 26, E = 45, FN = 7.51111
755 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1,
756 ... 0, 1, 1, 0, 1, 1, 0, 1]))
757 45
759 # N = 26, E = 45, FN = 7.51111
760 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0,
761 ... 1, 0, 0, 1, 0, 0, 1, 0]))
762 45
764 # N = 26, E = 45, FN = 7.51111
765 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,
766 ... 0, 1, 1, 0, 1, 1, 0, 1]))
767 45
769 # N = 26, E = 45, FN = 7.51111
770 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,
771 ... 1, 0, 0, 1, 0, 0, 1, 0]))
772 45
774 # N = 27, E = 37, FN = 9.85135
775 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
776 ... 1, 0, 0, 1, 0, 1, 1, 0, 1]))
777 37
779 # N = 27, E = 37, FN = 9.85135
780 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
781 ... 0, 1, 1, 0, 1, 0, 0, 1, 0]))
782 37
784 # N = 28, E = 50, FN = 7.84000
785 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
786 ... 1, 0, 0, 1, 0, 1, 1, 0, 1, 1]))
787 50
789 # N = 28, E = 50, FN = 7.84000
790 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
791 ... 0, 1, 1, 0, 1, 0, 0, 1, 0, 0]))
792 50
794 # N = 29, E = 62, FN = 6.78226
795 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0,
796 ... 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0]))
797 62
799 # N = 29, E = 62, FN = 6.78226
800 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1,
801 ... 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1]))
802 62
804 # N = 29, E = 62, FN = 6.78226
805 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0,
806 ... 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0]))
807 62
809 # N = 29, E = 62, FN = 6.78226
810 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1,
811 ... 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1]))
812 62
814 # N = 30, E = 59, FN = 7.62712
815 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,
816 ... 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0]))
817 59
819 # N = 30, E = 59, FN = 7.62712
820 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
821 ... 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1]))
822 59
824 # N = 30, E = 59, FN = 7.62712
825 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,
826 ... 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0]))
827 59
829 # N = 30, E = 59, FN = 7.62712
830 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
831 ... 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1]))
832 59
834 # N = 31, E = 67, FN = 7.17164
835 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1,
836 ... 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1]))
837 67
839 # N = 31, E = 67, FN = 7.17164
840 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0,
841 ... 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0]))
842 67
844 # N = 32, E = 64, FN = 8.00000
845 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1,
846 ... 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0]))
847 64
849 # N = 32, E = 64, FN = 8.00000
850 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0,
851 ... 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1]))
852 64
854 # N = 33, E = 64, FN = 8.50781
855 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0,
856 ... 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1]))
857 64
859 # N = 33, E = 64, FN = 8.50781
860 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1,
861 ... 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0]))
862 64
864 # N = 34, E = 65, FN = 8.89231
865 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1,
866 ... 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1]))
867 65
869 # N = 34, E = 65, FN = 8.89231
870 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0,
871 ... 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0]))
872 65
874 # N = 35, E = 73, FN = 8.39041
875 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1,
876 ... 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0]))
877 73
879 # N = 35, E = 73, FN = 8.39041
880 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0,
881 ... 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1]))
882 73
884 # N = 36, E = 82, FN = 7.90244
885 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1,
886 ... 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0]))
887 82
889 # N = 36, E = 82, FN = 7.90244
890 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0,
891 ... 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1]))
892 82
894 # N = 37, E = 86, FN = 7.95930
895 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1,
896 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1]))
897 86
899 # N = 37, E = 86, FN = 7.95930
900 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
901 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0]))
902 86
904 # N = 38, E = 87, FN = 8.29885
905 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1,
906 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0]))
907 87
909 # N = 38, E = 87, FN = 8.29885
910 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0,
911 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1]))
912 87
914 # N = 39, E = 99, FN = 7.68182
915 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
916 ... 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1]))
917 99
919 # N = 39, E = 99, FN = 7.68182
920 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
921 ... 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0]))
922 99
924 # N = 39, E = 99, FN = 7.68182
925 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0,
926 ... 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1]))
927 99
929 # N = 39, E = 99, FN = 7.68182
930 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1,
931 ... 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0]))
932 99
934 # N = 40, E = 108, FN = 7.40741
935 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1,
936 ... 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0,
937 ... 1]))
938 108
940 # N = 40, E = 108, FN = 7.40741
941 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0,
942 ... 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1,
943 ... 0]))
944 108
946 # N = 41, E = 108, FN = 7.78241
947 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1,
948 ... 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0,
949 ... 1, 0]))
950 108
952 # N = 41, E = 108, FN = 7.78241
953 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0,
954 ... 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1,
955 ... 0, 1]))
956 108
958 # N = 42, E = 101, FN = 8.73267
959 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1,
960 ... 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0,
961 ... 1, 0, 0]))
962 101
964 # N = 42, E = 101, FN = 8.73267
965 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0,
966 ... 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1,
967 ... 0, 1, 1]))
968 101
970 # N = 43, E = 109, FN = 8.48165
971 >>> labs(np.array([0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0,
972 ... 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1,
973 ... 0, 1, 1, 1]))
974 109
976 # N = 43, E = 109, FN = 8.48165
977 >>> labs(np.array([1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1,
978 ... 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0,
979 ... 1, 0, 0, 0]))
980 109
982 # N = 44, E = 122, FN = 7.93443
983 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1,
984 ... 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1,
985 ... 0, 1, 0, 0, 1]))
986 122
988 # N = 44, E = 122, FN = 7.93443
989 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0,
990 ... 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0,
991 ... 1, 0, 1, 1, 0]))
992 122
994 # N = 45, E = 118, FN = 8.58051
995 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
996 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0,
997 ... 1, 0, 1, 0, 1, 0]))
998 118
1000 # N = 45, E = 118, FN = 8.58051
1001 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
1002 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,
1003 ... 0, 1, 0, 1, 0, 1]))
1004 118
1006 # N = 46, E = 131, FN = 8.07634
1007 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0,
1008 ... 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0,
1009 ... 1, 0, 1, 0, 1, 0, 1]))
1010 131
1012 # N = 46, E = 131, FN = 8.07634
1013 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
1014 ... 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1,
1015 ... 0, 1, 0, 1, 0, 1, 0]))
1016 131
1018 # N = 46, E = 131, FN = 8.07634
1019 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
1020 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0,
1021 ... 1, 0, 1, 0, 1, 0, 1]))
1022 131
1024 # N = 46, E = 131, FN = 8.07634
1025 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
1026 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1,
1027 ... 0, 1, 0, 1, 0, 1, 0]))
1028 131
1030 # N = 46, E = 131, FN = 8.07634
1031 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0,
1032 ... 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1,
1033 ... 0, 1, 1, 0, 1, 1, 0]))
1034 131
1036 # N = 46, E = 131, FN = 8.07634
1037 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1,
1038 ... 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0,
1039 ... 1, 0, 0, 1, 0, 0, 1]))
1040 131
1042 # N = 47, E = 135, FN = 8.18148
1043 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1,
1044 ... 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1,
1045 ... 0, 1, 0, 1, 0, 1, 0, 1]))
1046 135
1048 # N = 47, E = 135, FN = 8.18148
1049 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0,
1050 ... 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0,
1051 ... 1, 0, 1, 0, 1, 0, 1, 0]))
1052 135
1054 # N = 47, E = 135, FN = 8.18148
1055 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1056 ... 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1,
1057 ... 0, 1, 1, 0, 0, 1, 0, 1]))
1058 135
1060 # N = 47, E = 135, FN = 8.18148
1061 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
1062 ... 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0,
1063 ... 1, 0, 0, 1, 1, 0, 1, 0]))
1064 135
1066 # N = 47, E = 135, FN = 8.18148
1067 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0,
1068 ... 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0,
1069 ... 1, 1, 0, 0, 0, 0, 1, 1]))
1070 135
1072 # N = 47, E = 135, FN = 8.18148
1073 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1,
1074 ... 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1,
1075 ... 0, 0, 1, 1, 1, 1, 0, 0]))
1076 135
1078 # N = 47, E = 135, FN = 8.18148
1079 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1,
1080 ... 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0,
1081 ... 1, 0, 1, 0, 1, 1, 0, 1]))
1082 135
1084 # N = 47, E = 135, FN = 8.18148
1085 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,
1086 ... 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1,
1087 ... 0, 1, 0, 1, 0, 0, 1, 0]))
1088 135
1090 # N = 47, E = 135, FN = 8.18148
1091 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1,
1092 ... 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1,
1093 ... 0, 1, 0, 0, 1, 0, 0, 1]))
1094 135
1096 # N = 47, E = 135, FN = 8.18148
1097 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0,
1098 ... 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0,
1099 ... 1, 0, 1, 1, 0, 1, 1, 0]))
1100 135
1102 # N = 47, E = 135, FN = 8.18148
1103 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
1104 ... 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0,
1105 ... 1, 0, 1, 1, 0, 0, 0, 1]))
1106 135
1108 # N = 47, E = 135, FN = 8.18148
1109 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0,
1110 ... 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1,
1111 ... 0, 1, 0, 0, 1, 1, 1, 0]))
1112 135
1114 # N = 48, E = 140, FN = 8.22857
1115 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
1116 ... 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1,
1117 ... 0, 1, 0, 0, 1, 0, 1, 1, 0]))
1118 140
1120 # N = 48, E = 140, FN = 8.22857
1121 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1,
1122 ... 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0,
1123 ... 1, 0, 1, 1, 0, 1, 0, 0, 1]))
1124 140
1126 # N = 49, E = 136, FN = 8.82721
1127 >>> labs(np.array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,
1128 ... 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1,
1129 ... 1, 1, 1, 0, 1, 0, 0, 0, 0, 1]))
1130 136
1132 # N = 49, E = 136, FN = 8.82721
1133 >>> labs(np.array([1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1,
1134 ... 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0,
1135 ... 0, 0, 0, 1, 0, 1, 1, 1, 1, 0]))
1136 136
1138 # N = 49, E = 136, FN = 8.82721
1139 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
1140 ... 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1,
1141 ... 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]))
1142 136
1144 # N = 49, E = 136, FN = 8.82721
1145 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1146 ... 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0,
1147 ... 1, 1, 0, 1, 1, 0, 1, 1, 0, 1]))
1148 136
1150 # N = 50, E = 153, FN = 8.16993
1151 >>> labs(np.array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0,
1152 ... 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1,
1153 ... 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1]))
1154 153
1156 # N = 50, E = 153, FN = 8.16993
1157 >>> labs(np.array([1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1,
1158 ... 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0,
1159 ... 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0]))
1160 153
1162 # N = 50, E = 153, FN = 8.16993
1163 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1164 ... 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0,
1165 ... 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1]))
1166 153
1168 # N = 50, E = 153, FN = 8.16993
1169 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
1170 ... 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1,
1171 ... 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0]))
1172 153
1174 # N = 50, E = 153, FN = 8.16993
1175 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0,
1176 ... 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0,
1177 ... 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0]))
1178 153
1180 # N = 50, E = 153, FN = 8.16993
1181 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
1182 ... 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1,
1183 ... 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1]))
1184 153
1186 # N = 51, E = 153, FN = 8.50000
1187 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,
1188 ... 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1,
1189 ... 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1]))
1190 153
1192 # N = 51, E = 153, FN = 8.50000
1193 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1,
1194 ... 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0,
1195 ... 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0]))
1196 153
1198 # N = 52, E = 166, FN = 8.14458
1199 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1,
1200 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0,
1201 ... 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1]))
1202 166
1204 # N = 52, E = 166, FN = 8.14458
1205 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0,
1206 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1,
1207 ... 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0]))
1208 166
1210 # N = 53, E = 170, FN = 8.26176
1211 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1212 ... 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0,
1213 ... 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1]))
1214 170
1216 # N = 53, E = 170, FN = 8.26176
1217 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1,
1218 ... 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1,
1219 ... 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0]))
1220 170
1222 # N = 53, E = 170, FN = 8.26176
1223 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
1224 ... 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0,
1225 ... 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0]))
1226 170
1228 # N = 53, E = 170, FN = 8.26176
1229 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0,
1230 ... 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1,
1231 ... 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1]))
1232 170
1234 # N = 54, E = 175, FN = 8.33143
1235 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
1236 ... 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1,
1237 ... 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0]))
1238 175
1240 # N = 54, E = 175, FN = 8.33143
1241 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1242 ... 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0,
1243 ... 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1]))
1244 175
1246 # N = 55, E = 171, FN = 8.84503
1247 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0,
1248 ... 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0,
1249 ... 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1]))
1250 171
1252 # N = 55, E = 171, FN = 8.84503
1253 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1,
1254 ... 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1,
1255 ... 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0]))
1256 171
1258 # N = 55, E = 171, FN = 8.84503
1259 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
1260 ... 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1,
1261 ... 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1]))
1262 171
1264 # N = 55, E = 171, FN = 8.84503
1265 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1,
1266 ... 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0,
1267 ... 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0]))
1268 171
1270 # N = 56, E = 192, FN = 8.16667
1271 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0,
1272 ... 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0,
1273 ... 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1]))
1274 192
1276 # N = 56, E = 192, FN = 8.16667
1277 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1,
1278 ... 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1,
1279 ... 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0]))
1280 192
1282 # N = 57, E = 188, FN = 8.64096
1283 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
1284 ... 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
1285 ... 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0]))
1286 188
1288 # N = 57, E = 188, FN = 8.64096
1289 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0,
1290 ... 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,
1291 ... 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1]))
1292 188
1294 # N = 58, E = 197, FN = 8.53807
1295 >>> labs(np.array([0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1,
1296 ... 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0,
1297 ... 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1]))
1298 197
1300 # N = 58, E = 197, FN = 8.53807
1301 >>> labs(np.array([1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0,
1302 ... 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1,
1303 ... 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0]))
1304 197
1306 # N = 59, E = 205, FN = 8.49024
1307 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1,
1308 ... 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1,
1309 ... 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1]))
1310 205
1312 # N = 59, E = 205, FN = 8.49024
1313 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0,
1314 ... 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0,
1315 ... 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0]))
1316 205
1318 # N = 59, E = 205, FN = 8.49024
1319 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
1320 ... 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0,
1321 ... 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0]))
1322 205
1324 # N = 59, E = 205, FN = 8.49024
1325 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1,
1326 ... 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1,
1327 ... 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1]))
1328 205
1330 # N = 60, E = 218, FN = 8.25688
1331 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1,
1332 ... 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1,
1333 ... 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1]))
1334 218
1336 # N = 60, E = 218, FN = 8.25688
1337 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0,
1338 ... 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0,
1339 ... 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0]))
1340 218
1342 # N = 60, E = 218, FN = 8.25688
1343 >>> labs(np.array([0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1,
1344 ... 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1,
1345 ... 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1]))
1346 218
1348 # N = 60, E = 218, FN = 8.25688
1349 >>> labs(np.array([1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0,
1350 ... 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0,
1351 ... 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0]))
1352 218
1354 # N = 61, E = 226, FN = 8.23230
1355 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0,
1356 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0,
1357 ... 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0,
1358 ... 1]))
1359 226
1361 # N = 61, E = 226, FN = 8.23230
1362 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1,
1363 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1,
1364 ... 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1,
1365 ... 0]))
1366 226
1368 # N = 62, E = 235, FN = 8.17872
1369 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0,
1370 ... 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0,
1371 ... 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0,
1372 ... 1, 1]))
1373 235
1375 # N = 62, E = 235, FN = 8.17872
1376 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1,
1377 ... 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1,
1378 ... 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1,
1379 ... 0, 0]))
1380 235
1382 # N = 62, E = 235, FN = 8.17872
1383 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0,
1384 ... 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0,
1385 ... 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0,
1386 ... 1, 1]))
1387 235
1389 # N = 62, E = 235, FN = 8.17872
1390 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1,
1391 ... 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1,
1392 ... 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1,
1393 ... 0, 0]))
1394 235
1396 # N = 63, E = 207, FN = 9.58696
1397 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1,
1398 ... 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
1399 ... 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0,
1400 ... 1, 1, 0]))
1401 207
1403 # N = 63, E = 207, FN = 9.58696
1404 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
1405 ... 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,
1406 ... 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1,
1407 ... 0, 0, 1]))
1408 207
1410 # N = 64, E = 208, FN = 9.84615
1411 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1,
1412 ... 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1,
1413 ... 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0,
1414 ... 1, 1, 0, 0]))
1415 208
1417 # N = 64, E = 208, FN = 9.84615
1418 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
1419 ... 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0,
1420 ... 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1,
1421 ... 0, 0, 1, 1]))
1422 208
1424 # N = 65, E = 240, FN = 8.80208
1425 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1,
1426 ... 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0,
1427 ... 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1,
1428 ... 0, 0, 1, 0, 0]))
1429 240
1431 # N = 65, E = 240, FN = 8.80208
1432 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0,
1433 ... 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1,
1434 ... 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0,
1435 ... 1, 1, 0, 1, 1]))
1436 240
1438 # N = 66, E = 257, FN = 8.47471
1439 >>> labs(np.array([0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0,
1440 ... 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1,
1441 ... 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0,
1442 ... 1, 1, 1, 1, 0, 0]))
1443 257
1445 # N = 66, E = 257, FN = 8.47471
1446 >>> labs(np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1,
1447 ... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0,
1448 ... 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1,
1449 ... 0, 0, 0, 0, 1, 1]))
1450 257
1452 # N = 3, all bits are True
1453 >>> labs(np.array([1, 1, 1]))
1454 5
1456 # N = 4, all bits are True
1457 >>> labs(np.array([1, 1, 1, 1]))
1458 14
1460 # N = 5, all bits are True
1461 >>> labs(np.array([1, 1, 1, 1, 1]))
1462 30
1464 # N = 6, all bits are True
1465 >>> labs(np.array([1, 1, 1, 1, 1, 1]))
1466 55
1468 # N = 7, all bits are True
1469 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1]))
1470 91
1472 # N = 8, all bits are False
1473 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0]))
1474 140
1476 # N = 9, all bits are False
1477 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0]))
1478 204
1480 # N = 10, all bits are True
1481 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1482 285
1484 # N = 11, all bits are True
1485 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1486 385
1488 # N = 12, all bits are True
1489 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1490 506
1492 # N = 13, all bits are False
1493 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1494 650
1496 # N = 14, all bits are False
1497 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1498 819
1500 # N = 15, all bits are False
1501 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1502 1015
1504 # N = 16, all bits are False
1505 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1506 1240
1508 # N = 17, all bits are True
1509 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1510 1496
1512 # N = 18, all bits are True
1513 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1514 1785
1516 # N = 19, all bits are False
1517 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1518 ... 0]))
1519 2109
1521 # N = 20, all bits are False
1522 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1523 ... 0, 0]))
1524 2470
1526 # N = 21, all bits are True
1527 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1528 ... 1, 1, 1]))
1529 2870
1531 # N = 22, all bits are True
1532 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1533 ... 1, 1, 1, 1]))
1534 3311
1536 # N = 23, all bits are True
1537 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1538 ... 1, 1, 1, 1, 1]))
1539 3795
1541 # N = 24, all bits are False
1542 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1543 ... 0, 0, 0, 0, 0, 0]))
1544 4324
1546 # N = 25, all bits are True
1547 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1548 ... 1, 1, 1, 1, 1, 1, 1]))
1549 4900
1551 # N = 26, all bits are True
1552 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1553 ... 1, 1, 1, 1, 1, 1, 1, 1]))
1554 5525
1556 # N = 27, all bits are True
1557 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1558 ... 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1559 6201
1561 # N = 28, all bits are True
1562 >>> labs(np.array([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]))
1564 6930
1566 # N = 29, all bits are False
1567 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1568 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1569 7714
1571 # N = 30, all bits are False
1572 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1573 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1574 8555
1576 # N = 31, all bits are True
1577 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1578 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1579 9455
1581 # N = 32, all bits are False
1582 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1583 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1584 10416
1586 # N = 33, all bits are True
1587 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1588 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1589 11440
1591 # N = 34, all bits are False
1592 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1593 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1594 12529
1596 # N = 35, all bits are False
1597 >>> labs(np.array([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]))
1599 13685
1601 # N = 36, all bits are True
1602 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1603 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1604 14910
1606 # N = 37, all bits are False
1607 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1608 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1609 16206
1611 # N = 38, all bits are True
1612 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1613 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1614 17575
1616 # N = 39, all bits are True
1617 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1618 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1619 19019
1621 # N = 40, all bits are False
1622 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1623 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1624 ... 0]))
1625 20540
1627 # N = 41, all bits are False
1628 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1629 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1630 ... 0, 0]))
1631 22140
1633 # N = 42, all bits are True
1634 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1635 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1636 ... 1, 1, 1]))
1637 23821
1639 # N = 43, all bits are True
1640 >>> labs(np.array([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, 1, 1, 1, 1, 1, 1, 1, 1,
1642 ... 1, 1, 1, 1]))
1643 25585
1645 # N = 44, all bits are False
1646 >>> labs(np.array([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]))
1649 27434
1651 # N = 45, all bits are False
1652 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1653 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1654 ... 0, 0, 0, 0, 0, 0]))
1655 29370
1657 # N = 46, all bits are True
1658 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1659 ... 1, 1, 1, 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]))
1661 31395
1663 # N = 47, all bits are True
1664 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1665 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1666 ... 1, 1, 1, 1, 1, 1, 1, 1]))
1667 33511
1669 # N = 48, all bits are True
1670 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1671 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1672 ... 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1673 35720
1675 # N = 49, all bits are False
1676 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1677 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1678 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1679 38024
1681 # N = 50, all bits are False
1682 >>> labs(np.array([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, 0, 0,
1684 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1685 40425
1687 # N = 51, all bits are True
1688 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1689 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1690 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1691 42925
1693 # N = 52, 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]))
1697 45526
1699 # N = 53, all bits are True
1700 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1701 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1702 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1703 48230
1705 # N = 54, all bits are True
1706 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1707 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1708 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1709 51039
1711 # N = 55, all bits are True
1712 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1713 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1714 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1715 53955
1717 # N = 56, all bits are False
1718 >>> labs(np.array([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]))
1721 56980
1723 # N = 57, all bits are False
1724 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1725 ... 0, 0, 0, 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]))
1727 60116
1729 # N = 58, all bits are True
1730 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1731 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1732 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1733 63365
1735 # N = 59, all bits are True
1736 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1737 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1738 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1739 66729
1741 # N = 60, all bits are True
1742 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1743 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1744 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1745 70210
1747 # N = 61, all bits are False
1748 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1749 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1750 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1751 ... 0]))
1752 73810
1754 # N = 62, all bits are True
1755 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1756 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1757 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1758 ... 1, 1]))
1759 77531
1761 # N = 63, all bits are True
1762 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1763 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1764 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1765 ... 1, 1, 1]))
1766 81375
1768 # N = 64, all bits are True
1769 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1770 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1771 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1772 ... 1, 1, 1, 1]))
1773 85344
1775 # N = 65, all bits are True
1776 >>> labs(np.array([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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1778 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1779 ... 1, 1, 1, 1, 1]))
1780 89440
1782 # N = 66, all bits are True
1783 >>> labs(np.array([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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1786 ... 1, 1, 1, 1, 1, 1]))
1787 93665
1789 # N = 67, all bits are False
1790 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1791 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1792 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1793 ... 0, 0, 0, 0, 0, 0, 0]))
1794 98021
1796 # N = 68, all bits are False
1797 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1798 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1799 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1800 ... 0, 0, 0, 0, 0, 0, 0, 0]))
1801 102510
1803 # N = 69, all bits are False
1804 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1805 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1806 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1807 ... 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1808 107134
1810 # N = 70, all bits are False
1811 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1812 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1813 ... 0, 0, 0, 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]))
1815 111895
1817 # N = 71, all bits are False
1818 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1819 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1820 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1821 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1822 116795
1824 # N = 72, all bits are False
1825 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1826 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1827 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1828 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1829 121836
1831 # N = 73, all bits are True
1832 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1833 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1834 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1835 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1836 127020
1838 # N = 74, all bits are False
1839 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1840 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1841 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1842 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1843 132349
1845 # N = 75, all bits are True
1846 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1847 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1848 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1849 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1850 137825
1852 # N = 76, all bits are True
1853 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1854 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1855 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1856 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1857 143450
1859 # N = 77, all bits are False
1860 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1861 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1862 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1863 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1864 149226
1866 # N = 78, all bits are False
1867 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1868 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1869 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1870 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1871 155155
1873 # N = 79, all bits are False
1874 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1875 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1876 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1877 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1878 161239
1880 # N = 80, all bits are False
1881 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1882 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1883 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1884 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1885 167480
1887 # N = 81, all bits are True
1888 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1889 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1890 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1891 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1892 173880
1894 # N = 82, all bits are False
1895 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1896 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1897 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1898 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1899 ... 0]))
1900 180441
1902 # N = 83, all bits are False
1903 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1904 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1905 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1906 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1907 ... 0, 0]))
1908 187165
1910 # N = 84, all bits are False
1911 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1912 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1913 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1914 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1915 ... 0, 0, 0]))
1916 194054
1918 # N = 85, all bits are False
1919 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1920 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1921 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1922 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1923 ... 0, 0, 0, 0]))
1924 201110
1926 # N = 86, all bits are True
1927 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1928 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1929 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1930 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1931 ... 1, 1, 1, 1, 1]))
1932 208335
1934 # N = 87, all bits are False
1935 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1936 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1937 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1938 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1939 ... 0, 0, 0, 0, 0, 0]))
1940 215731
1942 # N = 88, all bits are True
1943 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1944 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1945 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1946 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1947 ... 1, 1, 1, 1, 1, 1, 1]))
1948 223300
1950 # N = 89, all bits are False
1951 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1952 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1953 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1954 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1955 ... 0, 0, 0, 0, 0, 0, 0, 0]))
1956 231044
1958 # N = 90, all bits are False
1959 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1960 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1961 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1962 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1963 ... 0, 0, 0, 0, 0, 0, 0, 0, 0]))
1964 238965
1966 # N = 91, all bits are True
1967 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1968 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1969 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1970 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1971 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1972 247065
1974 # N = 92, all bits are True
1975 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1976 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1977 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1978 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1979 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1980 255346
1982 # N = 93, all bits are True
1983 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1984 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1985 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1986 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1987 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1988 263810
1990 # N = 94, all bits are True
1991 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1992 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1993 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1994 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1995 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
1996 272459
1998 # N = 95, all bits are True
1999 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2000 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2001 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2002 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2003 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
2004 281295
2006 # N = 96, all bits are False
2007 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2008 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2009 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2010 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2011 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
2012 290320
2014 # N = 97, all bits are False
2015 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2016 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2017 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2018 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2019 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
2020 299536
2022 # N = 98, all bits are False
2023 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2024 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2025 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2026 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2027 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]))
2028 308945
2030 # N = 99, all bits are True
2031 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2032 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2033 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2034 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2035 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]))
2036 318549
2037 """
2038 n: Final[int] = len(x) # Get the length of the bit string.
2039 result: int = 0
2040 for k in range(1, n):
2041 sqr: int = 0
2042 for i in range(n - k):
2043 sqr += 1 if x[i] == x[i + k] else -1
2044 result += sqr * sqr
2045 return result
2048def energy_to_merit(n: int, energy: int) -> int | float:
2049 """
2050 Convert an energy value to a merit factor.
2052 :param n: the length of the bit sequence
2053 :param energy: the integer energy factor, computed based on :func:`labs`.
2054 :returns: a merit factor
2056 >>> try:
2057 ... energy_to_merit(0, 1)
2058 ... except ValueError as ve:
2059 ... print(ve)
2060 n=0 is invalid, must be in 3..1000000000.
2062 >>> try:
2063 ... energy_to_merit(4, 0)
2064 ... except ValueError as ve:
2065 ... print(ve)
2066 energy=0 is invalid, must be in 1..1000000000.
2068 >>> energy_to_merit(3, 1)
2069 4.5
2070 >>> energy_to_merit(4, 2)
2071 4
2072 >>> energy_to_merit(5, 2)
2073 6.25
2074 >>> print(f"{energy_to_merit(6, 7):.4}")
2075 2.571
2076 >>> print(f"{energy_to_merit(7, 3):.4}")
2077 8.167
2078 >>> energy_to_merit(8, 8)
2079 4
2080 >>> print(f"{energy_to_merit(9, 12):.4}")
2081 3.375
2082 >>> print(f"{energy_to_merit(10, 13):.4}")
2083 3.846
2084 >>> print(f"{energy_to_merit(11, 5):.4}")
2085 12.1
2086 >>> print(f"{energy_to_merit(12, 10):.4}")
2087 7.2
2088 >>> print(f"{energy_to_merit(13, 6):.5}")
2089 14.083
2090 >>> print(f"{energy_to_merit(14, 19):.4}")
2091 5.158
2092 >>> print(f"{energy_to_merit(15, 15):.4}")
2093 7.5
2094 >>> print(f"{energy_to_merit(16, 24):.4}")
2095 5.333
2096 >>> print(f"{energy_to_merit(17, 32):.4}")
2097 4.516
2098 >>> print(f"{energy_to_merit(18, 25):.4}")
2099 6.48
2100 >>> print(f"{energy_to_merit(47, 135):.4}")
2101 8.181
2102 >>> print(f"{energy_to_merit(66, 257):.4}")
2103 8.475
2104 >>> print(f"{energy_to_merit(19, 33):.4}")
2105 5.47
2106 >>> print(f"{energy_to_merit(119, 835):.4}")
2107 8.48
2108 >>> print(f"{energy_to_merit(401, 11888):.5}")
2109 6.7632
2110 """
2111 n = check_int_range(n, "n", 3)
2112 energy = check_int_range(energy, "energy", 1)
2113 return try_int_div(n * n, energy + energy)
2116def merit_to_energy(n: int, merit: int | float) -> int:
2117 """
2118 Convert a merit factor back to an energy.
2120 :param n: the energy
2121 :param merit: the merit factor
2122 :returns: the energy
2124 >>> try:
2125 ... merit_to_energy(0, 1)
2126 ... except ValueError as ve:
2127 ... print(ve)
2128 n=0 is invalid, must be in 3..1000000000.
2130 >>> try:
2131 ... merit_to_energy(3, 0)
2132 ... except ValueError as ve:
2133 ... print(ve)
2134 merit factor cannot be 0.
2136 >>> try:
2137 ... merit_to_energy(3, "x")
2138 ... except TypeError as te:
2139 ... print(str(te)[:50])
2140 merit should be an instance of any in {float, int}
2142 >>> merit_to_energy(3, 4.5)
2143 1
2144 >>> merit_to_energy(4, 4)
2145 2
2146 >>> merit_to_energy(5, 6.25)
2147 2
2148 >>> merit_to_energy(6, 2.571)
2149 7
2150 >>> merit_to_energy(7, 8.167)
2151 3
2152 >>> merit_to_energy(8, 4)
2153 8
2154 >>> merit_to_energy(9, 3.375)
2155 12
2156 >>> merit_to_energy(10, 3.846)
2157 13
2158 >>> merit_to_energy(11, 12.100)
2159 5
2160 >>> merit_to_energy(12, 7.200)
2161 10
2162 >>> merit_to_energy(13, 14.083)
2163 6
2164 >>> merit_to_energy(14, 5.158)
2165 19
2166 >>> merit_to_energy(15, 7.5)
2167 15
2168 >>> merit_to_energy(16, 5.333)
2169 24
2170 >>> merit_to_energy(17, 4.516)
2171 32
2172 >>> merit_to_energy(18, 6.48)
2173 25
2174 >>> merit_to_energy(47, 8.181)
2175 135
2176 >>> merit_to_energy(66, 8.475)
2177 257
2178 >>> merit_to_energy(19, 5.47)
2179 33
2180 >>> merit_to_energy(119, 8.48)
2181 835
2182 >>> merit_to_energy(401, 6.7632)
2183 11888
2184 >>> merit_to_energy(181, 8.9316)
2185 1834
2186 >>> merit_to_energy(201, 8.4876)
2187 2380
2188 >>> merit_to_energy(215, 8.5888)
2189 2691
2190 >>> merit_to_energy(221, 8.8544)
2191 2758
2192 >>> merit_to_energy(241, 8.0668)
2193 3600
2194 >>> merit_to_energy(249, 8.1323)
2195 3812
2196 >>> merit_to_energy(259, 8.0918)
2197 4145
2198 >>> merit_to_energy(261, 7.8517)
2199 4338
2200 >>> merit_to_energy(271, 7.5386)
2201 4871
2202 >>> merit_to_energy(281, 7.5058)
2203 5260
2204 >>> merit_to_energy(283, 7.5088)
2205 5333
2206 >>> merit_to_energy(301, 7.4827)
2207 6054
2208 >>> merit_to_energy(303, 7.2462)
2209 6335
2210 >>> merit_to_energy(341, 6.9397)
2211 8378
2212 >>> merit_to_energy(381, 7.0893)
2213 10238
2214 >>> merit_to_energy(401, 6.7632)
2215 11888
2216 """
2217 n = check_int_range(n, "n", 3)
2218 if not isinstance(merit, int | float):
2219 raise type_error(merit, "merit", (int, float))
2220 if (not isfinite(merit)) or (merit <= 0):
2221 raise ValueError(f"merit factor cannot be {merit}.")
2222 return int(0.5 + ((n * n) / merit) / 2)
2225#: The lower bounds of the LABS problem, i.e., the objective values of the
2226#: known global optima also used in the unit tests of the :func:`labs`
2227#: function. We use the data from
2228#:
2229#: Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences.
2230#: arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016
2231#: https://arxiv.org/pdf/1512.02475
2232_LBS: Final[dict[int, int]] = {
2233 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10, 13: 6,
2234 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26, 22: 39,
2235 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62, 30: 59, 31: 67,
2236 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86, 38: 87, 39: 99, 40: 108,
2237 41: 108, 42: 101, 43: 109, 44: 122, 45: 118, 46: 131, 47: 135, 48: 140,
2238 49: 136, 50: 153, 51: 153, 52: 166, 53: 170, 54: 175, 55: 171, 56: 192,
2239 57: 188, 58: 197, 59: 205, 60: 218, 61: 226, 62: 235, 63: 207, 64: 208,
2240 65: 240, 66: 257}
2243#: the internal set of related work solutions
2244__RELATED_WORKS: Final[dict[tuple[str, str], dict[int, int]]] = {
2245 ("M1996ESFLABS",
2246 ("Stephan Mertens. Exhaustive search for low-autocorrelation binary "
2247 "sequences. Journal of Physics A: Mathematical and General. "
2248 "29(18):L473. September 1996. doi:10.1088/0305-4470/29/18/00.")): {
2249 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10,
2250 13: 6, 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26,
2251 21: 26, 22: 39, 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50,
2252 29: 62, 30: 59, 31: 67, 32: 64, 33: 64, 34: 65, 35: 73, 36: 82,
2253 37: 86, 38: 87, 39: 99, 40: 108, 41: 108, 42: 101, 43: 109, 44: 122,
2254 45: 118, 46: 131, 47: 135, 48: 140,
2255 },
2256 ("MZB1998ESFLABS",
2257 ("Burkhard Militzer, Michele Zamparelli, and Dieter Beule. Evolutionary "
2258 "Search for Low Autocorrelated Binary Sequences. IEEE Transactions on "
2259 "Evolutionary Computation 2(1):34-39, April 1998. "
2260 "doi:10.1109/4235.728212.")): {
2261 81: merit_to_energy(81, 8.2), 101: merit_to_energy(101, 8.82),
2262 103: merit_to_energy(103, 9.56), 105: merit_to_energy(105, 8.78),
2263 107: merit_to_energy(107, 8.46), 109: merit_to_energy(109, 8.97),
2264 111: merit_to_energy(111, 8.97), 113: merit_to_energy(113, 8.49),
2265 115: merit_to_energy(115, 8.88), 117: merit_to_energy(117, 8.71),
2266 119: merit_to_energy(119, 8.02), 121: merit_to_energy(121, 8.67),
2267 141: merit_to_energy(141, 8.83), 161: merit_to_energy(161, 8.39),
2268 181: merit_to_energy(181, 7.75), 201: merit_to_energy(201, 7.46),
2269 },
2270 ("KD2004MFR",
2271 ("Joshua Knauer and Marcos Dantus. Merit Factor Records, October 8, "
2272 "2004. https://www2.chemistry.msu.edu/faculty/"
2273 "dantus/merit_factor_records.htm.")): {
2274 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10, 13: 6,
2275 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26,
2276 22: 39, 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62,
2277 30: 59, 31: 67, 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86,
2278 38: 87, 39: 99, 40: 108, 41: 108, 42: 101, 43: 109, 44: 122,
2279 45: 118, 46: 131, 47: 135, 48: 140, 49: 136, 50: 153, 51: 153,
2280 52: 166, 53: 170, 54: 175, 55: 171, 56: 192, 57: 188, 58: 197,
2281 59: 205, 60: 218, 61: 226, 62: 235, 63: 207, 64: 208, 65: 240,
2282 66: 257, 67: 241, 68: 250, 69: 274, 70: 295, 71: 275, 72: 300,
2283 73: 308, 74: 341, 75: 329, 76: 334, 77: 358, 78: 347, 79: 339,
2284 80: 352, 81: 372, 82: 377, 83: 377, 84: 430, 85: 414, 86: 439,
2285 87: 431, 88: 448, 89: 432, 90: 453, 91: 477, 92: 498, 93: 486,
2286 94: 499, 95: 479, 96: 520, 97: 536, 98: 545, 99: 577, 100: 578,
2287 101: 578, 102: 567, 103: 555, 104: 612, 105: 620, 106: 701,
2288 107: 677, 108: 702, 109: 662, 110: 723, 111: 687, 112: 788,
2289 113: 752, 114: 817, 115: 745, 116: 814, 117: 786, 118: 847,
2290 119: 835, 120: 872, 121: 844, 122: 885, 123: 893, 124: 922,
2291 125: 846, 126: 875, 127: 887, 128: 932, 129: 920, 130: 945,
2292 131: 913, 132: 1014, 133: 1010, 134: 1063, 135: 1027, 136: 1076,
2293 137: 1052, 138: 1117, 139: 1133, 140: 1178, 141: 1126, 142: 1235,
2294 143: 1191, 144: 1248, 145: 1208, 146: 1273, 147: 1265, 148: 1298,
2295 149: 1218, 150: 1279, 151: 1275, 152: 1388, 153: 1340, 154: 1429,
2296 155: 1437, 156: 1438, 157: 1366, 158: 1467, 159: 1439, 160: 1504,
2297 161: 1520, 162: 1585, 163: 1529, 164: 1594, 165: 1474, 166: 1591,
2298 167: 1563, 168: 1620, 169: 1532, 170: 1693, 171: 1677, 172: 1674,
2299 173: 1606, 174: 1699, 175: 1719, 176: 1780, 177: 1808, 178: 1929,
2300 179: 1897, 180: 1898, 181: 1898, 182: 2015, 183: 1995, 184: 2040,
2301 185: 2028, 186: 2069, 187: 1973, 188: 1970, 189: 1966, 190: 2123,
2302 191: 2191, 192: 2304, 193: 2272, 194: 2337, 195: 2281, 196: 2374,
2303 197: 2218, 198: 2343, 199: 2275, 200: 2412, 201: 2460, 202: 2541,
2304 203: 2421, 204: 2542, 205: 2662, 206: 2723, 207: 2695, 208: 2720,
2305 209: 2664, 210: 2761, 211: 2801, 212: 2878, 213: 2698, 214: 2799,
2306 215: 2831, 216: 2968, 217: 3036, 218: 3173, 219: 3189, 220: 3322,
2307 221: 3206, 222: 3211, 223: 3215, 224: 3392, 225: 3416, 226: 3569,
2308 227: 3409, 228: 3566, 229: 3474, 230: 3687, 231: 3587, 232: 3752,
2309 233: 3692, 234: 3821, 235: 3757, 236: 3674, 237: 3590, 238: 3651,
2310 239: 3711, 240: 3948, 241: 3992, 242: 4073, 243: 4073, 244: 4150,
2311 245: 4098, 246: 4223, 247: 4291, 249: 4280, 250: 4341, 251: 4165,
2312 252: 4386, 253: 4382, 254: 4587, 255: 4463, 256: 4584, 257: 4472,
2313 258: 4705, 259: 4705, 261: 4790, 262: 4887, 263: 4803, 264: 4892,
2314 265: 4948, 267: 5037, 268: 5130, 269: 4950, 270: 5203, 271: 5243,
2315 281: 5564, 283: 5697, 285: 5790, 303: 6455, 304: 6568,
2316 },
2317 ("GCF2007AMAFTLABSP",
2318 ("José E. Gallardo, Carlos Cotta, and Antonio J. Fernández. A Memetic "
2319 "Algorithm for the Low Autocorrelation Binary Sequence Problem. 9th "
2320 "Annual Conference on Genetic and Evolutionary Computation "
2321 "(GECCO'2007), July 7-11, 2007, London, England, UK, pages 1226-1233. "
2322 "doi:10.1145/1276958.1277195.")): {
2323 39: 99, 40: 108, 41: 108, 42: 101, 43: 109, 44: 122, 45: 118, 46: 131,
2324 47: 135, 48: 140, 49: 136, 50: 153, 51: 153, 52: 166, 53: 170,
2325 54: 175, 55: 171, 56: 192, 57: 188, 58: 197, 59: 205, 60: 218,
2326 },
2327 ("HYH2008ESLSFTLABSP",
2328 ("Steven Halim, Roland H. C. Yap, and Felix Halim. Engineering "
2329 "Stochastic Local Search for the Low Autocorrelation Binary "
2330 "Sequence Problem. 14th International Conference on Principles and "
2331 "Practice of Constraint Programming (CP'2008), September 14-18, 2008, "
2332 "Sydney, Australia, pages 640-645, Lecture Notes in Computer Science "
2333 "(LNPSE), volume 5202. Heidelberg/Berlin: Springer. ISBN: "
2334 "978-3-540-85957-4. doi:10.1007/978-3-540-85958-1_57")): {
2335 61: 226, 62: 235, 63: 207, 64: 208, 65: 240, 66: 265, 67: 241,
2336 68: 250, 69: 274, 70: 295, 71: 275, 72: 300, 73: 308, 74: 349,
2337 75: 341, 76: 338, 77: 366,
2338 },
2339 ("P2013IBABFLABS",
2340 ("S. D. Prestwich. Improved Branch-and-Bound for Low Autocorrelation "
2341 "Binary Sequences. arXiv:1305.6187v2 [cs.AI] 23 Jul 2013. "
2342 "https://arxiv.org/pdf/1305.6187.")): {
2343 75: merit_to_energy(75, 8.25), 77: merit_to_energy(77, 8.28),
2344 79: merit_to_energy(79, 7.67), 81: merit_to_energy(81, 8.2),
2345 83: merit_to_energy(83, 9.14), 85: merit_to_energy(85, 8.17),
2346 87: merit_to_energy(87, 8.39), 89: merit_to_energy(89, 8.18),
2347 },
2348 ("MD2015NESFLLABS",
2349 ("Wai Ho Mow and Ke-Lin Du. New Evolutionary Search for Long Low "
2350 "Autocorrelation Binary Sequences. IEEE Transactions on Aerospace and "
2351 "Electronic Systems. 51(1):290-303. January 2015. "
2352 "doi:10.1109/TAES.2014.130518")): {
2353 106: merit_to_energy(106, 5.0295), 107: merit_to_energy(107, 5.1805),
2354 108: merit_to_energy(108, 4.6957), 109: merit_to_energy(109, 5.0429),
2355 110: merit_to_energy(110, 4.9631), 111: merit_to_energy(111, 5.626),
2356 112: merit_to_energy(112, 5.3153), 113: merit_to_energy(113, 4.8514),
2357 114: merit_to_energy(114, 4.4114), 115: merit_to_energy(115, 4.8729),
2358 116: merit_to_energy(116, 4.3974), 117: merit_to_energy(117, 4.2832),
2359 118: merit_to_energy(118, 4.5355), 119: merit_to_energy(119, 4.7235),
2360 120: merit_to_energy(120, 5.8632), 121: merit_to_energy(121, 4.4421),
2361 122: merit_to_energy(122, 4.6368), 123: merit_to_energy(123, 4.6897),
2362 124: merit_to_energy(124, 4.9987), 125: merit_to_energy(125, 4.8646),
2363 126: merit_to_energy(126, 5.0272), 127: merit_to_energy(127, 4.8965),
2364 128: merit_to_energy(128, 4.8075), 129: merit_to_energy(129, 4.6328),
2365 130: merit_to_energy(130, 4.8872), 131: merit_to_energy(131, 4.9627),
2366 132: merit_to_energy(132, 4.343), 133: merit_to_energy(133, 4.6995),
2367 134: merit_to_energy(134, 4.438), 135: merit_to_energy(135, 4.5134),
2368 136: merit_to_energy(136, 4.472), 137: merit_to_energy(137, 4.2273),
2369 138: merit_to_energy(138, 4.3341), 139: merit_to_energy(139, 4.6602),
2370 140: merit_to_energy(140, 4.6009), 141: merit_to_energy(141, 4.418),
2371 142: merit_to_energy(142, 4.4789), 143: merit_to_energy(143, 4.5584),
2372 144: merit_to_energy(144, 4.2492), 145: merit_to_energy(145, 4.4696),
2373 146: merit_to_energy(146, 4.6239), 147: merit_to_energy(147, 4.3409),
2374 148: merit_to_energy(148, 4.3703), 149: merit_to_energy(149, 4.5531),
2375 150: merit_to_energy(150, 4.7209), 151: merit_to_energy(151, 4.3663),
2376 152: merit_to_energy(152, 5.2509), 153: merit_to_energy(153, 4.8206),
2377 154: merit_to_energy(154, 4.2517), 155: merit_to_energy(155, 4.2704),
2378 156: merit_to_energy(156, 4.5986), 157: merit_to_energy(157, 4.6368),
2379 158: merit_to_energy(158, 4.9473), 159: merit_to_energy(159, 4.7396),
2380 160: merit_to_energy(160, 4.878), 161: merit_to_energy(161, 4.7789),
2381 162: merit_to_energy(162, 4.5674), 163: merit_to_energy(163, 4.676),
2382 164: merit_to_energy(164, 5.0367), 165: merit_to_energy(165, 4.2834),
2383 166: merit_to_energy(166, 4.5337), 167: merit_to_energy(167, 4.719),
2384 168: merit_to_energy(168, 4.6057), 169: merit_to_energy(169, 4.7099),
2385 170: merit_to_energy(170, 4.6598), 171: merit_to_energy(171, 4.4077),
2386 172: merit_to_energy(172, 4.7685), 173: merit_to_energy(173, 4.7932),
2387 174: merit_to_energy(174, 4.6564), 175: merit_to_energy(175, 4.2832),
2388 176: merit_to_energy(176, 4.2549), 177: merit_to_energy(177, 4.3416),
2389 178: merit_to_energy(178, 4.1331), 179: merit_to_energy(179, 4.3287),
2390 180: merit_to_energy(180, 4.3385), 181: merit_to_energy(181, 4.5832),
2391 182: merit_to_energy(182, 4.2347), 183: merit_to_energy(183, 4.4879),
2392 184: merit_to_energy(184, 3.9331), 185: merit_to_energy(185, 4.5464),
2393 186: merit_to_energy(186, 4.6239), 187: merit_to_energy(187, 4.5285),
2394 188: merit_to_energy(188, 4.7176), 189: merit_to_energy(189, 4.809),
2395 190: merit_to_energy(190, 4.4645), 191: merit_to_energy(191, 5.0125),
2396 192: merit_to_energy(192, 4.795), 193: merit_to_energy(193, 4.5205),
2397 194: merit_to_energy(194, 4.4288), 195: merit_to_energy(195, 4.2316),
2398 196: merit_to_energy(196, 4.3048), 197: merit_to_energy(197, 4.6267),
2399 198: merit_to_energy(198, 4.5052), 199: merit_to_energy(199, 4.4889),
2400 200: merit_to_energy(200, 4.5496), 201: merit_to_energy(201, 4.008),
2401 202: merit_to_energy(202, 4.3033), 203: merit_to_energy(203, 4.3033),
2402 204: merit_to_energy(204, 4.231), 205: merit_to_energy(205, 4.705),
2403 206: merit_to_energy(206, 4.1288), 207: merit_to_energy(207, 4.1886),
2404 208: merit_to_energy(208, 4.3126), 209: merit_to_energy(209, 4.3542),
2405 210: merit_to_energy(210, 4.6392), 211: merit_to_energy(211, 4.2899),
2406 212: merit_to_energy(212, 4.3567), 213: merit_to_energy(213, 4.517),
2407 214: merit_to_energy(214, 4.4872), 215: merit_to_energy(215, 4.3584),
2408 216: merit_to_energy(216, 4.7725), 217: merit_to_energy(217, 4.1364),
2409 218: merit_to_energy(218, 4.5373), 219: merit_to_energy(219, 4.7798),
2410 220: merit_to_energy(220, 4.6414), 221: merit_to_energy(221, 4.4096),
2411 222: merit_to_energy(222, 4.5273), 223: merit_to_energy(223, 4.5216),
2412 224: merit_to_energy(224, 4.5253), 225: merit_to_energy(225, 4.6462),
2413 226: merit_to_energy(226, 4.599), 227: merit_to_energy(227, 4.5641),
2414 228: merit_to_energy(228, 4.6365), 229: merit_to_energy(229, 4.5664),
2415 230: merit_to_energy(230, 4.5299), 231: merit_to_energy(231, 4.5819),
2416 232: merit_to_energy(232, 4.4556), 233: merit_to_energy(233, 4.5423),
2417 234: merit_to_energy(234, 4.3122), 235: merit_to_energy(235, 4.4529),
2418 236: merit_to_energy(236, 4.3418), 237: merit_to_energy(237, 4.3488),
2419 238: merit_to_energy(238, 4.6992), 239: merit_to_energy(239, 4.5457),
2420 240: merit_to_energy(240, 4.6512), 241: merit_to_energy(241, 4.3921),
2421 242: merit_to_energy(242, 4.3464), 243: merit_to_energy(243, 4.6415),
2422 244: merit_to_energy(244, 4.2224), 245: merit_to_energy(245, 4.3994),
2423 246: merit_to_energy(246, 4.498), 247: merit_to_energy(247, 4.7024),
2424 248: merit_to_energy(248, 4.4414), 249: merit_to_energy(249, 4.6491),
2425 250: merit_to_energy(250, 4.4816), 251: merit_to_energy(251, 4.7291),
2426 252: merit_to_energy(252, 4.002), 253: merit_to_energy(253, 4.7163),
2427 254: merit_to_energy(254, 4.544), 255: merit_to_energy(255, 4.5902),
2428 256: merit_to_energy(256, 4.8075), 257: merit_to_energy(257, 4.8338),
2429 258: merit_to_energy(258, 4.3421), 259: merit_to_energy(259, 4.4596),
2430 260: merit_to_energy(260, 4.6492), 261: merit_to_energy(261, 4.2672),
2431 262: merit_to_energy(262, 4.4557), 263: merit_to_energy(263, 4.3344),
2432 264: merit_to_energy(264, 4.6814), 265: merit_to_energy(265, 4.6007),
2433 266: merit_to_energy(266, 4.3118), 267: merit_to_energy(267, 4.2652),
2434 268: merit_to_energy(268, 4.5912), 269: merit_to_energy(269, 4.5903),
2435 270: merit_to_energy(270, 4.3836), 271: merit_to_energy(271, 4.5028),
2436 272: merit_to_energy(272, 4.8267), 273: merit_to_energy(273, 4.4617),
2437 274: merit_to_energy(274, 4.4683), 275: merit_to_energy(275, 4.3881),
2438 276: merit_to_energy(276, 4.5032), 277: merit_to_energy(277, 4.4352),
2439 278: merit_to_energy(278, 4.579), 279: merit_to_energy(279, 4.3192),
2440 280: merit_to_energy(280, 4.2535), 281: merit_to_energy(281, 4.2325),
2441 282: merit_to_energy(282, 4.4273), 283: merit_to_energy(283, 4.4747),
2442 284: merit_to_energy(284, 4.4307), 285: merit_to_energy(285, 4.3735),
2443 286: merit_to_energy(286, 4.383), 287: merit_to_energy(287, 4.1706),
2444 288: merit_to_energy(288, 4.3858), 289: merit_to_energy(289, 4.2981),
2445 290: merit_to_energy(290, 4.5622), 291: merit_to_energy(291, 4.5621),
2446 292: merit_to_energy(292, 4.641), 293: merit_to_energy(293, 4.7599),
2447 294: merit_to_energy(294, 4.3961), 295: merit_to_energy(295, 4.3992),
2448 296: merit_to_energy(296, 4.3203), 297: merit_to_energy(297, 4.2953),
2449 298: merit_to_energy(298, 4.5771), 299: merit_to_energy(299, 4.4166),
2450 300: merit_to_energy(300, 4.4074), 303: merit_to_energy(303, 4.3507),
2451 304: merit_to_energy(304, 4.0676), 350: merit_to_energy(350, 3.9458),
2452 353: merit_to_energy(353, 4.2075), 400: merit_to_energy(400, 4.3908),
2453 449: merit_to_energy(449, 4.0547), 450: merit_to_energy(450, 4.4235),
2454 500: merit_to_energy(500, 4.3442), 512: merit_to_energy(512, 4.2656),
2455 547: merit_to_energy(547, 4.3408), 550: merit_to_energy(550, 4.0695),
2456 600: merit_to_energy(600, 3.6753), 650: merit_to_energy(650, 3.9239),
2457 653: merit_to_energy(653, 4.2287), 700: merit_to_energy(700, 4.1524),
2458 750: merit_to_energy(750, 3.7603), 751: merit_to_energy(751, 4.1537),
2459 800: merit_to_energy(800, 3.7481), 850: merit_to_energy(850, 3.8096),
2460 853: merit_to_energy(853, 4.0854), 900: merit_to_energy(900, 3.7623),
2461 950: merit_to_energy(950, 4.0438), 953: merit_to_energy(953, 3.8493),
2462 1000: merit_to_energy(1000, 3.7873),
2463 1019: merit_to_energy(1019, 4.139),
2464 1024: merit_to_energy(1024, 3.9683),
2465 1500: merit_to_energy(1500, 3.7316),
2466 2000: merit_to_energy(2000, 3.6193),
2467 2048: merit_to_energy(2048, 3.5387),
2468 2197: merit_to_energy(2197, 3.6423),
2469 3000: merit_to_energy(3000, 3.3608),
2470 4096: merit_to_energy(4096, 3.4589),
2471 },
2472 ("PM2016LABS",
2473 ("Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary "
2474 "Sequences. Journal of Physics A: Mathematical and Theoretical "
2475 "49(16):165001. March 2016. doi:10.1088/1751-8113/49/16/165001. See "
2476 "also: arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016")): {
2477 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10,
2478 13: 6, 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26,
2479 22: 39, 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62,
2480 30: 59, 31: 67, 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86,
2481 38: 87, 39: 99, 40: 108, 41: 108, 42: 101, 43: 109, 44: 122, 45: 118,
2482 46: 131, 47: 135, 48: 140, 49: 136, 50: 153, 51: 153, 52: 166,
2483 53: 170, 54: 175, 55: 171, 56: 192, 57: 188, 58: 197, 59: 205,
2484 60: 218, 61: 226, 62: 235, 63: 207, 64: 208, 65: 240, 66: 257,
2485 67: 241, 69: 282, 71: 275, 73: 348, 75: 341, 77: 358, 79: 407,
2486 81: 400, 83: 377, 85: 442, 87: 451, 89: 484, 91: 477, 93: 502,
2487 95: 479, 97: 536, 99: 577, 101: 578, 103: 555, 105: 620, 107: 677,
2488 109: 662, 111: 687, 113: 752, 115: 745, 117: 786, 119: 835,
2489 },
2490 ("BBB2016AGAFSASOTLP",
2491 ("Borko Bošković, Franc Brglez, and Janez Brest. A GitHub Archive for "
2492 "Solvers and Solutions of the LABS Problem. File 2016-labs-skew.txt. "
2493 "https://github.com/borkob/git_labs. January 2016.")): {
2494 5: 2, 7: 3, 9: 12, 11: 5, 13: 6, 15: 15, 17: 32, 21: 26, 27: 37,
2495 29: 62, 39: 99, 41: 108, 43: 109, 45: 118, 47: 135, 49: 136, 51: 153,
2496 53: 170, 55: 171, 57: 188, 59: 205, 67: 241, 71: 275, 77: 358,
2497 83: 377, 91: 477, 95: 479, 97: 536, 99: 577, 101: 578, 103: 555,
2498 105: 620, 107: 677, 109: 662, 111: 687, 113: 752, 115: 745, 117: 786,
2499 119: 835, 121: 844, 123: 893, 125: 846, 127: 887, 129: 920, 131: 913,
2500 133: 1010, 135: 1027, 137: 1052, 139: 1133, 141: 1126, 143: 1191,
2501 145: 1208, 147: 1265, 149: 1218, 151: 1275, 153: 1340, 155: 1437,
2502 157: 1366, 159: 1439, 161: 1520, 163: 1529, 165: 1474, 167: 1563,
2503 169: 1532, 171: 1677, 173: 1598, 175: 1687, 177: 1648, 179: 1761,
2504 181: 1834, 183: 1859, 185: 2028, 187: 1973, 189: 1966, 191: 2191,
2505 193: 2272, 195: 2281, 197: 2218, 199: 2275, 201: 2380, 203: 2421,
2506 205: 2662, 207: 2695, 209: 3016, 211: 2801, 213: 2698, 215: 2691,
2507 217: 3036, 219: 3189, 221: 2758, 223: 3215, 225: 3416, 227: 3409,
2508 229: 3474, 231: 3587, 233: 3692, 235: 3757, 237: 3590, 239: 3711,
2509 241: 3600, 243: 4073, 245: 4098, 247: 4291, 249: 3812, 251: 4165,
2510 253: 4382, 255: 4463, 257: 4472, 259: 4145, 261: 4338, 263: 4803,
2511 265: 4948, 267: 5037, 269: 4950, 271: 4871, 281: 5260, 283: 5333,
2512 285: 5790, 301: 6054, 303: 6335, 341: 8378, 381: 10238, 401: 11888,
2513 449: 15456,
2514 },
2515 ("BBB2017LABSOIMFARPTAT",
2516 ("Borko Bošković, Franc Brglez, and Janez Brest. Low-Autocorrelation "
2517 "Binary Sequences: On Improved Merit Factors and Runtime Predictions"
2518 " to Achieve Them. Applied Soft Computing (ASOC) 56:262-285. July 2017."
2519 " doi:10.1016/J.ASOC.2017.02.024. See also arXiv:1406.5301v6 [cs.DS] 6 "
2520 "May 2017. https://arxiv.org/pdf/1406.5301")): {
2521 181: 1834, 201: 2380, 215: 2691, 221: 2758, 241: 3600, 249: 3812,
2522 259: 4145, 261: 4338, 271: 4871, 281: 5260, 283: 5333, 301: 6054,
2523 303: 6335, 341: 8378, 381: 10238, 401: 11888,
2524 107: merit_to_energy(107, 8.4557), 109: merit_to_energy(109, 8.9736),
2525 111: merit_to_energy(111, 8.9672), 113: merit_to_energy(113, 8.49),
2526 115: merit_to_energy(115, 8.8758), 117: merit_to_energy(117, 8.708),
2527 119: merit_to_energy(119, 8.4796), 121: merit_to_energy(121, 8.6736),
2528 141: merit_to_energy(141, 8.8282), 149: merit_to_energy(149, 9.1137),
2529 157: merit_to_energy(157, 9.0223), 161: merit_to_energy(161, 8.5718),
2530 165: merit_to_energy(165, 9.2351), 169: merit_to_energy(169, 9.3215),
2531 173: merit_to_energy(173, 9.3645), 175: merit_to_energy(175, 9.0768),
2532 177: merit_to_energy(177, 9.5052), 179: merit_to_energy(179, 9.0974),
2533 183: merit_to_energy(183, 9.0073), 189: merit_to_energy(189, 9.0847),
2534 },
2535 ("BBB2016AGAFSASOTLP",
2536 ("Borko Bošković, Franc Brglez, and Janez Brest. A GitHub Archive for "
2537 "Solvers and Solutions of the LABS Problem. File 2018-labs-skew.txt. "
2538 "https://github.com/borkob/git_labs. January 2016.")): {
2539 5: 2, 7: 3, 9: 12, 11: 5, 13: 6, 15: 15, 17: 32, 21: 26, 27: 37,
2540 29: 62, 39: 99, 41: 108, 43: 109, 45: 118, 47: 135, 49: 136, 51: 153,
2541 53: 170, 55: 171, 57: 188, 59: 205, 67: 241, 71: 275, 77: 358,
2542 83: 377, 91: 477, 95: 479, 97: 536, 99: 577, 101: 578, 103: 555,
2543 105: 620, 107: 677, 109: 662, 111: 687, 113: 752, 115: 745, 117: 786,
2544 119: 835, 121: 844, 123: 893, 125: 846, 127: 887, 129: 920, 131: 913,
2545 133: 1010, 135: 1027, 137: 1052, 139: 1133, 141: 1126, 143: 1191,
2546 145: 1208, 147: 1265, 149: 1218, 151: 1275, 153: 1340, 155: 1437,
2547 157: 1366, 159: 1439, 161: 1520, 163: 1529, 165: 1474, 167: 1563,
2548 169: 1532, 171: 1669, 173: 1598, 175: 1687, 177: 1648, 179: 1761,
2549 181: 1834, 183: 1859, 185: 1932, 187: 1973, 189: 1966, 191: 1903,
2550 193: 2144, 195: 2105, 197: 2202, 199: 2195, 201: 2220, 203: 2317,
2551 205: 2430, 207: 2351, 209: 2528, 211: 2457, 213: 2378, 215: 2595,
2552 217: 2684, 219: 2733, 221: 2734, 223: 2751, 225: 2808, 227: 3409,
2553 229: 3474, 231: 3587, 233: 3692, 235: 3757, 237: 3590, 239: 3711,
2554 241: 3600, 243: 4073, 245: 4098, 247: 4291, 249: 3812, 251: 4165,
2555 253: 4382, 255: 4463, 257: 4472, 259: 4145, 261: 4338, 263: 4803,
2556 265: 4948, 267: 5037, 269: 4950, 271: 4871, 281: 5260, 283: 5333,
2557 285: 5790, 301: 6054, 303: 6335, 341: 8378, 381: 10238, 401: 11888,
2558 449: 15456,
2559 },
2560 ("BB2018AHAFALABSPWOLAHMF",
2561 ("Borko Bošković and Janez Brest. A Heuristic Algorithm for a Low "
2562 "Autocorrelation Binary Sequence Problem with Odd Length and High "
2563 "Merit Factor. IEEE Access 6:4127-4134. January 2018. "
2564 "doi:10.1109/ACCESS.2018.2789916")): {
2565 191: 1903, 193: 2144, 195: 2105, 197: 2202, 199: 2195, 201: 2220,
2566 203: 2317, 205: 2430, 207: 2351, 209: 2528, 211: 2457, 213: 2378,
2567 215: 2595, 217: 2684, 219: 2733, 221: 2734, 223: 2751, 225: 2808,
2568 },
2569 ("DBN2020EGOLABS",
2570 ("Miroslav Dimitrov, Tsonka Baitcheva, and Nikolay Nikolov. Efficient "
2571 "Generation of Low Autocorrelation Binary Sequences. IEEE Signal "
2572 "Processing Letters, 27:341-345, 2020. doi:10.1109/LSP.2020.2972127")): {
2573 106: merit_to_energy(106, 5.03), 107: merit_to_energy(107, 4.497),
2574 108: merit_to_energy(108, 5.533), 109: merit_to_energy(109, 5.636),
2575 110: merit_to_energy(110, 5.984), 111: merit_to_energy(111, 5.138),
2576 112: merit_to_energy(112, 4.931), 113: merit_to_energy(113, 4.409),
2577 114: merit_to_energy(114, 5.375), 115: merit_to_energy(115, 3.952),
2578 116: merit_to_energy(116, 3.925), 117: merit_to_energy(117, 4.108),
2579 118: merit_to_energy(118, 3.976), 119: merit_to_energy(119, 4.331),
2580 120: merit_to_energy(120, 4.639), 121: merit_to_energy(121, 4.141),
2581 122: merit_to_energy(122, 3.999), 123: merit_to_energy(123, 3.736),
2582 124: merit_to_energy(124, 4.884), 125: merit_to_energy(125, 4.134),
2583 126: merit_to_energy(126, 4.544), 127: merit_to_energy(127, 4.815),
2584 128: merit_to_energy(128, 4.911), 129: merit_to_energy(129, 3.955),
2585 130: merit_to_energy(130, 4.692), 131: merit_to_energy(131, 4.403),
2586 132: merit_to_energy(132, 4.431), 133: merit_to_energy(133, 4.323),
2587 134: merit_to_energy(134, 3.742), 135: merit_to_energy(135, 3.876),
2588 136: merit_to_energy(136, 3.925), 137: merit_to_energy(137, 4.066),
2589 138: merit_to_energy(138, 3.771), 139: merit_to_energy(139, 3.808),
2590 140: merit_to_energy(140, 4.026), 141: merit_to_energy(141, 3.923),
2591 142: merit_to_energy(142, 3.724), 143: merit_to_energy(143, 3.94),
2592 144: merit_to_energy(144, 3.886), 145: merit_to_energy(145, 4.477),
2593 146: merit_to_energy(146, 3.975), 147: merit_to_energy(147, 4.122),
2594 148: merit_to_energy(148, 5.219), 149: merit_to_energy(149, 3.698),
2595 150: merit_to_energy(150, 4.329), 151: merit_to_energy(151, 3.999),
2596 152: merit_to_energy(152, 4.068), 153: merit_to_energy(153, 3.917),
2597 154: merit_to_energy(154, 3.864), 155: merit_to_energy(155, 3.987),
2598 156: merit_to_energy(156, 4.713), 157: merit_to_energy(157, 4.241),
2599 158: merit_to_energy(158, 4.479), 159: merit_to_energy(159, 4.366),
2600 160: merit_to_energy(160, 3.765), 161: merit_to_energy(161, 4.096),
2601 162: merit_to_energy(162, 4.408), 163: merit_to_energy(163, 4.104),
2602 164: merit_to_energy(164, 4.189), 165: merit_to_energy(165, 4.394),
2603 166: merit_to_energy(166, 4.212), 167: merit_to_energy(167, 4.656),
2604 168: merit_to_energy(168, 4.324), 169: merit_to_energy(169, 3.636),
2605 170: merit_to_energy(170, 4.234), 171: merit_to_energy(171, 4.171),
2606 172: merit_to_energy(172, 3.928), 173: merit_to_energy(173, 4.025),
2607 174: merit_to_energy(174, 3.797), 175: merit_to_energy(175, 3.923),
2608 176: merit_to_energy(176, 3.792), 177: merit_to_energy(177, 4.366),
2609 178: merit_to_energy(178, 3.905), 179: merit_to_energy(179, 3.953),
2610 180: merit_to_energy(180, 4.147), 181: merit_to_energy(181, 4.143),
2611 182: merit_to_energy(182, 4.434), 183: merit_to_energy(183, 3.946),
2612 184: merit_to_energy(184, 4.121), 185: merit_to_energy(185, 4.055),
2613 186: merit_to_energy(186, 4.052), 187: merit_to_energy(187, 4.899),
2614 188: merit_to_energy(188, 3.936), 189: merit_to_energy(189, 4.663),
2615 190: merit_to_energy(190, 4.246), 191: merit_to_energy(191, 4.192),
2616 192: merit_to_energy(192, 5.236), 193: merit_to_energy(193, 4.272),
2617 194: merit_to_energy(194, 4.2), 195: merit_to_energy(195, 3.98),
2618 196: merit_to_energy(196, 4.436), 197: merit_to_energy(197, 3.716),
2619 198: merit_to_energy(198, 3.959), 199: merit_to_energy(199, 4.012),
2620 200: merit_to_energy(200, 4.016), 201: merit_to_energy(201, 4.558),
2621 202: merit_to_energy(202, 3.896), 203: merit_to_energy(203, 3.765),
2622 204: merit_to_energy(204, 4.13), 205: merit_to_energy(205, 4.511),
2623 206: merit_to_energy(206, 4.546), 207: merit_to_energy(207, 4.124),
2624 208: merit_to_energy(208, 3.913), 209: merit_to_energy(209, 4.024),
2625 210: merit_to_energy(210, 4.416), 211: merit_to_energy(211, 3.853),
2626 212: merit_to_energy(212, 4.197), 213: merit_to_energy(213, 4.314),
2627 214: merit_to_energy(214, 4.004), 215: merit_to_energy(215, 4.294),
2628 216: merit_to_energy(216, 4.16), 217: merit_to_energy(217, 3.999),
2629 218: merit_to_energy(218, 4.162), 219: merit_to_energy(219, 4.174),
2630 220: merit_to_energy(220, 4.229), 221: merit_to_energy(221, 4.093),
2631 222: merit_to_energy(222, 4.046), 223: merit_to_energy(223, 3.743),
2632 224: merit_to_energy(224, 4.353), 225: merit_to_energy(225, 4.609),
2633 226: merit_to_energy(226, 4.244), 227: merit_to_energy(227, 4.251),
2634 228: merit_to_energy(228, 3.988), 229: merit_to_energy(229, 3.719),
2635 230: merit_to_energy(230, 3.854), 231: merit_to_energy(231, 3.861),
2636 232: merit_to_energy(232, 3.748), 233: merit_to_energy(233, 3.898),
2637 234: merit_to_energy(234, 4.009), 235: merit_to_energy(235, 3.830),
2638 236: merit_to_energy(236, 3.901), 237: merit_to_energy(237, 4.368),
2639 238: merit_to_energy(238, 3.985), 239: merit_to_energy(239, 3.560),
2640 240: merit_to_energy(240, 4.179), 241: merit_to_energy(241, 4.170),
2641 242: merit_to_energy(242, 4.425), 243: merit_to_energy(243, 4.251),
2642 244: merit_to_energy(244, 4.220), 245: merit_to_energy(245, 3.877),
2643 246: merit_to_energy(246, 3.756), 247: merit_to_energy(247, 3.966),
2644 248: merit_to_energy(248, 4.243), 249: merit_to_energy(249, 4.444),
2645 250: merit_to_energy(250, 4.658), 251: merit_to_energy(251, 4.101),
2646 252: merit_to_energy(252, 4.033), 253: merit_to_energy(253, 3.966),
2647 254: merit_to_energy(254, 4.468), 255: merit_to_energy(255, 3.993),
2648 256: merit_to_energy(256, 4.264), 257: merit_to_energy(257, 4.116),
2649 258: merit_to_energy(258, 3.962), 259: merit_to_energy(259, 4.534),
2650 260: merit_to_energy(260, 4.370), 261: merit_to_energy(261, 3.920),
2651 262: merit_to_energy(262, 4.198), 263: merit_to_energy(263, 4.430),
2652 264: merit_to_energy(264, 4.264), 265: merit_to_energy(265, 3.928),
2653 266: merit_to_energy(266, 4.073), 267: merit_to_energy(267, 4.327),
2654 268: merit_to_energy(268, 4.549), 269: merit_to_energy(269, 4.388),
2655 270: merit_to_energy(270, 4.237), 271: merit_to_energy(271, 3.838),
2656 272: merit_to_energy(272, 4.393), 273: merit_to_energy(273, 4.141),
2657 274: merit_to_energy(274, 3.609), 275: merit_to_energy(275, 3.98),
2658 276: merit_to_energy(276, 3.563), 277: merit_to_energy(277, 3.912),
2659 278: merit_to_energy(278, 4.077), 279: merit_to_energy(279, 3.983),
2660 280: merit_to_energy(280, 4.465), 281: merit_to_energy(281, 3.823),
2661 282: merit_to_energy(282, 3.949), 283: merit_to_energy(283, 3.844),
2662 284: merit_to_energy(284, 3.961), 285: merit_to_energy(285, 4.153),
2663 286: merit_to_energy(286, 4.409), 287: merit_to_energy(287, 4.22),
2664 288: merit_to_energy(288, 4.002), 289: merit_to_energy(289, 3.803),
2665 290: merit_to_energy(290, 3.673), 291: merit_to_energy(291, 4.513),
2666 292: merit_to_energy(292, 4.072), 293: merit_to_energy(293, 3.94),
2667 294: merit_to_energy(294, 3.87), 295: merit_to_energy(295, 4.341),
2668 296: merit_to_energy(296, 4.238), 297: merit_to_energy(297, 3.976),
2669 298: merit_to_energy(298, 4.131), 299: merit_to_energy(299, 4.139),
2670 300: merit_to_energy(300, 4.365),
2671 },
2672 ("D2021OTSSBSATMFP",
2673 ("Miroslav Dimitrov. On the Skew-Symmetric Binary Sequences and the "
2674 "Merit Factor Problem. Digital Signal Processing 156(Part A):104793, "
2675 "January 2025, doi:10.1016/j.dsp.2024.104793. See also: On the "
2676 "Skew-Symmetric Binary Sequences and the Merit Factor Problem. "
2677 "arXiv:2106.03377v1 [cs.IT] 7 Jun 2021. "
2678 "https://arxiv.org/pdf/2106.03377.")): {449: 15432},
2679 ("BB2022CSOLSSBSWHMF",
2680 ("Janez Brest and Borko Bošković. Computational Search of Long Skew-"
2681 "Symmetric Binary Sequences with High Merit Factors. MENDEL - Soft "
2682 "Computing Journal 28(2):17-24. December 2022. "
2683 "doi:10.13164/mendel.202k.k.017.")): {
2684 201: merit_to_energy(201, 9.0993), 203: merit_to_energy(203, 8.8927),
2685 205: merit_to_energy(205, 8.7918), 207: merit_to_energy(207, 9.1129),
2686 209: merit_to_energy(209, 9.2544), 211: merit_to_energy(211, 9.0600),
2687 213: merit_to_energy(213, 9.5393), 215: merit_to_energy(215, 8.9066),
2688 217: merit_to_energy(217, 8.9319), 219: merit_to_energy(219, 8.9580),
2689 221: merit_to_energy(221, 8.9584), 223: merit_to_energy(223, 9.0383),
2690 225: merit_to_energy(225, 9.0144), 227: merit_to_energy(227, 8.8935),
2691 229: merit_to_energy(229, 8.8523), 231: merit_to_energy(231, 8.7678),
2692 233: merit_to_energy(233, 8.9409), 235: merit_to_energy(235, 8.9044),
2693 237: merit_to_energy(237, 8.8039), 239: merit_to_energy(239, 8.6678),
2694 241: merit_to_energy(241, 8.6430), 243: merit_to_energy(243, 8.6608),
2695 245: merit_to_energy(245, 8.7807), 247: merit_to_energy(247, 8.6784),
2696 249: merit_to_energy(249, 8.8573), 251: merit_to_energy(251, 8.7966),
2697 253: merit_to_energy(253, 8.7206), 255: merit_to_energy(255, 9.0338),
2698 257: merit_to_energy(257, 8.9936), 259: merit_to_energy(259, 8.8056),
2699 261: merit_to_energy(261, 8.7740), 263: merit_to_energy(263, 8.5882),
2700 265: merit_to_energy(265, 8.5473), 267: merit_to_energy(267, 8.6077),
2701 269: merit_to_energy(269, 8.5533), 271: merit_to_energy(271, 8.5496),
2702 273: merit_to_energy(273, 8.8221), 275: merit_to_energy(275, 8.5607),
2703 277: merit_to_energy(277, 8.6058), 279: merit_to_energy(279, 8.5898),
2704 281: merit_to_energy(281, 8.5763), 283: merit_to_energy(283, 8.2925),
2705 285: merit_to_energy(285, 8.5789), 287: merit_to_energy(287, 8.3184),
2706 289: merit_to_energy(289, 8.1436), 291: merit_to_energy(291, 8.1912),
2707 293: merit_to_energy(293, 8.0898), 295: merit_to_energy(295, 8.0534),
2708 297: merit_to_energy(297, 8.0190), 299: merit_to_energy(299, 8.1496),
2709 301: merit_to_energy(301, 8.3304), 303: merit_to_energy(303, 8.0718),
2710 },
2711 ("D2022NCOBSWHMF",
2712 ("Miroslav Dimitrov. New Classes of Binary Sequences with High Merit "
2713 "Factor. arXiv:2206.12070v1 [cs.IT] 24 Jun 2022. "
2714 "https://arxiv.org/pdf/2206.12070.")): {
2715 172: merit_to_energy(172, 9.05263157894737),
2716 178: merit_to_energy(178, 9.29149560117302),
2717 180: merit_to_energy(180, 8.55332629355861),
2718 182: merit_to_energy(182, 8.92830188679245),
2719 184: merit_to_energy(184, 8.63673469387755),
2720 186: merit_to_energy(186, 8.62743142144638),
2721 190: merit_to_energy(190, 9.19510952623535),
2722 192: merit_to_energy(192, 8.93023255813954),
2723 193: merit_to_energy(193, 9.23834325396826),
2724 194: merit_to_energy(194, 8.64400551217272),
2725 196: merit_to_energy(196, 8.52173913043478),
2726 198: merit_to_energy(198, 8.78619453160018),
2727 200: merit_to_energy(200, 8.75656742556918),
2728 202: merit_to_energy(202, 8.56866862662747),
2729 204: merit_to_energy(204, 8.27684964200477),
2730 206: merit_to_energy(206, 8.43658051689861),
2731 208: merit_to_energy(208, 8.96849087893864),
2732 209: merit_to_energy(209, 9.25444915254237),
2733 210: merit_to_energy(210, 9.15317559153176),
2734 212: merit_to_energy(212, 9.26298433635614),
2735 214: merit_to_energy(214, 9.17755511022044),
2736 216: merit_to_energy(216, 8.58910162002946),
2737 218: merit_to_energy(218, 8.32877672625307),
2738 220: merit_to_energy(220, 8.47932725998598),
2739 222: merit_to_energy(222, 8.71666077113548),
2740 224: merit_to_energy(224, 8.52173913043478),
2741 226: merit_to_energy(226, 8.48720505151213),
2742 227: merit_to_energy(227, 8.06905731287191),
2743 228: merit_to_energy(228, 8.18903591682),
2744 229: merit_to_energy(229, 8.55202217873),
2745 230: merit_to_energy(230, 8.16610064835),
2746 231: merit_to_energy(231, 8.18671371586),
2747 232: merit_to_energy(232, 8.05748502994),
2748 233: merit_to_energy(233, 8.22560606061),
2749 234: merit_to_energy(234, 8.27379873073),
2750 235: merit_to_energy(235, 8.44677271337),
2751 236: merit_to_energy(236, 8.37282020445),
2752 237: merit_to_energy(237, 8.65203327172),
2753 238: merit_to_energy(238, 8.34226804124),
2754 239: merit_to_energy(239, 8.19056495555),
2755 240: merit_to_energy(240, 8.24742268041),
2756 241: merit_to_energy(241, 8.26893507973),
2757 242: merit_to_energy(242, 8.14973559699),
2758 243: merit_to_energy(243, 8.46216680997),
2759 244: merit_to_energy(244, 8.51974813967),
2760 245: merit_to_energy(245, 8.5799028016),
2761 246: merit_to_energy(246, 8.33324153126),
2762 247: merit_to_energy(247, 8.22889128675),
2763 248: merit_to_energy(248, 8.01668404588),
2764 249: merit_to_energy(249, 8.20119047619),
2765 250: merit_to_energy(250, 8.19564647259),
2766 251: merit_to_energy(251, 8.2354248366),
2767 252: merit_to_energy(252, 8.49438202247),
2768 253: merit_to_energy(253, 8.95481253497),
2769 254: merit_to_energy(254, 8.51808819646),
2770 255: merit_to_energy(255, 8.22892938497),
2771 256: merit_to_energy(256, 8.12698412698),
2772 257: merit_to_energy(257, 8.32270665323),
2773 258: merit_to_energy(258, 8.25241755517),
2774 259: merit_to_energy(259, 8.18659995118),
2775 260: merit_to_energy(260, 8.26405867971),
2776 261: merit_to_energy(261, 8.04452054795),
2777 262: merit_to_energy(262, 8.08146927243),
2778 263: merit_to_energy(263, 8.22852724245),
2779 264: merit_to_energy(264, 8.17260787993),
2780 265: merit_to_energy(265, 8.71710526316),
2781 266: merit_to_energy(266, 8.1049255441),
2782 267: merit_to_energy(267, 8.07715839565),
2783 268: merit_to_energy(268, 8.01965163019),
2784 269: merit_to_energy(269, 7.4414849856),
2785 270: merit_to_energy(270, 7.27399720615),
2786 271: merit_to_energy(271, 7.69015706806),
2787 272: merit_to_energy(272, 7.35719968178),
2788 273: merit_to_energy(273, 7.21062306502),
2789 274: merit_to_energy(274, 7.1843062201),
2790 275: merit_to_energy(275, 7.50099186669),
2791 276: merit_to_energy(276, 7.47703180212),
2792 277: merit_to_energy(277, 7.45520792849),
2793 278: merit_to_energy(278, 7.12557624931),
2794 279: merit_to_energy(279, 7.05209277043),
2795 280: merit_to_energy(280, 7.27002967359),
2796 281: merit_to_energy(281, 7.7050156128),
2797 282: merit_to_energy(282, 7.38933283776),
2798 283: merit_to_energy(283, 8.17067945317),
2799 284: merit_to_energy(284, 7.89815902859),
2800 285: merit_to_energy(285, 7.46827877896),
2801 286: merit_to_energy(286, 7.22707192083),
2802 287: merit_to_energy(287, 7.47314461985),
2803 288: merit_to_energy(288, 7.21503131524),
2804 289: merit_to_energy(289, 7.1312329235),
2805 290: merit_to_energy(290, 7.36040609137),
2806 291: merit_to_energy(291, 7.71370012753),
2807 292: merit_to_energy(292, 7.58846564614),
2808 293: merit_to_energy(293, 7.47032718413),
2809 294: merit_to_energy(294, 7.33129770992),
2810 295: merit_to_energy(295, 7.28730530899),
2811 296: merit_to_energy(296, 7.13950456323),
2812 297: merit_to_energy(297, 7.1551752109),
2813 298: merit_to_energy(298, 7.26829268293),
2814 299: merit_to_energy(299, 7.38485048736),
2815 300: merit_to_energy(300, 7.67132628708),
2816 301: merit_to_energy(301, 8.24544958136),
2817 302: merit_to_energy(302, 8.092635315),
2818 303: merit_to_energy(303, 8.16370264983),
2819 304: merit_to_energy(304, 8.24553890079),
2820 305: merit_to_energy(305, 8.12587351502),
2821 306: merit_to_energy(306, 8.18353434714),
2822 307: merit_to_energy(307, 8.27180972442),
2823 308: merit_to_energy(308, 8.15823873409),
2824 309: merit_to_energy(309, 8.08338977311),
2825 310: merit_to_energy(310, 7.96716962361),
2826 311: merit_to_energy(311, 7.88786494862),
2827 312: merit_to_energy(312, 7.69152970923),
2828 313: merit_to_energy(313, 7.62048848787),
2829 314: merit_to_energy(314, 7.31315828512),
2830 315: merit_to_energy(315, 7.5204638472),
2831 316: merit_to_energy(316, 7.25908694388),
2832 317: merit_to_energy(317, 7.46131571132),
2833 318: merit_to_energy(318, 7.23658222413),
2834 319: merit_to_energy(319, 7.45720357614),
2835 320: merit_to_energy(320, 7.48976009362),
2836 321: merit_to_energy(321, 7.73116746699),
2837 322: merit_to_energy(322, 7.76891952645),
2838 323: merit_to_energy(323, 7.80788804071),
2839 324: merit_to_energy(324, 7.68491947291),
2840 325: merit_to_energy(325, 7.61206399539),
2841 326: merit_to_energy(326, 7.50642746151),
2842 327: merit_to_energy(327, 7.76761586518),
2843 328: merit_to_energy(328, 7.22622246104),
2844 329: merit_to_energy(329, 7.33340108401),
2845 330: merit_to_energy(330, 7.22819593787),
2846 331: merit_to_energy(331, 7.44603778714),
2847 332: merit_to_energy(332, 7.2117246794),
2848 333: merit_to_energy(333, 7.29724927613),
2849 334: merit_to_energy(334, 7.06855911798),
2850 335: merit_to_energy(335, 7.46276100545),
2851 336: merit_to_energy(336, 7.27422680412),
2852 337: merit_to_energy(337, 7.35550518135),
2853 338: merit_to_energy(338, 7.26280991736),
2854 339: merit_to_energy(339, 7.77228459353),
2855 340: merit_to_energy(340, 7.7500670421),
2856 341: merit_to_energy(341, 7.72939377825),
2857 342: merit_to_energy(342, 7.67984241628),
2858 343: merit_to_energy(343, 7.63260672116),
2859 344: merit_to_energy(344, 7.36286709806),
2860 345: merit_to_energy(345, 7.48773276296),
2861 346: merit_to_energy(346, 7.10818192614),
2862 347: merit_to_energy(347, 7.23177177177),
2863 348: merit_to_energy(348, 7.13888233907),
2864 349: merit_to_energy(349, 7.24488460623),
2865 350: merit_to_energy(350, 7.14619064287),
2866 351: merit_to_energy(351, 7.14043120436),
2867 352: merit_to_energy(352, 7.05603644647),
2868 353: merit_to_energy(353, 7.26498367537),
2869 354: merit_to_energy(354, 7.18472652219),
2870 355: merit_to_energy(355, 7.39496537965),
2871 356: merit_to_energy(356, 7.20582215147),
2872 357: merit_to_energy(357, 7.48467230444),
2873 358: merit_to_energy(358, 7.27625752243),
2874 359: merit_to_energy(359, 7.33361784454),
2875 360: merit_to_energy(360, 7.12714474263),
2876 361: merit_to_energy(361, 7.17310656099),
2877 362: merit_to_energy(362, 7.86295451818),
2878 363: merit_to_energy(363, 7.92929353713),
2879 364: merit_to_energy(364, 7.68003709715),
2880 365: merit_to_energy(365, 7.46274927179),
2881 366: merit_to_energy(366, 7.43291532571),
2882 367: merit_to_energy(367, 7.28600021638),
2883 368: merit_to_energy(368, 7.07692307692),
2884 369: merit_to_energy(369, 7.19667019027),
2885 370: merit_to_energy(370, 7.02988600185),
2886 371: merit_to_energy(371, 7.44730007575),
2887 372: merit_to_energy(372, 7.53561315618),
2888 373: merit_to_energy(373, 7.62601403201),
2889 374: merit_to_energy(374, 7.51133068414),
2890 375: merit_to_energy(375, 7.40209495736),
2891 376: merit_to_energy(376, 7.28141738772),
2892 377: merit_to_energy(377, 7.35048613984),
2893 378: merit_to_energy(378, 7.11786390356),
2894 379: merit_to_energy(379, 7.33685769742),
2895 380: merit_to_energy(380, 7.01924946529),
2896 381: merit_to_energy(381, 7.2018753721),
2897 382: merit_to_energy(382, 7.08437712399),
2898 383: merit_to_energy(383, 7.07480466866),
2899 384: merit_to_energy(384, 7.08923076923),
2900 385: merit_to_energy(385, 7.24887519562),
2901 386: merit_to_energy(386, 7.1296774811),
2902 387: merit_to_energy(387, 7.19974040958),
2903 388: merit_to_energy(388, 7.06248827172),
2904 389: merit_to_energy(389, 7.39305256987),
2905 390: merit_to_energy(390, 7.27403156385),
2906 391: merit_to_energy(391, 7.16070257611),
2907 392: merit_to_energy(392, 7.1832460733),
2908 393: merit_to_energy(393, 7.19304210134),
2909 394: merit_to_energy(394, 7.22095078612),
2910 395: merit_to_energy(395, 7.23610982284),
2911 396: merit_to_energy(396, 7.15270935961),
2912 397: merit_to_energy(397, 7.19675799087),
2913 398: merit_to_energy(398, 7.12056099973),
2914 399: merit_to_energy(399, 7.23180703189),
2915 400: merit_to_energy(400, 7.10479573712),
2916 401: merit_to_energy(401, 7.01820006983),
2917 402: merit_to_energy(402, 7.05755961219),
2918 403: merit_to_energy(403, 7.10264147643),
2919 404: merit_to_energy(404, 7.02911283376),
2920 405: merit_to_energy(405, 7.09082656061),
2921 406: merit_to_energy(406, 7.03765690377),
2922 407: merit_to_energy(407, 7.11856467555),
2923 408: merit_to_energy(408, 7.1801242236),
2924 409: merit_to_energy(409, 7.24285590578),
2925 410: merit_to_energy(410, 7.0767028711),
2926 411: merit_to_energy(411, 7.13047699451),
2927 412: merit_to_energy(412, 7.01537444206),
2928 413: merit_to_energy(413, 7.02855612329),
2929 414: merit_to_energy(414, 7.09714285714),
2930 415: merit_to_energy(415, 7.25891427126),
2931 416: merit_to_energy(416, 7.04855001629),
2932 417: merit_to_energy(417, 7.22610538564),
2933 418: merit_to_energy(418, 7.13683522588),
2934 419: merit_to_energy(419, 7.05120893244),
2935 420: merit_to_energy(420, 7.04585397028),
2936 421: merit_to_energy(421, 7.25327385824),
2937 422: merit_to_energy(422, 7.05842251288),
2938 423: merit_to_energy(423, 7.17150300601),
2939 424: merit_to_energy(424, 7.08448928121),
2940 425: merit_to_energy(425, 7.0667057903),
2941 426: merit_to_energy(426, 7.05528341498),
2942 427: merit_to_energy(427, 7.22782050266),
2943 428: merit_to_energy(428, 7.13889321902),
2944 429: merit_to_energy(429, 7.05354131535),
2945 430: merit_to_energy(430, 7.0021964705),
2946 431: merit_to_energy(431, 7.08849118522),
2947 432: merit_to_energy(432, 7.04560555723),
2948 433: merit_to_energy(433, 7.05482390126),
2949 434: merit_to_energy(434, 7.06140811277),
2950 435: merit_to_energy(435, 7.06854688084),
2951 436: merit_to_energy(436, 7.07307635065),
2952 437: merit_to_energy(437, 7.07816901408),
2953 438: merit_to_energy(438, 7.01645819618),
2954 439: merit_to_energy(439, 7.07544606799),
2955 440: merit_to_energy(440, 7.16400236827),
2956 441: merit_to_energy(441, 7.25458818263),
2957 442: merit_to_energy(442, 7.07994491556),
2958 443: merit_to_energy(443, 7.06694274397),
2959 444: merit_to_energy(444, 7.07798362775),
2960 445: merit_to_energy(445, 7.05317709075),
2961 446: merit_to_energy(446, 7.12296784359),
2962 447: merit_to_energy(447, 7.19410239793),
2963 448: merit_to_energy(448, 7.168),
2964 449: merit_to_energy(449, 7.1428925737),
2965 450: merit_to_energy(450, 7.01517356059),
2966 451: merit_to_energy(451, 7.17362629611),
2967 452: merit_to_energy(452, 7.04399393187),
2968 453: merit_to_energy(453, 7.04991754844),
2969 454: merit_to_energy(454, 7.04381108605),
2970 455: merit_to_energy(455, 7.10791045801),
2971 456: merit_to_energy(456, 7.01159967629),
2972 457: merit_to_energy(457, 7.01966254369),
2973 458: merit_to_energy(458, 7.11884884273),
2974 459: merit_to_energy(459, 7.25635461872),
2975 460: merit_to_energy(460, 7.39549839228),
2976 461: merit_to_energy(461, 7.53941393501),
2977 462: merit_to_energy(462, 7.38509445713),
2978 463: merit_to_energy(463, 7.25248663644),
2979 464: merit_to_energy(464, 7.13467656416),
2980 465: merit_to_energy(465, 7.08469855832),
2981 466: merit_to_energy(466, 7.09057663423),
2982 467: merit_to_energy(467, 7.0075509286),
2983 468: merit_to_energy(468, 7.16795392067),
2984 469: merit_to_energy(469, 7.3743127263),
2985 470: merit_to_energy(470, 7.25165780316),
2986 471: merit_to_energy(471, 7.12719270064),
2987 472: merit_to_energy(472, 7.07340614681),
2988 473: merit_to_energy(473, 7.38087226181),
2989 474: merit_to_energy(474, 7.31129189717),
2990 475: merit_to_energy(475, 7.24410839273),
2991 476: merit_to_energy(476, 7.07430997877),
2992 477: merit_to_energy(477, 7.27859884837),
2993 478: merit_to_energy(478, 7.18548336373),
2994 479: merit_to_energy(479, 7.12063186643),
2995 480: merit_to_energy(480, 7.05882352941),
2996 481: merit_to_energy(481, 7.26636306533),
2997 482: merit_to_energy(482, 7.15944530046),
2998 483: merit_to_energy(483, 7.17503229378),
2999 484: merit_to_energy(484, 7.08406919076),
3000 485: merit_to_energy(485, 7.11165195308),
3001 486: merit_to_energy(486, 7.14230420321),
3002 487: merit_to_energy(487, 7.19784522003),
3003 488: merit_to_energy(488, 7.19033816425),
3004 489: merit_to_energy(489, 7.20070464948),
3005 490: merit_to_energy(490, 7.09305760709),
3006 491: merit_to_energy(491, 7.08519955328),
3007 492: merit_to_energy(492, 7.07045215563),
3008 493: merit_to_energy(493, 7.0810220254),
3009 494: merit_to_energy(494, 7.07637882039),
3010 495: merit_to_energy(495, 7.01233472612),
3011 496: merit_to_energy(496, 7.01459854015),
3012 497: merit_to_energy(497, 7.01730113636),
3013 498: merit_to_energy(498, 7.00378424174),
3014 499: merit_to_energy(499, 7.16797167367),
3015 500: merit_to_energy(500, 7.04542892571),
3016 501: merit_to_energy(501, 7.16572456321),
3017 502: merit_to_energy(502, 7.27872451043),
3018 503: merit_to_energy(503, 7.39489682586),
3019 504: merit_to_energy(504, 7.21964529332),
3020 505: merit_to_energy(505, 7.09980512249),
3021 506: merit_to_energy(506, 7.05994595489),
3022 507: merit_to_energy(507, 7.23144657627),
3023 508: merit_to_energy(508, 7.10293955741),
3024 509: merit_to_energy(509, 7.03489193005),
3025 510: merit_to_energy(510, 7.00889248181),
3026 511: merit_to_energy(511, 7.22166602135),
3027 512: merit_to_energy(512, 7.09417622862),
3028 513: merit_to_energy(513, 7.11729229771),
3029 514: merit_to_energy(514, 7.02014136153),
3030 515: merit_to_energy(515, 7.00874689498),
3031 516: merit_to_energy(516, 7.01190350785),
3032 517: merit_to_energy(517, 7.12922756855),
3033 518: merit_to_energy(518, 7.20719849584),
3034 519: merit_to_energy(519, 7.18717647687),
3035 520: merit_to_energy(520, 7.0607896386),
3036 521: merit_to_energy(521, 7.01760599793),
3037 522: merit_to_energy(522, 7.06759350521),
3038 523: merit_to_energy(523, 7.11833133816),
3039 524: merit_to_energy(524, 7.08181161663),
3040 525: merit_to_energy(525, 7.04634931997),
3041 526: merit_to_energy(526, 7.0340163726),
3042 527: merit_to_energy(527, 7.08239404294),
3043 573: merit_to_energy(573, 6.82937432399),
3044 1006: merit_to_energy(1006, 6.35677047348),
3045 1007: merit_to_energy(1007, 6.41941303825),
3046 1008: merit_to_energy(1008, 6.4181110718),
3047 1009: merit_to_energy(1009, 6.41690827959),
3048 1010: merit_to_energy(1010, 6.3672679608),
3049 },
3050 ("BHB2024PSAWALABSP",
3051 ("Borko Bošković, Jana Herzog, and Janez Brest. Parallel Self-Avoiding "
3052 "Walks for a Low-Autocorrelation Binary Sequences Problem. Journal of "
3053 "Computational Science 77(102260). 2024. "
3054 "doi:10.1016/j.jocs.2024.102260")): {
3055 171: 1669, 185: 1932, 193: 2040, 197: 2162, 199: 2187, 219: 2605,
3056 223: 2727, 225: 2768, 229: 2810, 231: 2963, 235: 2965, 237: 3118,
3057 239: 3055, 241: 3216, 243: 3233, 245: 3226, 247: 3259,
3058 },
3059 ("PMBB2025DSOFBSWHMF",
3060 ("Blaž Pšeničnik, Rene Mlinarič, Janez Brest, and Borko Bošković. "
3061 "Dual-Step Optimization for Binary Sequences with High Merit Factors. "
3062 "Digital Signal Processing 165(1053). October 2025. "
3063 "doi:10.1016/j.dsp.2025.105316.")): {
3064 450: merit_to_energy(450, 7.023), 451: merit_to_energy(451, 7.2307),
3065 452: merit_to_energy(452, 7.3459), 453: merit_to_energy(453, 7.6926),
3066 454: merit_to_energy(454, 7.7377), 455: merit_to_energy(455, 7.7835),
3067 456: merit_to_energy(456, 7.629), 457: merit_to_energy(457, 7.5082),
3068 458: merit_to_energy(458, 7.4295), 459: merit_to_energy(459, 7.4199),
3069 460: merit_to_energy(460, 7.5302), 461: merit_to_energy(461, 7.6435),
3070 462: merit_to_energy(462, 7.5098), 463: merit_to_energy(463, 7.3885),
3071 464: merit_to_energy(464, 7.2617), 465: merit_to_energy(465, 7.3807),
3072 466: merit_to_energy(466, 7.412), 467: merit_to_energy(467, 7.4114),
3073 468: merit_to_energy(468, 7.508), 469: merit_to_energy(469, 7.5195),
3074 470: merit_to_energy(470, 7.4836), 471: merit_to_energy(471, 7.5543),
3075 472: merit_to_energy(472, 7.3828), 473: merit_to_energy(473, 7.4916),
3076 474: merit_to_energy(474, 7.4273), 475: merit_to_energy(475, 7.3748),
3077 476: merit_to_energy(476, 7.3004), 477: merit_to_energy(477, 7.2973),
3078 478: merit_to_energy(478, 7.2956), 479: merit_to_energy(479, 7.4152),
3079 480: merit_to_energy(480, 7.3922), 481: merit_to_energy(481, 7.3701),
3080 482: merit_to_energy(482, 7.4154), 483: merit_to_energy(483, 7.4691),
3081 484: merit_to_energy(484, 7.3842), 485: merit_to_energy(485, 7.3024),
3082 486: merit_to_energy(486, 7.3266), 487: merit_to_energy(487, 7.4455),
3083 488: merit_to_energy(488, 7.4271), 489: merit_to_energy(489, 7.569),
3084 490: merit_to_energy(490, 7.4229), 491: merit_to_energy(491, 7.5239),
3085 492: merit_to_energy(492, 7.6496), 493: merit_to_energy(493, 7.7791),
3086 494: merit_to_energy(494, 7.6247), 495: merit_to_energy(495, 7.478),
3087 496: merit_to_energy(496, 7.2941), 497: merit_to_energy(497, 7.3236),
3088 498: merit_to_energy(498, 7.3007), 499: merit_to_energy(499, 7.356),
3089 500: merit_to_energy(500, 7.3417), 501: merit_to_energy(501, 7.4059),
3090 502: merit_to_energy(502, 7.3949), 503: merit_to_energy(503, 7.4471),
3091 504: merit_to_energy(504, 7.3688), 505: merit_to_energy(505, 7.5025),
3092 506: merit_to_energy(506, 7.3995), 507: merit_to_energy(507, 7.3371),
3093 508: merit_to_energy(508, 7.2908), 509: merit_to_energy(509, 7.4629),
3094 510: merit_to_energy(510, 7.3115), 511: merit_to_energy(511, 7.2992),
3095 512: merit_to_energy(512, 7.2834), 513: merit_to_energy(513, 7.2046),
3096 514: merit_to_energy(514, 7.2386), 515: merit_to_energy(515, 7.2605),
3097 516: merit_to_energy(516, 7.186), 517: merit_to_energy(517, 7.3198),
3098 518: merit_to_energy(518, 7.2072), 519: merit_to_energy(519, 7.2867),
3099 520: merit_to_energy(520, 7.2377), 521: merit_to_energy(521, 7.1901),
3100 522: merit_to_energy(522, 7.2358), 523: merit_to_energy(523, 7.2297),
3101 524: merit_to_energy(524, 7.1393), 525: merit_to_energy(525, 7.2786),
3102 526: merit_to_energy(526, 7.2341), 527: merit_to_energy(527, 7.1791),
3103 573: merit_to_energy(573, 7.021),
3104 },
3105}
3108def __make_bkses() -> dict[int, tuple[int, tuple[str, str]]]:
3109 """Make the BKSes."""
3110 d: Final[dict[int, tuple[int, tuple[str, str]]]] = {}
3111 for citation, data in __RELATED_WORKS.items():
3112 for n, ener in data.items():
3113 # We sanity check the BKSes, too.
3114 if ((n in _LBS) and (ener < _LBS[n])) or (ener < (n // 2)):
3115 raise ValueError("Invalid BKS!")
3116 if (n not in d) or (d[n][0] > ener):
3117 d[n] = ener, citation
3118 return d
3121#: The internal lookup table for best-known solutions
3122_BKS: Final[dict[int, tuple[int, tuple[str, str]]]] = __make_bkses()
3123del __make_bkses
3126def get_bks(n: int) -> tuple[int, tuple[str, str]] | None:
3127 """
3128 Get the best currently known solution for the given dimension `n`.
3130 :param n: the dimension
3131 :returns: a tuple of the energy value and a tuple of a citation. If
3132 no solution is found in literature, then `None` is returned
3134 >>> try:
3135 ... get_bks(-1)
3136 ... except ValueError as ve:
3137 ... print(ve)
3138 n=-1 is invalid, must be in 3..1000000000.
3140 >>> get_bks(20)[0]
3141 26
3143 >>> get_bks(401)[0]
3144 11456
3145 >>> get_bks(401)[1][0]
3146 'D2022NCOBSWHMF'
3148 >>> print(get_bks(10000))
3149 None
3150 """
3151 n = check_int_range(n, "n", 3)
3152 if n in _BKS:
3153 return _BKS[n]
3154 return None
3157def get_bks_references() -> tuple[tuple[str, str], ...]:
3158 """
3159 Get all the BKS references.
3161 This function returns the sources from which :func:`get_bks` draws
3162 its data.
3164 :returns: a tuple with the references
3166 >>> sorted(set(t[0] for t in get_bks_references()))
3167 ['BB2018AHAFALABSPWOLAHMF', 'BB2022CSOLSSBSWHMF', 'BBB2016AGAFSASOTLP', \
3168'BBB2017LABSOIMFARPTAT', 'BHB2024PSAWALABSP', 'D2021OTSSBSATMFP', \
3169'D2022NCOBSWHMF', 'DBN2020EGOLABS', 'GCF2007AMAFTLABSP', \
3170'HYH2008ESLSFTLABSP', 'KD2004MFR', 'M1996ESFLABS', 'MD2015NESFLLABS', \
3171'MZB1998ESFLABS', 'P2013IBABFLABS', 'PM2016LABS', 'PMBB2025DSOFBSWHMF']
3172 """
3173 return tuple(__RELATED_WORKS.keys())
3176def is_labs_objective_value_optimal(n: int, f: int) -> bool | None:
3177 """
3178 Check whether a given objective value is optimal on the LABS problem.
3180 We use the lower and upper bound of the LABS problem to check whether a
3181 given objective value can be optimal. We also use the objective values of
3182 the known global optima from
3184 Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences.
3185 arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016
3186 https://arxiv.org/pdf/1512.02475
3188 :param n: the scale of the problem
3189 :param f: the objective value
3190 :returns: `True` if the objective value `f` is optimal, `False` if it
3191 cannot be optimal, and `None` if the situation is unclear
3192 :raises TypeError: if `n` or `f` are not integers
3193 :raises ValueError: if `n` or `f` are invalid integer values
3195 >>> print(is_labs_objective_value_optimal(49, 136))
3196 True
3198 >>> print(is_labs_objective_value_optimal(49, 137))
3199 False
3201 >>> print(is_labs_objective_value_optimal(100, 50))
3202 True
3204 >>> print(is_labs_objective_value_optimal(100, 51))
3205 None
3207 >>> try:
3208 ... is_labs_objective_value_optimal("x", 3)
3209 ... except TypeError as te:
3210 ... print(te)
3211 n should be an instance of int but is str, namely 'x'.
3213 >>> try:
3214 ... is_labs_objective_value_optimal(7, "3")
3215 ... except TypeError as te:
3216 ... print(te)
3217 f should be an instance of int but is str, namely '3'.
3219 >>> try:
3220 ... is_labs_objective_value_optimal(0, 0)
3221 ... except ValueError as ve:
3222 ... print(ve)
3223 n=0 is invalid, must be in 3..1000000000.
3225 >>> try:
3226 ... is_labs_objective_value_optimal(3, 0)
3227 ... except ValueError as ve:
3228 ... print(ve)
3229 f=0 is invalid, must be in 1..5.
3231 >>> try:
3232 ... is_labs_objective_value_optimal(3, 234240)
3233 ... except ValueError as ve:
3234 ... print(ve)
3235 f=234240 is invalid, must be in 1..5.
3236 """
3237 check_int_range(n, "n", 3)
3238 lb: int = n // 2
3239 ub: int = ((n - 1) * n * (2 * n - 1)) // 6
3240 if check_int_range(f, "f", lb, ub) <= lb:
3241 return True
3242 if n in _LBS: # We know the optimum, so if it is not it, we can stop.
3243 lb = _LBS[n]
3244 return check_int_range(f, "f", lb) <= lb
3245 if f >= ub:
3246 return False
3247 return None
3250class LABS(BitStringProblem):
3251 """The Low-Autocorrelation Sequence Problem."""
3253 def __init__(self, n: int) -> None:
3254 """
3255 Initialize the LABS objective function.
3257 :param n: the dimension of the problem
3258 """
3259 super().__init__(check_int_range(n, "n", 3))
3260 self.evaluate = labs # type: ignore
3262 def lower_bound(self) -> int:
3263 """
3264 Get the lower bound of the LABS problem.
3266 The minimum amount of energy that a sequence could possibly have.
3267 For each correlation length `k`, this is `(n - k) % 2`.
3268 In total, this is just equivalent to `n // 2`.
3270 For some instances of :class:`LABS`, the global optima are known.
3271 For these instances, we return the objective values of these optima,
3272 which obviously are `>= n // 2`.
3274 :return: the lower bound of the :class:`LABS` problem
3276 >>> LABS(16).lower_bound()
3277 24
3279 >>> LABS(61).lower_bound()
3280 226
3282 >>> LABS(200).lower_bound()
3283 100
3285 >>> LABS(124200).lower_bound()
3286 62100
3287 """
3288 n: Final[int] = self.n
3289 if n in _LBS:
3290 return _LBS[n]
3291 return n // 2
3293 def upper_bound(self) -> int:
3294 """
3295 Get the upper bound of the :class:`LABS` problem.
3297 The energy of a sequence where all bits are the same is the highest.
3298 This means that each correlation basically produces its length to the
3299 square as contribution to the result. The upper bound then is the sum
3300 of all of these squares from `1..(n-1)`.
3302 :return: the upper bound of LABS
3304 >>> LABS(16).upper_bound()
3305 1240
3307 >>> LABS(63).upper_bound()
3308 81375
3310 >>> LABS(200).upper_bound()
3311 2646700
3313 >>> LABS(12316).upper_bound()
3314 622636950290
3315 """
3316 return ((self.n - 1) * self.n * (2 * self.n - 1)) // 6
3318 def __str__(self) -> str:
3319 """
3320 Get the name of the LABS objective function.
3322 :return: labs_ + length of string
3324 >>> LABS(16)
3325 labs_16
3326 """
3327 return f"labs_{self.n}"
3329 @classmethod
3330 def default_instances(
3331 cls: type, scale_min: int = 3,
3332 scale_max: int = min(1024, max(_BKS.keys()))) \
3333 -> Iterator[Callable[[], "LABS"]]:
3334 """
3335 Get the default instances of the :class:`LABS` problem.
3337 :param scale_min: the minimum permitted scale, by default `3`
3338 :param scale_max: the maximum permitted scale, by default `625`
3339 :returns: a sequence of default :class:`LABS` instances
3341 >>> len(list(LABS.default_instances()))
3342 96
3344 >>> [x() for x in LABS.default_instances()]
3345 [labs_3, labs_4, labs_5, labs_6, labs_7, labs_8, labs_9, labs_10, \
3346labs_11, labs_12, labs_13, labs_14, labs_15, labs_16, labs_17, labs_18, \
3347labs_19, labs_20, labs_21, labs_22, labs_23, labs_24, labs_25, labs_26, \
3348labs_27, labs_28, labs_29, labs_30, labs_31, labs_32, labs_33, labs_36, \
3349labs_40, labs_41, labs_42, labs_44, labs_48, labs_49, labs_50, labs_55, \
3350labs_59, labs_60, labs_64, labs_66, labs_70, labs_77, labs_79, labs_80, \
3351labs_81, labs_85, labs_88, labs_90, labs_96, labs_99, labs_100, labs_107, \
3352labs_111, labs_121, labs_125, labs_128, labs_144, labs_149, labs_169, \
3353labs_170, labs_192, labs_196, labs_199, labs_200, labs_222, labs_225, \
3354labs_243, labs_256, labs_269, labs_289, labs_300, labs_324, labs_333, \
3355labs_341, labs_343, labs_359, labs_361, labs_384, labs_400, labs_441, \
3356labs_444, labs_479, labs_484, labs_500, labs_512, labs_600, labs_625, \
3357labs_700, labs_800, labs_900, labs_1000, labs_1024]
3358 """
3359 check_int_range(scale_max, "scale_max", check_int_range(
3360 scale_min, "scale_min", 1, 1_000_000_000) + 1, 1_000_000_000)
3361 return (cast("Callable[[], LABS]", lambda __i=i: cls(__i))
3362 for i in merge_sorted_and_return_unique((
3363 16, 64, 100, 625), (k for k in default_scale_sequence(
3364 scale_min, scale_max) if k in _BKS))
3365 if scale_min <= i <= scale_max)