Skip to main content

Pcg

Struct Pcg 

Source
pub struct Pcg {
    pub seed: u64,
    pub stream: u64,
    /* private fields */
}
Expand description

PCG-RXS-M-XS 64/64 random number generator with fixed seed and stream.

Signature: pcg(input: u64, seed: u64, stream: u64) -> u64

The seed and stream are init-time constants baked into the node. The input wire selects which element of the sequence to return. Seeking is O(log N) so any position can be accessed directly.

Use this when every thread/cycle needs an independent, deterministic random value from the same generator. The output is a full 64-bit pseudo-random value suitable for feeding into range reduction, unit-interval mapping, or distribution sampling.

JIT level: P3 (named JitOp; jit_constants [seed, stream] in declaration order).

Fields§

§seed: u64

The seed argument, as given at construction.

§stream: u64

The stream argument, as given at construction.

Implementations§

Source§

impl Pcg

Source

pub fn new(seed: u64, stream: u64) -> Self

A pcg node with the given constant arguments.

Trait Implementations§

Source§

impl PolydatNode for Pcg

Source§

fn meta(&self) -> &NodeMeta

Return this node’s metadata (port names and types).
Source§

fn eval(&self, inputs: &[Value], outputs: &mut [Value])

Evaluate the node: read from inputs, write to outputs. Read more
Source§

fn compiled_u64(&self) -> Option<CompiledU64Op>

Return a compiled u64-only evaluation closure, if this node operates entirely in u64 space. Read more
Source§

fn jit_constants(&self) -> Vec<u64>

Return assembly-time constants for JIT compilation. Read more
Source§

fn scratch_layout(&self) -> Vec<ScratchElem>

The scratch entries a state owns for this node’s evaluation (axiom S3), one per entry in the order the node expects them in 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], )

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

Declare which inputs are interchangeable for this node. Read more
Source§

fn accepts_none_inputs(&self) -> bool

True iff this node should receive Value::None inputs directly rather than have the kernel propagate None through it. Default: false — most nodes follow SRD-74 Rule 1 (None in → None out, no eval invocation). Read more
Source§

fn compiled_slot(&self, _wire_types: &[PortType]) -> Option<CompiledSlotKit>

Return a slot-compiled closure for nodes with typed-slice ports (§8.4 layer 3): slice inputs read (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.
Source§

fn purity(&self) -> Purity

Declare this node’s purity status per the 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 more
Source§

fn simd_variant(&self) -> Option<SimdVariant>

Explicit SIMD-native implementation of this scalar node, if one has been registered with a semantic contract. Read more
Source§

fn fusion_subgraph(&self) -> Option<FusionSubgraph<'_>>

A synthetic fusion node’s view of the subgraph it stands in for (SRD-105 cone extraction). Program-identity hashing (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 Pcg

§

impl RefUnwindSafe for Pcg

§

impl Send for Pcg

§

impl Sync for Pcg

§

impl Unpin for Pcg

§

impl UnsafeUnpin for Pcg

§

impl UnwindSafe for Pcg

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.