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

76 statements  

« prev     ^ index     » next       coverage.py v7.12.0, created at 2025-11-24 08:49 +0000

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 >>> energy_to_merit(3, 1) 

1874 4.5 

1875 >>> energy_to_merit(4, 2) 

1876 4 

1877 >>> energy_to_merit(5, 2) 

1878 6.25 

1879 >>> print(f"{energy_to_merit(6, 7):.4}") 

1880 2.571 

1881 >>> print(f"{energy_to_merit(7, 3):.4}") 

1882 8.167 

1883 >>> energy_to_merit(8, 8) 

1884 4 

1885 >>> print(f"{energy_to_merit(9, 12):.4}") 

1886 3.375 

1887 >>> print(f"{energy_to_merit(10, 13):.4}") 

1888 3.846 

1889 >>> print(f"{energy_to_merit(11, 5):.4}") 

1890 12.1 

1891 >>> print(f"{energy_to_merit(12, 10):.4}") 

1892 7.2 

1893 >>> print(f"{energy_to_merit(13, 6):.5}") 

1894 14.083 

1895 >>> print(f"{energy_to_merit(14, 19):.4}") 

1896 5.158 

1897 >>> print(f"{energy_to_merit(15, 15):.4}") 

1898 7.5 

1899 >>> print(f"{energy_to_merit(16, 24):.4}") 

1900 5.333 

1901 >>> print(f"{energy_to_merit(17, 32):.4}") 

1902 4.516 

1903 >>> print(f"{energy_to_merit(18, 25):.4}") 

1904 6.48 

1905 >>> print(f"{energy_to_merit(47, 135):.4}") 

1906 8.181 

1907 >>> print(f"{energy_to_merit(66, 257):.4}") 

1908 8.475 

1909 >>> print(f"{energy_to_merit(19, 33):.4}") 

1910 5.47 

1911 >>> print(f"{energy_to_merit(119, 835):.4}") 

1912 8.48 

1913 >>> print(f"{energy_to_merit(401, 11888):.5}") 

1914 6.7632 

1915 """ 

1916 n = check_int_range(n, "n", 3) 

1917 energy = check_int_range(energy, "energy", 1) 

1918 return try_int_div(n * n, energy + energy) 

1919 

1920 

1921def merit_to_energy(n: int, merit: int | float) -> int: 

1922 """ 

1923 Convert a merit factor back to an energy. 

1924 

1925 :param n: the energy 

1926 :param merit: the merit factor 

1927 :returns: the energy 

1928 

1929 >>> try: 

1930 ... merit_to_energy(0, 1) 

1931 ... except ValueError as ve: 

1932 ... print(ve) 

1933 n=0 is invalid, must be in 3..1000000000. 

1934 

1935 >>> try: 

1936 ... merit_to_energy(3, 0) 

1937 ... except ValueError as ve: 

1938 ... print(ve) 

1939 merit factor cannot be 0. 

1940 

1941 >>> try: 

1942 ... merit_to_energy(3, "x") 

1943 ... except TypeError as te: 

1944 ... print(str(te)[:50]) 

1945 merit should be an instance of any in {float, int} 

1946 

1947 >>> merit_to_energy(3, 4.5) 

1948 1 

1949 >>> merit_to_energy(4, 4) 

1950 2 

1951 >>> merit_to_energy(5, 6.25) 

1952 2 

1953 >>> merit_to_energy(6, 2.571) 

1954 7 

1955 >>> merit_to_energy(7, 8.167) 

1956 3 

1957 >>> merit_to_energy(8, 4) 

1958 8 

1959 >>> merit_to_energy(9, 3.375) 

1960 12 

1961 >>> merit_to_energy(10, 3.846) 

1962 13 

1963 >>> merit_to_energy(11, 12.100) 

1964 5 

1965 >>> merit_to_energy(12, 7.200) 

1966 10 

1967 >>> merit_to_energy(13, 14.083) 

1968 6 

1969 >>> merit_to_energy(14, 5.158) 

1970 19 

1971 >>> merit_to_energy(15, 7.5) 

1972 15 

1973 >>> merit_to_energy(16, 5.333) 

1974 24 

1975 >>> merit_to_energy(17, 4.516) 

1976 32 

1977 >>> merit_to_energy(18, 6.48) 

1978 25 

1979 >>> merit_to_energy(47, 8.181) 

1980 135 

1981 >>> merit_to_energy(66, 8.475) 

1982 257 

1983 >>> merit_to_energy(19, 5.47) 

1984 33 

1985 >>> merit_to_energy(119, 8.48) 

1986 835 

1987 >>> merit_to_energy(401, 6.7632) 

1988 11888 

1989 >>> merit_to_energy(181, 8.9316) 

1990 1834 

1991 >>> merit_to_energy(201, 8.4876) 

1992 2380 

1993 >>> merit_to_energy(215, 8.5888) 

1994 2691 

1995 >>> merit_to_energy(221, 8.8544) 

1996 2758 

1997 >>> merit_to_energy(241, 8.0668) 

1998 3600 

1999 >>> merit_to_energy(249, 8.1323) 

2000 3812 

2001 >>> merit_to_energy(259, 8.0918) 

2002 4145 

2003 >>> merit_to_energy(261, 7.8517) 

2004 4338 

2005 >>> merit_to_energy(271, 7.5386) 

2006 4871 

2007 >>> merit_to_energy(281, 7.5058) 

2008 5260 

2009 >>> merit_to_energy(283, 7.5088) 

2010 5333 

2011 >>> merit_to_energy(301, 7.4827) 

2012 6054 

2013 >>> merit_to_energy(303, 7.2462) 

2014 6335 

2015 >>> merit_to_energy(341, 6.9397) 

2016 8378 

2017 >>> merit_to_energy(381, 7.0893) 

2018 10238 

2019 >>> merit_to_energy(401, 6.7632) 

2020 11888 

2021 """ 

2022 n = check_int_range(n, "n", 3) 

2023 if not isinstance(merit, int | float): 

2024 raise type_error(merit, "merit", (int, float)) 

2025 if (not isfinite(merit)) or (merit <= 0): 

2026 raise ValueError(f"merit factor cannot be {merit}.") 

2027 return int(0.5 + ((n * n) / merit) / 2) 

2028 

2029 

2030#: The lower bounds of the LABS problem, i.e., the objective values of the 

2031#: known global optima also used in the unit tests of the :func:`labs` 

2032#: function. We use the data from 

2033#: 

2034#: Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences. 

2035#: arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016 

2036#: https://arxiv.org/pdf/1512.02475 

2037_LBS: Final[dict[int, int]] = { 

2038 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10, 13: 6, 

2039 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26, 22: 39, 

2040 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62, 30: 59, 31: 67, 

2041 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86, 38: 87, 39: 99, 40: 108, 

2042 41: 108, 42: 101, 43: 109, 44: 122, 45: 118, 46: 131, 47: 135, 48: 140, 

2043 49: 136, 50: 153, 51: 153, 52: 166, 53: 170, 54: 175, 55: 171, 56: 192, 

2044 57: 188, 58: 197, 59: 205, 60: 218, 61: 226, 62: 235, 63: 207, 64: 208, 

2045 65: 240, 66: 257} 

2046 

2047 

2048#: the internal set of related work solutions 

2049__RELATED_WORKS: Final[dict[tuple[str, str], dict[int, int]]] = { 

2050 ("PM2016LABS", 

2051 "Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary " 

2052 "Sequences. arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016"): { 

2053 3: 1, 4: 2, 5: 2, 6: 7, 7: 3, 8: 8, 9: 12, 10: 13, 11: 5, 12: 10, 

2054 13: 6, 14: 19, 15: 15, 16: 24, 17: 32, 18: 25, 19: 29, 20: 26, 21: 26, 

2055 22: 39, 23: 47, 24: 36, 25: 36, 26: 45, 27: 37, 28: 50, 29: 62, 

2056 30: 59, 31: 67, 32: 64, 33: 64, 34: 65, 35: 73, 36: 82, 37: 86, 

2057 38: 87, 39: 99, 40: 108, 41: 108, 42: 101, 43: 109, 44: 122, 45: 118, 

2058 46: 131, 47: 135, 48: 140, 49: 136, 50: 153, 51: 153, 52: 166, 

2059 53: 170, 54: 175, 55: 171, 56: 192, 57: 188, 58: 197, 59: 205, 

2060 60: 218, 61: 226, 62: 235, 63: 207, 64: 208, 65: 240, 66: 257, 

2061 67: 241, 69: 282, 71: 275, 73: 348, 75: 341, 77: 358, 79: 407, 

2062 81: 400, 83: 377, 85: 442, 87: 451, 89: 484, 91: 477, 93: 502, 

2063 95: 479, 97: 536, 99: 577, 101: 578, 103: 555, 105: 620, 107: 677, 

2064 109: 662, 111: 687, 113: 752, 115: 745, 117: 786, 119: 835, 

2065 }, 

2066 ("BBB2017LABSOIMFARPTAT", 

2067 "Borko Bošković, Franc Brglez, and Janez Brest. Low-Autocorrelation " 

2068 "Binary Sequences: On Improved Merit Factors and Runtime Predictions" 

2069 " to Achieve Them. arXiv:1406.5301v6 [cs.DS] 6 May 2017." 

2070 "https://arxiv.org/pdf/1406.5301"): { 

2071 181: 1834, 201: 2380, 215: 2691, 221: 2758, 241: 3600, 249: 3812, 

2072 259: 4145, 261: 4338, 271: 4871, 281: 5260, 283: 5333, 301: 6054, 

2073 303: 6335, 341: 8378, 381: 10238, 401: 11888, 

2074 107: merit_to_energy(107, 8.4557), 109: merit_to_energy(109, 8.9736), 

2075 111: merit_to_energy(111, 8.9672), 113: merit_to_energy(113, 8.49), 

2076 115: merit_to_energy(115, 8.8758), 117: merit_to_energy(117, 8.708), 

2077 119: merit_to_energy(119, 8.4796), 121: merit_to_energy(121, 8.6736), 

2078 141: merit_to_energy(141, 8.8282), 149: merit_to_energy(149, 9.1137), 

2079 157: merit_to_energy(157, 9.0223), 161: merit_to_energy(161, 8.5718), 

2080 165: merit_to_energy(165, 9.2351), 169: merit_to_energy(169, 9.3215), 

2081 173: merit_to_energy(173, 9.3645), 175: merit_to_energy(175, 9.0768), 

2082 177: merit_to_energy(177, 9.5052), 179: merit_to_energy(179, 9.0974), 

2083 183: merit_to_energy(183, 9.0073), 189: merit_to_energy(189, 9.0847), 

2084 }, 

2085 ("MD2015NESFLLABS", 

2086 "Wai Ho Mow and Ke-Lin Du. New Evolutionary Search for Long Low " 

2087 "Autocorrelation Binary Sequences. IEEE Transactions on Aerospace and " 

2088 "Electronic Systems. 51(1):290-303. January 2015. " 

2089 "doi:10.1109/TAES.2014.130518"): { 

2090 106: merit_to_energy(106, 5.0295), 107: merit_to_energy(107, 5.1805), 

2091 108: merit_to_energy(108, 4.6957), 109: merit_to_energy(109, 5.0429), 

2092 110: merit_to_energy(110, 4.9631), 111: merit_to_energy(111, 5.626), 

2093 112: merit_to_energy(112, 5.3153), 113: merit_to_energy(113, 4.8514), 

2094 114: merit_to_energy(114, 4.4114), 115: merit_to_energy(115, 4.8729), 

2095 116: merit_to_energy(116, 4.3974), 117: merit_to_energy(117, 4.2832), 

2096 118: merit_to_energy(118, 4.5355), 119: merit_to_energy(119, 4.7235), 

2097 120: merit_to_energy(120, 5.8632), 121: merit_to_energy(121, 4.4421), 

2098 122: merit_to_energy(122, 4.6368), 123: merit_to_energy(123, 4.6897), 

2099 124: merit_to_energy(124, 4.9987), 125: merit_to_energy(125, 4.8646), 

2100 126: merit_to_energy(126, 5.0272), 127: merit_to_energy(127, 4.8965), 

2101 128: merit_to_energy(128, 4.8075), 129: merit_to_energy(129, 4.6328), 

2102 130: merit_to_energy(130, 4.8872), 131: merit_to_energy(131, 4.9627), 

2103 132: merit_to_energy(132, 4.343), 133: merit_to_energy(133, 4.6995), 

2104 134: merit_to_energy(134, 4.438), 135: merit_to_energy(135, 4.5134), 

2105 136: merit_to_energy(136, 4.472), 137: merit_to_energy(137, 4.2273), 

2106 138: merit_to_energy(138, 4.3341), 139: merit_to_energy(139, 4.6602), 

2107 140: merit_to_energy(140, 4.6009), 141: merit_to_energy(141, 4.418), 

2108 142: merit_to_energy(142, 4.4789), 143: merit_to_energy(143, 4.5584), 

2109 144: merit_to_energy(144, 4.2492), 145: merit_to_energy(145, 4.4696), 

2110 146: merit_to_energy(146, 4.6239), 147: merit_to_energy(147, 4.3409), 

2111 148: merit_to_energy(148, 4.3703), 149: merit_to_energy(149, 4.5531), 

2112 150: merit_to_energy(150, 4.7209), 151: merit_to_energy(151, 4.3663), 

2113 152: merit_to_energy(152, 5.2509), 153: merit_to_energy(153, 4.8206), 

2114 154: merit_to_energy(154, 4.2517), 155: merit_to_energy(155, 4.2704), 

2115 156: merit_to_energy(156, 4.5986), 157: merit_to_energy(157, 4.6368), 

2116 158: merit_to_energy(158, 4.9473), 159: merit_to_energy(159, 4.7396), 

2117 160: merit_to_energy(160, 4.878), 161: merit_to_energy(161, 4.7789), 

2118 162: merit_to_energy(162, 4.5674), 163: merit_to_energy(163, 4.676), 

2119 164: merit_to_energy(164, 5.0367), 165: merit_to_energy(165, 4.2834), 

2120 166: merit_to_energy(166, 4.5337), 167: merit_to_energy(167, 4.719), 

2121 168: merit_to_energy(168, 4.6057), 169: merit_to_energy(169, 4.7099), 

2122 170: merit_to_energy(170, 4.6598), 171: merit_to_energy(171, 4.4077), 

2123 172: merit_to_energy(172, 4.7685), 173: merit_to_energy(173, 4.7932), 

2124 174: merit_to_energy(174, 4.6564), 175: merit_to_energy(175, 4.2832), 

2125 176: merit_to_energy(176, 4.2549), 177: merit_to_energy(177, 4.3416), 

2126 178: merit_to_energy(178, 4.1331), 179: merit_to_energy(179, 4.3287), 

2127 180: merit_to_energy(180, 4.3385), 181: merit_to_energy(181, 4.5832), 

2128 182: merit_to_energy(182, 4.2347), 183: merit_to_energy(183, 4.4879), 

2129 184: merit_to_energy(184, 3.9331), 185: merit_to_energy(185, 4.5464), 

2130 186: merit_to_energy(186, 4.6239), 187: merit_to_energy(187, 4.5285), 

2131 188: merit_to_energy(188, 4.7176), 189: merit_to_energy(189, 4.809), 

2132 190: merit_to_energy(190, 4.4645), 191: merit_to_energy(191, 5.0125), 

2133 192: merit_to_energy(192, 4.795), 193: merit_to_energy(193, 4.5205), 

2134 194: merit_to_energy(194, 4.4288), 195: merit_to_energy(195, 4.2316), 

2135 196: merit_to_energy(196, 4.3048), 197: merit_to_energy(197, 4.6267), 

2136 198: merit_to_energy(198, 4.5052), 199: merit_to_energy(199, 4.4889), 

2137 200: merit_to_energy(200, 4.5496), 201: merit_to_energy(201, 4.008), 

2138 202: merit_to_energy(202, 4.3033), 203: merit_to_energy(203, 4.3033), 

2139 204: merit_to_energy(204, 4.231), 205: merit_to_energy(205, 4.705), 

2140 206: merit_to_energy(206, 4.1288), 207: merit_to_energy(207, 4.1886), 

2141 208: merit_to_energy(208, 4.3126), 209: merit_to_energy(209, 4.3542), 

2142 210: merit_to_energy(210, 4.6392), 211: merit_to_energy(211, 4.2899), 

2143 212: merit_to_energy(212, 4.3567), 213: merit_to_energy(213, 4.517), 

2144 214: merit_to_energy(214, 4.4872), 215: merit_to_energy(215, 4.3584), 

2145 216: merit_to_energy(216, 4.7725), 217: merit_to_energy(217, 4.1364), 

2146 218: merit_to_energy(218, 4.5373), 219: merit_to_energy(219, 4.7798), 

2147 220: merit_to_energy(220, 4.6414), 221: merit_to_energy(221, 4.4096), 

2148 222: merit_to_energy(222, 4.5273), 223: merit_to_energy(223, 4.5216), 

2149 224: merit_to_energy(224, 4.5253), 225: merit_to_energy(225, 4.6462), 

2150 226: merit_to_energy(226, 4.599), 227: merit_to_energy(227, 4.5641), 

2151 228: merit_to_energy(228, 4.6365), 229: merit_to_energy(229, 4.5664), 

2152 230: merit_to_energy(230, 4.5299), 231: merit_to_energy(231, 4.5819), 

2153 232: merit_to_energy(232, 4.4556), 233: merit_to_energy(233, 4.5423), 

2154 234: merit_to_energy(234, 4.3122), 235: merit_to_energy(235, 4.4529), 

2155 236: merit_to_energy(236, 4.3418), 237: merit_to_energy(237, 4.3488), 

2156 238: merit_to_energy(238, 4.6992), 239: merit_to_energy(239, 4.5457), 

2157 240: merit_to_energy(240, 4.6512), 241: merit_to_energy(241, 4.3921), 

2158 242: merit_to_energy(242, 4.3464), 243: merit_to_energy(243, 4.6415), 

2159 244: merit_to_energy(244, 4.2224), 245: merit_to_energy(245, 4.3994), 

2160 246: merit_to_energy(246, 4.498), 247: merit_to_energy(247, 4.7024), 

2161 248: merit_to_energy(248, 4.4414), 249: merit_to_energy(249, 4.6491), 

2162 250: merit_to_energy(250, 4.4816), 251: merit_to_energy(251, 4.7291), 

2163 252: merit_to_energy(252, 4.002), 253: merit_to_energy(253, 4.7163), 

2164 254: merit_to_energy(254, 4.544), 255: merit_to_energy(255, 4.5902), 

2165 256: merit_to_energy(256, 4.8075), 257: merit_to_energy(257, 4.8338), 

2166 258: merit_to_energy(258, 4.3421), 259: merit_to_energy(259, 4.4596), 

2167 260: merit_to_energy(260, 4.6492), 261: merit_to_energy(261, 4.2672), 

2168 262: merit_to_energy(262, 4.4557), 263: merit_to_energy(263, 4.3344), 

2169 264: merit_to_energy(264, 4.6814), 265: merit_to_energy(265, 4.6007), 

2170 266: merit_to_energy(266, 4.3118), 267: merit_to_energy(267, 4.2652), 

2171 268: merit_to_energy(268, 4.5912), 269: merit_to_energy(269, 4.5903), 

2172 270: merit_to_energy(270, 4.3836), 271: merit_to_energy(271, 4.5028), 

2173 272: merit_to_energy(272, 4.8267), 273: merit_to_energy(273, 4.4617), 

2174 274: merit_to_energy(274, 4.4683), 275: merit_to_energy(275, 4.3881), 

2175 276: merit_to_energy(276, 4.5032), 277: merit_to_energy(277, 4.4352), 

2176 278: merit_to_energy(278, 4.579), 279: merit_to_energy(279, 4.3192), 

2177 280: merit_to_energy(280, 4.2535), 281: merit_to_energy(281, 4.2325), 

2178 282: merit_to_energy(282, 4.4273), 283: merit_to_energy(283, 4.4747), 

2179 284: merit_to_energy(284, 4.4307), 285: merit_to_energy(285, 4.3735), 

2180 286: merit_to_energy(286, 4.383), 287: merit_to_energy(287, 4.1706), 

2181 288: merit_to_energy(288, 4.3858), 289: merit_to_energy(289, 4.2981), 

2182 290: merit_to_energy(290, 4.5622), 291: merit_to_energy(291, 4.5621), 

2183 292: merit_to_energy(292, 4.641), 293: merit_to_energy(293, 4.7599), 

2184 294: merit_to_energy(294, 4.3961), 295: merit_to_energy(295, 4.3992), 

2185 296: merit_to_energy(296, 4.3203), 297: merit_to_energy(297, 4.2953), 

2186 298: merit_to_energy(298, 4.5771), 299: merit_to_energy(299, 4.4166), 

2187 300: merit_to_energy(300, 4.4074), 303: merit_to_energy(303, 4.3507), 

2188 304: merit_to_energy(304, 4.0676), 350: merit_to_energy(350, 3.9458), 

2189 353: merit_to_energy(353, 4.2075), 400: merit_to_energy(400, 4.3908), 

2190 449: merit_to_energy(449, 4.0547), 450: merit_to_energy(450, 4.4235), 

2191 500: merit_to_energy(500, 4.3442), 512: merit_to_energy(512, 4.2656), 

2192 547: merit_to_energy(547, 4.3408), 550: merit_to_energy(550, 4.0695), 

2193 600: merit_to_energy(600, 3.6753), 650: merit_to_energy(650, 3.9239), 

2194 653: merit_to_energy(653, 4.2287), 700: merit_to_energy(700, 4.1524), 

2195 750: merit_to_energy(750, 3.7603), 751: merit_to_energy(751, 4.1537), 

2196 800: merit_to_energy(800, 3.7481), 850: merit_to_energy(850, 3.8096), 

2197 853: merit_to_energy(853, 4.0854), 900: merit_to_energy(900, 3.7623), 

2198 950: merit_to_energy(950, 4.0438), 953: merit_to_energy(953, 3.8493), 

2199 1000: merit_to_energy(1000, 3.7873), 

2200 1019: merit_to_energy(1019, 4.139), 

2201 1024: merit_to_energy(1024, 3.9683), 

2202 1500: merit_to_energy(1500, 3.7316), 

2203 2000: merit_to_energy(2000, 3.6193), 

2204 2048: merit_to_energy(2048, 3.5387), 

2205 2197: merit_to_energy(2197, 3.6423), 

2206 3000: merit_to_energy(3000, 3.3608), 

2207 4096: merit_to_energy(4096, 3.4589), 

2208 }, 

2209 ("BB2018AHAFALABSPWOLAHMF", 

2210 "Borko Bošković and Janez Brest. A Heuristic Algorithm for a Low " 

2211 "Autocorrelation Binary Sequence Problem with Odd Length and High " 

2212 "Merit Factor. IEEE Access 6:4127-4134. January 2018. " 

2213 "doi:10.1109/ACCESS.2018.2789916 "): { 

2214 191: 1903, 193: 2144, 195: 2105, 197: 2202, 199: 2195, 201: 2220, 

2215 203: 2317, 205: 2430, 207: 2351, 209: 2528, 211: 2457, 213: 2378, 

2216 215: 2595, 217: 2684, 219: 2733, 221: 2734, 223: 2751, 225: 2808, 

2217 }, 

2218 ("BHB2024PSAWALABSP", 

2219 "Borko Bošković, Jana Herzog, and Janez Brest. Parallel Self-Avoiding " 

2220 "Walks for a Low-Autocorrelation Binary Sequences Problem. Journal of " 

2221 "Computational Science 77 (2024) 102260. " 

2222 "doi:10.1016/j.jocs.2024.102260"): { 

2223 171: 1669, 185: 1932, 193: 2040, 197: 2162, 199: 2187, 219: 2605, 

2224 223: 2727, 225: 2768, 229: 2810, 231: 2963, 235: 2965, 237: 3118, 

2225 239: 3055, 241: 3216, 243: 3233, 245: 3226, 247: 3259, 

2226 }, 

2227} 

2228 

2229 

2230def __make_bkses() -> dict[int, tuple[int, tuple[str, str]]]: 

2231 """Make the BKSes.""" 

2232 d: Final[dict[int, tuple[int, tuple[str, str]]]] = {} 

2233 for citation, data in __RELATED_WORKS.items(): 

2234 for n, ener in data.items(): 

2235 # We sanity check the BKSes, too. 

2236 if ((n in _LBS) and (ener < _LBS[n])) or (ener < (n // 2)): 

2237 raise ValueError("Invalid BKS!") 

2238 if (n not in d) or (d[n][0] > ener): 

2239 d[n] = ener, citation 

2240 return d 

2241 

2242 

2243#: The internal lookup table for best-known solutions 

2244_BKS: Final[dict[int, tuple[int, tuple[str, str]]]] = __make_bkses() 

2245del __make_bkses 

2246 

2247 

2248def get_bks(n: int) -> tuple[int, tuple[str, str] | None]: 

2249 """ 

2250 Get the best currently known solution for the given dimension `n`. 

2251 

2252 :param n: the dimension 

2253 :returns: a tuple of the energy value and a tuple of a citation. If 

2254 no solution is found in literature, the lower bound is returned and 

2255 `None` is returned as literature tuple 

2256 

2257 >>> try: 

2258 ... get_bks(-1) 

2259 ... except ValueError as ve: 

2260 ... print(ve) 

2261 n=-1 is invalid, must be in 3..1000000000. 

2262 

2263 >>> get_bks(20)[0] 

2264 26 

2265 

2266 >>> get_bks(401)[0] 

2267 11888 

2268 >>> get_bks(401)[1][0] 

2269 'BBB2017LABSOIMFARPTAT' 

2270 

2271 >>> get_bks(10000) 

2272 (5000, None) 

2273 """ 

2274 n = check_int_range(n, "n", 3) 

2275 if n in _BKS: 

2276 return _BKS[n] 

2277 return n // 2, None 

2278 

2279 

2280def is_labs_objective_value_optimal(n: int, f: int) -> bool | None: 

2281 """ 

2282 Check whether a given objective value is optimal on the LABS problem. 

2283 

2284 We use the lower and upper bound of the LABS problem to check whether a 

2285 given objective value can be optimal. We also use the objective values of 

2286 the known global optima from 

2287 

2288 Tom Packebusch and Stephan Mertens. Low Autocorrelation Binary Sequences. 

2289 arXiv:1512.02475v2 [cond-mat.stat-mech] 24 Mar 2016 

2290 https://arxiv.org/pdf/1512.02475 

2291 

2292 :param n: the scale of the problem 

2293 :param f: the objective value 

2294 :returns: `True` if the objective value `f` is optimal, `False` if it 

2295 cannot be optimal, and `None` if the situation is unclear 

2296 :raises TypeError: if `n` or `f` are not integers 

2297 :raises ValueError: if `n` or `f` are invalid integer values 

2298 

2299 >>> print(is_labs_objective_value_optimal(49, 136)) 

2300 True 

2301 

2302 >>> print(is_labs_objective_value_optimal(49, 137)) 

2303 False 

2304 

2305 >>> print(is_labs_objective_value_optimal(100, 50)) 

2306 True 

2307 

2308 >>> print(is_labs_objective_value_optimal(100, 51)) 

2309 None 

2310 

2311 >>> try: 

2312 ... is_labs_objective_value_optimal("x", 3) 

2313 ... except TypeError as te: 

2314 ... print(te) 

2315 n should be an instance of int but is str, namely 'x'. 

2316 

2317 >>> try: 

2318 ... is_labs_objective_value_optimal(7, "3") 

2319 ... except TypeError as te: 

2320 ... print(te) 

2321 f should be an instance of int but is str, namely '3'. 

2322 

2323 >>> try: 

2324 ... is_labs_objective_value_optimal(0, 0) 

2325 ... except ValueError as ve: 

2326 ... print(ve) 

2327 n=0 is invalid, must be in 3..1000000000. 

2328 

2329 >>> try: 

2330 ... is_labs_objective_value_optimal(3, 0) 

2331 ... except ValueError as ve: 

2332 ... print(ve) 

2333 f=0 is invalid, must be in 1..5. 

2334 

2335 >>> try: 

2336 ... is_labs_objective_value_optimal(3, 234240) 

2337 ... except ValueError as ve: 

2338 ... print(ve) 

2339 f=234240 is invalid, must be in 1..5. 

2340 """ 

2341 check_int_range(n, "n", 3) 

2342 lb: int = n // 2 

2343 ub: int = ((n - 1) * n * (2 * n - 1)) // 6 

2344 if check_int_range(f, "f", lb, ub) <= lb: 

2345 return True 

2346 if n in _LBS: # We know the optimum, so if it is not it, we can stop. 

2347 lb = _LBS[n] 

2348 return check_int_range(f, "f", lb) <= lb 

2349 if f >= ub: 

2350 return False 

2351 return None 

2352 

2353 

2354class LABS(BitStringProblem): 

2355 """The Low-Autocorrelation Sequence Problem.""" 

2356 

2357 def __init__(self, n: int) -> None: 

2358 """ 

2359 Initialize the LABS objective function. 

2360 

2361 :param n: the dimension of the problem 

2362 """ 

2363 super().__init__(check_int_range(n, "n", 3)) 

2364 self.evaluate = labs # type: ignore 

2365 

2366 def lower_bound(self) -> int: 

2367 """ 

2368 Get the lower bound of the LABS problem. 

2369 

2370 The minimum amount of energy that a sequence could possibly have. 

2371 For each correlation length `k`, this is `(n - k) % 2`. 

2372 In total, this is just equivalent to `n // 2`. 

2373 

2374 For some instances of :class:`LABS`, the global optima are known. 

2375 For these instances, we return the objective values of these optima, 

2376 which obviously are `>= n // 2`. 

2377 

2378 :return: the lower bound of the :class:`LABS` problem 

2379 

2380 >>> LABS(16).lower_bound() 

2381 24 

2382 

2383 >>> LABS(61).lower_bound() 

2384 226 

2385 

2386 >>> LABS(200).lower_bound() 

2387 100 

2388 

2389 >>> LABS(124200).lower_bound() 

2390 62100 

2391 """ 

2392 n: Final[int] = self.n 

2393 if n in _LBS: 

2394 return _LBS[n] 

2395 return n // 2 

2396 

2397 def upper_bound(self) -> int: 

2398 """ 

2399 Get the upper bound of the :class:`LABS` problem. 

2400 

2401 The energy of a sequence where all bits are the same is the highest. 

2402 This means that each correlation basically produces its length to the 

2403 square as contribution to the result. The upper bound then is the sum 

2404 of all of these squares from `1..(n-1)`. 

2405 

2406 :return: the upper bound of LABS 

2407 

2408 >>> LABS(16).upper_bound() 

2409 1240 

2410 

2411 >>> LABS(63).upper_bound() 

2412 81375 

2413 

2414 >>> LABS(200).upper_bound() 

2415 2646700 

2416 

2417 >>> LABS(12316).upper_bound() 

2418 622636950290 

2419 """ 

2420 return ((self.n - 1) * self.n * (2 * self.n - 1)) // 6 

2421 

2422 def __str__(self) -> str: 

2423 """ 

2424 Get the name of the LABS objective function. 

2425 

2426 :return: labs_ + length of string 

2427 

2428 >>> LABS(16) 

2429 labs_16 

2430 """ 

2431 return f"labs_{self.n}" 

2432 

2433 @classmethod 

2434 def default_instances( 

2435 cls: type, scale_min: int = 3, 

2436 scale_max: int = min(1024, max(_BKS.keys()))) \ 

2437 -> Iterator[Callable[[], "LABS"]]: 

2438 """ 

2439 Get the default instances of the :class:`LABS` problem. 

2440 

2441 :param scale_min: the minimum permitted scale, by default `3` 

2442 :param scale_max: the maximum permitted scale, by default `625` 

2443 :returns: a sequence of default :class:`LABS` instances 

2444 

2445 >>> len(list(LABS.default_instances())) 

2446 81 

2447 

2448 >>> [x() for x in LABS.default_instances()] 

2449 [labs_3, labs_4, labs_5, labs_6, labs_7, labs_8, labs_9, labs_10, \ 

2450labs_11, labs_12, labs_13, labs_14, labs_15, labs_16, labs_17, labs_18, \ 

2451labs_19, labs_20, labs_21, labs_22, labs_23, labs_24, labs_25, labs_26, \ 

2452labs_27, labs_28, labs_29, labs_30, labs_31, labs_32, labs_33, labs_36, \ 

2453labs_40, labs_41, labs_42, labs_44, labs_48, labs_49, labs_50, labs_55, \ 

2454labs_59, labs_60, labs_64, labs_66, labs_77, labs_79, labs_81, labs_85, \ 

2455labs_99, labs_100, labs_107, labs_111, labs_121, labs_125, labs_128, \ 

2456labs_144, labs_149, labs_169, labs_170, labs_192, labs_196, labs_199, \ 

2457labs_200, labs_222, labs_225, labs_243, labs_256, labs_269, labs_289, \ 

2458labs_300, labs_341, labs_400, labs_500, labs_512, labs_600, labs_625, \ 

2459labs_700, labs_800, labs_900, labs_1000, labs_1024] 

2460 """ 

2461 check_int_range(scale_max, "scale_max", check_int_range( 

2462 scale_min, "scale_min", 1, 1_000_000_000) + 1, 1_000_000_000) 

2463 return (cast("Callable[[], LABS]", lambda __i=i: cls(__i)) 

2464 for i in merge_sorted_and_return_unique(( 

2465 16, 64, 100, 625), (k for k in default_scale_sequence( 

2466 scale_min, scale_max) if k in _BKS)) 

2467 if scale_min <= i <= scale_max)