pub struct Discretize {
pub range: f64,
pub buckets: u64,
/* private fields */
}Expand description
Discretize: bin a continuous f64 into N equal-width buckets.
Maps [0, range) to bucket indices [0, buckets). Values outside the range are clamped.
Signature: discretize(input: f64, range: f64, buckets: u64) -> (u64)
Use after a continuous distribution or interpolation to collapse
values into categorical bins. Example: feed a normal distribution
through discretize(100.0, 10) to get 10 histogram bins across
[0, 100). Out-of-range inputs are clamped to the first or last
bucket.
JIT level: P3 (compiled_u64 with jit_constants for range and buckets).
The range is positive and finite and there is at least one bucket,
declared so the build refuses anything else on every engine, and
the native form’s buckets - 1 never underflows. The body clamps to
the range itself rather than to range - f64::EPSILON, an absolute
epsilon that would make any range below it a “min > max” panic; the
final min already sends an input at or past the range to the last
bucket, so the bucket is the same everywhere.
Fields§
§range: f64The range argument, as given at construction.
buckets: u64The buckets argument, as given at construction.
Implementations§
Trait Implementations§
Source§impl PolydatNode for Discretize
impl PolydatNode for Discretize
Source§fn compiled_u64(&self) -> Option<CompiledU64Op>
fn compiled_u64(&self) -> Option<CompiledU64Op>
Source§fn jit_constants(&self) -> Vec<u64>
fn jit_constants(&self) -> Vec<u64>
Source§fn scratch_layout(&self) -> Vec<ScratchElem>
fn scratch_layout(&self) -> Vec<ScratchElem>
Self::eval_in. Empty for a node that evaluates over
Values alone, which is every node but a native cone.Source§fn eval_in(
&self,
scratch: &mut [ScratchBuf],
inputs: &[Value],
outputs: &mut [Value],
)
fn eval_in( &self, scratch: &mut [ScratchBuf], inputs: &[Value], outputs: &mut [Value], )
Self::eval with the node’s scratch, which the evaluating
state owns and hands in: storage belongs to the state, never to
the node, which is shared by every state of the program.Source§fn commutativity(&self) -> Commutativity
fn commutativity(&self) -> Commutativity
Source§fn accepts_none_inputs(&self) -> bool
fn accepts_none_inputs(&self) -> bool
Value::None inputs
directly rather than have the kernel propagate None through
it. Default: false — most nodes follow none_semantics.md Rule 1
(None in → None out, no eval invocation). Read moreSource§fn compiled_slot(
&self,
_wire_types: &[PortType],
_engine: Engine,
) -> Option<CompiledSlotKit>
fn compiled_slot( &self, _wire_types: &[PortType], _engine: Engine, ) -> Option<CompiledSlotKit>
(ptr, len) slot
pairs; vector outputs write into kernel-owned scratch.
Checked by the compiled-kernel builders AFTER
Self::compiled_u64 — pure-scalar nodes never need it.
Default None: the node stays on typed eval. Read moreSource§fn purity(&self) -> Purity
fn purity(&self) -> Purity
runtime_model.md’s D2 axiom. Default:
Purity::Pure. Override to declare an observable
side channel (Purity::SideChannel) or
eval-call-spanning state (Purity::Nondeterministic). Read moreSource§fn simd_variant(&self) -> Option<SimdVariant>
fn simd_variant(&self) -> Option<SimdVariant>
Source§fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>
fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>
PolydatProgram::canonical_hash) walks THROUGH fusion
nodes into this subgraph, so identity is invariant to the
engine mix: jit=off and jit=auto compiles of the same
source hash identically, and resume-skip matching survives
mode changes. Default None: ordinary nodes hash as
themselves.Auto Trait Implementations§
impl Freeze for Discretize
impl RefUnwindSafe for Discretize
impl Send for Discretize
impl Sync for Discretize
impl Unpin for Discretize
impl UnsafeUnpin for Discretize
impl UnwindSafe for Discretize
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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 more