Profile module#
Module describing different profile formats. A profile simply correspond to a list of ballots
(see the ballot module), one for each voter of the election. The structure of this module
is very similar to that of the ballot module.
All profiles are derived from the AbstractProfile class. Then, two
general categories of profiles are introduced. First, the usual profiles that contain one ballot per voter. These are
implemented by the following classes, all inheriting from the class
Profile:
The second category of profiles this module introduce are the so-called multiprofile. In those profiles, only unique
ballots are stored, together with their multiplicity. Frozen ballots are used here as the ballots need to be
non-mutable. The corresponding classes all inherit from
MultiProfile, and are:
For each type of profile, we also define a corresponding abstract class. This can be used for typing purposes, but also for attributes and methods that apply both to the profile and the multiprofile. These classes are:
- class AbstractProfile(instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[AbstractBallot] | None = None)[source]#
Bases:
ABC,Iterable[AbstractBallot]Abstract class representing a profile, that is, a collection of ballots. This class is only meant to be inherited.
- Parameters:
instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to AbstractBallot.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- abstractmethod as_sat_profile(sat_class: type[SatisfactionMeasure]) GroupSatisfactionMeasure[source]#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- abstractmethod multiplicity(ballot: AbstractBallot) int[source]#
Method returning the multiplicity of a ballot. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
The multiplicity of the ballots.
- Return type:
int
- abstractmethod num_ballots() int[source]#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- validate_ballot(ballot: AbstractBallot) None[source]#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- class Profile(init: Iterable[Ballot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[Ballot] | None = None)[source]#
Bases:
list,AbstractProfileA profile, that is, a list of ballots per voters. This class inherits from the Python list class and can thus be used as one. All other profile classes inherit form this one.
- Parameters:
init (Iterable[
Ballot], optional) – An iterable ofBallotthat is used as initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to Ballot.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- abstractmethod as_multiprofile() MultiProfile[source]#
Converts the profile into a
MultiProfile.- Returns:
The multiprofile corresponding to the profile.
- Return type:
- as_sat_profile(sat_class: type[SatisfactionMeasure])[source]#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- multiplicity(ballot: Ballot) int[source]#
Returns 1 regardless of the input (even if the ballot does not appear in the profile, to save up computation).
- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
1
- Return type:
int
- num_ballots() int[source]#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- class MultiProfile(init: Iterable[FrozenBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[FrozenBallot] | None = None)[source]#
Bases:
Counter,AbstractProfileA multiprofile, that is, a profile that stores the ballots together with their multiplicity. This class inherits from the Python Counter class (a special type of dict meant to represent multisets) and can be used as one. All other multiprofile classes inherit form this one.
- Parameters:
init (Iterable[
Ballot], optional) – An iterable ofBallotthat is used as initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to FrozenBallot.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- append(ballot: AbstractBallot)[source]#
Appends a ballot to the profile and update the multiplicity if necessary.
- Parameters:
ballot (
AbstractBallot) – The ballot to append to the profile.
- as_sat_profile(sat_class: type[SatisfactionMeasure])[source]#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- extend(iterable: Iterable[AbstractBallot], force_freeze=True)[source]#
Extends the profile by appending all the ballots in the iterable.
- Parameters:
iterable (Iterable[
AbstractBallot]) – An iterable of ballots to add to the profile.force_freeze (bool, optional) – Boolean indicating whether subclasses of
Ballotshould be frozen beforehand. Defaults to True.
- multiplicity(ballot: FrozenBallot) int[source]#
Method returning the multiplicity of a ballot. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
The multiplicity of the ballots.
- Return type:
int
- num_ballots() int[source]#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- class AbstractApprovalProfile(legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_cost: int | float | mpq | None = None, legal_max_cost: int | float | mpq | None = None)[source]#
Bases:
AbstractProfile,ABC,Iterable[AbstractApprovalBallot]Abstract class for approval profiles. Stores the metadata and the methods specific to approval profiles.
- Parameters:
legal_min_length (int, optional) – The minimum length of an approval ballot per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum length of an approval ballot per the rules of the election. Defaults to None.
legal_min_cost (Numeric, optional) – The minimum total cost of an approval ballot per the rules of the election. Defaults to None.
legal_max_cost (Numeric, optional) – The maximum total cost of an approval ballot per the rules of the election. Defaults to None.
- legal_min_length#
The minimum length of an approval ballot per the rules of the election.
- Type:
int
- legal_max_length#
The maximum length of an approval ballot per the rules of the election.
- Type:
int
- legal_min_cost#
The minimum total cost of an approval ballot per the rules of the election.
- Type:
Numeric
- legal_max_cost#
The maximum total cost of an approval ballot per the rules of the election.
- Type:
Numeric
- approval_score(project: Project) int[source]#
Returns the approval score of a project, that is, the number of voters who approves of it.
- Parameters:
project (
Project) – The project.- Returns:
The approval score.
- Return type:
int
- approval_scores() dict[Project, int][source]#
Returns the approval score of all the projects as a dictionary. The approval score of a project is the number of voters who approves of it.
- Returns:
The approval score.
- Return type:
int
- approved_projects() set[Project][source]#
Returns the set of all the projects approved by at least one voter.
- Returns:
The set of projects with at least one supporter.
- Return type:
set[
Project]
- class ApprovalProfile(init: Iterable[ApprovalBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[AbstractBallot] | None = None, legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_cost: int | float | mpq | None = None, legal_max_cost: int | float | mpq | None = None)[source]#
Bases:
Profile,AbstractApprovalProfileA profile of approval ballots, that is, a list of approval ballots per voters. See the class
ApprovalBallotfor more details on approval ballots. This class inherits from the Python list class and can thus be used as one.- Parameters:
init (Iterable[
ApprovalBallot], optional) – An iterable ofApprovalBallotthat is used an initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to ApprovalBallot.legal_min_length (int, optional) – The minimum length of an approval ballot per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum length of an approval ballot per the rules of the election. Defaults to None.
legal_min_cost (Numeric, optional) – The minimum total cost of an approval ballot per the rules of the election. Defaults to None.
legal_max_cost (Numeric, optional) – The maximum total cost of an approval ballot per the rules of the election. Defaults to None.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- legal_min_length#
The minimum length of an approval ballot per the rules of the election.
- Type:
int
- legal_max_length#
The maximum length of an approval ballot per the rules of the election.
- Type:
int
- legal_min_cost#
The minimum total cost of an approval ballot per the rules of the election.
- Type:
Numeric
- legal_max_cost#
The maximum total cost of an approval ballot per the rules of the election.
- Type:
Numeric
- approval_score(project: Project) int#
Returns the approval score of a project, that is, the number of voters who approves of it.
- Parameters:
project (
Project) – The project.- Returns:
The approval score.
- Return type:
int
- approval_scores() dict[Project, int]#
Returns the approval score of all the projects as a dictionary. The approval score of a project is the number of voters who approves of it.
- Returns:
The approval score.
- Return type:
int
- approved_projects() set[Project]#
Returns the set of all the projects approved by at least one voter.
- Returns:
The set of projects with at least one supporter.
- Return type:
set[
Project]
- as_multiprofile()[source]#
Converts the profile into a
ApprovalMultiProfile.- Returns:
The multiprofile corresponding to the profile.
- Return type:
- as_sat_profile(sat_class: type[SatisfactionMeasure])#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- clear()#
Remove all items from list.
- copy(*args)#
Return a shallow copy of the list.
- count(value, /)#
Return number of occurrences of value.
- extend(other) None#
Extend list by appending elements from the iterable.
- index(value, start=0, stop=9223372036854775807, /)#
Return first index of value.
Raises ValueError if the value is not present.
- is_party_list() bool#
Checks whether the profile is a party-list profile. In a party-list profile all approval sets are either disjoint or equal.
- Returns:
True if the profile is party-list and False otherwise.
- Return type:
bool
- is_trivial() bool#
Tests if the profile is trivial, meaning that all projects that are approved by at least one voter have a cost that exceeds the budget limit.
- Returns:
True if the profile is trivial, and False otherwise.
- Return type:
bool
- multiplicity(ballot: Ballot) int#
Returns 1 regardless of the input (even if the ballot does not appear in the profile, to save up computation).
- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
1
- Return type:
int
- num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- pop(index=-1, /)#
Remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
- remove(value, /)#
Remove first occurrence of value.
Raises ValueError if the value is not present.
- reverse(*args)#
Reverse IN PLACE.
- sort(*, key=None, reverse=False)#
Sort the list in ascending order and return None.
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the order of two equal elements is maintained).
If a key function is given, apply it once to each list item and sort them, ascending or descending, according to their function values.
The reverse flag can be set to sort in descending order.
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- class ApprovalMultiProfile(init: Iterable[FrozenApprovalBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[FrozenBallot] | None = None, profile: ApprovalProfile | None = None, legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_cost: int | float | mpq | None = None, legal_max_cost: int | float | mpq | None = None)[source]#
Bases:
MultiProfile,AbstractApprovalProfileA multiprofile of approval ballots, that is, a multiset of approval ballots together with their multiplicity. Ballots needs to be hashable, so the class
FrozenApprovalBallotshould be used by default here. This class inherits from the Python Counter class and can thus be used as one.- Parameters:
init (Iterable[
FrozenApprovalBallot], optional) – An iterable ofFrozenApprovalBallotthat is used an initializer for the counter. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to FrozenApprovalBallot.profile (
ApprovalProfile, optional) – A profile used to initialise the multiprofile. Some metadata are taken from the profile if they are not specified in the constructor.legal_min_length (int, optional) – The minimum length of an approval ballot per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum length of an approval ballot per the rules of the election. Defaults to None.
legal_min_cost (Numeric, optional) – The minimum total cost of an approval ballot per the rules of the election. Defaults to None.
legal_max_cost (Numeric, optional) – The maximum total cost of an approval ballot per the rules of the election. Defaults to None.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- legal_min_length#
The minimum length of an approval ballot per the rules of the election.
- Type:
int
- legal_max_length#
The maximum length of an approval ballot per the rules of the election.
- Type:
int
- legal_min_cost#
The minimum total cost of an approval ballot per the rules of the election.
- Type:
Numeric
- legal_max_cost#
The maximum total cost of an approval ballot per the rules of the election.
- Type:
Numeric
- classmethod fromkeys(iterable, v=None)#
Create a new dictionary with keys from iterable and values set to value.
- append(ballot: AbstractBallot)#
Appends a ballot to the profile and update the multiplicity if necessary.
- Parameters:
ballot (
AbstractBallot) – The ballot to append to the profile.
- approval_score(project: Project) int#
Returns the approval score of a project, that is, the number of voters who approves of it.
- Parameters:
project (
Project) – The project.- Returns:
The approval score.
- Return type:
int
- approval_scores() dict[Project, int]#
Returns the approval score of all the projects as a dictionary. The approval score of a project is the number of voters who approves of it.
- Returns:
The approval score.
- Return type:
int
- approved_projects() set[Project]#
Returns the set of all the projects approved by at least one voter.
- Returns:
The set of projects with at least one supporter.
- Return type:
set[
Project]
- as_sat_profile(sat_class: type[SatisfactionMeasure])#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- clear() None. Remove all items from D.#
- copy(*args)#
Return a shallow copy.
- elements()#
Iterator over elements repeating each as many times as its count.
>>> c = Counter('ABCABC') >>> sorted(c.elements()) ['A', 'A', 'B', 'B', 'C', 'C']
# Knuth’s example for prime factors of 1836: 2**2 * 3**3 * 17**1 >>> import math >>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) >>> math.prod(prime_factors.elements()) 1836
Note, if an element’s count has been set to zero or is a negative number, elements() will ignore it.
- extend(iterable: Iterable[AbstractBallot], force_freeze=True)#
Extends the profile by appending all the ballots in the iterable.
- Parameters:
iterable (Iterable[
AbstractBallot]) – An iterable of ballots to add to the profile.force_freeze (bool, optional) – Boolean indicating whether subclasses of
Ballotshould be frozen beforehand. Defaults to True.
- get(key, default=None, /)#
Return the value for key if key is in the dictionary, else default.
- is_party_list() bool#
Checks whether the profile is a party-list profile. In a party-list profile all approval sets are either disjoint or equal.
- Returns:
True if the profile is party-list and False otherwise.
- Return type:
bool
- is_trivial() bool#
Tests if the profile is trivial, meaning that all projects that are approved by at least one voter have a cost that exceeds the budget limit.
- Returns:
True if the profile is trivial, and False otherwise.
- Return type:
bool
- items() a set-like object providing a view on D's items#
- keys() a set-like object providing a view on D's keys#
- most_common(n=None)#
List the n most common elements and their counts from the most common to the least. If n is None, then list all element counts.
>>> Counter('abracadabra').most_common(3) [('a', 5), ('b', 2), ('r', 2)]
- multiplicity(ballot: FrozenBallot) int#
Method returning the multiplicity of a ballot. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
The multiplicity of the ballots.
- Return type:
int
- num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- pop(k[, d]) v, remove specified key and return the corresponding value.#
If the key is not found, return the default if given; otherwise, raise a KeyError.
- popitem()#
Remove and return a (key, value) pair as a 2-tuple.
Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.
- setdefault(key, default=None, /)#
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
- subtract(iterable=None, /, **kwds)#
Like dict.update() but subtracts counts instead of replacing them. Counts can be reduced below zero. Both the inputs and outputs are allowed to contain zero and negative counts.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter('which') >>> c.subtract('witch') # subtract elements from another iterable >>> c.subtract(Counter('watch')) # subtract elements from another counter >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch 0 >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch -1
- total()#
Sum of the counts
- update(iterable=None, /, **kwds)#
Like dict.update() but add counts instead of replacing them.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter('which') >>> c.update('witch') # add elements from another iterable >>> d = Counter('watch') >>> c.update(d) # add elements from another counter >>> c['h'] # four 'h' in which, witch, and watch 4
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- values() an object providing a view on D's values#
- get_random_approval_profile(instance: Instance, num_agents: int) ApprovalProfile[source]#
Generates a random approval profile in which approval ballots are such that each project is approved with probability 0.5.
- Parameters:
instance (
Instance) – The instance the profile is defined with respect to.num_agents (int) – The length of the profile, i.e., the number of agents.
- Returns:
The randomly generated profile.
- Return type:
- get_all_approval_profiles(instance: Instance, num_agents: int) Generator[ApprovalProfile][source]#
Returns a generator over all the possible profile for a given instance of a given length.
- class AbstractCardinalProfile(legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_score: int | float | mpq | None = None, legal_max_score: int | float | mpq | None = None)[source]#
Bases:
AbstractProfile,ABC,Iterable[AbstractCardinalBallot]Abstract class for cardinal profiles. Stores the metadata and the methods specific to cardinal profiles.
- Parameters:
legal_min_length (int, optional) – The minimum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_min_score (Numeric, optional) – The minimum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_max_score (Numeric, optional) – The maximum score a project can be assigned by a voter per the rules of the election. Defaults to None.
- legal_min_length#
The minimum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_max_length#
The maximum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_min_score#
The minimum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_max_score#
The maximum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- class CardinalProfile(init: Iterable[CardinalBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[Ballot] | None = None, legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_score: int | float | mpq | None = None, legal_max_score: int | float | mpq | None = None)[source]#
Bases:
Profile,AbstractCardinalProfileA profile of cardinal ballots, that is, a list of cardinal ballots per voters. See the class
CardinalBallotfor more details on cardinal ballots. This class inherits from the Python list class and can thus be used as one.- Parameters:
init (Iterable[
CardinalBallot], optional) – An iterable ofCardinalBallotthat is used an initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to CardinalBallot.legal_min_length (int, optional) – The minimum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_min_score (Numeric, optional) – The minimum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_max_score (Numeric, optional) – The maximum score a project can be assigned by a voter per the rules of the election. Defaults to None.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- legal_min_length#
The minimum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_max_length#
The maximum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_min_score#
The minimum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_max_score#
The maximum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- as_multiprofile()[source]#
Converts the profile into a
CardinalMultiProfile.- Returns:
The multiprofile corresponding to the profile.
- Return type:
- as_sat_profile(sat_class: type[SatisfactionMeasure])#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- clear()#
Remove all items from list.
- complete(projects: Collection[Project], default_score: int | float | mpq) None[source]#
Completes all the ballots such that for all ballots, if a project from projects has not been assigned a score, then it is assigned default_score.
- Parameters:
projects (Iterable[
Project]) – The set of all the projects to consider. This is typically the instance.default_score (Numeric) – The default score that will be assigned.
- copy(*args)#
Return a shallow copy of the list.
- count(value, /)#
Return number of occurrences of value.
- extend(other) None#
Extend list by appending elements from the iterable.
- index(value, start=0, stop=9223372036854775807, /)#
Return first index of value.
Raises ValueError if the value is not present.
- multiplicity(ballot: Ballot) int#
Returns 1 regardless of the input (even if the ballot does not appear in the profile, to save up computation).
- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
1
- Return type:
int
- num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- pop(index=-1, /)#
Remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
- remove(value, /)#
Remove first occurrence of value.
Raises ValueError if the value is not present.
- reverse(*args)#
Reverse IN PLACE.
- sort(*, key=None, reverse=None)[source]#
Sort the list in ascending order and return None.
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the order of two equal elements is maintained).
If a key function is given, apply it once to each list item and sort them, ascending or descending, according to their function values.
The reverse flag can be set to sort in descending order.
- total_score(project: Project) int | float | mpq#
Returns the total score of a project, that is, the sum of scores received from all voters.
- Parameters:
project (
Project) – The project.- Returns:
The total score assigned to the project.
- Return type:
Numeric
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- class CardinalMultiProfile(init: Iterable[FrozenCardinalBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[FrozenBallot] | None = None, profile: CardinalProfile | None = None, legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_score: int | float | mpq | None = None, legal_max_score: int | float | mpq | None = None)[source]#
Bases:
MultiProfile,AbstractCardinalProfileA multiprofile of cardinal ballots, that is, a multiset of cardinal ballots together with their multiplicity. Ballots needs to be hashable, so the class
FrozenCardinalBallotshould be used by default here. This class inherits from the Python Counter class and can thus be used as one.- Parameters:
init (Iterable[
FrozenCardinalBallot], optional) – An iterable ofFrozenCardinalBallotthat is used an initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to CardinalBallot.profile (
CardinalProfile, optional) – A profile used to initialise the multiprofile. Some metadata are taken from the profile if they are not specified in the constructor.legal_min_length (int, optional) – The minimum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_min_score (Numeric, optional) – The minimum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_max_score (Numeric, optional) – The maximum score a project can be assigned by a voter per the rules of the election. Defaults to None.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- legal_min_length#
The minimum number of projects a voter needs to assign a score to per the rules of the election.&
- Type:
int
- legal_max_length#
The maximum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_min_score#
The minimum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_max_score#
The maximum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- classmethod fromkeys(iterable, v=None)#
Create a new dictionary with keys from iterable and values set to value.
- append(ballot: AbstractBallot)#
Appends a ballot to the profile and update the multiplicity if necessary.
- Parameters:
ballot (
AbstractBallot) – The ballot to append to the profile.
- as_sat_profile(sat_class: type[SatisfactionMeasure])#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- clear() None. Remove all items from D.#
- copy(*args)#
Return a shallow copy.
- elements()#
Iterator over elements repeating each as many times as its count.
>>> c = Counter('ABCABC') >>> sorted(c.elements()) ['A', 'A', 'B', 'B', 'C', 'C']
# Knuth’s example for prime factors of 1836: 2**2 * 3**3 * 17**1 >>> import math >>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) >>> math.prod(prime_factors.elements()) 1836
Note, if an element’s count has been set to zero or is a negative number, elements() will ignore it.
- extend(iterable: Iterable[AbstractBallot], force_freeze=True)#
Extends the profile by appending all the ballots in the iterable.
- Parameters:
iterable (Iterable[
AbstractBallot]) – An iterable of ballots to add to the profile.force_freeze (bool, optional) – Boolean indicating whether subclasses of
Ballotshould be frozen beforehand. Defaults to True.
- get(key, default=None, /)#
Return the value for key if key is in the dictionary, else default.
- items() a set-like object providing a view on D's items#
- keys() a set-like object providing a view on D's keys#
- most_common(n=None)#
List the n most common elements and their counts from the most common to the least. If n is None, then list all element counts.
>>> Counter('abracadabra').most_common(3) [('a', 5), ('b', 2), ('r', 2)]
- multiplicity(ballot: FrozenBallot) int#
Method returning the multiplicity of a ballot. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
The multiplicity of the ballots.
- Return type:
int
- num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- pop(k[, d]) v, remove specified key and return the corresponding value.#
If the key is not found, return the default if given; otherwise, raise a KeyError.
- popitem()#
Remove and return a (key, value) pair as a 2-tuple.
Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.
- score(project: Project) int | float | mpq[source]#
Returns the score of a project, that is, the sum of scores received from all voters. :param project: The project. :type project: pabutools.election.instance.Project
- Return type:
Fraction
- setdefault(key, default=None, /)#
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
- subtract(iterable=None, /, **kwds)#
Like dict.update() but subtracts counts instead of replacing them. Counts can be reduced below zero. Both the inputs and outputs are allowed to contain zero and negative counts.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter('which') >>> c.subtract('witch') # subtract elements from another iterable >>> c.subtract(Counter('watch')) # subtract elements from another counter >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch 0 >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch -1
- total()#
Sum of the counts
- total_score(project: Project) int | float | mpq#
Returns the total score of a project, that is, the sum of scores received from all voters.
- Parameters:
project (
Project) – The project.- Returns:
The total score assigned to the project.
- Return type:
Numeric
- update(iterable=None, /, **kwds)#
Like dict.update() but add counts instead of replacing them.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter('which') >>> c.update('witch') # add elements from another iterable >>> d = Counter('watch') >>> c.update(d) # add elements from another counter >>> c['h'] # four 'h' in which, witch, and watch 4
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- values() an object providing a view on D's values#
- class AbstractCumulativeProfile(legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_score: int | float | mpq | None = None, legal_max_score: int | float | mpq | None = None, legal_min_total_score: int | float | mpq | None = None, legal_max_total_score: int | float | mpq | None = None)[source]#
Bases:
AbstractCardinalProfile,ABCAbstract class for cumulative profiles. Stores the metadata and the methods specific to cumulative profiles.
- Parameters:
legal_min_length (int, optional) – The minimum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_min_score (Numeric, optional) – The minimum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_max_score (Numeric, optional) – The maximum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_min_total_score (Numeric, optional) – Minimum total score that can be assigned across all projects per the rules of the election. Defaults to None.
legal_max_total_score (Numeric, optional) – Maximum total score that can be assigned across all projects per the rules of the election. Defaults to None.
- legal_min_length#
The minimum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_max_length#
The maximum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_min_score#
The minimum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_max_score#
The maximum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_min_total_score#
Minimum total score that can be assigned across all projects per the rules of the election.
- Type:
Numeric
- legal_max_total_score#
Maximum total score that can be assigned across all projects per the rules of the election.
- Type:
Numeric
- abstractmethod as_sat_profile(sat_class: type[SatisfactionMeasure]) GroupSatisfactionMeasure#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- abstractmethod multiplicity(ballot: AbstractBallot) int#
Method returning the multiplicity of a ballot. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
The multiplicity of the ballots.
- Return type:
int
- abstractmethod num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- class CumulativeProfile(init: Iterable[CumulativeBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[Ballot] | None = None, legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_score: int | float | mpq | None = None, legal_max_score: int | float | mpq | None = None, legal_min_total_score: int | float | mpq | None = None, legal_max_total_score: int | float | mpq | None = None)[source]#
Bases:
CardinalProfile,AbstractCumulativeProfileA profile of cumulative ballots, that is, a list of cumulative ballots per voters. See the class
CumulativeBallotfor more details on cumulative ballots. This class inherits from the Python list class and can thus be used as one.- Parameters:
init (Iterable[
CumulativeBallot], optional) – An iterable ofCumulativeBallotthat is used an initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to CumulativeBallot.legal_min_length (int, optional) – The minimum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_min_score (Numeric, optional) – The minimum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_max_score (Numeric, optional) – The maximum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_min_total_score (Numeric, optional) – Minimum total score that can be assigned across all projects per the rules of the election. Defaults to None.
legal_max_total_score (Numeric, optional) – Maximum total score that can be assigned across all projects per the rules of the election. Defaults to None.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- legal_min_length#
The minimum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_max_length#
The maximum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_min_score#
The minimum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_max_score#
The maximum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_min_total_score#
Minimum total score that can be assigned across all projects per the rules of the election.
- Type:
Numeric
- legal_max_total_score#
Maximum total score that can be assigned across all projects per the rules of the election.
- Type:
Numeric
- as_multiprofile()[source]#
Converts the profile into a
CumulativeMultiProfile.- Returns:
The multiprofile corresponding to the profile.
- Return type:
- as_sat_profile(sat_class: type[SatisfactionMeasure])#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- clear()#
Remove all items from list.
- complete(projects: Collection[Project], default_score: int | float | mpq) None#
Completes all the ballots such that for all ballots, if a project from projects has not been assigned a score, then it is assigned default_score.
- Parameters:
projects (Iterable[
Project]) – The set of all the projects to consider. This is typically the instance.default_score (Numeric) – The default score that will be assigned.
- copy(*args)#
Return a shallow copy of the list.
- count(value, /)#
Return number of occurrences of value.
- extend(other) None#
Extend list by appending elements from the iterable.
- index(value, start=0, stop=9223372036854775807, /)#
Return first index of value.
Raises ValueError if the value is not present.
- multiplicity(ballot: Ballot) int#
Returns 1 regardless of the input (even if the ballot does not appear in the profile, to save up computation).
- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
1
- Return type:
int
- num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- pop(index=-1, /)#
Remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
- remove(value, /)#
Remove first occurrence of value.
Raises ValueError if the value is not present.
- reverse(*args)#
Reverse IN PLACE.
- sort(*, key=None, reverse=None)[source]#
Sort the list in ascending order and return None.
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the order of two equal elements is maintained).
If a key function is given, apply it once to each list item and sort them, ascending or descending, according to their function values.
The reverse flag can be set to sort in descending order.
- total_score(project: Project) int | float | mpq#
Returns the total score of a project, that is, the sum of scores received from all voters.
- Parameters:
project (
Project) – The project.- Returns:
The total score assigned to the project.
- Return type:
Numeric
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- class CumulativeMultiProfile(init: Iterable[FrozenCumulativeBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[FrozenBallot] | None = None, profile: CumulativeProfile | None = None, legal_min_length: int | None = None, legal_max_length: int | None = None, legal_min_score: int | float | mpq | None = None, legal_max_score: int | float | mpq | None = None, legal_min_total_score: int | float | mpq | None = None, legal_max_total_score: int | float | mpq | None = None)[source]#
Bases:
CardinalMultiProfile,AbstractCumulativeProfileA multiprofile of cardinal ballots, that is, a multiset of cumulative ballots together with their multiplicity. Ballots needs to be hashable, so the class
FrozenCumulativeBallotshould be used by default here. This class inherits from the Python Counter class and can thus be used as one.- Parameters:
init (Iterable[
FrozenCumulativeBallot], optional) – An iterable ofFrozenCumulativeBallotthat is used as initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to FrozenCumulativeBallot.profile (
CumulativeProfile, optional) – A profile used to initialise the multiprofile. Some metadata are taken from the profile if they are not specified in the constructor.legal_min_length (int, optional) – The minimum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum number of projects a voter needs to assign a score to per the rules of the election. Defaults to None.
legal_min_score (Numeric, optional) – The minimum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_max_score (Numeric, optional) – The maximum score a project can be assigned by a voter per the rules of the election. Defaults to None.
legal_min_total_score (Numeric, optional) – Minimum total score that can be assigned across all projects per the rules of the election. Defaults to None.
legal_max_total_score (Numeric, optional) – Maximum total score that can be assigned across all projects per the rules of the election. Defaults to None.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- legal_min_length#
The minimum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_max_length#
The maximum number of projects a voter needs to assign a score to per the rules of the election.
- Type:
int
- legal_min_score#
The minimum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_max_score#
The maximum score a project can be assigned by a voter per the rules of the election.
- Type:
Numeric
- legal_min_total_score#
Minimum total score that can be assigned across all projects per the rules of the election.
- Type:
Numeric
- legal_max_total_score#
Maximum total score that can be assigned across all projects per the rules of the election.
- Type:
Numeric
- classmethod fromkeys(iterable, v=None)#
Create a new dictionary with keys from iterable and values set to value.
- append(ballot: AbstractBallot)#
Appends a ballot to the profile and update the multiplicity if necessary.
- Parameters:
ballot (
AbstractBallot) – The ballot to append to the profile.
- as_sat_profile(sat_class: type[SatisfactionMeasure])#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- clear() None. Remove all items from D.#
- copy(*args)#
Return a shallow copy.
- elements()#
Iterator over elements repeating each as many times as its count.
>>> c = Counter('ABCABC') >>> sorted(c.elements()) ['A', 'A', 'B', 'B', 'C', 'C']
# Knuth’s example for prime factors of 1836: 2**2 * 3**3 * 17**1 >>> import math >>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) >>> math.prod(prime_factors.elements()) 1836
Note, if an element’s count has been set to zero or is a negative number, elements() will ignore it.
- extend(iterable: Iterable[AbstractBallot], force_freeze=True)#
Extends the profile by appending all the ballots in the iterable.
- Parameters:
iterable (Iterable[
AbstractBallot]) – An iterable of ballots to add to the profile.force_freeze (bool, optional) – Boolean indicating whether subclasses of
Ballotshould be frozen beforehand. Defaults to True.
- get(key, default=None, /)#
Return the value for key if key is in the dictionary, else default.
- items() a set-like object providing a view on D's items#
- keys() a set-like object providing a view on D's keys#
- most_common(n=None)#
List the n most common elements and their counts from the most common to the least. If n is None, then list all element counts.
>>> Counter('abracadabra').most_common(3) [('a', 5), ('b', 2), ('r', 2)]
- multiplicity(ballot: FrozenBallot) int#
Method returning the multiplicity of a ballot. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
The multiplicity of the ballots.
- Return type:
int
- num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- pop(k[, d]) v, remove specified key and return the corresponding value.#
If the key is not found, return the default if given; otherwise, raise a KeyError.
- popitem()#
Remove and return a (key, value) pair as a 2-tuple.
Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.
- score(project: Project) int | float | mpq#
Returns the score of a project, that is, the sum of scores received from all voters. :param project: The project. :type project: pabutools.election.instance.Project
- Return type:
Fraction
- setdefault(key, default=None, /)#
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
- subtract(iterable=None, /, **kwds)#
Like dict.update() but subtracts counts instead of replacing them. Counts can be reduced below zero. Both the inputs and outputs are allowed to contain zero and negative counts.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter('which') >>> c.subtract('witch') # subtract elements from another iterable >>> c.subtract(Counter('watch')) # subtract elements from another counter >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch 0 >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch -1
- total()#
Sum of the counts
- total_score(project: Project) int | float | mpq#
Returns the total score of a project, that is, the sum of scores received from all voters.
- Parameters:
project (
Project) – The project.- Returns:
The total score assigned to the project.
- Return type:
Numeric
- update(iterable=None, /, **kwds)#
Like dict.update() but add counts instead of replacing them.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter('which') >>> c.update('witch') # add elements from another iterable >>> d = Counter('watch') >>> c.update(d) # add elements from another counter >>> c['h'] # four 'h' in which, witch, and watch 4
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- values() an object providing a view on D's values#
- class AbstractOrdinalProfile(legal_min_length: int | None = None, legal_max_length: int | None = None)[source]#
Bases:
AbstractProfile,ABCAbstract class for ordinal profiles. Stores the metadata and the methods specific to ordinal profiles.
- Parameters:
legal_min_length (int, optional) – The minimum length of an ordinal ballot per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum length of an ordinal ballot per the rules of the election. Defaults to None.
- legal_min_length#
The minimum length of an ordinal ballot per the rules of the election.
- Type:
int
- legal_max_length#
The maximum length of an ordinal ballot per the rules of the election.
- Type:
int
- class OrdinalProfile(init: Iterable[OrdinalBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[Ballot] | None = None, legal_min_length: int | None = None, legal_max_length: int | None = None)[source]#
Bases:
Profile,AbstractOrdinalProfileA profile of ordinal ballots, that is, a list of ordinal ballots per voters. See the class
OrdinalBallotfor more details on ordinal ballots. This class inherits from the Python list class and can thus be used as one.- Parameters:
init (Iterable[
OrdinalBallot], optional) – An iterable ofOrdinalBallotthat is used an initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to OrdinalBallot.legal_min_length (int, optional) – The minimum length of an ordinal ballot per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum length of an ordinal ballot per the rules of the election. Defaults to None.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- legal_min_length#
The minimum length of an ordinal ballot per the rules of the election.
- Type:
int
- legal_max_length#
The maximum length of an ordinal ballot per the rules of the election.
- Type:
int
- as_multiprofile()[source]#
Converts the profile into a
OrdinalMultiProfile.- Returns:
The multiprofile corresponding to the profile.
- Return type:
- as_sat_profile(sat_class: type[SatisfactionMeasure])#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- clear()#
Remove all items from list.
- copy(*args)#
Return a shallow copy of the list.
- count(value, /)#
Return number of occurrences of value.
- extend(other) None#
Extend list by appending elements from the iterable.
- index(value, start=0, stop=9223372036854775807, /)#
Return first index of value.
Raises ValueError if the value is not present.
- multiplicity(ballot: Ballot) int#
Returns 1 regardless of the input (even if the ballot does not appear in the profile, to save up computation).
- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
1
- Return type:
int
- num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- pop(index=-1, /)#
Remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
- remove(value, /)#
Remove first occurrence of value.
Raises ValueError if the value is not present.
- reverse(*args)#
Reverse IN PLACE.
- sort(*, key=None, reverse=False)#
Sort the list in ascending order and return None.
The sort is in-place (i.e. the list itself is modified) and stable (i.e. the order of two equal elements is maintained).
If a key function is given, apply it once to each list item and sort them, ascending or descending, according to their function values.
The reverse flag can be set to sort in descending order.
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- class OrdinalMultiProfile(init: Iterable[FrozenOrdinalBallot] = (), instance: Instance | None = None, ballot_validation: bool | None = None, ballot_type: type[FrozenBallot] | None = None, profile: OrdinalProfile | None = None, legal_min_length: int | None = None, legal_max_length: int | None = None)[source]#
Bases:
MultiProfile,AbstractOrdinalProfileA multiprofile of ordinal ballots, that is, a multiset of ordinal ballots together with their multiplicity. Ballots needs to be hashable, so the class
FrozenOrdinalBallotshould be used by default here. This class inherits from the Python Counter class and can thus be used as one.- Parameters:
init (Iterable[
FrozenOrdinalBallot], optional) – An iterable ofFrozenOrdinalBallotthat is used an initializer for the list. If activated, the types of the ballots are validated. In case anAbstractProfileobject is passed, the additional attributes are also copied (except if the corresponding keyword arguments have been given).instance (
Instance, optional) – The instance related to the profile. Defaults to Instance().ballot_validation (bool, optional) – Boolean indicating whether ballots should be validated before being added to the profile. Defaults to True.
ballot_type (type[
AbstractBallot], optional) – The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised. Defaults to ForzenOrdinalBallot.profile (
OrdinalProfile, optional) – A profile used to initialise the multiprofile. Some metadata are taken from the profile if they are not specified in the constructor.legal_min_length (int, optional) – The minimum length of an ordinal ballot per the rules of the election. Defaults to None.
legal_max_length (int, optional) – The maximum length of an ordinal ballot per the rules of the election. Defaults to None.
- ballot_validation#
Boolean indicating whether ballots should be validated before being added to the profile.
- Type:
bool
- ballot_type#
The type that the ballots are validated against. If ballot_validation is True and a ballot of a type that is not a subclass of ballot_type is added, an exception will be raised.
- Type:
type[
AbstractBallot]
- legal_min_length#
The minimum length of an ordinal ballot per the rules of the election.
- Type:
int
- legal_max_length#
The maximum length of an ordinal ballot per the rules of the election.
- Type:
int
- classmethod fromkeys(iterable, v=None)#
Create a new dictionary with keys from iterable and values set to value.
- append(ballot: AbstractBallot)#
Appends a ballot to the profile and update the multiplicity if necessary.
- Parameters:
ballot (
AbstractBallot) – The ballot to append to the profile.
- as_sat_profile(sat_class: type[SatisfactionMeasure])#
Converts the profile into a satisfaction profile. See the
satisfactionfor more details.- Parameters:
sat_class (type[
SatisfactionMeasure]) – The class for the representing the satisfaction measure to use.- Returns:
A satisfaction profile, that is, a collection of satisfaction measures for all the voters.
- Return type:
- clear() None. Remove all items from D.#
- copy(*args)#
Return a shallow copy.
- elements()#
Iterator over elements repeating each as many times as its count.
>>> c = Counter('ABCABC') >>> sorted(c.elements()) ['A', 'A', 'B', 'B', 'C', 'C']
# Knuth’s example for prime factors of 1836: 2**2 * 3**3 * 17**1 >>> import math >>> prime_factors = Counter({2: 2, 3: 3, 17: 1}) >>> math.prod(prime_factors.elements()) 1836
Note, if an element’s count has been set to zero or is a negative number, elements() will ignore it.
- extend(iterable: Iterable[AbstractBallot], force_freeze=True)#
Extends the profile by appending all the ballots in the iterable.
- Parameters:
iterable (Iterable[
AbstractBallot]) – An iterable of ballots to add to the profile.force_freeze (bool, optional) – Boolean indicating whether subclasses of
Ballotshould be frozen beforehand. Defaults to True.
- get(key, default=None, /)#
Return the value for key if key is in the dictionary, else default.
- items() a set-like object providing a view on D's items#
- keys() a set-like object providing a view on D's keys#
- most_common(n=None)#
List the n most common elements and their counts from the most common to the least. If n is None, then list all element counts.
>>> Counter('abracadabra').most_common(3) [('a', 5), ('b', 2), ('r', 2)]
- multiplicity(ballot: FrozenBallot) int#
Method returning the multiplicity of a ballot. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Parameters:
ballot (
AbstractBallot) – The ballot whose multiplicity is inquired.- Returns:
The multiplicity of the ballots.
- Return type:
int
- num_ballots() int#
Returns the number of ballots appearing in the profile. Used to ensure that
ProfileandMultiProfilecan be used interchangeably.- Returns:
The number of voters.
- Return type:
int
- pop(k[, d]) v, remove specified key and return the corresponding value.#
If the key is not found, return the default if given; otherwise, raise a KeyError.
- popitem()#
Remove and return a (key, value) pair as a 2-tuple.
Pairs are returned in LIFO (last-in, first-out) order. Raises KeyError if the dict is empty.
- setdefault(key, default=None, /)#
Insert key with a value of default if key is not in the dictionary.
Return the value for key if key is in the dictionary, else default.
- subtract(iterable=None, /, **kwds)#
Like dict.update() but subtracts counts instead of replacing them. Counts can be reduced below zero. Both the inputs and outputs are allowed to contain zero and negative counts.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter('which') >>> c.subtract('witch') # subtract elements from another iterable >>> c.subtract(Counter('watch')) # subtract elements from another counter >>> c['h'] # 2 in which, minus 1 in witch, minus 1 in watch 0 >>> c['w'] # 1 in which, minus 1 in witch, minus 1 in watch -1
- total()#
Sum of the counts
- update(iterable=None, /, **kwds)#
Like dict.update() but add counts instead of replacing them.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter('which') >>> c.update('witch') # add elements from another iterable >>> d = Counter('watch') >>> c.update(d) # add elements from another counter >>> c['h'] # four 'h' in which, witch, and watch 4
- validate_ballot(ballot: AbstractBallot) None#
Method validating a ballot before adding it to the profile. Checks if the type of the ballot is a subclass of the attribute ballot_type. Throws a TypeError if not, and returns None otherwise.
- Parameters:
ballot (
AbstractBallot) – The ballot to be checked.
- values() an object providing a view on D's values#