def get_san(self, move): return sf.get_san(self.variant, self.fen, move, self.chess960, sf.NOTATION_JANGGI if self.variant == "janggi" else sf.NOTATION_DEFAULT)
def test_get_san(self): fen = "4k3/8/3R4/8/1R3R2/8/3R4/4K3 w - - 0 1" result = sf.get_san("chess", fen, "b4d4") self.assertEqual(result, "Rbd4") result = sf.get_san("chess", fen, "f4d4") self.assertEqual(result, "Rfd4") result = sf.get_san("chess", fen, "d2d4") self.assertEqual(result, "R2d4") result = sf.get_san("chess", fen, "d6d4") self.assertEqual(result, "R6d4") fen = "4k3/8/3R4/3P4/1RP1PR2/8/3R4/4K3 w - - 0 1" result = sf.get_san("chess", fen, "d2d4") self.assertEqual(result, "Rd4") fen = "1r2k3/P1P5/8/8/8/8/8/4K3 w - - 0 1" result = sf.get_san("chess", fen, "c7b8q") self.assertEqual(result, "cxb8=Q+") fen = "1r2k3/P1P5/8/8/8/8/8/4K3 w - - 0 1" result = sf.get_san("chess", fen, "c7b8q", False, sf.NOTATION_LAN) self.assertEqual(result, "c7xb8=Q+") result = sf.get_san("capablanca", CAPA, "e2e4") self.assertEqual(result, "e4") result = sf.get_san("capablanca", CAPA, "e2e4", False, sf.NOTATION_LAN) self.assertEqual(result, "e2-e4") result = sf.get_san("capablanca", CAPA, "h1i3") self.assertEqual(result, "Ci3") result = sf.get_san("sittuyin", SITTUYIN, "R@a1") self.assertEqual(result, "R@a1") fen = "3rr3/1kn3n1/1ss1p1pp/1pPpP3/6PP/p3KN2/2SSFN2/3R3R[] b - - 0 14" result = sf.get_san("sittuyin", fen, "c6c5") self.assertEqual(result, "Scxc5") fen = "7R/1r6/3k1np1/3s2N1/3s3P/4n3/6p1/2R3K1[] w - - 2 55" result = sf.get_san("sittuyin", fen, "h4h4f") self.assertEqual(result, "h4=F") fen = "k7/2K3P1/8/4P3/8/8/8/1R6[] w - - 0 1" result = sf.get_san("sittuyin", fen, "e5f6f") self.assertEqual(result, "e5f6=F") result = sf.get_san("shogi", SHOGI, "i3i4") self.assertEqual(result, "P-16") result = sf.get_san("shogi", SHOGI, "i3i4", False, sf.NOTATION_SHOGI_HOSKING) self.assertEqual(result, "P16") result = sf.get_san("shogi", SHOGI, "f1e2", False, sf.NOTATION_SHOGI_HOSKING) self.assertEqual(result, "G49-58") result = sf.get_san("shogi", SHOGI, "f1e2", False, sf.NOTATION_SHOGI_HODGES) self.assertEqual(result, "G4i-5h") result = sf.get_san("shogi", SHOGI, "f1e2", False, sf.NOTATION_SHOGI_HODGES_NUMBER) self.assertEqual(result, "G49-58") fen = "lnsgkgsnl/1r5b1/pppppp1pp/6p2/9/2P6/PP1PPPPPP/1B5R1/LNSGKGSNL w -" result = sf.get_san("shogi", fen, "b2h8", False, sf.NOTATION_SHOGI_HODGES) self.assertEqual(result, "Bx2b=") result = sf.get_san("shogi", fen, "b2h8+", False, sf.NOTATION_SHOGI_HODGES) self.assertEqual(result, "Bx2b+") fen = "lnsgkg1nl/1r5s1/pppppp1pp/6p2/9/2P6/PP1PPPPPP/7R1/LNSGKGSNL[Bb] w " result = sf.get_san("shogi", fen, "B@g7", False, sf.NOTATION_SHOGI_HODGES) self.assertEqual(result, "B*3c") result = sf.get_san("shogi", fen, "B@g7", False, sf.NOTATION_SHOGI_HODGES_NUMBER) self.assertEqual(result, "B*33") fen = "lnsgkg1nl/1r4s+B1/pppppp1pp/6p2/9/2P6/PP1PPPPPP/7R1/LNSGKGSNL[B] w " result = sf.get_san("shogi", fen, "h8g7", False, sf.NOTATION_SHOGI_HODGES) self.assertEqual(result, "+B-3c") fen = "lnk2gsnl/7b1/p1p+SGp1pp/6p2/1pP6/4P4/PP3PPPP/1S2G2R1/L2GK1bNL[PRppns] w " result = sf.get_san("shogi", fen, "d7d8", False, sf.NOTATION_SHOGI_HODGES) self.assertEqual(result, "+S-6b") result = sf.get_san("xiangqi", XIANGQI, "h1g3") self.assertEqual(result, "Hg3") result = sf.get_san("xiangqi", XIANGQI, "h1g3", False, sf.NOTATION_XIANGQI_WXF) self.assertEqual(result, "H2+3") result = sf.get_san("xiangqi", XIANGQI, "c1e3") self.assertEqual(result, "Ece3") result = sf.get_san("xiangqi", XIANGQI, "c1e3", False, sf.NOTATION_XIANGQI_WXF) self.assertEqual(result, "E7+5") result = sf.get_san("xiangqi", XIANGQI, "h3h10") self.assertEqual(result, "Cxh10") result = sf.get_san("xiangqi", XIANGQI, "h3h10", False, sf.NOTATION_XIANGQI_WXF) self.assertEqual(result, "C2+7") result = sf.get_san("xiangqi", XIANGQI, "h3h5") self.assertEqual(result, "Ch5") # skip disambiguation for elephants and advisors, but not for pieces that require it fen = "rnbakabnr/9/1c5c1/p1p1p1p1p/9/1NB6/P1P1P1P1P/1C1A3C1/9/RNBAK21R w - - 0 1" result = sf.get_san("xiangqi", fen, "c5e3", False, sf.NOTATION_XIANGQI_WXF) self.assertEqual(result, "E7-5") result = sf.get_san("xiangqi", fen, "d1e2", False, sf.NOTATION_XIANGQI_WXF) self.assertEqual(result, "A6+5") result = sf.get_san("xiangqi", fen, "b5c7", False, sf.NOTATION_XIANGQI_WXF) self.assertEqual(result, "H++7") # Tandem pawns fen = "rnbakabnr/9/1c5c1/p1p1P1p1p/4P4/9/P3P3P/1C5C1/9/RNBAKABNR w - - 0 1" result = sf.get_san("xiangqi", fen, "e7d7", False, sf.NOTATION_XIANGQI_WXF) self.assertEqual(result, "15=6") fen = "1rb1ka2r/4a4/2ncb1nc1/p1p1p1p1p/9/2P6/P3PNP1P/2N1C2C1/9/R1BAKAB1R w - - 1 7" result = sf.get_san("xiangqi", fen, "c3e2") self.assertEqual(result, "Hce2") result = sf.get_san("xiangqi", fen, "c3d5") self.assertEqual(result, "Hd5") result = sf.get_san("janggi", JANGGI, "b1c3", False, sf.NOTATION_JANGGI) self.assertEqual(result, "H02-83") fen = "1b1aa2b1/5k3/3ncn3/1pp1pp3/5r2p/9/P1PPB1PPB/2N1CCN1c/9/R2AKAR2 w - - 19 17" result = sf.get_san("janggi", fen, "d1e2", False, sf.NOTATION_SAN) self.assertEqual(result, "Ade2") fen = "1Pbcka3/3nNn1c1/N2CaC3/1pB6/9/9/5P3/9/4K4/9 w - - 0 23" result = sf.get_san("janggi", fen, "f8f10", False, sf.NOTATION_SAN) self.assertEqual(result, "Cfxf10") fen = "rnsm1s1r/4n1k1/1ppppppp/p7/2PPP3/PP3PPP/4N2R/RNSKMS2 b - - 1 5" result = sf.get_san("makruk", fen, "f8f7") self.assertEqual(result, "Sf7") fen = "4k3/8/8/4S3/8/2S5/8/4K3 w - - 0 1" result = sf.get_san("makruk", fen, "e5d4") self.assertEqual(result, "Sed4") result = sf.get_san("makruk", fen, "c3d4") self.assertEqual(result, "Scd4") fen = "4k3/8/8/3S4/8/3S4/8/4K3 w - - 0 1" result = sf.get_san("makruk", fen, "d3d4") self.assertEqual(result, "Sd4") UCI_moves = ["e2e4", "e7e5", "g1f3", "b8c6h", "f1c4", "f8c5e"] SAN_moves = ["e4", "e5", "Nf3", "Nc6/H", "Bc4", "Bc5/E"] fen = SEIRAWAN for i, move in enumerate(UCI_moves): result = sf.get_san("seirawan", fen, move) self.assertEqual(result, SAN_moves[i]) fen = sf.get_fen("seirawan", SEIRAWAN, UCI_moves[:i + 1]) result = sf.get_san("seirawan", fen, "e1g1") self.assertEqual(result, "O-O") result = sf.get_san("seirawan", fen, "e1g1h") self.assertEqual(result, "O-O/He1") result = sf.get_san("seirawan", fen, "e1g1e") self.assertEqual(result, "O-O/Ee1") result = sf.get_san("seirawan", fen, "h1e1h") self.assertEqual(result, "O-O/Hh1") result = sf.get_san("seirawan", fen, "h1e1e") self.assertEqual(result, "O-O/Eh1")
def get_san(self, move): return sf.get_san(self.variant, self.fen, move, self.chess960)