Coverage for moptipy / examples / bitstrings / labs.py: 87%

76 statements  

« prev     ^ index     » next       coverage.py v7.13.0, created at 2025-12-15 11:18 +0000

1""" 

2The Low Autocorrelation Binary Sequence problem. 

3 

4The `k`-step autocorrelations of a bit string `x` are defined as 

5 

6`C_k(x) = sum(i = 0, n - k - 1, 1 if x[i] == x[i + k] else -1)` 

7 

8The energy of the bit string, which is equivalent to the objective value of 

9this benchmark problem, is then: 

10 

11`E(x) = sum(k = 1, n - 1, C_k(x) ** 2)` 

12 

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: 

18 

19`F(x) = n² / (n * E(X))` 

20 

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. 

24 

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 

48 

49This is code is part of the research work of Mr. Jiazheng ZENG (曾嘉政), 

50a Master's student at the Institute of Applied Optimization 

51(应用优化研究所) of the School of Artificial 

52Intelligence and Big Data (人工智能与大数据学院) at 

53Hefei University (合肥大学) in 

54Hefei, Anhui, China (中国安徽省合肥市) under the supervision of 

55Prof. Dr. Thomas Weise (汤卫思教授). 

56""" 

57from math import isfinite 

58from typing import Callable, Final, Iterator, cast 

59 

60import numba # type: ignore 

61import numpy as np 

62from pycommons.ds.sequences import merge_sorted_and_return_unique 

63from pycommons.math.int_math import try_int_div 

64from pycommons.types import check_int_range, type_error 

65 

66from moptipy.examples.bitstrings.bitstring_problem import ( 

67 BitStringProblem, 

68 default_scale_sequence, 

69) 

70 

71 

72@numba.njit(nogil=True, cache=True) 

73def labs(x: np.ndarray) -> int: 

74 """ 

75 Calculate the objective value of the LABS problem. 

76 

77 :param x: the flat numpy array representing the bitstring 

78 :return: the LABS objective 

79 

80 # N = 3, E = 1, FN = 4.50000 

81 >>> labs(np.array([0, 0, 1])) 

82 1 

83 

84 # N = 3, E = 1, FN = 4.50000 

85 >>> labs(np.array([1, 1, 0])) 

86 1 

87 

88 # N = 4, E = 2, FN = 4.00000 

89 >>> labs(np.array([0, 1, 0, 0])) 

90 2 

91 

92 # N = 4, E = 2, FN = 4.00000 

93 >>> labs(np.array([1, 0, 1, 1])) 

94 2 

95 

96 # N = 5, E = 2, FN = 6.25000 

97 >>> labs(np.array([0, 0, 0, 1, 0])) 

98 2 

99 

100 # N = 5, E = 2, FN = 6.25000 

101 >>> labs(np.array([1, 1, 1, 0, 1])) 

102 2 

103 

104 # N = 6, E = 7, FN = 2.57143 

105 >>> labs(np.array([0, 1, 1, 1, 1, 0])) 

106 7 

107 

108 # N = 6, E = 7, FN = 2.57143 

109 >>> labs(np.array([1, 0, 0, 0, 0, 1])) 

110 7 

111 

112 # N = 6, E = 7, FN = 2.57143 

113 >>> labs(np.array([0, 1, 1, 0, 0, 0])) 

114 7 

115 

116 # N = 6, E = 7, FN = 2.57143 

117 >>> labs(np.array([1, 0, 0, 1, 1, 1])) 

118 7 

119 

120 # N = 6, E = 7, FN = 2.57143 

121 >>> labs(np.array([0, 0, 0, 1, 0, 0])) 

122 7 

123 

124 # N = 6, E = 7, FN = 2.57143 

125 >>> labs(np.array([1, 1, 1, 0, 1, 1])) 

126 7 

127 

128 # N = 6, E = 7, FN = 2.57143 

129 >>> labs(np.array([0, 1, 0, 1, 1, 1])) 

130 7 

131 

132 # N = 6, E = 7, FN = 2.57143 

133 >>> labs(np.array([1, 0, 1, 0, 0, 0])) 

134 7 

135 

136 # N = 7, E = 3, FN = 8.16667 

137 >>> labs(np.array([0, 1, 0, 0, 1, 1, 1])) 

138 3 

139 

140 # N = 7, E = 3, FN = 8.16667 

141 >>> labs(np.array([1, 0, 1, 1, 0, 0, 0])) 

142 3 

143 

144 # N = 8, E = 8, FN = 4.00000 

145 >>> labs(np.array([0, 0, 0, 1, 1, 0, 1, 0])) 

146 8 

147 

148 # N = 8, E = 8, FN = 4.00000 

149 >>> labs(np.array([1, 1, 1, 0, 0, 1, 0, 1])) 

150 8 

151 

152 # N = 8, E = 8, FN = 4.00000 

153 >>> labs(np.array([0, 0, 0, 1, 0, 1, 1, 0])) 

154 8 

155 

156 # N = 8, E = 8, FN = 4.00000 

157 >>> labs(np.array([1, 1, 1, 0, 1, 0, 0, 1])) 

158 8 

159 

160 # N = 9, E = 12, FN = 3.37500 

161 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 0, 1])) 

162 12 

163 

164 # N = 9, E = 12, FN = 3.37500 

165 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 1, 0])) 

166 12 

167 

168 # N = 9, E = 12, FN = 3.37500 

169 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 1, 0])) 

170 12 

171 

172 # N = 9, E = 12, FN = 3.37500 

173 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 0, 1])) 

174 12 

175 

176 # N = 9, E = 12, FN = 3.37500 

177 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 1, 0])) 

178 12 

179 

180 # N = 9, E = 12, FN = 3.37500 

181 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 0, 1])) 

182 12 

183 

184 # N = 9, E = 12, FN = 3.37500 

185 >>> labs(np.array([0, 0, 0, 1, 0, 1, 1, 0, 0])) 

186 12 

187 

188 # N = 9, E = 12, FN = 3.37500 

189 >>> labs(np.array([1, 1, 1, 0, 1, 0, 0, 1, 1])) 

190 12 

191 

192 # N = 10, E = 13, FN = 3.84615 

193 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0])) 

194 13 

195 

196 # N = 10, E = 13, FN = 3.84615 

197 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1])) 

198 13 

199 

200 # N = 10, E = 13, FN = 3.84615 

201 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 1, 0])) 

202 13 

203 

204 # N = 10, E = 13, FN = 3.84615 

205 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 0, 1])) 

206 13 

207 

208 # N = 10, E = 13, FN = 3.84615 

209 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 0, 1, 1])) 

210 13 

211 

212 # N = 10, E = 13, FN = 3.84615 

213 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 1, 0, 0])) 

214 13 

215 

216 # N = 10, E = 13, FN = 3.84615 

217 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 1, 0, 0])) 

218 13 

219 

220 # N = 10, E = 13, FN = 3.84615 

221 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 0, 1, 1])) 

222 13 

223 

224 # N = 10, E = 13, FN = 3.84615 

225 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 1, 0])) 

226 13 

227 

228 # N = 10, E = 13, FN = 3.84615 

229 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 0, 1])) 

230 13 

231 

232 # N = 11, E = 5, FN = 12.10000 

233 >>> labs(np.array([0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1])) 

234 5 

235 

236 # N = 11, E = 5, FN = 12.10000 

237 >>> labs(np.array([1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0])) 

238 5 

239 

240 # N = 12, E = 10, FN = 7.20000 

241 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0])) 

242 10 

243 

244 # N = 12, E = 10, FN = 7.20000 

245 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1])) 

246 10 

247 

248 # N = 12, E = 10, FN = 7.20000 

249 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0])) 

250 10 

251 

252 # N = 12, E = 10, FN = 7.20000 

253 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1])) 

254 10 

255 

256 # N = 13, E = 6, FN = 14.08333 

257 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0])) 

258 6 

259 

260 # N = 13, E = 6, FN = 14.08333 

261 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1])) 

262 6 

263 

264 # N = 14, E = 19, FN = 5.15789 

265 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1])) 

266 19 

267 

268 # N = 14, E = 19, FN = 5.15789 

269 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0])) 

270 19 

271 

272 # N = 14, E = 19, FN = 5.15789 

273 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0])) 

274 19 

275 

276 # N = 14, E = 19, FN = 5.15789 

277 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1])) 

278 19 

279 

280 # N = 14, E = 19, FN = 5.15789 

281 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0])) 

282 19 

283 

284 # N = 14, E = 19, FN = 5.15789 

285 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1])) 

286 19 

287 

288 # N = 14, E = 19, FN = 5.15789 

289 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1])) 

290 19 

291 

292 # N = 14, E = 19, FN = 5.15789 

293 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0])) 

294 19 

295 

296 # N = 14, E = 19, FN = 5.15789 

297 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1])) 

298 19 

299 

300 # N = 14, E = 19, FN = 5.15789 

301 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0])) 

302 19 

303 

304 # N = 14, E = 19, FN = 5.15789 

305 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1])) 

306 19 

307 

308 # N = 14, E = 19, FN = 5.15789 

309 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0])) 

310 19 

311 

312 # N = 14, E = 19, FN = 5.15789 

313 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0])) 

314 19 

315 

316 # N = 14, E = 19, FN = 5.15789 

317 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1])) 

318 19 

319 

320 # N = 14, E = 19, FN = 5.15789 

321 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0])) 

322 19 

323 

324 # N = 14, E = 19, FN = 5.15789 

325 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1])) 

326 19 

327 

328 # N = 15, E = 15, FN = 7.50000 

329 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1])) 

330 15 

331 

332 # N = 15, E = 15, FN = 7.50000 

333 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0])) 

334 15 

335 

336 # N = 15, E = 15, FN = 7.50000 

337 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1])) 

338 15 

339 

340 # N = 15, E = 15, FN = 7.50000 

341 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0])) 

342 15 

343 

344 # N = 16, E = 24, FN = 5.33333 

345 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0])) 

346 24 

347 

348 # N = 16, E = 24, FN = 5.33333 

349 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1])) 

350 24 

351 

352 # N = 16, E = 24, FN = 5.33333 

353 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0])) 

354 24 

355 

356 # N = 16, E = 24, FN = 5.33333 

357 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1])) 

358 24 

359 

360 # N = 16, E = 24, FN = 5.33333 

361 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0])) 

362 24 

363 

364 # N = 16, E = 24, FN = 5.33333 

365 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1])) 

366 24 

367 

368 # N = 16, E = 24, FN = 5.33333 

369 >>> labs(np.array([0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0])) 

370 24 

371 

372 # N = 16, E = 24, FN = 5.33333 

373 >>> labs(np.array([1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1])) 

374 24 

375 

376 # N = 17, E = 32, FN = 4.51562 

377 >>> labs(np.array([0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0])) 

378 32 

379 

380 # N = 17, E = 32, FN = 4.51562 

381 >>> labs(np.array([1, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1])) 

382 32 

383 

384 # N = 17, E = 32, FN = 4.51562 

385 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1])) 

386 32 

387 

388 # N = 17, E = 32, FN = 4.51562 

389 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0])) 

390 32 

391 

392 # N = 17, E = 32, FN = 4.51562 

393 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1])) 

394 32 

395 

396 # N = 17, E = 32, FN = 4.51562 

397 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0])) 

398 32 

399 

400 # N = 17, E = 32, FN = 4.51562 

401 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1])) 

402 32 

403 

404 # N = 17, E = 32, FN = 4.51562 

405 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0])) 

406 32 

407 

408 # N = 17, E = 32, FN = 4.51562 

409 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1])) 

410 32 

411 

412 # N = 17, E = 32, FN = 4.51562 

413 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0])) 

414 32 

415 

416 # N = 17, E = 32, FN = 4.51562 

417 >>> labs(np.array([0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1])) 

418 32 

419 

420 # N = 17, E = 32, FN = 4.51562 

421 >>> labs(np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0])) 

422 32 

423 

424 # N = 18, E = 25, FN = 6.48000 

425 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0])) 

426 25 

427 

428 # N = 18, E = 25, FN = 6.48000 

429 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1])) 

430 25 

431 

432 # N = 18, E = 25, FN = 6.48000 

433 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0])) 

434 25 

435 

436 # N = 18, E = 25, FN = 6.48000 

437 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1])) 

438 25 

439 

440 # N = 19, E = 29, FN = 6.22414 

441 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 

442 ... 1])) 

443 29 

444 

445 # N = 19, E = 29, FN = 6.22414 

446 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 

447 ... 0])) 

448 29 

449 

450 # N = 20, E = 26, FN = 7.69231 

451 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 

452 ... 0, 1])) 

453 26 

454 

455 # N = 20, E = 26, FN = 7.69231 

456 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 

457 ... 1, 0])) 

458 26 

459 

460 # N = 21, E = 26, FN = 8.48077 

461 >>> labs(np.array([0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 

462 ... 1, 1, 0])) 

463 26 

464 

465 # N = 21, E = 26, FN = 8.48077 

466 >>> labs(np.array([1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 

467 ... 0, 0, 1])) 

468 26 

469 

470 # N = 22, E = 39, FN = 6.20513 

471 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 

472 ... 1, 0, 0, 0])) 

473 39 

474 

475 # N = 22, E = 39, FN = 6.20513 

476 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 

477 ... 0, 1, 1, 1])) 

478 39 

479 

480 # N = 22, E = 39, FN = 6.20513 

481 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 

482 ... 1, 1, 0, 1])) 

483 39 

484 

485 # N = 22, E = 39, FN = 6.20513 

486 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 

487 ... 0, 0, 1, 0])) 

488 39 

489 

490 # N = 22, E = 39, FN = 6.20513 

491 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 

492 ... 0, 0, 1, 1])) 

493 39 

494 

495 # N = 22, E = 39, FN = 6.20513 

496 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 

497 ... 1, 1, 0, 0])) 

498 39 

499 

500 # N = 23, E = 47, FN = 5.62766 

501 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 

502 ... 0, 0, 0, 1, 1])) 

503 47 

504 

505 # N = 23, E = 47, FN = 5.62766 

506 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 

507 ... 1, 1, 1, 0, 0])) 

508 47 

509 

510 # N = 23, E = 47, FN = 5.62766 

511 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 

512 ... 1, 0, 0, 1, 0])) 

513 47 

514 

515 # N = 23, E = 47, FN = 5.62766 

516 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 

517 ... 0, 1, 1, 0, 1])) 

518 47 

519 

520 # N = 23, E = 47, FN = 5.62766 

521 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 

522 ... 0, 0, 0, 1, 1])) 

523 47 

524 

525 # N = 23, E = 47, FN = 5.62766 

526 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 

527 ... 1, 1, 1, 0, 0])) 

528 47 

529 

530 # N = 24, E = 36, FN = 8.00000 

531 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 

532 ... 1, 1, 0, 1, 1, 0])) 

533 36 

534 

535 # N = 24, E = 36, FN = 8.00000 

536 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 

537 ... 0, 0, 1, 0, 0, 1])) 

538 36 

539 

540 # N = 25, E = 36, FN = 8.68056 

541 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 

542 ... 1, 0, 1, 1, 0, 0, 1])) 

543 36 

544 

545 # N = 25, E = 36, FN = 8.68056 

546 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 

547 ... 0, 1, 0, 0, 1, 1, 0])) 

548 36 

549 

550 # N = 26, E = 45, FN = 7.51111 

551 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 

552 ... 0, 1, 1, 1, 0, 0, 1, 1])) 

553 45 

554 

555 # N = 26, E = 45, FN = 7.51111 

556 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 

557 ... 1, 0, 0, 0, 1, 1, 0, 0])) 

558 45 

559 

560 # N = 26, E = 45, FN = 7.51111 

561 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 1, 

562 ... 0, 1, 1, 0, 1, 1, 0, 1])) 

563 45 

564 

565 # N = 26, E = 45, FN = 7.51111 

566 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 

567 ... 1, 0, 0, 1, 0, 0, 1, 0])) 

568 45 

569 

570 # N = 26, E = 45, FN = 7.51111 

571 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 

572 ... 0, 1, 1, 0, 1, 1, 0, 1])) 

573 45 

574 

575 # N = 26, E = 45, FN = 7.51111 

576 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 

577 ... 1, 0, 0, 1, 0, 0, 1, 0])) 

578 45 

579 

580 # N = 27, E = 37, FN = 9.85135 

581 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 

582 ... 1, 0, 0, 1, 0, 1, 1, 0, 1])) 

583 37 

584 

585 # N = 27, E = 37, FN = 9.85135 

586 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 

587 ... 0, 1, 1, 0, 1, 0, 0, 1, 0])) 

588 37 

589 

590 # N = 28, E = 50, FN = 7.84000 

591 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 

592 ... 1, 0, 0, 1, 0, 1, 1, 0, 1, 1])) 

593 50 

594 

595 # N = 28, E = 50, FN = 7.84000 

596 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 

597 ... 0, 1, 1, 0, 1, 0, 0, 1, 0, 0])) 

598 50 

599 

600 # N = 29, E = 62, FN = 6.78226 

601 >>> labs(np.array([0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 

602 ... 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0])) 

603 62 

604 

605 # N = 29, E = 62, FN = 6.78226 

606 >>> labs(np.array([1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 

607 ... 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1])) 

608 62 

609 

610 # N = 29, E = 62, FN = 6.78226 

611 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 

612 ... 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0])) 

613 62 

614 

615 # N = 29, E = 62, FN = 6.78226 

616 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 

617 ... 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1])) 

618 62 

619 

620 # N = 30, E = 59, FN = 7.62712 

621 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 

622 ... 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0])) 

623 59 

624 

625 # N = 30, E = 59, FN = 7.62712 

626 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 

627 ... 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1])) 

628 59 

629 

630 # N = 30, E = 59, FN = 7.62712 

631 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 

632 ... 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0])) 

633 59 

634 

635 # N = 30, E = 59, FN = 7.62712 

636 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 

637 ... 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1])) 

638 59 

639 

640 # N = 31, E = 67, FN = 7.17164 

641 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 

642 ... 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1])) 

643 67 

644 

645 # N = 31, E = 67, FN = 7.17164 

646 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 

647 ... 1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0])) 

648 67 

649 

650 # N = 32, E = 64, FN = 8.00000 

651 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 

652 ... 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0])) 

653 64 

654 

655 # N = 32, E = 64, FN = 8.00000 

656 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 

657 ... 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1])) 

658 64 

659 

660 # N = 33, E = 64, FN = 8.50781 

661 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 

662 ... 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1])) 

663 64 

664 

665 # N = 33, E = 64, FN = 8.50781 

666 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 

667 ... 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0])) 

668 64 

669 

670 # N = 34, E = 65, FN = 8.89231 

671 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 

672 ... 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1])) 

673 65 

674 

675 # N = 34, E = 65, FN = 8.89231 

676 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 

677 ... 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0])) 

678 65 

679 

680 # N = 35, E = 73, FN = 8.39041 

681 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 

682 ... 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0])) 

683 73 

684 

685 # N = 35, E = 73, FN = 8.39041 

686 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 

687 ... 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 1, 1])) 

688 73 

689 

690 # N = 36, E = 82, FN = 7.90244 

691 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 

692 ... 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0])) 

693 82 

694 

695 # N = 36, E = 82, FN = 7.90244 

696 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 

697 ... 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1])) 

698 82 

699 

700 # N = 37, E = 86, FN = 7.95930 

701 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 

702 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1])) 

703 86 

704 

705 # N = 37, E = 86, FN = 7.95930 

706 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 

707 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0])) 

708 86 

709 

710 # N = 38, E = 87, FN = 8.29885 

711 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 

712 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0])) 

713 87 

714 

715 # N = 38, E = 87, FN = 8.29885 

716 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 

717 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1])) 

718 87 

719 

720 # N = 39, E = 99, FN = 7.68182 

721 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 

722 ... 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1])) 

723 99 

724 

725 # N = 39, E = 99, FN = 7.68182 

726 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 

727 ... 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0])) 

728 99 

729 

730 # N = 39, E = 99, FN = 7.68182 

731 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 

732 ... 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1])) 

733 99 

734 

735 # N = 39, E = 99, FN = 7.68182 

736 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 

737 ... 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0])) 

738 99 

739 

740 # N = 40, E = 108, FN = 7.40741 

741 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 

742 ... 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 

743 ... 1])) 

744 108 

745 

746 # N = 40, E = 108, FN = 7.40741 

747 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 

748 ... 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 

749 ... 0])) 

750 108 

751 

752 # N = 41, E = 108, FN = 7.78241 

753 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 

754 ... 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 

755 ... 1, 0])) 

756 108 

757 

758 # N = 41, E = 108, FN = 7.78241 

759 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 

760 ... 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 

761 ... 0, 1])) 

762 108 

763 

764 # N = 42, E = 101, FN = 8.73267 

765 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 

766 ... 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 

767 ... 1, 0, 0])) 

768 101 

769 

770 # N = 42, E = 101, FN = 8.73267 

771 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 0, 0, 

772 ... 0, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 

773 ... 0, 1, 1])) 

774 101 

775 

776 # N = 43, E = 109, FN = 8.48165 

777 >>> labs(np.array([0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 

778 ... 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 

779 ... 0, 1, 1, 1])) 

780 109 

781 

782 # N = 43, E = 109, FN = 8.48165 

783 >>> labs(np.array([1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 

784 ... 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 

785 ... 1, 0, 0, 0])) 

786 109 

787 

788 # N = 44, E = 122, FN = 7.93443 

789 >>> labs(np.array([0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 1, 

790 ... 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 1, 

791 ... 0, 1, 0, 0, 1])) 

792 122 

793 

794 # N = 44, E = 122, FN = 7.93443 

795 >>> labs(np.array([1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 

796 ... 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 

797 ... 1, 0, 1, 1, 0])) 

798 122 

799 

800 # N = 45, E = 118, FN = 8.58051 

801 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 

802 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 

803 ... 1, 0, 1, 0, 1, 0])) 

804 118 

805 

806 # N = 45, E = 118, FN = 8.58051 

807 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 

808 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 

809 ... 0, 1, 0, 1, 0, 1])) 

810 118 

811 

812 # N = 46, E = 131, FN = 8.07634 

813 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 

814 ... 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 

815 ... 1, 0, 1, 0, 1, 0, 1])) 

816 131 

817 

818 # N = 46, E = 131, FN = 8.07634 

819 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 

820 ... 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 

821 ... 0, 1, 0, 1, 0, 1, 0])) 

822 131 

823 

824 # N = 46, E = 131, FN = 8.07634 

825 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 

826 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 

827 ... 1, 0, 1, 0, 1, 0, 1])) 

828 131 

829 

830 # N = 46, E = 131, FN = 8.07634 

831 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 

832 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 

833 ... 0, 1, 0, 1, 0, 1, 0])) 

834 131 

835 

836 # N = 46, E = 131, FN = 8.07634 

837 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 

838 ... 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 

839 ... 0, 1, 1, 0, 1, 1, 0])) 

840 131 

841 

842 # N = 46, E = 131, FN = 8.07634 

843 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 

844 ... 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 

845 ... 1, 0, 0, 1, 0, 0, 1])) 

846 131 

847 

848 # N = 47, E = 135, FN = 8.18148 

849 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 

850 ... 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 

851 ... 0, 1, 0, 1, 0, 1, 0, 1])) 

852 135 

853 

854 # N = 47, E = 135, FN = 8.18148 

855 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 

856 ... 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 

857 ... 1, 0, 1, 0, 1, 0, 1, 0])) 

858 135 

859 

860 # N = 47, E = 135, FN = 8.18148 

861 >>> labs(np.array([0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 

862 ... 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 

863 ... 0, 1, 1, 0, 0, 1, 0, 1])) 

864 135 

865 

866 # N = 47, E = 135, FN = 8.18148 

867 >>> labs(np.array([1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 

868 ... 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 

869 ... 1, 0, 0, 1, 1, 0, 1, 0])) 

870 135 

871 

872 # N = 47, E = 135, FN = 8.18148 

873 >>> labs(np.array([0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 

874 ... 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 

875 ... 1, 1, 0, 0, 0, 0, 1, 1])) 

876 135 

877 

878 # N = 47, E = 135, FN = 8.18148 

879 >>> labs(np.array([1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 1, 

880 ... 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 

881 ... 0, 0, 1, 1, 1, 1, 0, 0])) 

882 135 

883 

884 # N = 47, E = 135, FN = 8.18148 

885 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 

886 ... 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 

887 ... 1, 0, 1, 0, 1, 1, 0, 1])) 

888 135 

889 

890 # N = 47, E = 135, FN = 8.18148 

891 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 

892 ... 1, 1, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 

893 ... 0, 1, 0, 1, 0, 0, 1, 0])) 

894 135 

895 

896 # N = 47, E = 135, FN = 8.18148 

897 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 

898 ... 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 

899 ... 0, 1, 0, 0, 1, 0, 0, 1])) 

900 135 

901 

902 # N = 47, E = 135, FN = 8.18148 

903 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 

904 ... 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 

905 ... 1, 0, 1, 1, 0, 1, 1, 0])) 

906 135 

907 

908 # N = 47, E = 135, FN = 8.18148 

909 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 

910 ... 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 

911 ... 1, 0, 1, 1, 0, 0, 0, 1])) 

912 135 

913 

914 # N = 47, E = 135, FN = 8.18148 

915 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 

916 ... 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 

917 ... 0, 1, 0, 0, 1, 1, 1, 0])) 

918 135 

919 

920 # N = 48, E = 140, FN = 8.22857 

921 >>> labs(np.array([0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 

922 ... 0, 0, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 1, 

923 ... 0, 1, 0, 0, 1, 0, 1, 1, 0])) 

924 140 

925 

926 # N = 48, E = 140, FN = 8.22857 

927 >>> labs(np.array([1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 

928 ... 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 0, 

929 ... 1, 0, 1, 1, 0, 1, 0, 0, 1])) 

930 140 

931 

932 # N = 49, E = 136, FN = 8.82721 

933 >>> labs(np.array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 

934 ... 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 

935 ... 1, 1, 1, 0, 1, 0, 0, 0, 0, 1])) 

936 136 

937 

938 # N = 49, E = 136, FN = 8.82721 

939 >>> labs(np.array([1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 

940 ... 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 

941 ... 0, 0, 0, 1, 0, 1, 1, 1, 1, 0])) 

942 136 

943 

944 # N = 49, E = 136, FN = 8.82721 

945 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 

946 ... 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 

947 ... 0, 0, 1, 0, 0, 1, 0, 0, 1, 0])) 

948 136 

949 

950 # N = 49, E = 136, FN = 8.82721 

951 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 

952 ... 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 

953 ... 1, 1, 0, 1, 1, 0, 1, 1, 0, 1])) 

954 136 

955 

956 # N = 50, E = 153, FN = 8.16993 

957 >>> labs(np.array([0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 

958 ... 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 

959 ... 1, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1])) 

960 153 

961 

962 # N = 50, E = 153, FN = 8.16993 

963 >>> labs(np.array([1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 

964 ... 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 

965 ... 0, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0])) 

966 153 

967 

968 # N = 50, E = 153, FN = 8.16993 

969 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 

970 ... 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 

971 ... 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 1])) 

972 153 

973 

974 # N = 50, E = 153, FN = 8.16993 

975 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 

976 ... 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 

977 ... 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0])) 

978 153 

979 

980 # N = 50, E = 153, FN = 8.16993 

981 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 

982 ... 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 

983 ... 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0])) 

984 153 

985 

986 # N = 50, E = 153, FN = 8.16993 

987 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 

988 ... 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 

989 ... 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1])) 

990 153 

991 

992 # N = 51, E = 153, FN = 8.50000 

993 >>> labs(np.array([0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 

994 ... 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 

995 ... 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1])) 

996 153 

997 

998 # N = 51, E = 153, FN = 8.50000 

999 >>> labs(np.array([1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 

1000 ... 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 

1001 ... 0, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0])) 

1002 153 

1003 

1004 # N = 52, E = 166, FN = 8.14458 

1005 >>> labs(np.array([0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 

1006 ... 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 0, 

1007 ... 1, 1, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1])) 

1008 166 

1009 

1010 # N = 52, E = 166, FN = 8.14458 

1011 >>> labs(np.array([1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 

1012 ... 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 1, 

1013 ... 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 0, 0])) 

1014 166 

1015 

1016 # N = 53, E = 170, FN = 8.26176 

1017 >>> labs(np.array([0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 

1018 ... 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 

1019 ... 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1])) 

1020 170 

1021 

1022 # N = 53, E = 170, FN = 8.26176 

1023 >>> labs(np.array([1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 

1024 ... 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 

1025 ... 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 1, 0])) 

1026 170 

1027 

1028 # N = 53, E = 170, FN = 8.26176 

1029 >>> labs(np.array([0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 

1030 ... 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 

1031 ... 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0])) 

1032 170 

1033 

1034 # N = 53, E = 170, FN = 8.26176 

1035 >>> labs(np.array([1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 

1036 ... 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 

1037 ... 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1])) 

1038 170 

1039 

1040 # N = 54, E = 175, FN = 8.33143 

1041 >>> labs(np.array([0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 

1042 ... 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 

1043 ... 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0])) 

1044 175 

1045 

1046 # N = 54, E = 175, FN = 8.33143 

1047 >>> labs(np.array([1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 

1048 ... 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 0, 

1049 ... 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1])) 

1050 175 

1051 

1052 # N = 55, E = 171, FN = 8.84503 

1053 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 0, 

1054 ... 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 

1055 ... 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 1])) 

1056 171 

1057 

1058 # N = 55, E = 171, FN = 8.84503 

1059 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 

1060 ... 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 1, 

1061 ... 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0])) 

1062 171 

1063 

1064 # N = 55, E = 171, FN = 8.84503 

1065 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 

1066 ... 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 

1067 ... 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1])) 

1068 171 

1069 

1070 # N = 55, E = 171, FN = 8.84503 

1071 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 

1072 ... 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 

1073 ... 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0])) 

1074 171 

1075 

1076 # N = 56, E = 192, FN = 8.16667 

1077 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 

1078 ... 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 

1079 ... 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 1])) 

1080 192 

1081 

1082 # N = 56, E = 192, FN = 8.16667 

1083 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 

1084 ... 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 

1085 ... 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0])) 

1086 192 

1087 

1088 # N = 57, E = 188, FN = 8.64096 

1089 >>> labs(np.array([0, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 

1090 ... 1, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 

1091 ... 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 0])) 

1092 188 

1093 

1094 # N = 57, E = 188, FN = 8.64096 

1095 >>> labs(np.array([1, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 

1096 ... 0, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 

1097 ... 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 1])) 

1098 188 

1099 

1100 # N = 58, E = 197, FN = 8.53807 

1101 >>> labs(np.array([0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 

1102 ... 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 

1103 ... 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 1])) 

1104 197 

1105 

1106 # N = 58, E = 197, FN = 8.53807 

1107 >>> labs(np.array([1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 

1108 ... 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 

1109 ... 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0])) 

1110 197 

1111 

1112 # N = 59, E = 205, FN = 8.49024 

1113 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 

1114 ... 1, 1, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 

1115 ... 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1])) 

1116 205 

1117 

1118 # N = 59, E = 205, FN = 8.49024 

1119 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 

1120 ... 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 

1121 ... 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0])) 

1122 205 

1123 

1124 # N = 59, E = 205, FN = 8.49024 

1125 >>> labs(np.array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 

1126 ... 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 

1127 ... 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0])) 

1128 205 

1129 

1130 # N = 59, E = 205, FN = 8.49024 

1131 >>> labs(np.array([1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 

1132 ... 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 

1133 ... 1, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1])) 

1134 205 

1135 

1136 # N = 60, E = 218, FN = 8.25688 

1137 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 

1138 ... 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 1, 

1139 ... 0, 0, 1, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1])) 

1140 218 

1141 

1142 # N = 60, E = 218, FN = 8.25688 

1143 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 

1144 ... 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0, 0, 

1145 ... 1, 1, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0])) 

1146 218 

1147 

1148 # N = 60, E = 218, FN = 8.25688 

1149 >>> labs(np.array([0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 

1150 ... 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 1, 1, 

1151 ... 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1])) 

1152 218 

1153 

1154 # N = 60, E = 218, FN = 8.25688 

1155 >>> labs(np.array([1, 1, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0, 

1156 ... 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 0, 

1157 ... 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0])) 

1158 218 

1159 

1160 # N = 61, E = 226, FN = 8.23230 

1161 >>> labs(np.array([0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 

1162 ... 0, 0, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 

1163 ... 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 

1164 ... 1])) 

1165 226 

1166 

1167 # N = 61, E = 226, FN = 8.23230 

1168 >>> labs(np.array([1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 

1169 ... 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1, 

1170 ... 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 

1171 ... 0])) 

1172 226 

1173 

1174 # N = 62, E = 235, FN = 8.17872 

1175 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 1, 0, 

1176 ... 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 

1177 ... 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 

1178 ... 1, 1])) 

1179 235 

1180 

1181 # N = 62, E = 235, FN = 8.17872 

1182 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 0, 1, 

1183 ... 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 

1184 ... 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 

1185 ... 0, 0])) 

1186 235 

1187 

1188 # N = 62, E = 235, FN = 8.17872 

1189 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 

1190 ... 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 

1191 ... 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 

1192 ... 1, 1])) 

1193 235 

1194 

1195 # N = 62, E = 235, FN = 8.17872 

1196 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 

1197 ... 1, 0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 

1198 ... 0, 1, 0, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 0, 1, 

1199 ... 0, 0])) 

1200 235 

1201 

1202 # N = 63, E = 207, FN = 9.58696 

1203 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 

1204 ... 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 

1205 ... 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 

1206 ... 1, 1, 0])) 

1207 207 

1208 

1209 # N = 63, E = 207, FN = 9.58696 

1210 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 

1211 ... 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 

1212 ... 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 

1213 ... 0, 0, 1])) 

1214 207 

1215 

1216 # N = 64, E = 208, FN = 9.84615 

1217 >>> labs(np.array([0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 

1218 ... 1, 1, 1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 1, 

1219 ... 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 

1220 ... 1, 1, 0, 0])) 

1221 208 

1222 

1223 # N = 64, E = 208, FN = 9.84615 

1224 >>> labs(np.array([1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 

1225 ... 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 

1226 ... 1, 1, 1, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 

1227 ... 0, 0, 1, 1])) 

1228 208 

1229 

1230 # N = 65, E = 240, FN = 8.80208 

1231 >>> labs(np.array([0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 

1232 ... 0, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 

1233 ... 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 0, 1, 1, 0, 1, 1, 

1234 ... 0, 0, 1, 0, 0])) 

1235 240 

1236 

1237 # N = 65, E = 240, FN = 8.80208 

1238 >>> labs(np.array([1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 0, 

1239 ... 1, 0, 0, 0, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 

1240 ... 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0, 0, 

1241 ... 1, 1, 0, 1, 1])) 

1242 240 

1243 

1244 # N = 66, E = 257, FN = 8.47471 

1245 >>> labs(np.array([0, 0, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 0, 

1246 ... 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 1, 

1247 ... 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 

1248 ... 1, 1, 1, 1, 0, 0])) 

1249 257 

1250 

1251 # N = 66, E = 257, FN = 8.47471 

1252 >>> labs(np.array([1, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 

1253 ... 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 1, 0, 

1254 ... 1, 0, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 

1255 ... 0, 0, 0, 0, 1, 1])) 

1256 257 

1257 

1258 # N = 3, all bits are True 

1259 >>> labs(np.array([1, 1, 1])) 

1260 5 

1261 

1262 # N = 4, all bits are True 

1263 >>> labs(np.array([1, 1, 1, 1])) 

1264 14 

1265 

1266 # N = 5, all bits are True 

1267 >>> labs(np.array([1, 1, 1, 1, 1])) 

1268 30 

1269 

1270 # N = 6, all bits are True 

1271 >>> labs(np.array([1, 1, 1, 1, 1, 1])) 

1272 55 

1273 

1274 # N = 7, all bits are True 

1275 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1])) 

1276 91 

1277 

1278 # N = 8, all bits are False 

1279 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0])) 

1280 140 

1281 

1282 # N = 9, all bits are False 

1283 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1284 204 

1285 

1286 # N = 10, all bits are True 

1287 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1288 285 

1289 

1290 # N = 11, all bits are True 

1291 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1292 385 

1293 

1294 # N = 12, all bits are True 

1295 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1296 506 

1297 

1298 # N = 13, all bits are False 

1299 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1300 650 

1301 

1302 # N = 14, all bits are False 

1303 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1304 819 

1305 

1306 # N = 15, all bits are False 

1307 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1308 1015 

1309 

1310 # N = 16, all bits are False 

1311 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1312 1240 

1313 

1314 # N = 17, all bits are True 

1315 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1316 1496 

1317 

1318 # N = 18, all bits are True 

1319 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1320 1785 

1321 

1322 # N = 19, all bits are False 

1323 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1324 ... 0])) 

1325 2109 

1326 

1327 # N = 20, all bits are False 

1328 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1329 ... 0, 0])) 

1330 2470 

1331 

1332 # N = 21, all bits are True 

1333 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1334 ... 1, 1, 1])) 

1335 2870 

1336 

1337 # N = 22, all bits are True 

1338 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1339 ... 1, 1, 1, 1])) 

1340 3311 

1341 

1342 # N = 23, all bits are True 

1343 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1344 ... 1, 1, 1, 1, 1])) 

1345 3795 

1346 

1347 # N = 24, all bits are False 

1348 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1349 ... 0, 0, 0, 0, 0, 0])) 

1350 4324 

1351 

1352 # N = 25, all bits are True 

1353 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1354 ... 1, 1, 1, 1, 1, 1, 1])) 

1355 4900 

1356 

1357 # N = 26, all bits are True 

1358 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1359 ... 1, 1, 1, 1, 1, 1, 1, 1])) 

1360 5525 

1361 

1362 # N = 27, all bits are True 

1363 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1364 ... 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1365 6201 

1366 

1367 # N = 28, all bits are True 

1368 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1369 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1370 6930 

1371 

1372 # N = 29, all bits are False 

1373 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1374 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1375 7714 

1376 

1377 # N = 30, all bits are False 

1378 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1379 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1380 8555 

1381 

1382 # N = 31, all bits are True 

1383 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1384 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1385 9455 

1386 

1387 # N = 32, all bits are False 

1388 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1389 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1390 10416 

1391 

1392 # N = 33, all bits are True 

1393 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1394 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1395 11440 

1396 

1397 # N = 34, all bits are False 

1398 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1399 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1400 12529 

1401 

1402 # N = 35, all bits are False 

1403 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1404 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1405 13685 

1406 

1407 # N = 36, all bits are True 

1408 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1409 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1410 14910 

1411 

1412 # N = 37, all bits are False 

1413 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1414 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1415 16206 

1416 

1417 # N = 38, all bits are True 

1418 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1419 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1420 17575 

1421 

1422 # N = 39, all bits are True 

1423 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1424 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1425 19019 

1426 

1427 # N = 40, all bits are False 

1428 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1429 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1430 ... 0])) 

1431 20540 

1432 

1433 # N = 41, all bits are False 

1434 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1435 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1436 ... 0, 0])) 

1437 22140 

1438 

1439 # N = 42, all bits are True 

1440 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1441 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1442 ... 1, 1, 1])) 

1443 23821 

1444 

1445 # N = 43, all bits are True 

1446 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1447 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1448 ... 1, 1, 1, 1])) 

1449 25585 

1450 

1451 # N = 44, all bits are False 

1452 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1453 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1454 ... 0, 0, 0, 0, 0])) 

1455 27434 

1456 

1457 # N = 45, all bits are False 

1458 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1459 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1460 ... 0, 0, 0, 0, 0, 0])) 

1461 29370 

1462 

1463 # N = 46, all bits are True 

1464 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1465 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1466 ... 1, 1, 1, 1, 1, 1, 1])) 

1467 31395 

1468 

1469 # N = 47, all bits are True 

1470 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1471 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1472 ... 1, 1, 1, 1, 1, 1, 1, 1])) 

1473 33511 

1474 

1475 # N = 48, all bits are True 

1476 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1477 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1478 ... 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1479 35720 

1480 

1481 # N = 49, all bits are False 

1482 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1483 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1484 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1485 38024 

1486 

1487 # N = 50, all bits are False 

1488 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1489 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1490 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1491 40425 

1492 

1493 # N = 51, all bits are True 

1494 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1495 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1496 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1497 42925 

1498 

1499 # N = 52, all bits are True 

1500 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1501 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1502 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1503 45526 

1504 

1505 # N = 53, all bits are True 

1506 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1507 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1508 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1509 48230 

1510 

1511 # N = 54, all bits are True 

1512 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1513 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1514 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1515 51039 

1516 

1517 # N = 55, all bits are True 

1518 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1519 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1520 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1521 53955 

1522 

1523 # N = 56, all bits are False 

1524 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1525 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1526 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1527 56980 

1528 

1529 # N = 57, all bits are False 

1530 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1531 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1532 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1533 60116 

1534 

1535 # N = 58, all bits are True 

1536 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1537 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1538 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1539 63365 

1540 

1541 # N = 59, all bits are True 

1542 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1543 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1544 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1545 66729 

1546 

1547 # N = 60, all bits are True 

1548 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1549 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1550 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1551 70210 

1552 

1553 # N = 61, all bits are False 

1554 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1555 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1556 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1557 ... 0])) 

1558 73810 

1559 

1560 # N = 62, all bits are True 

1561 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1562 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1563 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1564 ... 1, 1])) 

1565 77531 

1566 

1567 # N = 63, all bits are True 

1568 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1569 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1570 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1571 ... 1, 1, 1])) 

1572 81375 

1573 

1574 # N = 64, all bits are True 

1575 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1576 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1577 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1578 ... 1, 1, 1, 1])) 

1579 85344 

1580 

1581 # N = 65, all bits are True 

1582 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1583 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1584 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1585 ... 1, 1, 1, 1, 1])) 

1586 89440 

1587 

1588 # N = 66, all bits are True 

1589 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1590 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1591 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1592 ... 1, 1, 1, 1, 1, 1])) 

1593 93665 

1594 

1595 # N = 67, all bits are False 

1596 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1597 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1598 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1599 ... 0, 0, 0, 0, 0, 0, 0])) 

1600 98021 

1601 

1602 # N = 68, all bits are False 

1603 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1604 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1605 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1606 ... 0, 0, 0, 0, 0, 0, 0, 0])) 

1607 102510 

1608 

1609 # N = 69, all bits are False 

1610 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1611 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1612 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1613 ... 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1614 107134 

1615 

1616 # N = 70, all bits are False 

1617 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1618 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1619 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1620 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1621 111895 

1622 

1623 # N = 71, all bits are False 

1624 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1625 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1626 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1627 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1628 116795 

1629 

1630 # N = 72, all bits are False 

1631 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1632 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1633 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1634 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1635 121836 

1636 

1637 # N = 73, all bits are True 

1638 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1639 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1640 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1641 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1642 127020 

1643 

1644 # N = 74, all bits are False 

1645 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1646 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1647 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1648 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1649 132349 

1650 

1651 # N = 75, all bits are True 

1652 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1653 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1654 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1655 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1656 137825 

1657 

1658 # N = 76, all bits are True 

1659 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1660 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1661 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1662 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1663 143450 

1664 

1665 # N = 77, all bits are False 

1666 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1667 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1668 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1669 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1670 149226 

1671 

1672 # N = 78, all bits are False 

1673 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1674 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1675 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1676 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1677 155155 

1678 

1679 # N = 79, all bits are False 

1680 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1681 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1682 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1683 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1684 161239 

1685 

1686 # N = 80, all bits are False 

1687 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1688 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1689 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1690 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1691 167480 

1692 

1693 # N = 81, all bits are True 

1694 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1695 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1696 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1697 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1698 173880 

1699 

1700 # N = 82, all bits are False 

1701 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1702 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1703 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1704 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1705 ... 0])) 

1706 180441 

1707 

1708 # N = 83, all bits are False 

1709 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1710 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1711 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1712 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1713 ... 0, 0])) 

1714 187165 

1715 

1716 # N = 84, all bits are False 

1717 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1718 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1719 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1720 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1721 ... 0, 0, 0])) 

1722 194054 

1723 

1724 # N = 85, all bits are False 

1725 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1726 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1727 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1728 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1729 ... 0, 0, 0, 0])) 

1730 201110 

1731 

1732 # N = 86, all bits are True 

1733 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1734 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1735 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1736 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1737 ... 1, 1, 1, 1, 1])) 

1738 208335 

1739 

1740 # N = 87, all bits are False 

1741 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1742 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1743 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1744 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1745 ... 0, 0, 0, 0, 0, 0])) 

1746 215731 

1747 

1748 # N = 88, all bits are True 

1749 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1750 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1751 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1752 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1753 ... 1, 1, 1, 1, 1, 1, 1])) 

1754 223300 

1755 

1756 # N = 89, all bits are False 

1757 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1758 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1759 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1760 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1761 ... 0, 0, 0, 0, 0, 0, 0, 0])) 

1762 231044 

1763 

1764 # N = 90, all bits are False 

1765 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1766 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1767 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1768 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1769 ... 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1770 238965 

1771 

1772 # N = 91, all bits are True 

1773 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1774 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1775 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1776 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1777 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1778 247065 

1779 

1780 # N = 92, all bits are True 

1781 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1782 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1783 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1784 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1785 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1786 255346 

1787 

1788 # N = 93, all bits are True 

1789 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1790 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1791 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1792 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1793 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1794 263810 

1795 

1796 # N = 94, all bits are True 

1797 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1798 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1799 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1800 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1801 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1802 272459 

1803 

1804 # N = 95, all bits are True 

1805 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1806 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1807 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1808 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1809 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1810 281295 

1811 

1812 # N = 96, all bits are False 

1813 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1814 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1815 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1816 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1817 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1818 290320 

1819 

1820 # N = 97, all bits are False 

1821 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1822 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1823 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1824 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1825 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1826 299536 

1827 

1828 # N = 98, all bits are False 

1829 >>> labs(np.array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1830 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1831 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1832 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 

1833 ... 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])) 

1834 308945 

1835 

1836 # N = 99, all bits are True 

1837 >>> labs(np.array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1838 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1839 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1840 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 

1841 ... 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])) 

1842 318549 

1843 """ 

1844 n: Final[int] = len(x) # Get the length of the bit string. 

1845 result: int = 0 

1846 for k in range(1, n): 

1847 sqr: int = 0 

1848 for i in range(n - k): 

1849 sqr += 1 if x[i] == x[i + k] else -1 

1850 result += sqr * sqr 

1851 return result 

1852 

1853 

1854def energy_to_merit(n: int, energy: int) -> int | float: 

1855 """ 

1856 Convert an energy value to a merit factor. 

1857 

1858 :param n: the length of the bit sequence 

1859 :param energy: the integer energy factor, computed based on :func:`labs`. 

1860 :returns: a merit factor 

1861 

1862 >>> try: 

1863 ... energy_to_merit(0, 1) 

1864 ... except ValueError as ve: 

1865 ... print(ve) 

1866 n=0 is invalid, must be in 3..1000000000. 

1867 

1868 >>> try: 

1869 ... energy_to_merit(4, 0) 

1870 ... except ValueError as ve: 

1871 ... print(ve) 

1872 energy=0 is invalid, must be in 1..1000000000. 

1873 

1874 >>> energy_to_merit(3, 1) 

1875 4.5 

1876 >>> energy_to_merit(4, 2) 

1877 4 

1878 >>> energy_to_merit(5, 2) 

1879 6.25 

1880 >>> print(f"{energy_to_merit(6, 7):.4}") 

1881 2.571 

1882 >>> print(f"{energy_to_merit(7, 3):.4}") 

1883 8.167 

1884 >>> energy_to_merit(8, 8) 

1885 4 

1886 >>> print(f"{energy_to_merit(9, 12):.4}") 

1887 3.375 

1888 >>> print(f"{energy_to_merit(10, 13):.4}") 

1889 3.846 

1890 >>> print(f"{energy_to_merit(11, 5):.4}") 

1891 12.1 

1892 >>> print(f"{energy_to_merit(12, 10):.4}") 

1893 7.2 

1894 >>> print(f"{energy_to_merit(13, 6):.5}") 

1895 14.083 

1896 >>> print(f"{energy_to_merit(14, 19):.4}") 

1897 5.158 

1898 >>> print(f"{energy_to_merit(15, 15):.4}") 

1899 7.5 

1900 >>> print(f"{energy_to_merit(16, 24):.4}") 

1901 5.333 

1902 >>> print(f"{energy_to_merit(17, 32):.4}") 

1903 4.516 

1904 >>> print(f"{energy_to_merit(18, 25):.4}") 

1905 6.48 

1906 >>> print(f"{energy_to_merit(47, 135):.4}") 

1907 8.181 

1908 >>> print(f"{energy_to_merit(66, 257):.4}") 

1909 8.475 

1910 >>> print(f"{energy_to_merit(19, 33):.4}") 

1911 5.47 

1912 >>> print(f"{energy_to_merit(119, 835):.4}") 

1913 8.48 

1914 >>> print(f"{energy_to_merit(401, 11888):.5}") 

1915 6.7632 

1916 """ 

1917 n = check_int_range(n, "n", 3) 

1918 energy = check_int_range(energy, "energy", 1) 

1919 return try_int_div(n * n, energy + energy) 

1920 

1921 

1922def merit_to_energy(n: int, merit: int | float) -> int: 

1923 """ 

1924 Convert a merit factor back to an energy. 

1925 

1926 :param n: the energy 

1927 :param merit: the merit factor 

1928 :returns: the energy 

1929 

1930 >>> try: 

1931 ... merit_to_energy(0, 1) 

1932 ... except ValueError as ve: 

1933 ... print(ve) 

1934 n=0 is invalid, must be in 3..1000000000. 

1935 

1936 >>> try: 

1937 ... merit_to_energy(3, 0) 

1938 ... except ValueError as ve: 

1939 ... print(ve) 

1940 merit factor cannot be 0. 

1941 

1942 >>> try: 

1943 ... merit_to_energy(3, "x") 

1944 ... except TypeError as te: 

1945 ... print(str(te)[:50]) 

1946 merit should be an instance of any in {float, int} 

1947 

1948 >>> merit_to_energy(3, 4.5) 

1949 1 

1950 >>> merit_to_energy(4, 4) 

1951 2 

1952 >>> merit_to_energy(5, 6.25) 

1953 2 

1954 >>> merit_to_energy(6, 2.571) 

1955 7 

1956 >>> merit_to_energy(7, 8.167) 

1957 3 

1958 >>> merit_to_energy(8, 4) 

1959 8 

1960 >>> merit_to_energy(9, 3.375) 

1961 12 

1962 >>> merit_to_energy(10, 3.846) 

1963 13 

1964 >>> merit_to_energy(11, 12.100) 

1965 5 

1966 >>> merit_to_energy(12, 7.200) 

1967 10 

1968 >>> merit_to_energy(13, 14.083) 

1969 6 

1970 >>> merit_to_energy(14, 5.158) 

1971 19 

1972 >>> merit_to_energy(15, 7.5) 

1973 15 

1974 >>> merit_to_energy(16, 5.333) 

1975 24 

1976 >>> merit_to_energy(17, 4.516) 

1977 32 

1978 >>> merit_to_energy(18, 6.48) 

1979 25 

1980 >>> merit_to_energy(47, 8.181) 

1981 135 

1982 >>> merit_to_energy(66, 8.475) 

1983 257 

1984 >>> merit_to_energy(19, 5.47) 

1985 33 

1986 >>> merit_to_energy(119, 8.48) 

1987 835 

1988 >>> merit_to_energy(401, 6.7632) 

1989 11888 

1990 >>> merit_to_energy(181, 8.9316) 

1991 1834 

1992 >>> merit_to_energy(201, 8.4876) 

1993 2380 

1994 >>> merit_to_energy(215, 8.5888) 

1995 2691 

1996 >>> merit_to_energy(221, 8.8544) 

1997 2758 

1998 >>> merit_to_energy(241, 8.0668) 

1999 3600 

2000 >>> merit_to_energy(249, 8.1323) 

2001 3812 

2002 >>> merit_to_energy(259, 8.0918) 

2003 4145 

2004 >>> merit_to_energy(261, 7.8517) 

2005 4338 

2006 >>> merit_to_energy(271, 7.5386) 

2007 4871 

2008 >>> merit_to_energy(281, 7.5058) 

2009 5260 

2010 >>> merit_to_energy(283, 7.5088) 

2011 5333 

2012 >>> merit_to_energy(301, 7.4827) 

2013 6054 

2014 >>> merit_to_energy(303, 7.2462) 

2015 6335 

2016 >>> merit_to_energy(341, 6.9397) 

2017 8378 

2018 >>> merit_to_energy(381, 7.0893) 

2019 10238 

2020 >>> merit_to_energy(401, 6.7632) 

2021 11888 

2022 """ 

2023 n = check_int_range(n, "n", 3) 

2024 if not isinstance(merit, int | float): 

2025 raise type_error(merit, "merit", (int, float)) 

2026 if (not isfinite(merit)) or (merit <= 0): 

2027 raise ValueError(f"merit factor cannot be {merit}.") 

2028 return int(0.5 + ((n * n) / merit) / 2) 

2029 

2030 

2031#: The lower bounds of the LABS problem, i.e., the objective values of the 

2032#: known global optima also used in the unit tests of the :func:`labs` 

2033#: function. We use the data from 

2034#: 

2035#: Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences. 

2036#: arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016 

2037#: https://arxiv.org/pdf/1512.02475 

2038_LBS: Final[dict[int, int]] = { 

2039 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10, 13: 6, 

2040 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26, 22: 39, 

2041 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62, 30: 59, 31: 67, 

2042 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86, 38: 87, 39: 99, 40: 108, 

2043 41: 108, 42: 101, 43: 109, 44: 122, 45: 118, 46: 131, 47: 135, 48: 140, 

2044 49: 136, 50: 153, 51: 153, 52: 166, 53: 170, 54: 175, 55: 171, 56: 192, 

2045 57: 188, 58: 197, 59: 205, 60: 218, 61: 226, 62: 235, 63: 207, 64: 208, 

2046 65: 240, 66: 257} 

2047 

2048 

2049#: the internal set of related work solutions 

2050__RELATED_WORKS: Final[dict[tuple[str, str], dict[int, int]]] = { 

2051 ("PM2016LABS", 

2052 "Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary " 

2053 "Sequences. arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016"): { 

2054 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10, 

2055 13: 6, 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26, 

2056 22: 39, 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62, 

2057 30: 59, 31: 67, 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86, 

2058 38: 87, 39: 99, 40: 108, 41: 108, 42: 101, 43: 109, 44: 122, 45: 118, 

2059 46: 131, 47: 135, 48: 140, 49: 136, 50: 153, 51: 153, 52: 166, 

2060 53: 170, 54: 175, 55: 171, 56: 192, 57: 188, 58: 197, 59: 205, 

2061 60: 218, 61: 226, 62: 235, 63: 207, 64: 208, 65: 240, 66: 257, 

2062 67: 241, 69: 282, 71: 275, 73: 348, 75: 341, 77: 358, 79: 407, 

2063 81: 400, 83: 377, 85: 442, 87: 451, 89: 484, 91: 477, 93: 502, 

2064 95: 479, 97: 536, 99: 577, 101: 578, 103: 555, 105: 620, 107: 677, 

2065 109: 662, 111: 687, 113: 752, 115: 745, 117: 786, 119: 835, 

2066 }, 

2067 ("BBB2017LABSOIMFARPTAT", 

2068 "Borko Bošković, Franc Brglez, and Janez Brest. Low-Autocorrelation " 

2069 "Binary Sequences: On Improved Merit Factors and Runtime Predictions" 

2070 " to Achieve Them. arXiv:1406.5301v6 [cs.DS] 6 May 2017." 

2071 "https://arxiv.org/pdf/1406.5301"): { 

2072 181: 1834, 201: 2380, 215: 2691, 221: 2758, 241: 3600, 249: 3812, 

2073 259: 4145, 261: 4338, 271: 4871, 281: 5260, 283: 5333, 301: 6054, 

2074 303: 6335, 341: 8378, 381: 10238, 401: 11888, 

2075 107: merit_to_energy(107, 8.4557), 109: merit_to_energy(109, 8.9736), 

2076 111: merit_to_energy(111, 8.9672), 113: merit_to_energy(113, 8.49), 

2077 115: merit_to_energy(115, 8.8758), 117: merit_to_energy(117, 8.708), 

2078 119: merit_to_energy(119, 8.4796), 121: merit_to_energy(121, 8.6736), 

2079 141: merit_to_energy(141, 8.8282), 149: merit_to_energy(149, 9.1137), 

2080 157: merit_to_energy(157, 9.0223), 161: merit_to_energy(161, 8.5718), 

2081 165: merit_to_energy(165, 9.2351), 169: merit_to_energy(169, 9.3215), 

2082 173: merit_to_energy(173, 9.3645), 175: merit_to_energy(175, 9.0768), 

2083 177: merit_to_energy(177, 9.5052), 179: merit_to_energy(179, 9.0974), 

2084 183: merit_to_energy(183, 9.0073), 189: merit_to_energy(189, 9.0847), 

2085 }, 

2086 ("MD2015NESFLLABS", 

2087 "Wai Ho Mow and Ke-Lin Du. New Evolutionary Search for Long Low " 

2088 "Autocorrelation Binary Sequences. IEEE Transactions on Aerospace and " 

2089 "Electronic Systems. 51(1):290-303. January 2015. " 

2090 "doi:10.1109/TAES.2014.130518"): { 

2091 106: merit_to_energy(106, 5.0295), 107: merit_to_energy(107, 5.1805), 

2092 108: merit_to_energy(108, 4.6957), 109: merit_to_energy(109, 5.0429), 

2093 110: merit_to_energy(110, 4.9631), 111: merit_to_energy(111, 5.626), 

2094 112: merit_to_energy(112, 5.3153), 113: merit_to_energy(113, 4.8514), 

2095 114: merit_to_energy(114, 4.4114), 115: merit_to_energy(115, 4.8729), 

2096 116: merit_to_energy(116, 4.3974), 117: merit_to_energy(117, 4.2832), 

2097 118: merit_to_energy(118, 4.5355), 119: merit_to_energy(119, 4.7235), 

2098 120: merit_to_energy(120, 5.8632), 121: merit_to_energy(121, 4.4421), 

2099 122: merit_to_energy(122, 4.6368), 123: merit_to_energy(123, 4.6897), 

2100 124: merit_to_energy(124, 4.9987), 125: merit_to_energy(125, 4.8646), 

2101 126: merit_to_energy(126, 5.0272), 127: merit_to_energy(127, 4.8965), 

2102 128: merit_to_energy(128, 4.8075), 129: merit_to_energy(129, 4.6328), 

2103 130: merit_to_energy(130, 4.8872), 131: merit_to_energy(131, 4.9627), 

2104 132: merit_to_energy(132, 4.343), 133: merit_to_energy(133, 4.6995), 

2105 134: merit_to_energy(134, 4.438), 135: merit_to_energy(135, 4.5134), 

2106 136: merit_to_energy(136, 4.472), 137: merit_to_energy(137, 4.2273), 

2107 138: merit_to_energy(138, 4.3341), 139: merit_to_energy(139, 4.6602), 

2108 140: merit_to_energy(140, 4.6009), 141: merit_to_energy(141, 4.418), 

2109 142: merit_to_energy(142, 4.4789), 143: merit_to_energy(143, 4.5584), 

2110 144: merit_to_energy(144, 4.2492), 145: merit_to_energy(145, 4.4696), 

2111 146: merit_to_energy(146, 4.6239), 147: merit_to_energy(147, 4.3409), 

2112 148: merit_to_energy(148, 4.3703), 149: merit_to_energy(149, 4.5531), 

2113 150: merit_to_energy(150, 4.7209), 151: merit_to_energy(151, 4.3663), 

2114 152: merit_to_energy(152, 5.2509), 153: merit_to_energy(153, 4.8206), 

2115 154: merit_to_energy(154, 4.2517), 155: merit_to_energy(155, 4.2704), 

2116 156: merit_to_energy(156, 4.5986), 157: merit_to_energy(157, 4.6368), 

2117 158: merit_to_energy(158, 4.9473), 159: merit_to_energy(159, 4.7396), 

2118 160: merit_to_energy(160, 4.878), 161: merit_to_energy(161, 4.7789), 

2119 162: merit_to_energy(162, 4.5674), 163: merit_to_energy(163, 4.676), 

2120 164: merit_to_energy(164, 5.0367), 165: merit_to_energy(165, 4.2834), 

2121 166: merit_to_energy(166, 4.5337), 167: merit_to_energy(167, 4.719), 

2122 168: merit_to_energy(168, 4.6057), 169: merit_to_energy(169, 4.7099), 

2123 170: merit_to_energy(170, 4.6598), 171: merit_to_energy(171, 4.4077), 

2124 172: merit_to_energy(172, 4.7685), 173: merit_to_energy(173, 4.7932), 

2125 174: merit_to_energy(174, 4.6564), 175: merit_to_energy(175, 4.2832), 

2126 176: merit_to_energy(176, 4.2549), 177: merit_to_energy(177, 4.3416), 

2127 178: merit_to_energy(178, 4.1331), 179: merit_to_energy(179, 4.3287), 

2128 180: merit_to_energy(180, 4.3385), 181: merit_to_energy(181, 4.5832), 

2129 182: merit_to_energy(182, 4.2347), 183: merit_to_energy(183, 4.4879), 

2130 184: merit_to_energy(184, 3.9331), 185: merit_to_energy(185, 4.5464), 

2131 186: merit_to_energy(186, 4.6239), 187: merit_to_energy(187, 4.5285), 

2132 188: merit_to_energy(188, 4.7176), 189: merit_to_energy(189, 4.809), 

2133 190: merit_to_energy(190, 4.4645), 191: merit_to_energy(191, 5.0125), 

2134 192: merit_to_energy(192, 4.795), 193: merit_to_energy(193, 4.5205), 

2135 194: merit_to_energy(194, 4.4288), 195: merit_to_energy(195, 4.2316), 

2136 196: merit_to_energy(196, 4.3048), 197: merit_to_energy(197, 4.6267), 

2137 198: merit_to_energy(198, 4.5052), 199: merit_to_energy(199, 4.4889), 

2138 200: merit_to_energy(200, 4.5496), 201: merit_to_energy(201, 4.008), 

2139 202: merit_to_energy(202, 4.3033), 203: merit_to_energy(203, 4.3033), 

2140 204: merit_to_energy(204, 4.231), 205: merit_to_energy(205, 4.705), 

2141 206: merit_to_energy(206, 4.1288), 207: merit_to_energy(207, 4.1886), 

2142 208: merit_to_energy(208, 4.3126), 209: merit_to_energy(209, 4.3542), 

2143 210: merit_to_energy(210, 4.6392), 211: merit_to_energy(211, 4.2899), 

2144 212: merit_to_energy(212, 4.3567), 213: merit_to_energy(213, 4.517), 

2145 214: merit_to_energy(214, 4.4872), 215: merit_to_energy(215, 4.3584), 

2146 216: merit_to_energy(216, 4.7725), 217: merit_to_energy(217, 4.1364), 

2147 218: merit_to_energy(218, 4.5373), 219: merit_to_energy(219, 4.7798), 

2148 220: merit_to_energy(220, 4.6414), 221: merit_to_energy(221, 4.4096), 

2149 222: merit_to_energy(222, 4.5273), 223: merit_to_energy(223, 4.5216), 

2150 224: merit_to_energy(224, 4.5253), 225: merit_to_energy(225, 4.6462), 

2151 226: merit_to_energy(226, 4.599), 227: merit_to_energy(227, 4.5641), 

2152 228: merit_to_energy(228, 4.6365), 229: merit_to_energy(229, 4.5664), 

2153 230: merit_to_energy(230, 4.5299), 231: merit_to_energy(231, 4.5819), 

2154 232: merit_to_energy(232, 4.4556), 233: merit_to_energy(233, 4.5423), 

2155 234: merit_to_energy(234, 4.3122), 235: merit_to_energy(235, 4.4529), 

2156 236: merit_to_energy(236, 4.3418), 237: merit_to_energy(237, 4.3488), 

2157 238: merit_to_energy(238, 4.6992), 239: merit_to_energy(239, 4.5457), 

2158 240: merit_to_energy(240, 4.6512), 241: merit_to_energy(241, 4.3921), 

2159 242: merit_to_energy(242, 4.3464), 243: merit_to_energy(243, 4.6415), 

2160 244: merit_to_energy(244, 4.2224), 245: merit_to_energy(245, 4.3994), 

2161 246: merit_to_energy(246, 4.498), 247: merit_to_energy(247, 4.7024), 

2162 248: merit_to_energy(248, 4.4414), 249: merit_to_energy(249, 4.6491), 

2163 250: merit_to_energy(250, 4.4816), 251: merit_to_energy(251, 4.7291), 

2164 252: merit_to_energy(252, 4.002), 253: merit_to_energy(253, 4.7163), 

2165 254: merit_to_energy(254, 4.544), 255: merit_to_energy(255, 4.5902), 

2166 256: merit_to_energy(256, 4.8075), 257: merit_to_energy(257, 4.8338), 

2167 258: merit_to_energy(258, 4.3421), 259: merit_to_energy(259, 4.4596), 

2168 260: merit_to_energy(260, 4.6492), 261: merit_to_energy(261, 4.2672), 

2169 262: merit_to_energy(262, 4.4557), 263: merit_to_energy(263, 4.3344), 

2170 264: merit_to_energy(264, 4.6814), 265: merit_to_energy(265, 4.6007), 

2171 266: merit_to_energy(266, 4.3118), 267: merit_to_energy(267, 4.2652), 

2172 268: merit_to_energy(268, 4.5912), 269: merit_to_energy(269, 4.5903), 

2173 270: merit_to_energy(270, 4.3836), 271: merit_to_energy(271, 4.5028), 

2174 272: merit_to_energy(272, 4.8267), 273: merit_to_energy(273, 4.4617), 

2175 274: merit_to_energy(274, 4.4683), 275: merit_to_energy(275, 4.3881), 

2176 276: merit_to_energy(276, 4.5032), 277: merit_to_energy(277, 4.4352), 

2177 278: merit_to_energy(278, 4.579), 279: merit_to_energy(279, 4.3192), 

2178 280: merit_to_energy(280, 4.2535), 281: merit_to_energy(281, 4.2325), 

2179 282: merit_to_energy(282, 4.4273), 283: merit_to_energy(283, 4.4747), 

2180 284: merit_to_energy(284, 4.4307), 285: merit_to_energy(285, 4.3735), 

2181 286: merit_to_energy(286, 4.383), 287: merit_to_energy(287, 4.1706), 

2182 288: merit_to_energy(288, 4.3858), 289: merit_to_energy(289, 4.2981), 

2183 290: merit_to_energy(290, 4.5622), 291: merit_to_energy(291, 4.5621), 

2184 292: merit_to_energy(292, 4.641), 293: merit_to_energy(293, 4.7599), 

2185 294: merit_to_energy(294, 4.3961), 295: merit_to_energy(295, 4.3992), 

2186 296: merit_to_energy(296, 4.3203), 297: merit_to_energy(297, 4.2953), 

2187 298: merit_to_energy(298, 4.5771), 299: merit_to_energy(299, 4.4166), 

2188 300: merit_to_energy(300, 4.4074), 303: merit_to_energy(303, 4.3507), 

2189 304: merit_to_energy(304, 4.0676), 350: merit_to_energy(350, 3.9458), 

2190 353: merit_to_energy(353, 4.2075), 400: merit_to_energy(400, 4.3908), 

2191 449: merit_to_energy(449, 4.0547), 450: merit_to_energy(450, 4.4235), 

2192 500: merit_to_energy(500, 4.3442), 512: merit_to_energy(512, 4.2656), 

2193 547: merit_to_energy(547, 4.3408), 550: merit_to_energy(550, 4.0695), 

2194 600: merit_to_energy(600, 3.6753), 650: merit_to_energy(650, 3.9239), 

2195 653: merit_to_energy(653, 4.2287), 700: merit_to_energy(700, 4.1524), 

2196 750: merit_to_energy(750, 3.7603), 751: merit_to_energy(751, 4.1537), 

2197 800: merit_to_energy(800, 3.7481), 850: merit_to_energy(850, 3.8096), 

2198 853: merit_to_energy(853, 4.0854), 900: merit_to_energy(900, 3.7623), 

2199 950: merit_to_energy(950, 4.0438), 953: merit_to_energy(953, 3.8493), 

2200 1000: merit_to_energy(1000, 3.7873), 

2201 1019: merit_to_energy(1019, 4.139), 

2202 1024: merit_to_energy(1024, 3.9683), 

2203 1500: merit_to_energy(1500, 3.7316), 

2204 2000: merit_to_energy(2000, 3.6193), 

2205 2048: merit_to_energy(2048, 3.5387), 

2206 2197: merit_to_energy(2197, 3.6423), 

2207 3000: merit_to_energy(3000, 3.3608), 

2208 4096: merit_to_energy(4096, 3.4589), 

2209 }, 

2210 ("BB2018AHAFALABSPWOLAHMF", 

2211 "Borko Bošković and Janez Brest. A Heuristic Algorithm for a Low " 

2212 "Autocorrelation Binary Sequence Problem with Odd Length and High " 

2213 "Merit Factor. IEEE Access 6:4127-4134. January 2018. " 

2214 "doi:10.1109/ACCESS.2018.2789916 "): { 

2215 191: 1903, 193: 2144, 195: 2105, 197: 2202, 199: 2195, 201: 2220, 

2216 203: 2317, 205: 2430, 207: 2351, 209: 2528, 211: 2457, 213: 2378, 

2217 215: 2595, 217: 2684, 219: 2733, 221: 2734, 223: 2751, 225: 2808, 

2218 }, 

2219 ("BHB2024PSAWALABSP", 

2220 "Borko Bošković, Jana Herzog, and Janez Brest. Parallel Self-Avoiding " 

2221 "Walks for a Low-Autocorrelation Binary Sequences Problem. Journal of " 

2222 "Computational Science 77 (2024) 102260. " 

2223 "doi:10.1016/j.jocs.2024.102260"): { 

2224 171: 1669, 185: 1932, 193: 2040, 197: 2162, 199: 2187, 219: 2605, 

2225 223: 2727, 225: 2768, 229: 2810, 231: 2963, 235: 2965, 237: 3118, 

2226 239: 3055, 241: 3216, 243: 3233, 245: 3226, 247: 3259, 

2227 }, 

2228} 

2229 

2230 

2231def __make_bkses() -> dict[int, tuple[int, tuple[str, str]]]: 

2232 """Make the BKSes.""" 

2233 d: Final[dict[int, tuple[int, tuple[str, str]]]] = {} 

2234 for citation, data in __RELATED_WORKS.items(): 

2235 for n, ener in data.items(): 

2236 # We sanity check the BKSes, too. 

2237 if ((n in _LBS) and (ener < _LBS[n])) or (ener < (n // 2)): 

2238 raise ValueError("Invalid BKS!") 

2239 if (n not in d) or (d[n][0] > ener): 

2240 d[n] = ener, citation 

2241 return d 

2242 

2243 

2244#: The internal lookup table for best-known solutions 

2245_BKS: Final[dict[int, tuple[int, tuple[str, str]]]] = __make_bkses() 

2246del __make_bkses 

2247 

2248 

2249def get_bks(n: int) -> tuple[int, tuple[str, str] | None]: 

2250 """ 

2251 Get the best currently known solution for the given dimension `n`. 

2252 

2253 :param n: the dimension 

2254 :returns: a tuple of the energy value and a tuple of a citation. If 

2255 no solution is found in literature, the lower bound is returned and 

2256 `None` is returned as literature tuple 

2257 

2258 >>> try: 

2259 ... get_bks(-1) 

2260 ... except ValueError as ve: 

2261 ... print(ve) 

2262 n=-1 is invalid, must be in 3..1000000000. 

2263 

2264 >>> get_bks(20)[0] 

2265 26 

2266 

2267 >>> get_bks(401)[0] 

2268 11888 

2269 >>> get_bks(401)[1][0] 

2270 'BBB2017LABSOIMFARPTAT' 

2271 

2272 >>> get_bks(10000) 

2273 (5000, None) 

2274 """ 

2275 n = check_int_range(n, "n", 3) 

2276 if n in _BKS: 

2277 return _BKS[n] 

2278 return n // 2, None 

2279 

2280 

2281def is_labs_objective_value_optimal(n: int, f: int) -> bool | None: 

2282 """ 

2283 Check whether a given objective value is optimal on the LABS problem. 

2284 

2285 We use the lower and upper bound of the LABS problem to check whether a 

2286 given objective value can be optimal. We also use the objective values of 

2287 the known global optima from 

2288 

2289 Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences. 

2290 arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016 

2291 https://arxiv.org/pdf/1512.02475 

2292 

2293 :param n: the scale of the problem 

2294 :param f: the objective value 

2295 :returns: `True` if the objective value `f` is optimal, `False` if it 

2296 cannot be optimal, and `None` if the situation is unclear 

2297 :raises TypeError: if `n` or `f` are not integers 

2298 :raises ValueError: if `n` or `f` are invalid integer values 

2299 

2300 >>> print(is_labs_objective_value_optimal(49, 136)) 

2301 True 

2302 

2303 >>> print(is_labs_objective_value_optimal(49, 137)) 

2304 False 

2305 

2306 >>> print(is_labs_objective_value_optimal(100, 50)) 

2307 True 

2308 

2309 >>> print(is_labs_objective_value_optimal(100, 51)) 

2310 None 

2311 

2312 >>> try: 

2313 ... is_labs_objective_value_optimal("x", 3) 

2314 ... except TypeError as te: 

2315 ... print(te) 

2316 n should be an instance of int but is str, namely 'x'. 

2317 

2318 >>> try: 

2319 ... is_labs_objective_value_optimal(7, "3") 

2320 ... except TypeError as te: 

2321 ... print(te) 

2322 f should be an instance of int but is str, namely '3'. 

2323 

2324 >>> try: 

2325 ... is_labs_objective_value_optimal(0, 0) 

2326 ... except ValueError as ve: 

2327 ... print(ve) 

2328 n=0 is invalid, must be in 3..1000000000. 

2329 

2330 >>> try: 

2331 ... is_labs_objective_value_optimal(3, 0) 

2332 ... except ValueError as ve: 

2333 ... print(ve) 

2334 f=0 is invalid, must be in 1..5. 

2335 

2336 >>> try: 

2337 ... is_labs_objective_value_optimal(3, 234240) 

2338 ... except ValueError as ve: 

2339 ... print(ve) 

2340 f=234240 is invalid, must be in 1..5. 

2341 """ 

2342 check_int_range(n, "n", 3) 

2343 lb: int = n // 2 

2344 ub: int = ((n - 1) * n * (2 * n - 1)) // 6 

2345 if check_int_range(f, "f", lb, ub) <= lb: 

2346 return True 

2347 if n in _LBS: # We know the optimum, so if it is not it, we can stop. 

2348 lb = _LBS[n] 

2349 return check_int_range(f, "f", lb) <= lb 

2350 if f >= ub: 

2351 return False 

2352 return None 

2353 

2354 

2355class LABS(BitStringProblem): 

2356 """The Low-Autocorrelation Sequence Problem.""" 

2357 

2358 def __init__(self, n: int) -> None: 

2359 """ 

2360 Initialize the LABS objective function. 

2361 

2362 :param n: the dimension of the problem 

2363 """ 

2364 super().__init__(check_int_range(n, "n", 3)) 

2365 self.evaluate = labs # type: ignore 

2366 

2367 def lower_bound(self) -> int: 

2368 """ 

2369 Get the lower bound of the LABS problem. 

2370 

2371 The minimum amount of energy that a sequence could possibly have. 

2372 For each correlation length `k`, this is `(n - k) % 2`. 

2373 In total, this is just equivalent to `n // 2`. 

2374 

2375 For some instances of :class:`LABS`, the global optima are known. 

2376 For these instances, we return the objective values of these optima, 

2377 which obviously are `>= n // 2`. 

2378 

2379 :return: the lower bound of the :class:`LABS` problem 

2380 

2381 >>> LABS(16).lower_bound() 

2382 24 

2383 

2384 >>> LABS(61).lower_bound() 

2385 226 

2386 

2387 >>> LABS(200).lower_bound() 

2388 100 

2389 

2390 >>> LABS(124200).lower_bound() 

2391 62100 

2392 """ 

2393 n: Final[int] = self.n 

2394 if n in _LBS: 

2395 return _LBS[n] 

2396 return n // 2 

2397 

2398 def upper_bound(self) -> int: 

2399 """ 

2400 Get the upper bound of the :class:`LABS` problem. 

2401 

2402 The energy of a sequence where all bits are the same is the highest. 

2403 This means that each correlation basically produces its length to the 

2404 square as contribution to the result. The upper bound then is the sum 

2405 of all of these squares from `1..(n-1)`. 

2406 

2407 :return: the upper bound of LABS 

2408 

2409 >>> LABS(16).upper_bound() 

2410 1240 

2411 

2412 >>> LABS(63).upper_bound() 

2413 81375 

2414 

2415 >>> LABS(200).upper_bound() 

2416 2646700 

2417 

2418 >>> LABS(12316).upper_bound() 

2419 622636950290 

2420 """ 

2421 return ((self.n - 1) * self.n * (2 * self.n - 1)) // 6 

2422 

2423 def __str__(self) -> str: 

2424 """ 

2425 Get the name of the LABS objective function. 

2426 

2427 :return: labs_ + length of string 

2428 

2429 >>> LABS(16) 

2430 labs_16 

2431 """ 

2432 return f"labs_{self.n}" 

2433 

2434 @classmethod 

2435 def default_instances( 

2436 cls: type, scale_min: int = 3, 

2437 scale_max: int = min(1024, max(_BKS.keys()))) \ 

2438 -> Iterator[Callable[[], "LABS"]]: 

2439 """ 

2440 Get the default instances of the :class:`LABS` problem. 

2441 

2442 :param scale_min: the minimum permitted scale, by default `3` 

2443 :param scale_max: the maximum permitted scale, by default `625` 

2444 :returns: a sequence of default :class:`LABS` instances 

2445 

2446 >>> len(list(LABS.default_instances())) 

2447 81 

2448 

2449 >>> [x() for x in LABS.default_instances()] 

2450 [labs_3, labs_4, labs_5, labs_6, labs_7, labs_8, labs_9, labs_10, \ 

2451labs_11, labs_12, labs_13, labs_14, labs_15, labs_16, labs_17, labs_18, \ 

2452labs_19, labs_20, labs_21, labs_22, labs_23, labs_24, labs_25, labs_26, \ 

2453labs_27, labs_28, labs_29, labs_30, labs_31, labs_32, labs_33, labs_36, \ 

2454labs_40, labs_41, labs_42, labs_44, labs_48, labs_49, labs_50, labs_55, \ 

2455labs_59, labs_60, labs_64, labs_66, labs_77, labs_79, labs_81, labs_85, \ 

2456labs_99, labs_100, labs_107, labs_111, labs_121, labs_125, labs_128, \ 

2457labs_144, labs_149, labs_169, labs_170, labs_192, labs_196, labs_199, \ 

2458labs_200, labs_222, labs_225, labs_243, labs_256, labs_269, labs_289, \ 

2459labs_300, labs_341, labs_400, labs_500, labs_512, labs_600, labs_625, \ 

2460labs_700, labs_800, labs_900, labs_1000, labs_1024] 

2461 """ 

2462 check_int_range(scale_max, "scale_max", check_int_range( 

2463 scale_min, "scale_min", 1, 1_000_000_000) + 1, 1_000_000_000) 

2464 return (cast("Callable[[], LABS]", lambda __i=i: cls(__i)) 

2465 for i in merge_sorted_and_return_unique(( 

2466 16, 64, 100, 625), (k for k in default_scale_sequence( 

2467 scale_min, scale_max) if k in _BKS)) 

2468 if scale_min <= i <= scale_max)