referrerpolicy=no-referrer-when-downgrade
frame_election_provider_support::traits

Trait NposSolution

Source
pub trait NposSolution
where Self: Sized + for<'a> TryFrom<&'a [IndexAssignmentOf<Self>], Error = Error>,
{ type VoterIndex: UniqueSaturatedInto<usize> + TryInto<usize> + TryFrom<usize> + Debug + Copy + Clone + Bounded + Encode + Ord + PartialOrd + TypeInfo; type TargetIndex: UniqueSaturatedInto<usize> + TryInto<usize> + TryFrom<usize> + Debug + Copy + Clone + Bounded + Encode + Ord + PartialOrd + TypeInfo; type Accuracy: PerThing128; const LIMIT: usize; // Required methods fn voter_count(&self) -> usize; fn edge_count(&self) -> usize; fn unique_targets(&self) -> Vec<Self::TargetIndex>; fn remove_voter(&mut self, to_remove: Self::VoterIndex) -> bool; fn from_assignment<FV, FT, A>( assignments: &[Assignment<A, Self::Accuracy>], voter_index: FV, target_index: FT, ) -> Result<Self, Error> where A: IdentifierT, for<'r> FV: Fn(&'r A) -> Option<Self::VoterIndex>, for<'r> FT: Fn(&'r A) -> Option<Self::TargetIndex>; fn into_assignment<A: IdentifierT>( self, voter_at: impl Fn(Self::VoterIndex) -> Option<A>, target_at: impl Fn(Self::TargetIndex) -> Option<A>, ) -> Result<Vec<Assignment<A, Self::Accuracy>>, Error>; fn sort<F>(&mut self, voter_stake: F) where F: FnMut(&Self::VoterIndex) -> VoteWeight; fn remove_weakest_sorted<F>( &mut self, voter_stake: F, ) -> Option<Self::VoterIndex> where F: FnMut(&Self::VoterIndex) -> VoteWeight; fn corrupt(&mut self); // Provided methods fn average_edge_count(&self) -> usize { ... } fn score<A, FS>( self, stake_of: FS, voter_at: impl Fn(Self::VoterIndex) -> Option<A>, target_at: impl Fn(Self::TargetIndex) -> Option<A>, ) -> Result<ElectionScore, Error> where for<'r> FS: Fn(&'r A) -> VoteWeight, A: IdentifierT { ... } }
Expand description

An opaque index-based, NPoS solution type.

Required Associated Constants§

Source

const LIMIT: usize

The maximum number of votes that are allowed.

Required Associated Types§

Source

type VoterIndex: UniqueSaturatedInto<usize> + TryInto<usize> + TryFrom<usize> + Debug + Copy + Clone + Bounded + Encode + Ord + PartialOrd + TypeInfo

The voter type. Needs to be an index (convert to usize).

Source

type TargetIndex: UniqueSaturatedInto<usize> + TryInto<usize> + TryFrom<usize> + Debug + Copy + Clone + Bounded + Encode + Ord + PartialOrd + TypeInfo

The target type. Needs to be an index (convert to usize).

Source

type Accuracy: PerThing128

The weight/accuracy type of each vote.

Required Methods§

Source

fn voter_count(&self) -> usize

Get the length of all the voters that this type is encoding.

This is basically the same as the number of assignments, or number of active voters.

Source

fn edge_count(&self) -> usize

Get the total count of edges.

This is effectively in the range of {Self::voter_count, Self::voter_count * Self::LIMIT}.

Source

fn unique_targets(&self) -> Vec<Self::TargetIndex>

Get the number of unique targets in the whole struct.

Once presented with a list of winners, this set and the set of winners must be equal.

Source

fn remove_voter(&mut self, to_remove: Self::VoterIndex) -> bool

Remove a certain voter.

This will only search until the first instance of to_remove, and return true. If no instance is found (no-op), then it returns false.

In other words, if this return true, exactly one element must have been removed self.

Source

fn from_assignment<FV, FT, A>( assignments: &[Assignment<A, Self::Accuracy>], voter_index: FV, target_index: FT, ) -> Result<Self, Error>
where A: IdentifierT, for<'r> FV: Fn(&'r A) -> Option<Self::VoterIndex>, for<'r> FT: Fn(&'r A) -> Option<Self::TargetIndex>,

Build self from a list of assignments.

Source

fn into_assignment<A: IdentifierT>( self, voter_at: impl Fn(Self::VoterIndex) -> Option<A>, target_at: impl Fn(Self::TargetIndex) -> Option<A>, ) -> Result<Vec<Assignment<A, Self::Accuracy>>, Error>

Convert self into a Vec<Assignment<A, Self::Accuracy>>

Source

fn sort<F>(&mut self, voter_stake: F)
where F: FnMut(&Self::VoterIndex) -> VoteWeight,

Sort self by the means of the given function.

This might be helpful to allow for easier trimming.

Source

fn remove_weakest_sorted<F>( &mut self, voter_stake: F, ) -> Option<Self::VoterIndex>
where F: FnMut(&Self::VoterIndex) -> VoteWeight,

Remove the least staked voter.

This is ONLY sensible to do if Self::sort has been called on the struct at least once.

Source

fn corrupt(&mut self)

Make this solution corrupt. This should set the index of a voter to Bounded::max_value().

Obviously, this is only useful for testing.

Provided Methods§

Source

fn average_edge_count(&self) -> usize

Get the average edge count.

Source

fn score<A, FS>( self, stake_of: FS, voter_at: impl Fn(Self::VoterIndex) -> Option<A>, target_at: impl Fn(Self::TargetIndex) -> Option<A>, ) -> Result<ElectionScore, Error>
where for<'r> FS: Fn(&'r A) -> VoteWeight, A: IdentifierT,

Compute the score of this solution type.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§