From 123513e32f25aba400033ca8e5cc9cbfff6f191a Mon Sep 17 00:00:00 2001 From: "mattlamb227@gmail.com" Date: Sun, 9 Aug 2026 18:18:46 -0400 Subject: [PATCH] fix: remove unreachable dead code in BlokusGame.valid_move (game.py:220-260) --- src/blokus_gym.egg-info/SOURCES.txt | 7 +- .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 1186 bytes .../core/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 889 bytes .../core/__pycache__/board.cpython-311.pyc | Bin 0 -> 6506 bytes .../core/__pycache__/bots.cpython-311.pyc | Bin 0 -> 9326 bytes .../core/__pycache__/game.cpython-311.pyc | Bin 0 -> 22669 bytes .../core/__pycache__/game.cpython-312.pyc | Bin 19236 -> 21080 bytes .../core/__pycache__/pieces.cpython-311.pyc | Bin 0 -> 15764 bytes src/blokus_gym/core/game.py | 84 +++++++++++++++--- .../envs/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 2274 bytes .../__pycache__/blokus_env.cpython-311.pyc | Bin 0 -> 17260 bytes .../__pycache__/multiagent.cpython-311.pyc | Bin 0 -> 13012 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 480 bytes .../utils/__pycache__/render.cpython-311.pyc | Bin 0 -> 5613 bytes .../__pycache__/__init__.cpython-311.pyc | Bin 0 -> 275 bytes .../__pycache__/action_mask.cpython-311.pyc | Bin 0 -> 3192 bytes .../test_board.cpython-311-pytest-9.1.1.pyc | Bin 0 -> 30528 bytes .../test_envs.cpython-311-pytest-9.1.1.pyc | Bin 0 -> 42024 bytes .../test_game.cpython-311-pytest-9.1.1.pyc | Bin 0 -> 42704 bytes .../test_imports.cpython-311-pytest-9.1.1.pyc | Bin 0 -> 13733 bytes .../test_pieces.cpython-311-pytest-9.1.1.pyc | Bin 0 -> 21982 bytes 21 files changed, 77 insertions(+), 14 deletions(-) create mode 100644 src/blokus_gym/__pycache__/__init__.cpython-311.pyc create mode 100644 src/blokus_gym/core/__pycache__/__init__.cpython-311.pyc create mode 100644 src/blokus_gym/core/__pycache__/board.cpython-311.pyc create mode 100644 src/blokus_gym/core/__pycache__/bots.cpython-311.pyc create mode 100644 src/blokus_gym/core/__pycache__/game.cpython-311.pyc create mode 100644 src/blokus_gym/core/__pycache__/pieces.cpython-311.pyc create mode 100644 src/blokus_gym/envs/__pycache__/__init__.cpython-311.pyc create mode 100644 src/blokus_gym/envs/__pycache__/blokus_env.cpython-311.pyc create mode 100644 src/blokus_gym/envs/__pycache__/multiagent.cpython-311.pyc create mode 100644 src/blokus_gym/utils/__pycache__/__init__.cpython-311.pyc create mode 100644 src/blokus_gym/utils/__pycache__/render.cpython-311.pyc create mode 100644 src/blokus_gym/wrappers/__pycache__/__init__.cpython-311.pyc create mode 100644 src/blokus_gym/wrappers/__pycache__/action_mask.cpython-311.pyc create mode 100644 tests/__pycache__/test_board.cpython-311-pytest-9.1.1.pyc create mode 100644 tests/__pycache__/test_envs.cpython-311-pytest-9.1.1.pyc create mode 100644 tests/__pycache__/test_game.cpython-311-pytest-9.1.1.pyc create mode 100644 tests/__pycache__/test_imports.cpython-311-pytest-9.1.1.pyc create mode 100644 tests/__pycache__/test_pieces.cpython-311-pytest-9.1.1.pyc diff --git a/src/blokus_gym.egg-info/SOURCES.txt b/src/blokus_gym.egg-info/SOURCES.txt index e665378..64c90b9 100644 --- a/src/blokus_gym.egg-info/SOURCES.txt +++ b/src/blokus_gym.egg-info/SOURCES.txt @@ -16,4 +16,9 @@ src/blokus_gym/envs/multiagent.py src/blokus_gym/utils/__init__.py src/blokus_gym/utils/render.py src/blokus_gym/wrappers/__init__.py -src/blokus_gym/wrappers/action_mask.py \ No newline at end of file +src/blokus_gym/wrappers/action_mask.py +tests/test_board.py +tests/test_envs.py +tests/test_game.py +tests/test_imports.py +tests/test_pieces.py \ No newline at end of file diff --git a/src/blokus_gym/__pycache__/__init__.cpython-311.pyc b/src/blokus_gym/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e4b8c9b6555c1a8c9bc8bcb4a51e35f1bec70625 GIT binary patch literal 1186 zcmcIizi-+=6g~sSV8U-m({zYBRhBA~tW{eH0*X?JBnpjM-Ewm93DNj$baqJTl)oWE zyJxBT-!P(^Ds}3Hlr2;5or3~Nhb}!ofBxS6c<PS_ zb0x_)ouzS_8Q4&3NiV~)ILl0IDnI4r*cx7Ad7Nhj zTwq09WF=f;Wn5+zTv2;;ugYq;rg++`vvs_#xZyov8+b$V41PL5ZuVNko37bIR_-?x zXlX)k1rB#DT_jsUB(i&)Qg;Hh6w}>+`;><;V|IuBkU5{##$(5K1171J5N68@&d$R< zhf$I024iX&!fc-$lB503Zl@>m?@kW(504javG=}t&~6^L7Zdu?koKu4sm~!FQa^H{ zVc?65n(5I<)CW|S;Y5@K_v@joKO5)n_+#l*W2bxWMZ=~%5yjKxW*@?Jo$%}fcSa-1 zzv$ccj=gPFc}2>=s{l0s*+;~)0MJ`r04M^K0P+AifHi2-hG){(})A_GogOdCda%+@o*#b9q>kZ>US0CpAr* zp%>Fto1u@>f3q3dnf}e@iHw$*qyGUFq{*Dy%Qi!=rmHqXZ>FpEvrxax%~Q3UENcOm K20VOA%JB!&?Mhq# literal 0 HcmV?d00001 diff --git a/src/blokus_gym/core/__pycache__/__init__.cpython-311.pyc b/src/blokus_gym/core/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..926d38dc1ef7cd2ccb24fed12258be41f6c03279 GIT binary patch literal 889 zcmcJMzi!(w5XMRUv1Hk@6G zfCM}wA#am5-yu5~%}`=rWAY@aO;F_ggli+L?7oO)64}b^i&E8(BxA_}!f+EF2$?fk zz>0U0<|&UqR0qd#o(QhP$WUHC6PH)TQOudLPQ*JFIm#QHjp*s|;lbfV`LEB0$D{E! z4JL2)hlBm`V7p+SrfkYoSbat^WqBEwsmPUEtxQ;{c4thN5todLyZs^xq^WJlIslq1 zTYvx%0(?LN&;+yr7QhAAfEvKj7)BkndtN!Avjy)?g=F1x=uUNs>O9^ni;dcSp-TMm z@tJPVU8U;jL%BILq4=ZPs`v+nz=3iojkAo>Z|Fv+=ytF7UdYR09#2_squMLv^mhne zdf=r;ss4W@rQP}B)_uuEa+R@H^0`*P`Ypa|tWAvZ3cXm~pDXls`EPTD_LhH}Ys1CH U8vPG+!iHAf;*$f9e5TF(0zAp=MgRZ+ literal 0 HcmV?d00001 diff --git a/src/blokus_gym/core/__pycache__/board.cpython-311.pyc b/src/blokus_gym/core/__pycache__/board.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e5fd80668fc93c3f319bcf62e712ec881c63e101 GIT binary patch literal 6506 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 literal 0 HcmV?d00001 diff --git a/src/blokus_gym/core/__pycache__/bots.cpython-311.pyc b/src/blokus_gym/core/__pycache__/bots.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..373209f654eee7e21e9e7f7161a076857616f197 GIT binary patch literal 9326 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 literal 0 HcmV?d00001 diff --git a/src/blokus_gym/core/__pycache__/game.cpython-311.pyc b/src/blokus_gym/core/__pycache__/game.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..f351585cb0e8e80c364a6d60f3922349b5f7906a GIT binary patch literal 22669 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 literal 0 HcmV?d00001 diff --git a/src/blokus_gym/core/__pycache__/game.cpython-312.pyc b/src/blokus_gym/core/__pycache__/game.cpython-312.pyc index f633397d7c2d1efa627d29766987e98bc6ef01cb..abeba61a1f9d80ad9665edf47fb1747bf62c0025 100644 GIT binary patch delta 4532 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 c(LYWuvhf3B z36Swidj~$9-E;Qr**$-|`VM*LHRAlBq{Jb>_x3eoqO<3=QV5So=EQiP=CF)=Mi2qMzsQd$VQPz8QzOGG}`C%(wlJJT7bQB6;VlF_&hW7>&Qy#PaM z3Ehu_CIC~WA$?q<4M;om3zNZ|{ia=mfks0~&2*1z$zXvt!?YUbFNCOOu(w>^Qd0>f z5}F=Si)aAV_OYM3D*T`2%JJyari?!+Q%p?5f6A05<5L=Y;Chk_WskUZ;>8oIB0Y|) z(XyL_2H4L_50EH(Q2K2WU@w;)B$Mp@vX86#Q0552=6PTx-*=e3?`b9HvkyFTBI#$- zzUB(9u?3||5uOBqOAW9e``SnbQ}cLGH#pcNW?-Zjben+VN@`R3T5s_(+SM5776D4l|LDi z>*|#d%ARG-byT?lr187#_v?~`++)@Cn!Kh6ZZG?NS(P|X*mvsZ#bgP4w_BBA<5`I< zwEBwEQYEaKmD9q6oBgo5QJnCyMP;WntE3fHTJH6yEfYIHV%s-GD7i8Wi>esu^wy>2 zA3$>9XOJu5h?o}B5{C1Ys3fGtQ{XLDs~*d!PE*tqraYt3xIs^Y04+mM5xfZf2t2AW zlIa9OAHq2Vez9K#O10)3ngAN&Fl3zL*F{HAir?OOpbRSjWEy^$ZS30Pt=8WlV@Y5i zJl>Z1c<1g#X~o~N>~FcdGjLx}?2Yp$Ry`Ffo`z*l!{WrUCon&->fQ1B(5pi$-hIp7 zeM_frjouu+>pe7oY}Ms`W#;nCqHm?PV;TNj9jopgt1izgnai0QGfQnBxms5D>|Kx+ zp83%2Un>FKYi{tyd=ak{VJt@L17&Pt|F0WgM6)vhrhM@QjcT+QXjR%eBmEjmJjceG zhQ&V%?7gNhI%JsPg|(F}bX2j$8Y}B;t`d_nn^ShNUmbQRqhWBYh5fz0!fN48mYDOT zk6kJ%ClVWJ@LsF7%TRT}@8>(cyC%>R+rBAuCwjRYz3fX%g~GLcO2;$>Pwk%(GcaO%xurx>%8B3wi;5K;&;2)P2nuD5qP{{v&=01<>a z;a+JuyIr>@OAdZQYQKbXm>={iz(WCa24{zvwWF0(X1h9kSXxKAJhpG-1zD^sK(4bl zyQ)Y-_D)xrDA#etDYmD(opfZM2F$G};VbgB`Z;#1=O8(n{Zmh~ivazUo@6mCT| z-^5*H-Udxe0=gJKD))B)SOx|&Bx5YUN%+t_w8gW%CdwcM)4CX7HL*UjOMGA9>S1Gd?i~L3t=TC}U@8Th$gp6b= zp_x)tPj;yGf?&WaG3{sLAsPwB&l=Db_%j4)ez9gz{)jvqfo64^J7>!bur z$wntlu!TnCPp>?92OSqR!*DeOfp=&+-EJ5Ckt3MV$cflA0 zZc{j(NWIJ=pZ_aqWg|m}j=qN)@@0z07Sfc@+JJ)C<8h62ZZJjEY?6Ihkd=~C>^bsES40w7=UCt2hL~iwuaKA!mO@ffU diff --git a/src/blokus_gym/core/__pycache__/pieces.cpython-311.pyc b/src/blokus_gym/core/__pycache__/pieces.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..de8f7372ef1c626a9bf144006c880cb26b930afa GIT binary patch literal 15764 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 literal 0 HcmV?d00001 diff --git a/src/blokus_gym/core/game.py b/src/blokus_gym/core/game.py index 27cb8ed..cdfa523 100644 --- a/src/blokus_gym/core/game.py +++ b/src/blokus_gym/core/game.py @@ -55,6 +55,14 @@ class BlokusGame: self._move_to_action: dict[tuple[int, int, int, int], int] = {} self._generate_action_space() + # Pre-compute action indices per piece for faster filtering + self._actions_by_piece: list[list[int]] = [] + for piece_id in range(self.piece_set.num_pieces): + self._actions_by_piece.append([ + idx for idx, move in enumerate(self._action_moves) + if move.piece_id == piece_id + ]) + # Starting corners for each player (standard Blokus layout) # 4 players: all four corners # 2 players: opposite corners (0,0) and (max, max) @@ -197,7 +205,6 @@ class BlokusGame: # Rule 4: Corner rule (must touch same-color at a corner) if player.has_started: - # Must touch at least one same-color piece at a corner placed_corners = self._get_placed_corners(move) touches_corner = False for cx, cy in placed_corners: @@ -207,7 +214,6 @@ class BlokusGame: break if not touches_corner: return False - # If not started yet, first move doesn't need to touch (it's the first piece) return True @@ -219,12 +225,61 @@ class BlokusGame: if not player.can_move: return mask - for action_idx in range(self.num_actions): - move = self._action_moves[action_idx] - piece = self.piece_set.get_piece(move.piece_id) - if piece.name not in player.available_pieces: - continue - if self.valid_move(player_idx, move): + available_piece_ids = [ + self.piece_set.get_piece_id(name) + for name in player.available_pieces + ] + + if not player.has_started or not player.corners: + for piece_id in available_piece_ids: + for action_idx in self._actions_by_piece[piece_id]: + if self.valid_move(player_idx, self._action_moves[action_idx]): + mask[action_idx] = True + return mask + + player_board_idx = player_idx + self.PLAYER_OFFSET + + for piece_id in available_piece_ids: + for action_idx in self._actions_by_piece[piece_id]: + move = self._action_moves[action_idx] + placed_corners = self._get_placed_corners(move) + + touches_corner = False + for cx, cy in placed_corners: + if self.board.in_bounds(cx, cy): + if self.board.get_cell(cx, cy) == player_board_idx: + touches_corner = True + break + if not touches_corner: + continue + + placed_squares = self._get_placed_squares(move) + + valid = True + for x, y in placed_squares: + if not self.board.in_bounds(x, y): + valid = False + break + if not valid: + continue + + if self.board.has_overlap(placed_squares): + continue + + for x, y in placed_squares: + edge_invalid = False + for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: + nx, ny = x + dx, y + dy + if self.board.in_bounds(nx, ny): + if self.board.get_cell(nx, ny) == player_board_idx: + edge_invalid = True + break + if edge_invalid: + valid = False + break + if not valid: + continue + mask[action_idx] = True return mask @@ -240,11 +295,14 @@ class BlokusGame: if not player.can_move: return False - for action_idx in range(self.num_actions): - move = self._action_moves[action_idx] - piece = self.piece_set.get_piece(move.piece_id) - if piece.name in player.available_pieces: - if self.valid_move(player_idx, move): + available_piece_ids = [ + self.piece_set.get_piece_id(name) + for name in player.available_pieces + ] + + for piece_id in available_piece_ids: + for action_idx in self._actions_by_piece[piece_id]: + if self.valid_move(player_idx, self._action_moves[action_idx]): return True return False diff --git a/src/blokus_gym/envs/__pycache__/__init__.cpython-311.pyc b/src/blokus_gym/envs/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..11d028c94619a317f75a475621dd132c893da82d GIT binary patch literal 2274 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 literal 0 HcmV?d00001 diff --git a/src/blokus_gym/envs/__pycache__/multiagent.cpython-311.pyc b/src/blokus_gym/envs/__pycache__/multiagent.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c70fa1e08cba6ee73622bf97310412eeee8d0e0 GIT binary patch literal 13012 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 literal 0 HcmV?d00001 diff --git a/src/blokus_gym/utils/__pycache__/__init__.cpython-311.pyc b/src/blokus_gym/utils/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1253ce4bdf05e47e8bd289999dadd6be0a03b610 GIT binary patch literal 480 zcmb`Dze~eF6vy8sX;S(_(8WJNvLxUvLXiwYZKZMXmPgtPC2cM#cPZMEc{?D#F#3auVKVYjLV0Rflm0~Uz$s`RAiJ=seTAJ{1A08rRMOGmO ti`A}q#Y?u#(`#{}BlOpToM~)qLdeGQh_!+L!-$lM|dQMe=-;|4em z^Nyrr%sJqMyi?&7L2)T=MZ7Hx@QPmW~=s0d6WE^)v?me*dOtR}0tt7UZ{zdZ$7PKi?i4Rj)-fnp!Fc3{V5u^Eg$IZ|4<%E zC(~4mM7>@aLLWQVC|r=E>Nr(3HD$XYIem7y(A-tjyA+1hO17Y%ToES+a&Lq{it%l`cXbE|w-#@^&U3U8DOJ7xrqn}Org-35#1YNOe10Eh-3Gx=DKk3E$F*W0eP&Hl=e!lo3?@nQNF zta63l@j(IH|J;i|z&-qb%s&43gV~4jpRx}fZB_``(%oMy!8GI6gUjDl_n275UV^|_ zM7UF3$b=O_dB^kWp8=7c(n4&dt?iU&3+FAru1K%_SyMdG`Rv`HFEI z4{(>pqC8l@J6f_*Ws51PLXM1U{s^nATl zSM&!vp=yK`y_V*O?|?ge^$dRyE4$EF&B`v0=;z8<7;rH~)mCF-%fhNQlo(fKO}#Lo zrjR|HO;el4sfwJQ(8niqo10Ob9<2kYaFah0J)1}2)ht=BkTbva2~oB3*JF^ z7vVjGHUuQV^k)E;z=$^EJ#;^ozK_t3&;jsThO=x$dI;ok94!O<@_)y0JjieWUd3=+ zp1pYjuqwk@3~jh|^v2O_=fmwrXs;RCJJVH8dgiv|8e&tn53d)8qY~0OXg!TVQ{Ahtt!vC^cN~xY{wd#|%g3YmIR0 zH-`(19jPSbZzL2!Lf0D!{+)DU0rWen_uB~EB+9QUWipGl{Iy!WP4>JYwtiUChBBWAyY z3_J!oy1x7=s6$;bWU3y7D_kx-3@h4V--YldZ6l7!b;sZdtS>)gWjzhgT?IU6v^V0k zgmJ89r;I%&A`bSjq1`Y_xs$UbCTM#$dIV|}l;{MQCQsb~u%fVSQS|?RK+%xLKsJ&Ib>E(GS`@DXKO0OxhT;GFTvwIuEzODhvewVfV^ zPk3Vy?I8f{SB_gCn{t)$DcO;$jCqlWbqns=Qp`)PfCIcpz%ebsE~{yr_QK;Pw07>~ nJ#qfmxxo7nr+sd^&ryk0@&FAkgB{FKt1RJ$Thpec+%T&xTvJ}@&fGTvaYy?}}yaLZlbl5b!K!6J5` FIsiV+Oo#vg literal 0 HcmV?d00001 diff --git a/src/blokus_gym/wrappers/__pycache__/action_mask.cpython-311.pyc b/src/blokus_gym/wrappers/__pycache__/action_mask.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..344f4e909649813fc3cc241a80bb04687386607e GIT binary patch literal 3192 zcmb_eO=ufO6rTN)*0P<{sqH#;oUEN6Tg8@3eMp+tZewCMhs1{@O+j|MU28}7I;&lE zcI7`L2*pr`_7FmgbI8Gz;yO5mPy&UXaw(La)FSS98h~PS`2%gQlD{ z;F?tTX{L)>*spX~7~g$5*iDRS!_rKpLR7gU@TN+=2|K22+r*lsXoP5s3Ya;knTB3; zxf3{YbU{m{P5k2A;o;#R5L2doHRGt$ix87k+9s|t!e#(KV@Esz5qHy3J7BaJJ@|m8LXM;uJq7HigHvLDLRQEu*OF; z621T$3C-OE;JDoCfP|z?Ips%PWQq-dxDZfrt6Q<@k zs_M|F(HLHPerkXf23iLP0%#97BvE83$_Glo9jLG(mR=+WK*v)1nU||ttYp?9kUME0 ze_cb5jdR8KTcJ+MQ zvE9-CsH5xl={0SmX(PUI;pb+rV{EHqEZ;F!kc3#IfPg$jLU;W$N>;?YeAr`s2hK#} z5CrfI*8Q-ZW(7Y{LKF=c#Q{U#6LMl!Tr1C& zw9sFjcguLI#A@Yfv&F}+60`2U7g_+5RcBU@a#B{vN))GAF-e~~z~d3vOem^J10_^f zR1Od#vHbUiY3%yEmG-42Ol*fV({(MBw9&;Oa**;0C0#�r2FD^aWyi9hzJeJ&Hm) z>7t`RmR_qxLQri$=u7~)hPIpAzB;!$esg?7yf=Mge5-jl-#mQ1ZbewRyxrQqI&*X8 zR_^<$yEFIP`wRJ#=kq7Wf4dU*ViQ}ji9FEO$$abNO8xec?t5>0``?BBpxN6$>dB+z zFzBzULgn~A1j)aPZ*`_mLR@k@jc!iLg|eYNBFy~{5$3C7T0P2zvwSwJ3lL!;D`ur^ zC@Ddl#qm8tEIKYulVe~tIZnw5N?r=E%mVC(f`leLu*44$Jg*VmkHFiUg16L#%&Bup z#!66@^inkxRE`XU#l9T=*I{O&wPu3X_qC7)8dzzv$t+N*V|A9IiQPq^KXH3dB zsOqN~%`8g7s;b)wRb@qu;h9jY{KjI*OkmSg)hI_;QKNIhk=Y1Z*bs+4LnV zlY;6^!Qt0IeYZ5n$fSbzWnXz5OV|W64-%T~Oxqn4Xr?*;Tz)5TWnM-RZ6HQzm(~hn!vZZ^Dfh&Hw-a literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_board.cpython-311-pytest-9.1.1.pyc b/tests/__pycache__/test_board.cpython-311-pytest-9.1.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..782fbca0302d98e9e2a3e12dc2ad6930debc833c GIT binary patch literal 30528 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 Bo!kHb literal 0 HcmV?d00001 diff --git a/tests/__pycache__/test_pieces.cpython-311-pytest-9.1.1.pyc b/tests/__pycache__/test_pieces.cpython-311-pytest-9.1.1.pyc new file mode 100644 index 0000000000000000000000000000000000000000..d74419f41269bf08443fc8ea6ccfaff1d9d69673 GIT binary patch literal 21982 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 literal 0 HcmV?d00001