Skip to content

Commit 6af0ff4

Browse files
committed
Expand core constant definitions
More verbose, but better IDE support
1 parent 4c7a902 commit 6af0ff4

File tree

1 file changed

+175
-59
lines changed

1 file changed

+175
-59
lines changed

chess/__init__.py

Lines changed: 175 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -32,12 +32,20 @@
3232

3333

3434
Color: TypeAlias = bool
35-
COLORS = [WHITE, BLACK] = [True, False]
35+
WHITE: Color = True
36+
BLACK: Color = False
37+
COLORS: List[Color] = [WHITE, BLACK]
3638
ColorName = Literal["white", "black"]
3739
COLOR_NAMES: List[ColorName] = ["black", "white"]
3840

3941
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]
4149
PIECE_SYMBOLS = [None, "p", "n", "b", "r", "q", "k"]
4250
PIECE_NAMES = [None, "pawn", "knight", "bishop", "rook", "queen", "king"]
4351

@@ -162,16 +170,71 @@ class AmbiguousMoveError(ValueError):
162170

163171

164172
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))
175238

176239
SQUARE_NAMES = [f + r for r in RANK_NAMES for f in FILE_NAMES]
177240

@@ -234,53 +297,106 @@ def square_mirror(square: Square) -> Square:
234297
"""Mirrors the square vertically."""
235298
return square ^ 0x38
236299

237-
SQUARES_180 = [square_mirror(sq) for sq in SQUARES]
300+
SQUARES_180: List[Square] = [square_mirror(sq) for sq in SQUARES]
238301

239302

240303
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
284400

285401

286402
def lsb(bb: Bitboard) -> int:
@@ -397,9 +513,9 @@ def _sliding_attacks(square: Square, occupied: Bitboard, deltas: Iterable[int])
397513
def _step_attacks(square: Square, deltas: Iterable[int]) -> Bitboard:
398514
return _sliding_attacks(square, BB_ALL, deltas)
399515

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]]]
403519

404520

405521
def _edges(square: Square) -> Bitboard:

0 commit comments

Comments
 (0)