Profile¶
-
class
whalrus.
Profile
(ballots: Union[list, Profile], weights: list = None, voters: list = None)[source]¶ A profile of ballots.
Parameters: - ballots (iterable) – Typically, it is a list, but it can also be a
Profile
. Its elements must beBallot
objects or, more generally, inputs that can be interpreted byConverterBallotGeneral
. - weights (list) – A list of numbers representing the weights of the ballots. Default: if
ballots
is a Profile, then use the weights of this profile; otherwise, all weights are 1. - voters (list) – A list representing the voters corresponding to the ballots. Default: if
ballots
is a Profile, then use the voters of this profile; otherwise, all voters are None.
Examples
Most general syntax:
>>> profile = Profile( ... ballots=[BallotOrder('a > b ~ c'), BallotOrder('a ~ b > c')], ... weights=[2, 1], ... voters=['Alice', 'Bob'] ... ) >>> print(profile) Alice (2): a > b ~ c Bob (1): a ~ b > c
In the following example, each ballot illustrates a different syntax:
>>> profile = Profile([ ... ['a', 'b', 'c'], ... ('b', 'c', 'a'), ... 'c > a > b', ... ]) >>> print(profile) a > b > c b > c > a c > a > b
Profiles have a list-like behavior in the sense that they implement
__len__
,__getitem__
,__setitem__
and__delitem__
:>>> profile = Profile(['a > b', 'b > a', 'a ~ b']) >>> len(profile) 3 >>> profile[0] BallotOrder(['a', 'b'], candidates={'a', 'b'}) >>> profile[0] = 'a ~ b' >>> print(profile) a ~ b b > a a ~ b >>> del profile[0] >>> print(profile) b > a a ~ b
Profiles can be concatenated:
>>> profile = Profile(['a > b', 'b > a']) + ['a ~ b'] >>> print(profile) a > b b > a a ~ b
Profiles can be multiplied by a scalar, which multiplies the weights:
>>> profile = Profile(['a > b', 'b > a']) * 3 >>> print(profile) (3): a > b (3): b > a
-
append
(ballot: object, weight: numbers.Number = 1, voter: object = None) → None[source]¶ Append a ballot to the profile.
Parameters: - ballot (object) – A ballot or, more generally, an input that can be interpreted by
ConverterBallotGeneral
. - weight (Number) – The weight of the ballot.
- voter (object) – The voter.
Examples
>>> profile = Profile(['a > b']) >>> profile.append('b > a') >>> print(profile) a > b b > a
- ballot (object) – A ballot or, more generally, an input that can be interpreted by
-
ballots
¶ The ballots.
Examples
>>> profile = Profile(['a > b', 'b > a']) >>> profile.ballots [BallotOrder(['a', 'b'], candidates={'a', 'b'}), BallotOrder(['b', 'a'], candidates={'a', 'b'})]
Type: list of Ballot
-
has_voters
¶ Presence of explicit voters. True iff at least one voter is not None.
Examples
>>> profile = Profile(['a > b', 'b > a']) >>> profile.has_voters False
Type: bool
-
has_weights
¶ Presence of non-trivial weights. True iff at least one weight is not 1.
Examples
>>> profile = Profile(['a > b', 'b > a']) >>> profile.has_weights False
Type: bool
-
items
() → Iterator[T_co][source]¶ Items of the profile.
Returns: A zip of triples (ballot, weight, voter). Return type: Iterator Examples
>>> profile = Profile(['a > b', 'b > a']) >>> for ballot, weight, voter in profile.items(): ... print('Ballot %s, weight %s, voter %s.' % (ballot, weight, voter)) Ballot a > b, weight 1, voter None. Ballot b > a, weight 1, voter None.
-
remove
(ballot: object = None, voter: object = None) → None[source]¶ Remove a ballot from the profile.
If only the ballot is specified, remove the first matching ballot in the profile. If only the voter is specified, remove the first ballot whose voter matches the given voter. If both are specified, remove the first ballot matching both descriptions.
Parameters: - ballot (object) – The ballot or, more generally, an input that can be interpreted by
ConverterBallotGeneral
. - voter (object) – The voter.
Examples
>>> profile = Profile(['a > b', 'b > a']) >>> profile.remove('b > a') >>> print(profile) a > b
- ballot (object) – The ballot or, more generally, an input that can be interpreted by
-
voters
¶ The voters.
Examples
>>> profile = Profile(['a > b', 'b > a'], voters=['Alice', 'Bob']) >>> profile.voters ['Alice', 'Bob']
Type: list
-
weights
¶ The weights.
Examples
>>> profile = Profile(['a > b', 'b > a']) >>> profile.weights [1, 1]
Type: list of Number
- ballots (iterable) – Typically, it is a list, but it can also be a