endplay._dds

Python bindings for Bo Haglund’s DDS library. This provides a very low-level ctypes wrapper around the C++ library. The only extra convenience provided is to wrap all of the dds functions so that instead of returning error codes they raise a DDSError.

The encodings used by the dds library are provided here for convenience:

Denom
        Spades     0
        Hearts     1
        Diamonds   2
        Clubs      3
        NT         4

Player
        North      0
        East       1
        South      2
        West       3

Vulnerable
        None       0
        Both       1
        NS Only    2
        EW Only    3

Side
        NS         0
        EW         1

Rank
        2          0x4
        3          0x8
        ...
        K          0x2000
        A          0x4000

Functions:

AnalyseAllPlaysBin(bop, plp, solvedp, chunkSize)

Solves a number of hands with play sequences in parallel.

AnalyseAllPlaysPBN(bopPBN, plpPBN, solvedp, ...)

As AnalyseAllPlaysBin, but with PBN deal format.

AnalysePlayBin(dl, play, solvedp, thrId)

Returns the par result after each card in a particular play sequence.

AnalysePlayPBN(dlPBN, playPBN, solvedp, thrId)

As AnalysePlayBin, but with PBN deal format.

CalcAllTables(dealsp, mode, trumpFilter, ...)

Solves a number of hands in parallel.

CalcAllTablesPBN(dealsp, mode, trumpFilter, ...)

As CalcAllTables, but with PBN deal format.

CalcDDtable(tableDeal, tablep)

Solves an initial hand for all possible declarers and denominations (up to 20 combinations.)

CalcDDtablePBN(tableDealPBN, tablep)

As CalcDDtable, but with PBN deal format.

CalcPar(tableDeal, vulnerable, tablep, presp)

Solves for both the DD result table and the par contracts.

CalcParPBN(tableDealPBN, tablep, vulnerable, ...)

As CalcPar, but with PBN input format.

ConvertToDealerTextFormat(pres, resp)

Example of text output from DealerParBin.

ConvertToSidesTextFormat(pres, resp)

Example of text output from SidesParBin.

DealerPar(tablep, presp, dealer, vulnerable)

Similar to Par(), but requires and uses knowledge of the dealer.

DealerParBin(tablep, presp, dealer, vulnerable)

Similar to DealerPar, but with binary output.

ErrorMessage(code, line)

Turns a return code into an error message string

FreeMemory()

Frees DDS allocated dynamical memory.

Par(tablep, presp, vulnerable)

Solves for the par contracts given a DD result table.

SetMaxThreads(userThreads)

Used at initial start and can also be called with a request for allocating memory for a specified number of threads.

SidesPar(tablep, presp, vulnerable)

Par results are given for sides with the DealerPar output format.

SidesParBin(tablep, sidesRes, vulnerable)

Similar to SidesPar, but with binary output.

SolveAllBoards(bop, solvedp)

Solves a number of hands in parallel.

SolveAllBoardsBin(bop, solvedp)

Similar to SolveAllBoards, but with binary input.

SolveAllChunks(bop, solvedp, chunkSize)

Alias for SolveAllBoards; don't use!

SolveAllChunksBin(bop, solvedp, chunkSize)

Alias for SolveAllBoardsBin; don't use!

SolveAllChunksPBN(bop, solvedp, chunkSize)

Alias for SolveAllBoards; don't use!

SolveBoard(dl, target, solutions, mode, ...)

The most basic function, solves a single hand from the beginning or from later play

SolveBoardPBN(dlPBN, target, solutions, ...)

As SolveBoard, but with PBN deal format.

Exceptions:

DDSError(code)

Exception class indicating an error is returned from a DDS function

Classes:

DDSInfo

allParResults

boards

boardsPBN

contractType

ddTableDeal

ddTableDealPBN

ddTableDeals

ddTableDealsPBN

ddTableResults

ddTablesRes

deal

dealPBN

futureTricks

parResults

parResultsDealer

parResultsMaster

parTextResults

playTraceBin

playTracePBN

playTracesBin

playTracesPBN

solvedBoards

solvedPlay

solvedPlays

endplay._dds.AnalyseAllPlaysBin(bop: boards, plp: playTracesBin, solvedp: solvedPlays, chunkSize: int)

Solves a number of hands with play sequences in parallel. Multi-threaded.

endplay._dds.AnalyseAllPlaysPBN(bopPBN: boardsPBN, plpPBN: playTracesPBN, solvedp: solvedPlays, chunkSize: int)

As AnalyseAllPlaysBin, but with PBN deal format.

endplay._dds.AnalysePlayBin(dl: deal, play: playTraceBin, solvedp: solvedPlay, thrId: int)

Returns the par result after each card in a particular play sequence.

endplay._dds.AnalysePlayPBN(dlPBN: dealPBN, playPBN: playTracePBN, solvedp: solvedPlay, thrId: int)

As AnalysePlayBin, but with PBN deal format.

endplay._dds.CalcAllTables(dealsp: ddTableDeals, mode: int, trumpFilter: Iterable[int], resp: ddTablesRes, presp: allParResults)

Solves a number of hands in parallel. Multi-threaded.

endplay._dds.CalcAllTablesPBN(dealsp: ddTableDealsPBN, mode: int, trumpFilter: Iterable[int], resp: ddTablesRes, presp: allParResults)

As CalcAllTables, but with PBN deal format.

endplay._dds.CalcDDtable(tableDeal: ddTableDeal, tablep: ddTableResults)

Solves an initial hand for all possible declarers and denominations (up to 20 combinations.)

endplay._dds.CalcDDtablePBN(tableDealPBN: ddTableDealPBN, tablep: ddTableResults)

As CalcDDtable, but with PBN deal format.

endplay._dds.CalcPar(tableDeal: ddTableDeal, vulnerable: int, tablep: ddTableResults, presp: parResults)

Solves for both the DD result table and the par contracts. Is deprecated, use a CalcDDtable function plus Par() instead!

endplay._dds.CalcParPBN(tableDealPBN: ddTableDealPBN, tablep: ddTableResults, vulnerable: int, presp: parResults)

As CalcPar, but with PBN input format. Is deprecated, use a CalcDDtable function plus Par() instead!

endplay._dds.ConvertToDealerTextFormat(pres: parResultsMaster, resp: c_char_p)

Example of text output from DealerParBin.

endplay._dds.ConvertToSidesTextFormat(pres: parResultsMaster, resp: parTextResults)

Example of text output from SidesParBin.

exception endplay._dds.DDSError(code)

Bases: RuntimeError

Exception class indicating an error is returned from a DDS function

class endplay._dds.DDSInfo

Bases: Structure

Attributes:

_fields_

compiler

Structure/Union member

constructor

Structure/Union member

major

Structure/Union member

minor

Structure/Union member

noOfThreads

Structure/Union member

patch

Structure/Union member

system

Structure/Union member

systemString

Structure/Union member

threading

Structure/Union member

versionString

Structure/Union member

_fields_ = [('major', <class 'ctypes.c_int'>), ('minor', <class 'ctypes.c_int'>), ('patch', <class 'ctypes.c_int'>), ('versionString', <class 'endplay._dds.c_char_Array_10'>), ('system', <class 'ctypes.c_int'>), ('compiler', <class 'ctypes.c_int'>), ('constructor', <class 'ctypes.c_int'>), ('threading', <class 'ctypes.c_int'>), ('noOfThreads', <class 'ctypes.c_int'>), ('systemString', <class 'endplay._dds.c_char_Array_512'>)]
compiler

Structure/Union member

constructor

Structure/Union member

major

Structure/Union member

minor

Structure/Union member

noOfThreads

Structure/Union member

patch

Structure/Union member

system

Structure/Union member

systemString

Structure/Union member

threading

Structure/Union member

versionString

Structure/Union member

endplay._dds.DealerPar(tablep: ddTableResults, presp: parResultsMaster, dealer: int, vulnerable: int)

Similar to Par(), but requires and uses knowledge of the dealer.

endplay._dds.DealerParBin(tablep: ddTableResults, presp: parResultsMaster, dealer: int, vulnerable: int)

Similar to DealerPar, but with binary output.

endplay._dds.ErrorMessage(code: int, line: str)

Turns a return code into an error message string

endplay._dds.FreeMemory()

Frees DDS allocated dynamical memory.

endplay._dds.Par(tablep: ddTableResults, presp: parResults, vulnerable: int)

Solves for the par contracts given a DD result table.

endplay._dds.SetMaxThreads(userThreads: int)

Used at initial start and can also be called with a request for allocating memory for a specified number of threads. Is apparently¸mandatory on Linux and Mac (optional on Windows)

endplay._dds.SidesPar(tablep: ddTableResults, presp: parResultsDealer, vulnerable: int)

Par results are given for sides with the DealerPar output format.

endplay._dds.SidesParBin(tablep: ddTableResults, sidesRes: parResultsMaster_Array_2, vulnerable: int)

Similar to SidesPar, but with binary output.

endplay._dds.SolveAllBoards(bop: boardsPBN, solvedp: solvedBoards)

Solves a number of hands in parallel. Multi-threaded.

endplay._dds.SolveAllBoardsBin(bop: boards, solvedp: solvedBoards)

Similar to SolveAllBoards, but with binary input.

endplay._dds.SolveAllChunks(bop: boards, solvedp: solvedBoards, chunkSize: int)

Alias for SolveAllBoards; don’t use!

endplay._dds.SolveAllChunksBin(bop: boards, solvedp: solvedBoards, chunkSize: int)

Alias for SolveAllBoardsBin; don’t use!

endplay._dds.SolveAllChunksPBN(bop: boardsPBN, solvedp: solvedBoards, chunkSize: int)

Alias for SolveAllBoards; don’t use!

endplay._dds.SolveBoard(dl: deal, target: int, solutions: int, mode: int, futp: futureTricks, threadIndex: int)

The most basic function, solves a single hand from the beginning or from later play

endplay._dds.SolveBoardPBN(dlPBN: dealPBN, target: int, solutions: int, mode: int, futp: futureTricks, threadIndex: int)

As SolveBoard, but with PBN deal format.

class endplay._dds.allParResults

Bases: Structure

Attributes:

_fields_

presults

Structure/Union member

_fields_ = [('presults', <class 'endplay._dds.parResults_Array_40'>)]
presults

Structure/Union member

class endplay._dds.boards

Bases: Structure

Attributes:

_fields_

deals

Structure/Union member

mode

Structure/Union member

noOfBoards

Structure/Union member

solutions

Structure/Union member

target

Structure/Union member

_fields_ = [('noOfBoards', <class 'ctypes.c_int'>), ('deals', <class 'endplay._dds.deal_Array_200'>), ('target', <class 'endplay._dds.c_int_Array_200'>), ('solutions', <class 'endplay._dds.c_int_Array_200'>), ('mode', <class 'endplay._dds.c_int_Array_200'>)]
deals

Structure/Union member

mode

Structure/Union member

noOfBoards

Structure/Union member

solutions

Structure/Union member

target

Structure/Union member

class endplay._dds.boardsPBN

Bases: Structure

Attributes:

_fields_

deals

Structure/Union member

mode

Structure/Union member

noOfBoards

Structure/Union member

solutions

Structure/Union member

target

Structure/Union member

_fields_ = [('noOfBoards', <class 'ctypes.c_int'>), ('deals', <class 'endplay._dds.dealPBN_Array_200'>), ('target', <class 'endplay._dds.c_int_Array_200'>), ('solutions', <class 'endplay._dds.c_int_Array_200'>), ('mode', <class 'endplay._dds.c_int_Array_200'>)]
deals

Structure/Union member

mode

Structure/Union member

noOfBoards

Structure/Union member

solutions

Structure/Union member

target

Structure/Union member

class endplay._dds.contractType

Bases: Structure

Attributes:

_fields_

denom

Structure/Union member

level

Structure/Union member

overTricks

Structure/Union member

seats

Structure/Union member

underTricks

Structure/Union member

_fields_ = [('underTricks', <class 'ctypes.c_int'>), ('overTricks', <class 'ctypes.c_int'>), ('level', <class 'ctypes.c_int'>), ('denom', <class 'ctypes.c_int'>), ('seats', <class 'ctypes.c_int'>)]
denom

Structure/Union member

level

Structure/Union member

overTricks

Structure/Union member

seats

Structure/Union member

underTricks

Structure/Union member

class endplay._dds.ddTableDeal

Bases: Structure

Attributes:

_fields_

cards

Structure/Union member

_fields_ = [('cards', <class 'endplay._dds.c_uint_Array_4_Array_4'>)]
cards

Structure/Union member

class endplay._dds.ddTableDealPBN

Bases: Structure

Attributes:

_fields_

cards

Structure/Union member

_fields_ = [('cards', <class 'endplay._dds.c_char_Array_80'>)]
cards

Structure/Union member

class endplay._dds.ddTableDeals

Bases: Structure

Attributes:

_fields_

ddTableDeal

Structure/Union member

noOfTables

Structure/Union member

_fields_ = [('noOfTables', <class 'ctypes.c_int'>), ('ddTableDeal', <class 'endplay._dds.ddTableDeal_Array_200'>)]
ddTableDeal

Structure/Union member

noOfTables

Structure/Union member

class endplay._dds.ddTableDealsPBN

Bases: Structure

Attributes:

_fields_

ddTableDealPBN

Structure/Union member

noOfTables

Structure/Union member

_fields_ = [('noOfTables', <class 'ctypes.c_int'>), ('ddTableDealPBN', <class 'endplay._dds.ddTableDealPBN_Array_200'>)]
ddTableDealPBN

Structure/Union member

noOfTables

Structure/Union member

class endplay._dds.ddTableResults

Bases: Structure

Attributes:

_fields_

resTable

Structure/Union member

_fields_ = [('resTable', <class 'endplay._dds.c_int_Array_4_Array_5'>)]
resTable

Structure/Union member

class endplay._dds.ddTablesRes

Bases: Structure

Attributes:

_fields_

noOfBoards

Structure/Union member

results

Structure/Union member

_fields_ = [('noOfBoards', <class 'ctypes.c_int'>), ('results', <class 'endplay._dds.ddTableResults_Array_200'>)]
noOfBoards

Structure/Union member

results

Structure/Union member

class endplay._dds.deal

Bases: Structure

Attributes:

_fields_

currentTrickRank

Structure/Union member

currentTrickSuit

Structure/Union member

first

Structure/Union member

remainCards

Structure/Union member

trump

Structure/Union member

_fields_ = [('trump', <class 'ctypes.c_int'>), ('first', <class 'ctypes.c_int'>), ('currentTrickSuit', <class 'endplay._dds.c_int_Array_3'>), ('currentTrickRank', <class 'endplay._dds.c_int_Array_3'>), ('remainCards', <class 'endplay._dds.c_uint_Array_4_Array_4'>)]
currentTrickRank

Structure/Union member

currentTrickSuit

Structure/Union member

first

Structure/Union member

remainCards

Structure/Union member

trump

Structure/Union member

class endplay._dds.dealPBN

Bases: Structure

Attributes:

_fields_

currentTrickRank

Structure/Union member

currentTrickSuit

Structure/Union member

first

Structure/Union member

remainCards

Structure/Union member

trump

Structure/Union member

_fields_ = [('trump', <class 'ctypes.c_int'>), ('first', <class 'ctypes.c_int'>), ('currentTrickSuit', <class 'endplay._dds.c_int_Array_3'>), ('currentTrickRank', <class 'endplay._dds.c_int_Array_3'>), ('remainCards', <class 'endplay._dds.c_char_Array_80'>)]
currentTrickRank

Structure/Union member

currentTrickSuit

Structure/Union member

first

Structure/Union member

remainCards

Structure/Union member

trump

Structure/Union member

class endplay._dds.futureTricks

Bases: Structure

Attributes:

_fields_

cards

Structure/Union member

equals

Structure/Union member

nodes

Structure/Union member

rank

Structure/Union member

score

Structure/Union member

suit

Structure/Union member

_fields_ = [('nodes', <class 'ctypes.c_int'>), ('cards', <class 'ctypes.c_int'>), ('suit', <class 'endplay._dds.c_int_Array_13'>), ('rank', <class 'endplay._dds.c_int_Array_13'>), ('equals', <class 'endplay._dds.c_int_Array_13'>), ('score', <class 'endplay._dds.c_int_Array_13'>)]
cards

Structure/Union member

equals

Structure/Union member

nodes

Structure/Union member

rank

Structure/Union member

score

Structure/Union member

suit

Structure/Union member

class endplay._dds.parResults

Bases: Structure

Attributes:

_fields_

parContractsString

Structure/Union member

parScore

Structure/Union member

_fields_ = [('parScore', <class 'endplay._dds.c_char_Array_2_Array_16'>), ('parContractsString', <class 'endplay._dds.c_char_Array_2_Array_128'>)]
parContractsString

Structure/Union member

parScore

Structure/Union member

class endplay._dds.parResultsDealer

Bases: Structure

Attributes:

_fields_

contracts

Structure/Union member

number

Structure/Union member

score

Structure/Union member

_fields_ = [('number', <class 'ctypes.c_int'>), ('score', <class 'ctypes.c_int'>), ('contracts', <class 'endplay._dds.c_char_Array_10_Array_10'>)]
contracts

Structure/Union member

number

Structure/Union member

score

Structure/Union member

class endplay._dds.parResultsMaster

Bases: Structure

Attributes:

_fields_

contracts

Structure/Union member

number

Structure/Union member

score

Structure/Union member

_fields_ = [('score', <class 'ctypes.c_int'>), ('number', <class 'ctypes.c_int'>), ('contracts', <class 'endplay._dds.contractType_Array_10'>)]
contracts

Structure/Union member

number

Structure/Union member

score

Structure/Union member

class endplay._dds.parTextResults

Bases: Structure

Attributes:

_fields_

equal

Structure/Union member

parText

Structure/Union member

_fields_ = [('parText', <class 'endplay._dds.c_char_Array_2_Array_128'>), ('equal', <class 'ctypes.c_int'>)]
equal

Structure/Union member

parText

Structure/Union member

class endplay._dds.playTraceBin

Bases: Structure

Attributes:

_fields_

number

Structure/Union member

rank

Structure/Union member

suit

Structure/Union member

_fields_ = [('number', <class 'ctypes.c_int'>), ('suit', <class 'endplay._dds.c_int_Array_52'>), ('rank', <class 'endplay._dds.c_int_Array_52'>)]
number

Structure/Union member

rank

Structure/Union member

suit

Structure/Union member

class endplay._dds.playTracePBN

Bases: Structure

Attributes:

_fields_

cards

Structure/Union member

number

Structure/Union member

_fields_ = [('number', <class 'ctypes.c_int'>), ('cards', <class 'endplay._dds.c_char_Array_106'>)]
cards

Structure/Union member

number

Structure/Union member

class endplay._dds.playTracesBin

Bases: Structure

Attributes:

_fields_

noOfBoards

Structure/Union member

plays

Structure/Union member

_fields_ = [('noOfBoards', <class 'ctypes.c_int'>), ('plays', <class 'endplay._dds.playTraceBin_Array_200'>)]
noOfBoards

Structure/Union member

plays

Structure/Union member

class endplay._dds.playTracesPBN

Bases: Structure

Attributes:

_fields_

noOfBoards

Structure/Union member

plays

Structure/Union member

_fields_ = [('noOfBoards', <class 'ctypes.c_int'>), ('plays', <class 'endplay._dds.playTracePBN_Array_200'>)]
noOfBoards

Structure/Union member

plays

Structure/Union member

class endplay._dds.solvedBoards

Bases: Structure

Attributes:

_fields_

noOfBoards

Structure/Union member

solvedBoard

Structure/Union member

_fields_ = [('noOfBoards', <class 'ctypes.c_int'>), ('solvedBoard', <class 'endplay._dds.futureTricks_Array_200'>)]
noOfBoards

Structure/Union member

solvedBoard

Structure/Union member

class endplay._dds.solvedPlay

Bases: Structure

Attributes:

_fields_

number

Structure/Union member

tricks

Structure/Union member

_fields_ = [('number', <class 'ctypes.c_int'>), ('tricks', <class 'endplay._dds.c_int_Array_53'>)]
number

Structure/Union member

tricks

Structure/Union member

class endplay._dds.solvedPlays

Bases: Structure

Attributes:

_fields_

noOfBoards

Structure/Union member

solved

Structure/Union member

_fields_ = [('noOfBoards', <class 'ctypes.c_int'>), ('solved', <class 'endplay._dds.solvedPlay_Array_200'>)]
noOfBoards

Structure/Union member

solved

Structure/Union member