Skip to main content

Z1Nested

Struct Z1Nested 

Source
pub struct Z1Nested<T> { /* private fields */ }
Expand description

z^-1 operator over streams of streams.

The operator stores a complete nested stream consumed at the last iteration of the parent clock and outputs it at the next parent clock cycle. It outputs a stream of zeros in the first parent clock tick.

One important subtlety is that mathematically speaking nested streams are infinite, but we can only compute and store finite prefixes of such streams. When asked to produce output beyond the stored prefix, the z^-1 operator repeats the last value in the stored prefix. The assumption here is that the circuit was evaluated to a fixed point at the previous parent timestamp, and hence the rest of the stream will contain the same fixed point value. This is not generally true for all circuits, and users should keep this in mind when instantiating the operator.

It is a strict operator.

§Examples

Input (one row per parent timestamps):

1 2 3 4
1 1 1 1 1
2 2 2 0 0

Output:

0 0 0 0
1 2 3 4 4
1 1 1 1 1

Trait Implementations§

Source§

impl<T> Operator for Z1Nested<T>
where T: Eq + SizeOf + NumEntries + Clone + 'static,

Source§

fn name(&self) -> Cow<'static, str>

Human-readable operator name for debugging purposes.
Source§

fn clock_start(&mut self, scope: Scope)

Notify the operator about the start of a new clock epoch. Read more
Source§

fn clock_end(&mut self, scope: Scope)

Source§

fn metadata(&self, meta: &mut OperatorMeta)

Collects metadata about the current operator
Source§

fn fixedpoint(&self, scope: Scope) -> bool

Check if the operator is in a stable state. Read more
Source§

fn location(&self) -> OperatorLocation

The location the operator was created at
Source§

fn init(&mut self, _global_id: &GlobalNodeId)

Initialize the operator
Source§

fn is_async(&self) -> bool

Returns true if self is an asynchronous operator. Read more
Source§

fn is_input(&self) -> bool

Returns true if self is an input operator. Read more
Source§

fn ready(&self) -> bool

Returns true if self has received all required external inputs and is ready to run. Read more
Source§

fn register_ready_callback<F>(&mut self, _cb: F)
where F: Fn() + Send + Sync + 'static,

Register callback to be invoked when an asynchronous operator becomes ready. Read more
Source§

fn checkpoint( &mut self, base: &StoragePath, persistent_id: Option<&str>, files: &mut Vec<Arc<dyn FileCommitter>>, ) -> Result<(), Error>

Instructs the operator to checkpoint its state to persistent storage in directory base. Any files that the operator creates should have persistent_id in their names to keep them unique. Read more
Source§

fn restore( &mut self, base: &StoragePath, persistent_id: Option<&str>, ) -> Result<(), Error>

Instruct the operator to restore its state from persistent storage in directory base, using persistent_id to find its files. Read more
Source§

fn clear_state(&mut self) -> Result<(), Error>

Clear the operator’s state.
Source§

fn start_replay(&mut self) -> Result<(), Error>

Start replaying the operator’s state to the replay stream. Read more
Source§

fn is_replay_complete(&self) -> bool

Check if the operator has finished replaying its state. Read more
Source§

fn end_replay(&mut self) -> Result<(), Error>

Cleanup any state needed for replay and prepare the operator for normal operation. Read more
Source§

fn start_transaction(&mut self)

Notify the operator about start of a transaction. Read more
Source§

fn flush(&mut self)

Notifies the operator that all of its predecessors have produced all outputs for the current transaction. Read more
Source§

fn is_flush_complete(&self) -> bool

Invoked after flush after each eval call to check if all outputs have been produced. Read more
Source§

fn flush_progress(&self) -> Option<Position>

Returns the current progress of the operator in processing the current transaction. Read more
Source§

impl<T> StrictOperator<T> for Z1Nested<T>
where T: Eq + SizeOf + NumEntries + Clone + 'static,

Source§

fn get_output(&mut self) -> T

Returns the output value computed based on data consumed by the operator during previous timestamps. This method is invoked before eval_strict() has been invoked for the current timestamp. It can be invoked at most once for each timestamp, as the implementation may mutate or destroy the operator’s internal state (for example Z1 returns its inner value, leaving the operator empty).
Source§

fn get_final_output(&mut self) -> T

Source§

impl<T> StrictUnaryOperator<T, T> for Z1Nested<T>
where T: Eq + SizeOf + NumEntries + Clone + 'static,

Source§

async fn eval_strict(&mut self, i: &T)

Feed input for the current timestamp to the operator by reference. The output will be consumed via get_output during the next timestamp.
Source§

async fn eval_strict_owned(&mut self, i: T)

Feed input for the current timestamp to the operator by value. The output will be consumed via get_output during the next timestamp.
Source§

fn input_preference(&self) -> OwnershipPreference

Ownership preference on the operator’s input stream (see OwnershipPreference).
Source§

impl<T> UnaryOperator<T, T> for Z1Nested<T>
where T: Eq + SizeOf + NumEntries + Clone + 'static,

Source§

async fn eval(&mut self, i: &T) -> T

Consume input by reference.
Source§

async fn eval_owned(&mut self, i: T) -> T

Consume input by value.
Source§

fn input_preference(&self) -> OwnershipPreference

Ownership preference on the operator’s input stream (see OwnershipPreference).

Auto Trait Implementations§

§

impl<T> Freeze for Z1Nested<T>
where T: Freeze,

§

impl<T> RefUnwindSafe for Z1Nested<T>
where T: RefUnwindSafe,

§

impl<T> Send for Z1Nested<T>
where T: Send,

§

impl<T> Sync for Z1Nested<T>
where T: Sync,

§

impl<T> Unpin for Z1Nested<T>
where T: Unpin,

§

impl<T> UnsafeUnpin for Z1Nested<T>
where T: UnsafeUnpin,

§

impl<T> UnwindSafe for Z1Nested<T>
where T: UnwindSafe,

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> ArchivePointee for T

Source§

type ArchivedMetadata = ()

The archived version of the pointer metadata for this type.
Source§

fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata

Converts some archived metadata to the pointer metadata for itself.
Source§

impl<T> AsAny for T
where T: 'static,

Source§

fn as_any(&self) -> &(dyn Any + 'static)

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<F, W, T, D> Deserialize<With<T, W>, D> for F
where W: DeserializeWith<F, T, D>, D: Fallible + ?Sized, F: ?Sized,

Source§

fn deserialize( &self, deserializer: &mut D, ) -> Result<With<T, W>, <D as Fallible>::Error>

Deserializes using the given deserializer
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> LayoutRaw for T

Source§

fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>

Gets the layout of the type.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The type for metadata in pointers and references to Self.
Source§

impl<T> Pointee for T

Source§

type Metadata = ()

The type for metadata in pointers and references to Self.
Source§

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

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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 = Infallible

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

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,