module BishBosh.Input.SearchOptions(
SortOnStandardOpeningMoveFrequency,
HammingDistance,
MaybeRetireAfterNMoves,
TrapRepeatedPositions,
MaybeUseTranspositions,
Reader,
SearchOptions(
getSortOnStandardOpeningMoveFrequency,
getMaybeCaptureMoveSortAlgorithm,
getMaybeMinimumHammingDistance,
getMaybeRetireKillerMovesAfter,
getTrapRepeatedPositions,
getUsePondering,
getMaybeUseTranspositions,
getStandardOpeningOptions,
getSearchDepthByLogicalColour
),
tag,
searchDepthTag,
minimumSearchDepth,
defaultSearchDepth,
mkSearchOptions,
getSearchDepth,
maybeRetireTranspositionsAfter,
maybeMinimumTranspositionSearchDepth,
identifyAutomatedPlayers,
setSearchDepth,
swapSearchDepth,
recordKillerMoves
) where
import BishBosh.Data.Bool()
import Control.Arrow((***))
import qualified BishBosh.Attribute.CaptureMoveSortAlgorithm as Attribute.CaptureMoveSortAlgorithm
import qualified BishBosh.Attribute.LogicalColour as Attribute.LogicalColour
import qualified BishBosh.Data.Exception as Data.Exception
import qualified BishBosh.Data.Foldable
import qualified BishBosh.Input.StandardOpeningOptions as Input.StandardOpeningOptions
import qualified BishBosh.Property.Opposable as Property.Opposable
import qualified BishBosh.Text.Case as Text.Case
import qualified BishBosh.Text.ShowList as Text.ShowList
import qualified BishBosh.Type.Count as Type.Count
import qualified Control.DeepSeq
import qualified Control.Exception
import qualified Control.Monad.Reader
import qualified Data.Default
import qualified Data.Foldable
import qualified Data.Map.Strict
import qualified Data.Maybe
import qualified Text.XML.HXT.Arrow.Pickle as HXT
tag :: String
tag :: String
tag = String
"searchOptions"
sortOnStandardOpeningMoveFrequencyTag :: String
sortOnStandardOpeningMoveFrequencyTag :: String
sortOnStandardOpeningMoveFrequencyTag = String
"sortOnStandardOpeningMoveFrequency"
minimumHammingDistanceTag :: String
minimumHammingDistanceTag :: String
minimumHammingDistanceTag = String
"minimumHammingDistance"
retireKillerMovesAfterTag :: String
retireKillerMovesAfterTag :: String
retireKillerMovesAfterTag = String
"retireKillerMovesAfter"
trapRepeatedPositionsTag :: String
trapRepeatedPositionsTag :: String
trapRepeatedPositionsTag = String
"trapRepeatedPositions"
usePonderingTag :: String
usePonderingTag :: String
usePonderingTag = String
"usePondering"
retireTranspositionsAfterTag :: String
retireTranspositionsAfterTag :: String
retireTranspositionsAfterTag = String
"retireTranspositionsAfter"
minimumTranspositionSearchDepthTag :: String
minimumTranspositionSearchDepthTag :: String
minimumTranspositionSearchDepthTag = String
"minimumTranspositionSearchDepth"
searchDepthTag :: String
searchDepthTag :: String
searchDepthTag = String
"searchDepth"
searchDepthByLogicalColourTag :: String
searchDepthByLogicalColourTag :: String
searchDepthByLogicalColourTag = String -> ShowS
showString String
searchDepthTag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"By" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ ShowS
Text.Case.toUpperInitial String
Attribute.LogicalColour.tag
minimumSearchDepth :: Type.Count.NPlies
minimumSearchDepth :: NPlies
minimumSearchDepth = NPlies
1
defaultSearchDepth :: Type.Count.NPlies
defaultSearchDepth :: NPlies
defaultSearchDepth = NPlies
4
type SortOnStandardOpeningMoveFrequency = Bool
type HammingDistance = Int
type MaybeRetireAfterNMoves = Maybe Type.Count.NMoves
type TrapRepeatedPositions = Bool
type UsePondering = Bool
type MaybeUseTranspositions = Maybe (Type.Count.NMoves, Type.Count.NPlies)
type SearchDepthByLogicalColour = Data.Map.Strict.Map Attribute.LogicalColour.LogicalColour Type.Count.NPlies
data SearchOptions = MkSearchOptions {
SearchOptions -> SortOnStandardOpeningMoveFrequency
getSortOnStandardOpeningMoveFrequency :: SortOnStandardOpeningMoveFrequency,
SearchOptions -> Maybe CaptureMoveSortAlgorithm
getMaybeCaptureMoveSortAlgorithm :: Maybe Attribute.CaptureMoveSortAlgorithm.CaptureMoveSortAlgorithm,
SearchOptions -> Maybe NPlies
getMaybeMinimumHammingDistance :: Maybe HammingDistance,
SearchOptions -> Maybe NPlies
getMaybeRetireKillerMovesAfter :: MaybeRetireAfterNMoves,
SearchOptions -> SortOnStandardOpeningMoveFrequency
getTrapRepeatedPositions :: TrapRepeatedPositions,
SearchOptions -> SortOnStandardOpeningMoveFrequency
getUsePondering :: UsePondering,
SearchOptions -> MaybeUseTranspositions
getMaybeUseTranspositions :: MaybeUseTranspositions,
SearchOptions -> StandardOpeningOptions
getStandardOpeningOptions :: Input.StandardOpeningOptions.StandardOpeningOptions,
SearchOptions -> SearchDepthByLogicalColour
getSearchDepthByLogicalColour :: SearchDepthByLogicalColour
} deriving SearchOptions
-> SearchOptions -> SortOnStandardOpeningMoveFrequency
(SearchOptions
-> SearchOptions -> SortOnStandardOpeningMoveFrequency)
-> (SearchOptions
-> SearchOptions -> SortOnStandardOpeningMoveFrequency)
-> Eq SearchOptions
forall a.
(a -> a -> SortOnStandardOpeningMoveFrequency)
-> (a -> a -> SortOnStandardOpeningMoveFrequency) -> Eq a
/= :: SearchOptions
-> SearchOptions -> SortOnStandardOpeningMoveFrequency
$c/= :: SearchOptions
-> SearchOptions -> SortOnStandardOpeningMoveFrequency
== :: SearchOptions
-> SearchOptions -> SortOnStandardOpeningMoveFrequency
$c== :: SearchOptions
-> SearchOptions -> SortOnStandardOpeningMoveFrequency
Eq
instance Control.DeepSeq.NFData SearchOptions where
rnf :: SearchOptions -> ()
rnf MkSearchOptions {
getSortOnStandardOpeningMoveFrequency :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getSortOnStandardOpeningMoveFrequency = SortOnStandardOpeningMoveFrequency
sortOnStandardOpeningMoveFrequency,
getMaybeCaptureMoveSortAlgorithm :: SearchOptions -> Maybe CaptureMoveSortAlgorithm
getMaybeCaptureMoveSortAlgorithm = Maybe CaptureMoveSortAlgorithm
maybeCaptureMoveSortAlgorithm,
getMaybeMinimumHammingDistance :: SearchOptions -> Maybe NPlies
getMaybeMinimumHammingDistance = Maybe NPlies
maybeMinimumHammingDistance,
getMaybeRetireKillerMovesAfter :: SearchOptions -> Maybe NPlies
getMaybeRetireKillerMovesAfter = Maybe NPlies
maybeRetireKillerMovesAfter,
getTrapRepeatedPositions :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getTrapRepeatedPositions = SortOnStandardOpeningMoveFrequency
trapRepeatedPositions,
getUsePondering :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getUsePondering = SortOnStandardOpeningMoveFrequency
usePondering,
getMaybeUseTranspositions :: SearchOptions -> MaybeUseTranspositions
getMaybeUseTranspositions = MaybeUseTranspositions
maybeUseTranspositions,
getStandardOpeningOptions :: SearchOptions -> StandardOpeningOptions
getStandardOpeningOptions = StandardOpeningOptions
standardOpeningOptions,
getSearchDepthByLogicalColour :: SearchOptions -> SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
searchDepthByLogicalColour
} = ((SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies),
(SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour))
-> ()
forall a. NFData a => a -> ()
Control.DeepSeq.rnf (
(
SortOnStandardOpeningMoveFrequency
sortOnStandardOpeningMoveFrequency, Maybe CaptureMoveSortAlgorithm
maybeCaptureMoveSortAlgorithm, Maybe NPlies
maybeMinimumHammingDistance, Maybe NPlies
maybeRetireKillerMovesAfter
), (
SortOnStandardOpeningMoveFrequency
trapRepeatedPositions, SortOnStandardOpeningMoveFrequency
usePondering, MaybeUseTranspositions
maybeUseTranspositions, StandardOpeningOptions
standardOpeningOptions, SearchDepthByLogicalColour
searchDepthByLogicalColour
)
)
instance Show SearchOptions where
showsPrec :: NPlies -> SearchOptions -> ShowS
showsPrec NPlies
_ MkSearchOptions {
getSortOnStandardOpeningMoveFrequency :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getSortOnStandardOpeningMoveFrequency = SortOnStandardOpeningMoveFrequency
sortOnStandardOpeningMoveFrequency,
getMaybeCaptureMoveSortAlgorithm :: SearchOptions -> Maybe CaptureMoveSortAlgorithm
getMaybeCaptureMoveSortAlgorithm = Maybe CaptureMoveSortAlgorithm
maybeCaptureMoveSortAlgorithm,
getMaybeMinimumHammingDistance :: SearchOptions -> Maybe NPlies
getMaybeMinimumHammingDistance = Maybe NPlies
maybeMinimumHammingDistance,
getMaybeRetireKillerMovesAfter :: SearchOptions -> Maybe NPlies
getMaybeRetireKillerMovesAfter = Maybe NPlies
maybeRetireKillerMovesAfter,
getTrapRepeatedPositions :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getTrapRepeatedPositions = SortOnStandardOpeningMoveFrequency
trapRepeatedPositions,
getUsePondering :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getUsePondering = SortOnStandardOpeningMoveFrequency
usePondering,
getMaybeUseTranspositions :: SearchOptions -> MaybeUseTranspositions
getMaybeUseTranspositions = MaybeUseTranspositions
maybeUseTranspositions,
getStandardOpeningOptions :: SearchOptions -> StandardOpeningOptions
getStandardOpeningOptions = StandardOpeningOptions
standardOpeningOptions,
getSearchDepthByLogicalColour :: SearchOptions -> SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
searchDepthByLogicalColour
} = [(String, ShowS)] -> ShowS
Text.ShowList.showsAssociationList' ([(String, ShowS)] -> ShowS)
-> ([(String, ShowS)] -> [(String, ShowS)])
-> [(String, ShowS)]
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([(String, ShowS)] -> [(String, ShowS)])
-> (CaptureMoveSortAlgorithm
-> [(String, ShowS)] -> [(String, ShowS)])
-> Maybe CaptureMoveSortAlgorithm
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b a. b -> (a -> b) -> Maybe a -> b
Data.Maybe.maybe [(String, ShowS)] -> [(String, ShowS)]
forall a. a -> a
id (
(:) ((String, ShowS) -> [(String, ShowS)] -> [(String, ShowS)])
-> (CaptureMoveSortAlgorithm -> (String, ShowS))
-> CaptureMoveSortAlgorithm
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (,) String
Attribute.CaptureMoveSortAlgorithm.tag (ShowS -> (String, ShowS))
-> (CaptureMoveSortAlgorithm -> ShowS)
-> CaptureMoveSortAlgorithm
-> (String, ShowS)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. CaptureMoveSortAlgorithm -> ShowS
forall a. Show a => a -> ShowS
shows
) Maybe CaptureMoveSortAlgorithm
maybeCaptureMoveSortAlgorithm ([(String, ShowS)] -> [(String, ShowS)])
-> ([(String, ShowS)] -> [(String, ShowS)])
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([(String, ShowS)] -> [(String, ShowS)])
-> (NPlies -> [(String, ShowS)] -> [(String, ShowS)])
-> Maybe NPlies
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b a. b -> (a -> b) -> Maybe a -> b
Data.Maybe.maybe [(String, ShowS)] -> [(String, ShowS)]
forall a. a -> a
id (
(:) ((String, ShowS) -> [(String, ShowS)] -> [(String, ShowS)])
-> (NPlies -> (String, ShowS))
-> NPlies
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (,) String
minimumHammingDistanceTag (ShowS -> (String, ShowS))
-> (NPlies -> ShowS) -> NPlies -> (String, ShowS)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NPlies -> ShowS
forall a. Show a => a -> ShowS
shows
) Maybe NPlies
maybeMinimumHammingDistance ([(String, ShowS)] -> [(String, ShowS)])
-> ([(String, ShowS)] -> [(String, ShowS)])
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([(String, ShowS)] -> [(String, ShowS)])
-> (NPlies -> [(String, ShowS)] -> [(String, ShowS)])
-> Maybe NPlies
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b a. b -> (a -> b) -> Maybe a -> b
Data.Maybe.maybe [(String, ShowS)] -> [(String, ShowS)]
forall a. a -> a
id (
(:) ((String, ShowS) -> [(String, ShowS)] -> [(String, ShowS)])
-> (NPlies -> (String, ShowS))
-> NPlies
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (,) String
retireKillerMovesAfterTag (ShowS -> (String, ShowS))
-> (NPlies -> ShowS) -> NPlies -> (String, ShowS)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. NPlies -> ShowS
forall a. Show a => a -> ShowS
shows
) Maybe NPlies
maybeRetireKillerMovesAfter ([(String, ShowS)] -> ShowS) -> [(String, ShowS)] -> ShowS
forall a b. (a -> b) -> a -> b
$ ([(String, ShowS)] -> [(String, ShowS)])
-> ((NPlies, NPlies) -> [(String, ShowS)] -> [(String, ShowS)])
-> MaybeUseTranspositions
-> [(String, ShowS)]
-> [(String, ShowS)]
forall b a. b -> (a -> b) -> Maybe a -> b
Data.Maybe.maybe [(String, ShowS)] -> [(String, ShowS)]
forall a. a -> a
id (
\(NPlies
retireTranspositionsAfter, NPlies
minimumTranspositionSearchDepth) -> [(String, ShowS)] -> [(String, ShowS)] -> [(String, ShowS)]
forall a. [a] -> [a] -> [a]
(++) [
(
String
sortOnStandardOpeningMoveFrequencyTag,
SortOnStandardOpeningMoveFrequency -> ShowS
forall a. Show a => a -> ShowS
shows SortOnStandardOpeningMoveFrequency
sortOnStandardOpeningMoveFrequency
), (
String
retireTranspositionsAfterTag,
NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
retireTranspositionsAfter
), (
String
minimumTranspositionSearchDepthTag,
NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
minimumTranspositionSearchDepth
)
]
) MaybeUseTranspositions
maybeUseTranspositions [
(
String
trapRepeatedPositionsTag,
SortOnStandardOpeningMoveFrequency -> ShowS
forall a. Show a => a -> ShowS
shows SortOnStandardOpeningMoveFrequency
trapRepeatedPositions
), (
String
usePonderingTag,
SortOnStandardOpeningMoveFrequency -> ShowS
forall a. Show a => a -> ShowS
shows SortOnStandardOpeningMoveFrequency
usePondering
), (
String
Input.StandardOpeningOptions.tag,
StandardOpeningOptions -> ShowS
forall a. Show a => a -> ShowS
shows StandardOpeningOptions
standardOpeningOptions
), (
String
searchDepthByLogicalColourTag,
[(String, ShowS)] -> ShowS
Text.ShowList.showsAssociationList' ([(String, ShowS)] -> ShowS)
-> ([(LogicalColour, NPlies)] -> [(String, ShowS)])
-> [(LogicalColour, NPlies)]
-> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((LogicalColour, NPlies) -> (String, ShowS))
-> [(LogicalColour, NPlies)] -> [(String, ShowS)]
forall a b. (a -> b) -> [a] -> [b]
map (LogicalColour -> String
forall a. Show a => a -> String
show (LogicalColour -> String)
-> (NPlies -> ShowS) -> (LogicalColour, NPlies) -> (String, ShowS)
forall (a :: * -> * -> *) b c b' c'.
Arrow a =>
a b c -> a b' c' -> a (b, b') (c, c')
*** NPlies -> ShowS
forall a. Show a => a -> ShowS
shows) ([(LogicalColour, NPlies)] -> ShowS)
-> [(LogicalColour, NPlies)] -> ShowS
forall a b. (a -> b) -> a -> b
$ SearchDepthByLogicalColour -> [(LogicalColour, NPlies)]
forall k a. Map k a -> [(k, a)]
Data.Map.Strict.assocs SearchDepthByLogicalColour
searchDepthByLogicalColour
)
]
instance Data.Default.Default SearchOptions where
def :: SearchOptions
def = MkSearchOptions :: SortOnStandardOpeningMoveFrequency
-> Maybe CaptureMoveSortAlgorithm
-> Maybe NPlies
-> Maybe NPlies
-> SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency
-> MaybeUseTranspositions
-> StandardOpeningOptions
-> SearchDepthByLogicalColour
-> SearchOptions
MkSearchOptions {
getSortOnStandardOpeningMoveFrequency :: SortOnStandardOpeningMoveFrequency
getSortOnStandardOpeningMoveFrequency = SortOnStandardOpeningMoveFrequency
False,
getMaybeCaptureMoveSortAlgorithm :: Maybe CaptureMoveSortAlgorithm
getMaybeCaptureMoveSortAlgorithm = Maybe CaptureMoveSortAlgorithm
forall a. Maybe a
Nothing,
getMaybeMinimumHammingDistance :: Maybe NPlies
getMaybeMinimumHammingDistance = Maybe NPlies
forall a. Maybe a
Nothing,
getMaybeRetireKillerMovesAfter :: Maybe NPlies
getMaybeRetireKillerMovesAfter = Maybe NPlies
forall a. Maybe a
Nothing,
getTrapRepeatedPositions :: SortOnStandardOpeningMoveFrequency
getTrapRepeatedPositions = SortOnStandardOpeningMoveFrequency
True,
getUsePondering :: SortOnStandardOpeningMoveFrequency
getUsePondering = SortOnStandardOpeningMoveFrequency
False,
getMaybeUseTranspositions :: MaybeUseTranspositions
getMaybeUseTranspositions = MaybeUseTranspositions
forall a. Maybe a
Nothing,
getStandardOpeningOptions :: StandardOpeningOptions
getStandardOpeningOptions = StandardOpeningOptions
forall a. Default a => a
Data.Default.def,
getSearchDepthByLogicalColour :: SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
forall k a. Map k a
Data.Map.Strict.empty
}
instance HXT.XmlPickler SearchOptions where
xpickle :: PU SearchOptions
xpickle = SearchOptions -> PU SearchOptions -> PU SearchOptions
forall a. Eq a => a -> PU a -> PU a
HXT.xpDefault SearchOptions
forall a. Default a => a
Data.Default.def (PU SearchOptions -> PU SearchOptions)
-> (PU
(SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
-> PU SearchOptions)
-> PU
(SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
-> PU SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PU SearchOptions -> PU SearchOptions
forall a. String -> PU a -> PU a
HXT.xpElem String
tag (PU SearchOptions -> PU SearchOptions)
-> (PU
(SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
-> PU SearchOptions)
-> PU
(SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
-> PU SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
-> SearchOptions,
SearchOptions
-> (SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour))
-> PU
(SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
-> PU SearchOptions
forall a b. (a -> b, b -> a) -> PU a -> PU b
HXT.xpWrap (
\(SortOnStandardOpeningMoveFrequency
a, Maybe CaptureMoveSortAlgorithm
b, Maybe NPlies
c, Maybe NPlies
d, SortOnStandardOpeningMoveFrequency
e, SortOnStandardOpeningMoveFrequency
f, MaybeUseTranspositions
g, StandardOpeningOptions
h, SearchDepthByLogicalColour
i) -> SortOnStandardOpeningMoveFrequency
-> Maybe CaptureMoveSortAlgorithm
-> Maybe NPlies
-> Maybe NPlies
-> SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency
-> MaybeUseTranspositions
-> StandardOpeningOptions
-> SearchDepthByLogicalColour
-> SearchOptions
mkSearchOptions SortOnStandardOpeningMoveFrequency
a Maybe CaptureMoveSortAlgorithm
b Maybe NPlies
c Maybe NPlies
d SortOnStandardOpeningMoveFrequency
e SortOnStandardOpeningMoveFrequency
f MaybeUseTranspositions
g StandardOpeningOptions
h SearchDepthByLogicalColour
i,
\MkSearchOptions {
getSortOnStandardOpeningMoveFrequency :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getSortOnStandardOpeningMoveFrequency = SortOnStandardOpeningMoveFrequency
sortOnStandardOpeningMoveFrequency,
getMaybeCaptureMoveSortAlgorithm :: SearchOptions -> Maybe CaptureMoveSortAlgorithm
getMaybeCaptureMoveSortAlgorithm = Maybe CaptureMoveSortAlgorithm
maybeCaptureMoveSortAlgorithm,
getMaybeMinimumHammingDistance :: SearchOptions -> Maybe NPlies
getMaybeMinimumHammingDistance = Maybe NPlies
maybeMinimumHammingDistance,
getMaybeRetireKillerMovesAfter :: SearchOptions -> Maybe NPlies
getMaybeRetireKillerMovesAfter = Maybe NPlies
maybeRetireKillerMovesAfter,
getTrapRepeatedPositions :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getTrapRepeatedPositions = SortOnStandardOpeningMoveFrequency
trapRepeatedPositions,
getUsePondering :: SearchOptions -> SortOnStandardOpeningMoveFrequency
getUsePondering = SortOnStandardOpeningMoveFrequency
usePondering,
getMaybeUseTranspositions :: SearchOptions -> MaybeUseTranspositions
getMaybeUseTranspositions = MaybeUseTranspositions
maybeUseTranspositions,
getStandardOpeningOptions :: SearchOptions -> StandardOpeningOptions
getStandardOpeningOptions = StandardOpeningOptions
standardOpeningOptions,
getSearchDepthByLogicalColour :: SearchOptions -> SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
searchDepthByLogicalColour
} -> (
SortOnStandardOpeningMoveFrequency
sortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm
maybeCaptureMoveSortAlgorithm,
Maybe NPlies
maybeMinimumHammingDistance,
Maybe NPlies
maybeRetireKillerMovesAfter,
SortOnStandardOpeningMoveFrequency
trapRepeatedPositions,
SortOnStandardOpeningMoveFrequency
usePondering,
MaybeUseTranspositions
maybeUseTranspositions,
StandardOpeningOptions
standardOpeningOptions,
SearchDepthByLogicalColour
searchDepthByLogicalColour
)
) (PU
(SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
-> PU SearchOptions)
-> PU
(SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
-> PU SearchOptions
forall a b. (a -> b) -> a -> b
$ PU SortOnStandardOpeningMoveFrequency
-> PU (Maybe CaptureMoveSortAlgorithm)
-> PU (Maybe NPlies)
-> PU (Maybe NPlies)
-> PU SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
-> PU MaybeUseTranspositions
-> PU StandardOpeningOptions
-> PU SearchDepthByLogicalColour
-> PU
(SortOnStandardOpeningMoveFrequency,
Maybe CaptureMoveSortAlgorithm, Maybe NPlies, Maybe NPlies,
SortOnStandardOpeningMoveFrequency,
SortOnStandardOpeningMoveFrequency, MaybeUseTranspositions,
StandardOpeningOptions, SearchDepthByLogicalColour)
forall a b c d e f g h i.
PU a
-> PU b
-> PU c
-> PU d
-> PU e
-> PU f
-> PU g
-> PU h
-> PU i
-> PU (a, b, c, d, e, f, g, h, i)
HXT.xp9Tuple (
SearchOptions -> SortOnStandardOpeningMoveFrequency
getSortOnStandardOpeningMoveFrequency SearchOptions
def SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
forall a. Eq a => a -> PU a -> PU a
`HXT.xpDefault` String
-> PU SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
forall a. String -> PU a -> PU a
HXT.xpAttr String
sortOnStandardOpeningMoveFrequencyTag PU SortOnStandardOpeningMoveFrequency
forall a. XmlPickler a => PU a
HXT.xpickle
) (
PU CaptureMoveSortAlgorithm -> PU (Maybe CaptureMoveSortAlgorithm)
forall a. PU a -> PU (Maybe a)
HXT.xpOption PU CaptureMoveSortAlgorithm
forall a. XmlPickler a => PU a
HXT.xpickle
) (
String -> PU NPlies -> PU (Maybe NPlies)
forall a. String -> PU a -> PU (Maybe a)
HXT.xpAttrImplied String
minimumHammingDistanceTag PU NPlies
HXT.xpInt
) (
String -> PU NPlies -> PU (Maybe NPlies)
forall a. String -> PU a -> PU (Maybe a)
HXT.xpAttrImplied String
retireKillerMovesAfterTag PU NPlies
forall a. XmlPickler a => PU a
HXT.xpickle
) (
SearchOptions -> SortOnStandardOpeningMoveFrequency
getTrapRepeatedPositions SearchOptions
def SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
forall a. Eq a => a -> PU a -> PU a
`HXT.xpDefault` String
-> PU SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
forall a. String -> PU a -> PU a
HXT.xpAttr String
trapRepeatedPositionsTag PU SortOnStandardOpeningMoveFrequency
forall a. XmlPickler a => PU a
HXT.xpickle
) (
SearchOptions -> SortOnStandardOpeningMoveFrequency
getUsePondering SearchOptions
def SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
forall a. Eq a => a -> PU a -> PU a
`HXT.xpDefault` String
-> PU SortOnStandardOpeningMoveFrequency
-> PU SortOnStandardOpeningMoveFrequency
forall a. String -> PU a -> PU a
HXT.xpAttr String
usePonderingTag PU SortOnStandardOpeningMoveFrequency
forall a. XmlPickler a => PU a
HXT.xpickle
) (
PU (NPlies, NPlies) -> PU MaybeUseTranspositions
forall a. PU a -> PU (Maybe a)
HXT.xpOption (PU (NPlies, NPlies) -> PU MaybeUseTranspositions)
-> (PU (NPlies, NPlies) -> PU (NPlies, NPlies))
-> PU (NPlies, NPlies)
-> PU MaybeUseTranspositions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PU (NPlies, NPlies) -> PU (NPlies, NPlies)
forall a. String -> PU a -> PU a
HXT.xpElem String
"transpositions" (PU (NPlies, NPlies) -> PU MaybeUseTranspositions)
-> PU (NPlies, NPlies) -> PU MaybeUseTranspositions
forall a b. (a -> b) -> a -> b
$ String -> PU NPlies -> PU NPlies
forall a. String -> PU a -> PU a
HXT.xpAttr String
retireTranspositionsAfterTag PU NPlies
forall a. XmlPickler a => PU a
HXT.xpickle PU NPlies -> PU NPlies -> PU (NPlies, NPlies)
forall a b. PU a -> PU b -> PU (a, b)
`HXT.xpPair` String -> PU NPlies -> PU NPlies
forall a. String -> PU a -> PU a
HXT.xpAttr String
minimumTranspositionSearchDepthTag PU NPlies
forall a. XmlPickler a => PU a
HXT.xpickle
) PU StandardOpeningOptions
forall a. XmlPickler a => PU a
HXT.xpickle (
String
-> PU SearchDepthByLogicalColour -> PU SearchDepthByLogicalColour
forall a. String -> PU a -> PU a
HXT.xpElem String
searchDepthByLogicalColourTag (PU SearchDepthByLogicalColour -> PU SearchDepthByLogicalColour)
-> (PU (LogicalColour, NPlies) -> PU SearchDepthByLogicalColour)
-> PU (LogicalColour, NPlies)
-> PU SearchDepthByLogicalColour
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ([(LogicalColour, NPlies)] -> SearchDepthByLogicalColour,
SearchDepthByLogicalColour -> [(LogicalColour, NPlies)])
-> PU [(LogicalColour, NPlies)] -> PU SearchDepthByLogicalColour
forall a b. (a -> b, b -> a) -> PU a -> PU b
HXT.xpWrap (
[(LogicalColour, NPlies)] -> SearchDepthByLogicalColour
forall k a. Ord k => [(k, a)] -> Map k a
Data.Map.Strict.fromList ([(LogicalColour, NPlies)] -> SearchDepthByLogicalColour)
-> ([(LogicalColour, NPlies)] -> [(LogicalColour, NPlies)])
-> [(LogicalColour, NPlies)]
-> SearchDepthByLogicalColour
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (
\[(LogicalColour, NPlies)]
l -> let
duplicateLogicalColours :: [LogicalColour]
duplicateLogicalColours = [LogicalColour] -> [LogicalColour]
forall (foldable :: * -> *) a.
(Foldable foldable, Ord a) =>
foldable a -> [a]
BishBosh.Data.Foldable.findDuplicates ([LogicalColour] -> [LogicalColour])
-> [LogicalColour] -> [LogicalColour]
forall a b. (a -> b) -> a -> b
$ ((LogicalColour, NPlies) -> LogicalColour)
-> [(LogicalColour, NPlies)] -> [LogicalColour]
forall a b. (a -> b) -> [a] -> [b]
map (LogicalColour, NPlies) -> LogicalColour
forall a b. (a, b) -> a
fst [(LogicalColour, NPlies)]
l
in if [LogicalColour] -> SortOnStandardOpeningMoveFrequency
forall (t :: * -> *) a.
Foldable t =>
t a -> SortOnStandardOpeningMoveFrequency
null [LogicalColour]
duplicateLogicalColours
then [(LogicalColour, NPlies)]
l
else Exception -> [(LogicalColour, NPlies)]
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> [(LogicalColour, NPlies)])
-> (String -> Exception) -> String -> [(LogicalColour, NPlies)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkDuplicateData (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.xpickle:\t" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
Attribute.LogicalColour.tag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"s must be distinct; " (String -> [(LogicalColour, NPlies)])
-> String -> [(LogicalColour, NPlies)]
forall a b. (a -> b) -> a -> b
$ [LogicalColour] -> ShowS
forall a. Show a => a -> ShowS
shows [LogicalColour]
duplicateLogicalColours String
"."
),
SearchDepthByLogicalColour -> [(LogicalColour, NPlies)]
forall k a. Map k a -> [(k, a)]
Data.Map.Strict.toList
) (PU [(LogicalColour, NPlies)] -> PU SearchDepthByLogicalColour)
-> (PU (LogicalColour, NPlies) -> PU [(LogicalColour, NPlies)])
-> PU (LogicalColour, NPlies)
-> PU SearchDepthByLogicalColour
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PU (LogicalColour, NPlies) -> PU [(LogicalColour, NPlies)]
forall a. PU a -> PU [a]
HXT.xpList (PU (LogicalColour, NPlies) -> PU [(LogicalColour, NPlies)])
-> (PU (LogicalColour, NPlies) -> PU (LogicalColour, NPlies))
-> PU (LogicalColour, NPlies)
-> PU [(LogicalColour, NPlies)]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> PU (LogicalColour, NPlies) -> PU (LogicalColour, NPlies)
forall a. String -> PU a -> PU a
HXT.xpElem (
String -> ShowS
showString String
"by" ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ ShowS
Text.Case.toUpperInitial String
Attribute.LogicalColour.tag
) (PU (LogicalColour, NPlies) -> PU SearchDepthByLogicalColour)
-> PU (LogicalColour, NPlies) -> PU SearchDepthByLogicalColour
forall a b. (a -> b) -> a -> b
$ PU LogicalColour
forall a. XmlPickler a => PU a
HXT.xpickle PU LogicalColour -> PU NPlies -> PU (LogicalColour, NPlies)
forall a b. PU a -> PU b -> PU (a, b)
`HXT.xpPair` String -> PU NPlies -> PU NPlies
forall a. String -> PU a -> PU a
HXT.xpAttr String
searchDepthTag PU NPlies
forall a. XmlPickler a => PU a
HXT.xpickle
) where
def :: SearchOptions
def = SearchOptions
forall a. Default a => a
Data.Default.def
mkSearchOptions
:: SortOnStandardOpeningMoveFrequency
-> Maybe Attribute.CaptureMoveSortAlgorithm.CaptureMoveSortAlgorithm
-> Maybe HammingDistance
-> MaybeRetireAfterNMoves
-> TrapRepeatedPositions
-> UsePondering
-> MaybeUseTranspositions
-> Input.StandardOpeningOptions.StandardOpeningOptions
-> SearchDepthByLogicalColour
-> SearchOptions
mkSearchOptions :: SortOnStandardOpeningMoveFrequency
-> Maybe CaptureMoveSortAlgorithm
-> Maybe NPlies
-> Maybe NPlies
-> SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency
-> MaybeUseTranspositions
-> StandardOpeningOptions
-> SearchDepthByLogicalColour
-> SearchOptions
mkSearchOptions SortOnStandardOpeningMoveFrequency
sortOnStandardOpeningMoveFrequency Maybe CaptureMoveSortAlgorithm
maybeCaptureMoveSortAlgorithm Maybe NPlies
maybeMinimumHammingDistance Maybe NPlies
maybeRetireKillerMovesAfter SortOnStandardOpeningMoveFrequency
trapRepeatedPositions SortOnStandardOpeningMoveFrequency
usePondering MaybeUseTranspositions
maybeUseTranspositions StandardOpeningOptions
standardOpeningOptions SearchDepthByLogicalColour
searchDepthByLogicalColour
| Just NPlies
minimumHammingDistance <- Maybe NPlies
maybeMinimumHammingDistance
, NPlies
minimumHammingDistance NPlies -> NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Ord a => a -> a -> SortOnStandardOpeningMoveFrequency
< NPlies
1 = Exception -> SearchOptions
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> SearchOptions)
-> (String -> Exception) -> String -> SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkOutOfBounds (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.mkSearchOptions:\t" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
minimumHammingDistanceTag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
Text.ShowList.showsAssociation (String -> SearchOptions) -> String -> SearchOptions
forall a b. (a -> b) -> a -> b
$ NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
minimumHammingDistance String
" must exceed zero."
| Just NPlies
retireKillerMovesAfter <- Maybe NPlies
maybeRetireKillerMovesAfter
, NPlies
retireKillerMovesAfter NPlies -> NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Ord a => a -> a -> SortOnStandardOpeningMoveFrequency
< NPlies
0 = Exception -> SearchOptions
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> SearchOptions)
-> (String -> Exception) -> String -> SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkOutOfBounds (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.mkSearchOptions:\t" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
retireKillerMovesAfterTag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
Text.ShowList.showsAssociation (String -> SearchOptions) -> String -> SearchOptions
forall a b. (a -> b) -> a -> b
$ NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
retireKillerMovesAfter String
" can't be negative."
| let nAutomatedPlayers :: NPlies
nAutomatedPlayers = SearchDepthByLogicalColour -> NPlies
forall k a. Map k a -> NPlies
Data.Map.Strict.size SearchDepthByLogicalColour
searchDepthByLogicalColour
, SortOnStandardOpeningMoveFrequency
usePondering SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency
&& NPlies
nAutomatedPlayers NPlies -> NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Eq a => a -> a -> SortOnStandardOpeningMoveFrequency
/= NPlies
1
= Exception -> SearchOptions
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> SearchOptions)
-> (String -> Exception) -> String -> SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkIncompatibleData (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.mkSearchOptions:\tpondering is pointless unless there's an automated player who can use the unused CPU-time during a manual player's move, but there're " (String -> SearchOptions) -> String -> SearchOptions
forall a b. (a -> b) -> a -> b
$ NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
nAutomatedPlayers String
" automated players."
| Just (NPlies
retireTranspositionsAfter, NPlies
_) <- MaybeUseTranspositions
maybeUseTranspositions
, NPlies
retireTranspositionsAfter NPlies -> NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Ord a => a -> a -> SortOnStandardOpeningMoveFrequency
< NPlies
0 = Exception -> SearchOptions
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> SearchOptions)
-> (String -> Exception) -> String -> SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkOutOfBounds (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.mkSearchOptions:\t" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
retireTranspositionsAfterTag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
Text.ShowList.showsAssociation (String -> SearchOptions) -> String -> SearchOptions
forall a b. (a -> b) -> a -> b
$ NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
retireTranspositionsAfter String
" can't be negative."
| Just (NPlies
_, NPlies
minimumTranspositionSearchDepth) <- MaybeUseTranspositions
maybeUseTranspositions
, NPlies
minimumTranspositionSearchDepth NPlies -> NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Ord a => a -> a -> SortOnStandardOpeningMoveFrequency
< NPlies
1 = Exception -> SearchOptions
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> SearchOptions)
-> (String -> Exception) -> String -> SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkOutOfBounds (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.mkSearchOptions:\t" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
minimumTranspositionSearchDepthTag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
Text.ShowList.showsAssociation (String -> SearchOptions) -> String -> SearchOptions
forall a b. (a -> b) -> a -> b
$ NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
minimumTranspositionSearchDepth String
" must exceed zero."
| Just (NPlies
_, NPlies
minimumTranspositionSearchDepth) <- MaybeUseTranspositions
maybeUseTranspositions
, SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency
not (SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency)
-> SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency
forall a b. (a -> b) -> a -> b
$ SearchDepthByLogicalColour -> SortOnStandardOpeningMoveFrequency
forall k a. Map k a -> SortOnStandardOpeningMoveFrequency
Data.Map.Strict.null SearchDepthByLogicalColour
searchDepthByLogicalColour
, (NPlies -> SortOnStandardOpeningMoveFrequency)
-> SearchDepthByLogicalColour -> SortOnStandardOpeningMoveFrequency
forall (t :: * -> *) a.
Foldable t =>
(a -> SortOnStandardOpeningMoveFrequency)
-> t a -> SortOnStandardOpeningMoveFrequency
Data.Foldable.all (
NPlies
minimumTranspositionSearchDepth NPlies -> NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Ord a => a -> a -> SortOnStandardOpeningMoveFrequency
>
) SearchDepthByLogicalColour
searchDepthByLogicalColour = Exception -> SearchOptions
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> SearchOptions)
-> (String -> Exception) -> String -> SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkOutOfBounds (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.mkSearchOptions:\t" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
minimumTranspositionSearchDepthTag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
Text.ShowList.showsAssociation (String -> SearchOptions) -> String -> SearchOptions
forall a b. (a -> b) -> a -> b
$ NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
minimumTranspositionSearchDepth ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
" exceeds " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
searchDepthTag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
Text.ShowList.showsAssociation ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$ [(LogicalColour, NPlies)] -> ShowS
forall a. Show a => a -> ShowS
shows (SearchDepthByLogicalColour -> [(LogicalColour, NPlies)]
forall k a. Map k a -> [(k, a)]
Data.Map.Strict.toList SearchDepthByLogicalColour
searchDepthByLogicalColour) String
"."
| (NPlies -> SortOnStandardOpeningMoveFrequency)
-> SearchDepthByLogicalColour -> SortOnStandardOpeningMoveFrequency
forall (t :: * -> *) a.
Foldable t =>
(a -> SortOnStandardOpeningMoveFrequency)
-> t a -> SortOnStandardOpeningMoveFrequency
Data.Foldable.any (
NPlies -> NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Ord a => a -> a -> SortOnStandardOpeningMoveFrequency
< NPlies
minimumSearchDepth
) SearchDepthByLogicalColour
searchDepthByLogicalColour = Exception -> SearchOptions
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> SearchOptions)
-> (String -> Exception) -> String -> SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkOutOfBounds (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.mkSearchOptions:\t" (String -> SearchOptions) -> String -> SearchOptions
forall a b. (a -> b) -> a -> b
$ String -> ShowS
showString String
searchDepthTag String
" must be positive."
| SortOnStandardOpeningMoveFrequency
otherwise = MkSearchOptions :: SortOnStandardOpeningMoveFrequency
-> Maybe CaptureMoveSortAlgorithm
-> Maybe NPlies
-> Maybe NPlies
-> SortOnStandardOpeningMoveFrequency
-> SortOnStandardOpeningMoveFrequency
-> MaybeUseTranspositions
-> StandardOpeningOptions
-> SearchDepthByLogicalColour
-> SearchOptions
MkSearchOptions {
getSortOnStandardOpeningMoveFrequency :: SortOnStandardOpeningMoveFrequency
getSortOnStandardOpeningMoveFrequency = SortOnStandardOpeningMoveFrequency
sortOnStandardOpeningMoveFrequency,
getMaybeCaptureMoveSortAlgorithm :: Maybe CaptureMoveSortAlgorithm
getMaybeCaptureMoveSortAlgorithm = Maybe CaptureMoveSortAlgorithm
maybeCaptureMoveSortAlgorithm,
getMaybeMinimumHammingDistance :: Maybe NPlies
getMaybeMinimumHammingDistance = Maybe NPlies
maybeMinimumHammingDistance,
getMaybeRetireKillerMovesAfter :: Maybe NPlies
getMaybeRetireKillerMovesAfter = Maybe NPlies
maybeRetireKillerMovesAfter,
getTrapRepeatedPositions :: SortOnStandardOpeningMoveFrequency
getTrapRepeatedPositions = SortOnStandardOpeningMoveFrequency
trapRepeatedPositions,
getUsePondering :: SortOnStandardOpeningMoveFrequency
getUsePondering = SortOnStandardOpeningMoveFrequency
usePondering,
getMaybeUseTranspositions :: MaybeUseTranspositions
getMaybeUseTranspositions = MaybeUseTranspositions
maybeUseTranspositions,
getStandardOpeningOptions :: StandardOpeningOptions
getStandardOpeningOptions = StandardOpeningOptions
standardOpeningOptions,
getSearchDepthByLogicalColour :: SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
searchDepthByLogicalColour
}
getSearchDepth :: SearchOptions -> Type.Count.NPlies
getSearchDepth :: SearchOptions -> NPlies
getSearchDepth MkSearchOptions { getSearchDepthByLogicalColour :: SearchOptions -> SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
searchDepthByLogicalColour } = NPlies -> Maybe NPlies -> NPlies
forall a. a -> Maybe a -> a
Data.Maybe.fromMaybe NPlies
defaultSearchDepth (Maybe NPlies -> NPlies)
-> ([NPlies] -> Maybe NPlies) -> [NPlies] -> NPlies
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [NPlies] -> Maybe NPlies
forall a. [a] -> Maybe a
Data.Maybe.listToMaybe ([NPlies] -> NPlies) -> [NPlies] -> NPlies
forall a b. (a -> b) -> a -> b
$ SearchDepthByLogicalColour -> [NPlies]
forall k a. Map k a -> [a]
Data.Map.Strict.elems SearchDepthByLogicalColour
searchDepthByLogicalColour
type RecordKillerMoves = Bool
recordKillerMoves :: SearchOptions -> RecordKillerMoves
recordKillerMoves :: SearchOptions -> SortOnStandardOpeningMoveFrequency
recordKillerMoves MkSearchOptions { getMaybeRetireKillerMovesAfter :: SearchOptions -> Maybe NPlies
getMaybeRetireKillerMovesAfter = Maybe NPlies
maybeRetireKillerMovesAfter } = Maybe NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Maybe a -> SortOnStandardOpeningMoveFrequency
Data.Maybe.isJust Maybe NPlies
maybeRetireKillerMovesAfter
maybeRetireTranspositionsAfter :: SearchOptions -> MaybeRetireAfterNMoves
maybeRetireTranspositionsAfter :: SearchOptions -> Maybe NPlies
maybeRetireTranspositionsAfter MkSearchOptions { getMaybeUseTranspositions :: SearchOptions -> MaybeUseTranspositions
getMaybeUseTranspositions = MaybeUseTranspositions
maybeUseTranspositions } = ((NPlies, NPlies) -> NPlies)
-> MaybeUseTranspositions -> Maybe NPlies
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (NPlies, NPlies) -> NPlies
forall a b. (a, b) -> a
fst MaybeUseTranspositions
maybeUseTranspositions
maybeMinimumTranspositionSearchDepth :: SearchOptions -> Maybe Type.Count.NPlies
maybeMinimumTranspositionSearchDepth :: SearchOptions -> Maybe NPlies
maybeMinimumTranspositionSearchDepth MkSearchOptions { getMaybeUseTranspositions :: SearchOptions -> MaybeUseTranspositions
getMaybeUseTranspositions = MaybeUseTranspositions
maybeUseTranspositions } = ((NPlies, NPlies) -> NPlies)
-> MaybeUseTranspositions -> Maybe NPlies
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap (NPlies, NPlies) -> NPlies
forall a b. (a, b) -> b
snd MaybeUseTranspositions
maybeUseTranspositions
type Transformation = SearchOptions -> SearchOptions
setSearchDepth :: Type.Count.NPlies -> Transformation
setSearchDepth :: NPlies -> Transformation
setSearchDepth NPlies
searchDepth searchOptions :: SearchOptions
searchOptions@MkSearchOptions { getSearchDepthByLogicalColour :: SearchOptions -> SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
searchDepthByLogicalColour }
| NPlies
searchDepth NPlies -> NPlies -> SortOnStandardOpeningMoveFrequency
forall a. Ord a => a -> a -> SortOnStandardOpeningMoveFrequency
< NPlies
minimumSearchDepth = Exception -> SearchOptions
forall a e. Exception e => e -> a
Control.Exception.throw (Exception -> SearchOptions)
-> (String -> Exception) -> String -> SearchOptions
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> Exception
Data.Exception.mkOutOfBounds (String -> Exception) -> ShowS -> String -> Exception
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
"BishBosh.Input.SearchOptions.setSearchDepth:\t" ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. String -> ShowS
showString String
searchDepthTag ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ShowS
Text.ShowList.showsAssociation (String -> SearchOptions) -> String -> SearchOptions
forall a b. (a -> b) -> a -> b
$ NPlies -> ShowS
forall a. Show a => a -> ShowS
shows NPlies
searchDepth String
" must be positive."
| SortOnStandardOpeningMoveFrequency
otherwise = SearchOptions
searchOptions { getSearchDepthByLogicalColour :: SearchDepthByLogicalColour
getSearchDepthByLogicalColour = (NPlies -> NPlies)
-> SearchDepthByLogicalColour -> SearchDepthByLogicalColour
forall a b k. (a -> b) -> Map k a -> Map k b
Data.Map.Strict.map (NPlies -> NPlies -> NPlies
forall a b. a -> b -> a
const NPlies
searchDepth) SearchDepthByLogicalColour
searchDepthByLogicalColour }
swapSearchDepth :: Transformation
swapSearchDepth :: Transformation
swapSearchDepth searchOptions :: SearchOptions
searchOptions@MkSearchOptions {
getSearchDepthByLogicalColour :: SearchOptions -> SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
searchDepthByLogicalColour
} = SearchOptions
searchOptions {
getSearchDepthByLogicalColour :: SearchDepthByLogicalColour
getSearchDepthByLogicalColour = (LogicalColour -> LogicalColour)
-> SearchDepthByLogicalColour -> SearchDepthByLogicalColour
forall k2 k1 a. Ord k2 => (k1 -> k2) -> Map k1 a -> Map k2 a
Data.Map.Strict.mapKeys LogicalColour -> LogicalColour
forall a. Opposable a => a -> a
Property.Opposable.getOpposite SearchDepthByLogicalColour
searchDepthByLogicalColour
}
identifyAutomatedPlayers :: SearchOptions -> [Attribute.LogicalColour.LogicalColour]
identifyAutomatedPlayers :: SearchOptions -> [LogicalColour]
identifyAutomatedPlayers MkSearchOptions {
getSearchDepthByLogicalColour :: SearchOptions -> SearchDepthByLogicalColour
getSearchDepthByLogicalColour = SearchDepthByLogicalColour
searchDepthByLogicalColour
} = SearchDepthByLogicalColour -> [LogicalColour]
forall k a. Map k a -> [k]
Data.Map.Strict.keys SearchDepthByLogicalColour
searchDepthByLogicalColour
type Reader = Control.Monad.Reader.Reader SearchOptions