pub enum BuiltinTruncation {
Keep,
Coefficient(f64),
Weight(u32),
TopN(usize),
ApproxTopN(usize),
CollapseSample(Arc<CollapseSample>),
And(Box<BuiltinTruncation>, Box<BuiltinTruncation>),
Or(Box<BuiltinTruncation>, Box<BuiltinTruncation>),
}Expand description
Any builtin policy or combinator as one runtime value, the form the device drivers take.
Each variant truncates exactly as the builtin it names, and every builtin converts into one with From; a custom TruncationPolicy does not.
A tree holding an exact TopN cannot run above one partition (supports_partitioned is false).
Or combines per-term filters only: build it with or or try_or, which reject an operand with a layer pass; a hand-built Or variant that holds one panics in finalizes_layer and supports_partitioned.
Clone shares a CollapseSample rather than copying it, so every clone continues the same trajectory.
Variants§
Keep
No truncation.
Coefficient(f64)
CoefficientThreshold(eps).
Weight(u32)
WeightCutoff(k).
TopN(usize)
TopN(n).
ApproxTopN(usize)
ApproxTopN(n).
CollapseSample(Arc<CollapseSample>)
And(Box<BuiltinTruncation>, Box<BuiltinTruncation>)
And of two policies.
Or(Box<BuiltinTruncation>, Box<BuiltinTruncation>)
Or of two per-term filters.
Implementations§
Source§impl BuiltinTruncation
impl BuiltinTruncation
Sourcepub fn or(first: BuiltinTruncation, second: BuiltinTruncation) -> Self
pub fn or(first: BuiltinTruncation, second: BuiltinTruncation) -> Self
Sourcepub fn try_or(
first: BuiltinTruncation,
second: BuiltinTruncation,
) -> Result<Self, String>
pub fn try_or( first: BuiltinTruncation, second: BuiltinTruncation, ) -> Result<Self, String>
first or second, or the reason it is rejected: an operand with a layer pass (TopN, ApproxTopN, CollapseSample, or an And containing one).
Sourcepub fn supports_partitioned(&self) -> bool
pub fn supports_partitioned(&self) -> bool
Whether the tree runs above one partition: false exactly when it holds an exact TopN.
§Panics
On an Or variant holding a layer pass.
Sourcepub fn contains_collapse_sample(&self) -> bool
pub fn contains_collapse_sample(&self) -> bool
Whether a CollapseSample appears anywhere in the tree, Or branches included.
Trait Implementations§
Source§impl Clone for BuiltinTruncation
impl Clone for BuiltinTruncation
Source§fn clone(&self) -> BuiltinTruncation
fn clone(&self) -> BuiltinTruncation
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for BuiltinTruncation
impl Debug for BuiltinTruncation
Source§impl<P: Clone + Into<BuiltinTruncation>> From<&P> for BuiltinTruncation
A borrowed policy converts as its clone does.
impl<P: Clone + Into<BuiltinTruncation>> From<&P> for BuiltinTruncation
A borrowed policy converts as its clone does.
Source§impl<A: Into<BuiltinTruncation>, B: Into<BuiltinTruncation>> From<And<A, B>> for BuiltinTruncation
impl<A: Into<BuiltinTruncation>, B: Into<BuiltinTruncation>> From<And<A, B>> for BuiltinTruncation
Source§impl From<ApproxTopN> for BuiltinTruncation
impl From<ApproxTopN> for BuiltinTruncation
Source§fn from(p: ApproxTopN) -> Self
fn from(p: ApproxTopN) -> Self
Source§impl From<Arc<CollapseSample>> for BuiltinTruncation
impl From<Arc<CollapseSample>> for BuiltinTruncation
Source§fn from(p: Arc<CollapseSample>) -> Self
fn from(p: Arc<CollapseSample>) -> Self
Source§impl From<CoefficientThreshold> for BuiltinTruncation
impl From<CoefficientThreshold> for BuiltinTruncation
Source§fn from(p: CoefficientThreshold) -> Self
fn from(p: CoefficientThreshold) -> Self
Source§impl From<CollapseSample> for BuiltinTruncation
impl From<CollapseSample> for BuiltinTruncation
Source§fn from(p: CollapseSample) -> Self
fn from(p: CollapseSample) -> Self
Source§impl<A: Into<BuiltinTruncation>, B: Into<BuiltinTruncation>> From<Or<A, B>> for BuiltinTruncation
§Panics
If either operand has a layer pass, as BuiltinTruncation::or.
impl<A: Into<BuiltinTruncation>, B: Into<BuiltinTruncation>> From<Or<A, B>> for BuiltinTruncation
§Panics
If either operand has a layer pass, as BuiltinTruncation::or.
Source§impl From<TopN> for BuiltinTruncation
impl From<TopN> for BuiltinTruncation
Source§impl From<WeightCutoff> for BuiltinTruncation
impl From<WeightCutoff> for BuiltinTruncation
Source§fn from(p: WeightCutoff) -> Self
fn from(p: WeightCutoff) -> Self
Source§impl PartialEq for BuiltinTruncation
impl PartialEq for BuiltinTruncation
Source§impl<const W: usize> TruncationPolicy<W> for BuiltinTruncation
impl<const W: usize> TruncationPolicy<W> for BuiltinTruncation
Source§fn finalize_layer_partitioned(
&self,
local: &mut PauliSum<W>,
collectives: &dyn Collectives,
)
fn finalize_layer_partitioned( &self, local: &mut PauliSum<W>, collectives: &dyn Collectives, )
Arm for arm finalize_layer, each leaf by its own collective form.
Source§fn keep_term(&self, x: &[u64; W], z: &[u64; W], c: Complex64) -> bool
fn keep_term(&self, x: &[u64; W], z: &[u64; W], c: Complex64) -> bool
Source§fn finalize_layer(&self, sum: &mut PauliSum<W>)
fn finalize_layer(&self, sum: &mut PauliSum<W>)
PauliSum::retain is the easy way to write a filter here.Source§fn finalizes_layer(&self) -> bool
fn finalizes_layer(&self) -> bool
finalize_layer does anything, a hint that lets the engine skip it. Read moreSource§fn supports_partitioned(&self) -> bool
fn supports_partitioned(&self) -> bool
finalize_layer_partitioned runs above one partition; every partitioned driver checks it before the first layer. Read moreimpl StructuralPartialEq for BuiltinTruncation
Auto Trait Implementations§
impl Freeze for BuiltinTruncation
impl RefUnwindSafe for BuiltinTruncation
impl Send for BuiltinTruncation
impl Sync for BuiltinTruncation
impl Unpin for BuiltinTruncation
impl UnwindSafe for BuiltinTruncation
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more