IterableProfileNoisyDiscreteGrid

class poisson_approval.IterableProfileNoisyDiscreteGrid(denominator, types, d_type_fixed_share=None, standardized=False, test=None, **kwargs)[source]

Iterate over noisy discrete profiles (ProfileNoisyDiscrete) defined on a grid.

Parameters
  • denominator (int or iterable) – The grain(s) of the grid.

  • types (iterable) – These types will have a variable share. They can be noisy discrete types, e.g. ('abc', 0.9, 0.01), or discrete types, e.g. ('abc', 0.9) (in which case the argument noise must be given in the additional parameters), or weak orders, e.g. 'a~b>c'.

  • d_type_fixed_share (dict, optional) – A dictionary. For each entry type: fixed_share, this type will have at least this fixed share. The total must be lower or equal to 1.

  • standardized (bool, optional) – If True, then only standardized profiles are given. Cf. Profile.is_standardized(). You should probably use this option if the arguments types, d_type_fixed_share and test treat the candidates symmetrically.

  • test (callable, optional) – A function ProfileNoisyDiscrete -> bool. Only profiles meeting this test are given.

  • kwargs – Additional parameters are passed to ProfileNoisyDiscrete when creating the profile.

Examples

Basic usage:

>>> for profile in IterableProfileNoisyDiscreteGrid(denominator=3, types=[('abc', 0.9, 0.01), 'a~b>c']):
...     print(profile)
<abc 0.9 ± 0.01: 1> (Condorcet winner: a)
<abc 0.9 ± 0.01: 2/3, a~b>c: 1/3> (Condorcet winner: a)
<abc 0.9 ± 0.01: 1/3, a~b>c: 2/3> (Condorcet winner: a)
<a~b>c: 1> (Condorcet winner: a, b)

Or, equivalently:

>>> for profile in IterableProfileNoisyDiscreteGrid(denominator=3, types=[('abc', 0.9), 'a~b>c'], noise=0.01):
...     print(profile)
<abc 0.9 ± 0.01: 1> (Condorcet winner: a)
<abc 0.9 ± 0.01: 2/3, a~b>c: 1/3> (Condorcet winner: a)
<abc 0.9 ± 0.01: 1/3, a~b>c: 2/3> (Condorcet winner: a)
<a~b>c: 1> (Condorcet winner: a, b)

For more examples, cf. IterableSimplexGrid.