pub enum SelectStrategy {
Cartesian,
Explicit(Vec<Vec<usize>>),
}Expand description
How the permutation set is drawn from the axes.
Closed-set discriminator: see SelectStrategyKind for the
payload-stripped view that drives as_str / Display / FromStr
over SelectStrategyKind::ALL. Adding a third strategy (e.g.
Latin for a Latin-hypercube sweep or Random { seed, count }
for a seeded random sample) lands at one variant here + one
SelectStrategyKind entry + one kind() arm + one
SelectStrategy::selection_size_for arm, exhaustively checked
by the compiler AND by the per-variant truth-table tests below.
Sibling closed-set algebra to every other typed surface on the
tatara-process matrix axis: MatrixTarget::ALL,
BreatheDimensionKind::ALL, crate::phase::ProcessPhase::ALL,
crate::lifetime::TeardownPolicy::ALL,
crate::lifetime_clock::TerminateReasonKind::ALL.
Variants§
Cartesian
The full cartesian product of every axis. N envs = Π |axisᵢ|.
Explicit(Vec<Vec<usize>>)
An explicit list of coordinate tuples — one entry per axis, each a
0-based index into that axis’s values. Lets the operator hand-pick
a sparse subset instead of the full product.
Implementations§
Source§impl SelectStrategy
impl SelectStrategy
Sourcepub const fn kind(&self) -> SelectStrategyKind
pub const fn kind(&self) -> SelectStrategyKind
Discriminator projection — strips the payload, yielding the
closed-set kind. Used by the kind-sweep tests and by any future
consumer that wants to group strategies by category without
pattern-matching the full payload (e.g. metrics labels,
tatara-check enumerators, future status.conditions[].reason
reason-keys, LSP completion lists). Sibling shape to
crate::lifetime_clock::TerminateReason::kind.
Sourcepub fn selection_size_for(&self, axes_lengths: &[usize]) -> usize
pub fn selection_size_for(&self, axes_lengths: &[usize]) -> usize
Count the selection size against axes_lengths (one entry per
matrix axis, the count of values for that axis), WITHOUT
materializing the coordinate set. The closed-set dispatch IS
the lift: for Self::Cartesian the answer is the product
of axis lengths (so a 10×10×… sweep counts in O(N) instead of
allocating the whole product just to call .len()); for
Self::Explicit it’s the count of in-bounds coordinate
tuples (one in-bounds index per axis).
Routes through [coords_in_bounds_against] for the Explicit
case so the in-bounds check binds at ONE site that the
EnvMatrixSpec::coord_in_bounds adapter and the
EnvMatrixSpec::coordinates filter also project through —
a regression that drifts ONE site’s bounds-check semantics
(e.g. starts admitting equal indices) lands at the shared
helper, not at three byte-identical sites.
Aligns with the pre-lift cartesian empty-axes semantics:
empty axes_lengths ⇒ 1 (one empty coord), any zero length
⇒ 0 (no env can range over no values), otherwise the product.
Saturating fold so a sweep whose product exceeds usize::MAX
saturates to usize::MAX rather than panicking in debug
builds or silently wrapping in release — either of which
would mis-cap downstream when EnvMatrixSpec::expand reads
the size as a budget hint. Saturation gives the operator a
deterministic “as many as fit” signal at the top of the
usize range, NOT a wraparound to a small number that would
silently under-spawn.
Trait Implementations§
Source§impl Clone for SelectStrategy
impl Clone for SelectStrategy
Source§fn clone(&self) -> SelectStrategy
fn clone(&self) -> SelectStrategy
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SelectStrategy
impl Debug for SelectStrategy
Source§impl Default for SelectStrategy
impl Default for SelectStrategy
Source§fn default() -> SelectStrategy
fn default() -> SelectStrategy
Source§impl<'de> Deserialize<'de> for SelectStrategy
impl<'de> Deserialize<'de> for SelectStrategy
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl JsonSchema for SelectStrategy
impl JsonSchema for SelectStrategy
Source§fn schema_name() -> String
fn schema_name() -> String
Source§fn schema_id() -> Cow<'static, str>
fn schema_id() -> Cow<'static, str>
Source§fn json_schema(generator: &mut SchemaGenerator) -> Schema
fn json_schema(generator: &mut SchemaGenerator) -> Schema
Source§fn is_referenceable() -> bool
fn is_referenceable() -> bool
$ref keyword. Read moreSource§impl PartialEq for SelectStrategy
impl PartialEq for SelectStrategy
Source§impl Serialize for SelectStrategy
impl Serialize for SelectStrategy
impl StructuralPartialEq for SelectStrategy
Auto Trait Implementations§
impl Freeze for SelectStrategy
impl RefUnwindSafe for SelectStrategy
impl Send for SelectStrategy
impl Sync for SelectStrategy
impl Unpin for SelectStrategy
impl UnsafeUnpin for SelectStrategy
impl UnwindSafe for SelectStrategy
Blanket Implementations§
impl<T> AppData for Twhere
T: OptionalSend + OptionalSync + 'static + OptionalSerde,
impl<T> AppDataResponse for Twhere
T: OptionalSend + OptionalSync + 'static + OptionalSerde,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
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 moreimpl<T> OptionalSend for T
impl<T> OptionalSync for T
Source§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the foreground set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red() and
green(), which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg():
use yansi::{Paint, Color};
painted.fg(Color::White);Set foreground color to white using white().
use yansi::Paint;
painted.white();Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self with the background set to
value.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red() and
on_green(), which have the same functionality but
are pithier.
§Example
Set background color to red using fg():
use yansi::{Paint, Color};
painted.bg(Color::Red);Set background color to red using on_red().
use yansi::Paint;
painted.on_red();Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute value.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold() and
underline(), which have the same functionality
but are pithier.
§Example
Make text bold using attr():
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);Make text bold using using bold().
use yansi::Paint;
painted.bold();Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi Quirk value.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask() and
wrap(), which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk():
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);Enable wrapping using wrap().
use yansi::Paint;
painted.wrap();Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
fn clear(&self) -> Painted<&T>
renamed to resetting() due to conflicts with Vec::clear().
The clear() method will be removed in a future release.
Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted only when both stdout and stderr are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);