|
32 | 32 |
|
33 | 33 |
|
34 | 34 | Color: TypeAlias = bool
|
35 |
| -COLORS = [WHITE, BLACK] = [True, False] |
| 35 | +WHITE: Color = True |
| 36 | +BLACK: Color = False |
| 37 | +COLORS: List[Color] = [WHITE, BLACK] |
36 | 38 | ColorName = Literal["white", "black"]
|
37 | 39 | COLOR_NAMES: List[ColorName] = ["black", "white"]
|
38 | 40 |
|
39 | 41 | PieceType: TypeAlias = int
|
40 |
| -PIECE_TYPES = [PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING] = range(1, 7) |
| 42 | +PAWN: PieceType = 1 |
| 43 | +KNIGHT: PieceType = 2 |
| 44 | +BISHOP: PieceType = 3 |
| 45 | +ROOK: PieceType = 4 |
| 46 | +QUEEN: PieceType = 5 |
| 47 | +KING: PieceType = 6 |
| 48 | +PIECE_TYPES: List[PieceType] = [PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING] |
41 | 49 | PIECE_SYMBOLS = [None, "p", "n", "b", "r", "q", "k"]
|
42 | 50 | PIECE_NAMES = [None, "pawn", "knight", "bishop", "rook", "queen", "king"]
|
43 | 51 |
|
@@ -162,16 +170,71 @@ class AmbiguousMoveError(ValueError):
|
162 | 170 |
|
163 | 171 |
|
164 | 172 | Square: TypeAlias = int
|
165 |
| -SQUARES = [ |
166 |
| - A1, B1, C1, D1, E1, F1, G1, H1, |
167 |
| - A2, B2, C2, D2, E2, F2, G2, H2, |
168 |
| - A3, B3, C3, D3, E3, F3, G3, H3, |
169 |
| - A4, B4, C4, D4, E4, F4, G4, H4, |
170 |
| - A5, B5, C5, D5, E5, F5, G5, H5, |
171 |
| - A6, B6, C6, D6, E6, F6, G6, H6, |
172 |
| - A7, B7, C7, D7, E7, F7, G7, H7, |
173 |
| - A8, B8, C8, D8, E8, F8, G8, H8, |
174 |
| -] = range(64) |
| 173 | +A1: Square = 0 |
| 174 | +B1: Square = 1 |
| 175 | +C1: Square = 2 |
| 176 | +D1: Square = 3 |
| 177 | +E1: Square = 4 |
| 178 | +F1: Square = 5 |
| 179 | +G1: Square = 6 |
| 180 | +H1: Square = 7 |
| 181 | +A2: Square = 8 |
| 182 | +B2: Square = 9 |
| 183 | +C2: Square = 10 |
| 184 | +D2: Square = 11 |
| 185 | +E2: Square = 12 |
| 186 | +F2: Square = 13 |
| 187 | +G2: Square = 14 |
| 188 | +H2: Square = 15 |
| 189 | +A3: Square = 16 |
| 190 | +B3: Square = 17 |
| 191 | +C3: Square = 18 |
| 192 | +D3: Square = 19 |
| 193 | +E3: Square = 20 |
| 194 | +F3: Square = 21 |
| 195 | +G3: Square = 22 |
| 196 | +H3: Square = 23 |
| 197 | +A4: Square = 24 |
| 198 | +B4: Square = 25 |
| 199 | +C4: Square = 26 |
| 200 | +D4: Square = 27 |
| 201 | +E4: Square = 28 |
| 202 | +F4: Square = 29 |
| 203 | +G4: Square = 30 |
| 204 | +H4: Square = 31 |
| 205 | +A5: Square = 32 |
| 206 | +B5: Square = 33 |
| 207 | +C5: Square = 34 |
| 208 | +D5: Square = 35 |
| 209 | +E5: Square = 36 |
| 210 | +F5: Square = 37 |
| 211 | +G5: Square = 38 |
| 212 | +H5: Square = 39 |
| 213 | +A6: Square = 40 |
| 214 | +B6: Square = 41 |
| 215 | +C6: Square = 42 |
| 216 | +D6: Square = 43 |
| 217 | +E6: Square = 44 |
| 218 | +F6: Square = 45 |
| 219 | +G6: Square = 46 |
| 220 | +H6: Square = 47 |
| 221 | +A7: Square = 48 |
| 222 | +B7: Square = 49 |
| 223 | +C7: Square = 50 |
| 224 | +D7: Square = 51 |
| 225 | +E7: Square = 52 |
| 226 | +F7: Square = 53 |
| 227 | +G7: Square = 54 |
| 228 | +H7: Square = 55 |
| 229 | +A8: Square = 56 |
| 230 | +B8: Square = 57 |
| 231 | +C8: Square = 58 |
| 232 | +D8: Square = 59 |
| 233 | +E8: Square = 60 |
| 234 | +F8: Square = 61 |
| 235 | +G8: Square = 62 |
| 236 | +H8: Square = 63 |
| 237 | +SQUARES: List[Square] = list(range(64)) |
175 | 238 |
|
176 | 239 | SQUARE_NAMES = [f + r for r in RANK_NAMES for f in FILE_NAMES]
|
177 | 240 |
|
@@ -234,53 +297,106 @@ def square_mirror(square: Square) -> Square:
|
234 | 297 | """Mirrors the square vertically."""
|
235 | 298 | return square ^ 0x38
|
236 | 299 |
|
237 |
| -SQUARES_180 = [square_mirror(sq) for sq in SQUARES] |
| 300 | +SQUARES_180: List[Square] = [square_mirror(sq) for sq in SQUARES] |
238 | 301 |
|
239 | 302 |
|
240 | 303 | Bitboard: TypeAlias = int
|
241 |
| -BB_EMPTY = 0 |
242 |
| -BB_ALL = 0xffff_ffff_ffff_ffff |
243 |
| - |
244 |
| -BB_SQUARES = [ |
245 |
| - BB_A1, BB_B1, BB_C1, BB_D1, BB_E1, BB_F1, BB_G1, BB_H1, |
246 |
| - BB_A2, BB_B2, BB_C2, BB_D2, BB_E2, BB_F2, BB_G2, BB_H2, |
247 |
| - BB_A3, BB_B3, BB_C3, BB_D3, BB_E3, BB_F3, BB_G3, BB_H3, |
248 |
| - BB_A4, BB_B4, BB_C4, BB_D4, BB_E4, BB_F4, BB_G4, BB_H4, |
249 |
| - BB_A5, BB_B5, BB_C5, BB_D5, BB_E5, BB_F5, BB_G5, BB_H5, |
250 |
| - BB_A6, BB_B6, BB_C6, BB_D6, BB_E6, BB_F6, BB_G6, BB_H6, |
251 |
| - BB_A7, BB_B7, BB_C7, BB_D7, BB_E7, BB_F7, BB_G7, BB_H7, |
252 |
| - BB_A8, BB_B8, BB_C8, BB_D8, BB_E8, BB_F8, BB_G8, BB_H8, |
253 |
| -] = [1 << sq for sq in SQUARES] |
254 |
| - |
255 |
| -BB_CORNERS = BB_A1 | BB_H1 | BB_A8 | BB_H8 |
256 |
| -BB_CENTER = BB_D4 | BB_E4 | BB_D5 | BB_E5 |
257 |
| - |
258 |
| -BB_LIGHT_SQUARES = 0x55aa_55aa_55aa_55aa |
259 |
| -BB_DARK_SQUARES = 0xaa55_aa55_aa55_aa55 |
260 |
| - |
261 |
| -BB_FILES = [ |
262 |
| - BB_FILE_A, |
263 |
| - BB_FILE_B, |
264 |
| - BB_FILE_C, |
265 |
| - BB_FILE_D, |
266 |
| - BB_FILE_E, |
267 |
| - BB_FILE_F, |
268 |
| - BB_FILE_G, |
269 |
| - BB_FILE_H, |
270 |
| -] = [0x0101_0101_0101_0101 << i for i in range(8)] |
271 |
| - |
272 |
| -BB_RANKS = [ |
273 |
| - BB_RANK_1, |
274 |
| - BB_RANK_2, |
275 |
| - BB_RANK_3, |
276 |
| - BB_RANK_4, |
277 |
| - BB_RANK_5, |
278 |
| - BB_RANK_6, |
279 |
| - BB_RANK_7, |
280 |
| - BB_RANK_8, |
281 |
| -] = [0xff << (8 * i) for i in range(8)] |
282 |
| - |
283 |
| -BB_BACKRANKS = BB_RANK_1 | BB_RANK_8 |
| 304 | +BB_EMPTY: Bitboard = 0 |
| 305 | +BB_ALL: Bitboard = 0xffff_ffff_ffff_ffff |
| 306 | + |
| 307 | +BB_A1: Bitboard = 1 << A1 |
| 308 | +BB_B1: Bitboard = 1 << B1 |
| 309 | +BB_C1: Bitboard = 1 << C1 |
| 310 | +BB_D1: Bitboard = 1 << D1 |
| 311 | +BB_E1: Bitboard = 1 << E1 |
| 312 | +BB_F1: Bitboard = 1 << F1 |
| 313 | +BB_G1: Bitboard = 1 << G1 |
| 314 | +BB_H1: Bitboard = 1 << H1 |
| 315 | +BB_A2: Bitboard = 1 << A2 |
| 316 | +BB_B2: Bitboard = 1 << B2 |
| 317 | +BB_C2: Bitboard = 1 << C2 |
| 318 | +BB_D2: Bitboard = 1 << D2 |
| 319 | +BB_E2: Bitboard = 1 << E2 |
| 320 | +BB_F2: Bitboard = 1 << F2 |
| 321 | +BB_G2: Bitboard = 1 << G2 |
| 322 | +BB_H2: Bitboard = 1 << H2 |
| 323 | +BB_A3: Bitboard = 1 << A3 |
| 324 | +BB_B3: Bitboard = 1 << B3 |
| 325 | +BB_C3: Bitboard = 1 << C3 |
| 326 | +BB_D3: Bitboard = 1 << D3 |
| 327 | +BB_E3: Bitboard = 1 << E3 |
| 328 | +BB_F3: Bitboard = 1 << F3 |
| 329 | +BB_G3: Bitboard = 1 << G3 |
| 330 | +BB_H3: Bitboard = 1 << H3 |
| 331 | +BB_A4: Bitboard = 1 << A4 |
| 332 | +BB_B4: Bitboard = 1 << B4 |
| 333 | +BB_C4: Bitboard = 1 << C4 |
| 334 | +BB_D4: Bitboard = 1 << D4 |
| 335 | +BB_E4: Bitboard = 1 << E4 |
| 336 | +BB_F4: Bitboard = 1 << F4 |
| 337 | +BB_G4: Bitboard = 1 << G4 |
| 338 | +BB_H4: Bitboard = 1 << H4 |
| 339 | +BB_A5: Bitboard = 1 << A5 |
| 340 | +BB_B5: Bitboard = 1 << B5 |
| 341 | +BB_C5: Bitboard = 1 << C5 |
| 342 | +BB_D5: Bitboard = 1 << D5 |
| 343 | +BB_E5: Bitboard = 1 << E5 |
| 344 | +BB_F5: Bitboard = 1 << F5 |
| 345 | +BB_G5: Bitboard = 1 << G5 |
| 346 | +BB_H5: Bitboard = 1 << H5 |
| 347 | +BB_A6: Bitboard = 1 << A6 |
| 348 | +BB_B6: Bitboard = 1 << B6 |
| 349 | +BB_C6: Bitboard = 1 << C6 |
| 350 | +BB_D6: Bitboard = 1 << D6 |
| 351 | +BB_E6: Bitboard = 1 << E6 |
| 352 | +BB_F6: Bitboard = 1 << F6 |
| 353 | +BB_G6: Bitboard = 1 << G6 |
| 354 | +BB_H6: Bitboard = 1 << H6 |
| 355 | +BB_A7: Bitboard = 1 << A7 |
| 356 | +BB_B7: Bitboard = 1 << B7 |
| 357 | +BB_C7: Bitboard = 1 << C7 |
| 358 | +BB_D7: Bitboard = 1 << D7 |
| 359 | +BB_E7: Bitboard = 1 << E7 |
| 360 | +BB_F7: Bitboard = 1 << F7 |
| 361 | +BB_G7: Bitboard = 1 << G7 |
| 362 | +BB_H7: Bitboard = 1 << H7 |
| 363 | +BB_A8: Bitboard = 1 << A8 |
| 364 | +BB_B8: Bitboard = 1 << B8 |
| 365 | +BB_C8: Bitboard = 1 << C8 |
| 366 | +BB_D8: Bitboard = 1 << D8 |
| 367 | +BB_E8: Bitboard = 1 << E8 |
| 368 | +BB_F8: Bitboard = 1 << F8 |
| 369 | +BB_G8: Bitboard = 1 << G8 |
| 370 | +BB_H8: Bitboard = 1 << H8 |
| 371 | +BB_SQUARES: List[Bitboard] = [1 << sq for sq in SQUARES] |
| 372 | + |
| 373 | +BB_CORNERS: Bitboard = BB_A1 | BB_H1 | BB_A8 | BB_H8 |
| 374 | +BB_CENTER: Bitboard = BB_D4 | BB_E4 | BB_D5 | BB_E5 |
| 375 | + |
| 376 | +BB_LIGHT_SQUARES: Bitboard = 0x55aa_55aa_55aa_55aa |
| 377 | +BB_DARK_SQUARES: Bitboard = 0xaa55_aa55_aa55_aa55 |
| 378 | + |
| 379 | +BB_FILE_A: Bitboard = 0x0101_0101_0101_0101 << 0 |
| 380 | +BB_FILE_B: Bitboard = 0x0101_0101_0101_0101 << 1 |
| 381 | +BB_FILE_C: Bitboard = 0x0101_0101_0101_0101 << 2 |
| 382 | +BB_FILE_D: Bitboard = 0x0101_0101_0101_0101 << 3 |
| 383 | +BB_FILE_E: Bitboard = 0x0101_0101_0101_0101 << 4 |
| 384 | +BB_FILE_F: Bitboard = 0x0101_0101_0101_0101 << 5 |
| 385 | +BB_FILE_G: Bitboard = 0x0101_0101_0101_0101 << 6 |
| 386 | +BB_FILE_H: Bitboard = 0x0101_0101_0101_0101 << 7 |
| 387 | +BB_FILES: List[Bitboard] = [BB_FILE_A, BB_FILE_B, BB_FILE_C, BB_FILE_D, BB_FILE_E, BB_FILE_F, BB_FILE_G, BB_FILE_H] |
| 388 | + |
| 389 | +BB_RANK_1: Bitboard = 0xff << (8 * 0) |
| 390 | +BB_RANK_2: Bitboard = 0xff << (8 * 1) |
| 391 | +BB_RANK_3: Bitboard = 0xff << (8 * 2) |
| 392 | +BB_RANK_4: Bitboard = 0xff << (8 * 3) |
| 393 | +BB_RANK_5: Bitboard = 0xff << (8 * 4) |
| 394 | +BB_RANK_6: Bitboard = 0xff << (8 * 5) |
| 395 | +BB_RANK_7: Bitboard = 0xff << (8 * 6) |
| 396 | +BB_RANK_8: Bitboard = 0xff << (8 * 7) |
| 397 | +BB_RANKS: List[Bitboard] = [BB_RANK_1, BB_RANK_2, BB_RANK_3, BB_RANK_4, BB_RANK_5, BB_RANK_6, BB_RANK_7, BB_RANK_8] |
| 398 | + |
| 399 | +BB_BACKRANKS: Bitboard = BB_RANK_1 | BB_RANK_8 |
284 | 400 |
|
285 | 401 |
|
286 | 402 | def lsb(bb: Bitboard) -> int:
|
@@ -397,9 +513,9 @@ def _sliding_attacks(square: Square, occupied: Bitboard, deltas: Iterable[int])
|
397 | 513 | def _step_attacks(square: Square, deltas: Iterable[int]) -> Bitboard:
|
398 | 514 | return _sliding_attacks(square, BB_ALL, deltas)
|
399 | 515 |
|
400 |
| -BB_KNIGHT_ATTACKS = [_step_attacks(sq, [17, 15, 10, 6, -17, -15, -10, -6]) for sq in SQUARES] |
401 |
| -BB_KING_ATTACKS = [_step_attacks(sq, [9, 8, 7, 1, -9, -8, -7, -1]) for sq in SQUARES] |
402 |
| -BB_PAWN_ATTACKS = [[_step_attacks(sq, deltas) for sq in SQUARES] for deltas in [[-7, -9], [7, 9]]] |
| 516 | +BB_KNIGHT_ATTACKS: List[Bitboard] = [_step_attacks(sq, [17, 15, 10, 6, -17, -15, -10, -6]) for sq in SQUARES] |
| 517 | +BB_KING_ATTACKS: List[Bitboard] = [_step_attacks(sq, [9, 8, 7, 1, -9, -8, -7, -1]) for sq in SQUARES] |
| 518 | +BB_PAWN_ATTACKS: List[List[Bitboard]] = [[_step_attacks(sq, deltas) for sq in SQUARES] for deltas in [[-7, -9], [7, 9]]] |
403 | 519 |
|
404 | 520 |
|
405 | 521 | def _edges(square: Square) -> Bitboard:
|
|
0 commit comments