Struct tract_pulse::internal::tract_core::prelude::ModelPatch    
[−]pub struct ModelPatch<F, O> where
    F: 'static + Fact + Clone + Hash,
    O: 'static + Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + Hash,  {
    pub context: Vec<String, Global>,
    pub dont_apply_twice: Option<String>,
    pub model: Graph<F, O>,
    pub inputs: HashMap<usize, usize, RandomState>,
    pub incoming: HashMap<OutletId, OutletId, RandomState>,
    pub shunt_outlet_by: HashMap<OutletId, OutletId, RandomState>,
    pub obliterate: Vec<usize, Global>,
}Expand description
A change to apply to a model.
Actually structured around a model that represent the new nodes to be inserted, plus information about how to connect these new nodes to the pre-existing graph.
Fields
context: Vec<String, Global>patch label for auditing and debugging
dont_apply_twice: Option<String>optimizer will ignore this patch in node to node loop if it was already encountered
model: Graph<F, O>the model-like ‘patch’ of nodes to add to the model
inputs: HashMap<usize, usize, RandomState>map of replaced inputs (patch node id to model node id)
incoming: HashMap<OutletId, OutletId, RandomState>map of patch inputs to model wires
shunt_outlet_by: HashMap<OutletId, OutletId, RandomState>map of old wires to be replaced by new wires
obliterate: Vec<usize, Global>operations to discard from the model
Implementations
impl<F, O> ModelPatch<F, O> where
    F: 'static + Fact + Clone + Hash,
    O: 'static + Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + Hash,
    Graph<F, O>: SpecialOps<F, O>, 
impl<F, O> ModelPatch<F, O> where
    F: 'static + Fact + Clone + Hash,
    O: 'static + Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + Hash,
    Graph<F, O>: SpecialOps<F, O>, 
pub fn new(s: impl Into<String>) -> ModelPatch<F, O>
pub fn push_context(&mut self, s: impl Into<String>)
pub fn with_context(self, s: impl Into<String>) -> ModelPatch<F, O>
pub fn is_empty(&self) -> bool
pub fn tap_model(
    &mut self, 
    model: &Graph<F, O>, 
    outlet: OutletId
) -> Result<OutletId, Error>
pub fn tap_model(
    &mut self, 
    model: &Graph<F, O>, 
    outlet: OutletId
) -> Result<OutletId, Error>
Draw a tap from a preexisting node.
returns an OutletId usable in the little “patch” model
pub unsafe fn shunt_outside_unchecked(
    &mut self, 
    outlet: OutletId, 
    by: OutletId
) -> Result<(), Error>
pub fn shunt_outside(
    &mut self, 
    model: &Graph<F, O>, 
    outlet: OutletId, 
    by: OutletId
) -> Result<(), Error>
pub fn shunt_outside(
    &mut self, 
    model: &Graph<F, O>, 
    outlet: OutletId, 
    by: OutletId
) -> Result<(), Error>
Replace an Outlet in the target model by one from the patch.
pub fn obliterate(&mut self, node: usize) -> Result<(), Error>
pub fn replace_single_op<IO>(
    patched_model: &Graph<F, O>, 
    node: &Node<F, O>, 
    inputs: &[OutletId], 
    new_op: IO
) -> Result<ModelPatch<F, O>, Error> where
    IO: Into<O>, 
pub fn replace_single_op<IO>(
    patched_model: &Graph<F, O>, 
    node: &Node<F, O>, 
    inputs: &[OutletId], 
    new_op: IO
) -> Result<ModelPatch<F, O>, Error> where
    IO: Into<O>, 
Convenience method creating a patch that replaces a single operation.
pub fn fuse_with_next<IO>(
    patched_model: &Graph<F, O>, 
    node: &Node<F, O>, 
    new_op: IO
) -> Result<ModelPatch<F, O>, Error> where
    IO: Into<O>, 
pub fn fuse_with_next<IO>(
    patched_model: &Graph<F, O>, 
    node: &Node<F, O>, 
    new_op: IO
) -> Result<ModelPatch<F, O>, Error> where
    IO: Into<O>, 
Convenience method creating a patch that fuses an op with the next one.
pub fn shunt_one_op(
    patched_model: &Graph<F, O>, 
    node: &Node<F, O>
) -> Result<ModelPatch<F, O>, Error>
pub fn shunt_one_op(
    patched_model: &Graph<F, O>, 
    node: &Node<F, O>
) -> Result<ModelPatch<F, O>, Error>
Convenience method creating a patch that shunts the given node.
pub fn single_unary_op<IO>(
    patched_model: &Graph<F, O>, 
    node: &Node<F, O>, 
    new_op: IO
) -> Result<ModelPatch<F, O>, Error> where
    IO: Into<O>, 
pub fn single_unary_op<IO>(
    patched_model: &Graph<F, O>, 
    node: &Node<F, O>, 
    new_op: IO
) -> Result<ModelPatch<F, O>, Error> where
    IO: Into<O>, 
Convenience method creating a patch that replace a single unary operation.
Methods from Deref<Target = Graph<F, O>>
pub fn add_node(
    &mut self, 
    name: impl Into<String>, 
    op: impl Into<O>, 
    output_facts: SmallVec<[F; 4]>
) -> Result<usize, Error>
pub fn add_edge(
    &mut self, 
    outlet: OutletId, 
    inlet: InletId
) -> Result<(), Error>
pub fn add_edge(
    &mut self, 
    outlet: OutletId, 
    inlet: InletId
) -> Result<(), Error>
Connect a node outlet to a node inlet.
pub fn set_input_names(
    &mut self, 
    inputs: impl IntoIterator<Item = impl AsRef<str>>
) -> Result<(), Error>
pub fn set_input_names(
    &mut self, 
    inputs: impl IntoIterator<Item = impl AsRef<str>>
) -> Result<(), Error>
Set model inputs by the node name.
pub fn input_fact(&self, ix: usize) -> Result<&F, Error>
pub fn input_fact(&self, ix: usize) -> Result<&F, Error>
Get the ix-th input tensor type information.
pub fn input_fact_mut(&mut self, ix: usize) -> Result<&mut F, Error>
pub fn input_fact_mut(&mut self, ix: usize) -> Result<&mut F, Error>
Get the ix-th input tensor type information, mutably.
pub fn set_input_fact(&mut self, input: usize, fact: F) -> Result<(), Error>
pub fn set_input_fact(&mut self, input: usize, fact: F) -> Result<(), Error>
Set the ix-th input tensor type information.
pub fn auto_outputs(&mut self) -> Result<(), Error>
pub fn auto_outputs(&mut self) -> Result<(), Error>
Guess outputs from the topology: node or nodes with no successors.
pub fn set_output_outlets(&mut self, outputs: &[OutletId]) -> Result<(), Error>
pub fn set_output_outlets(&mut self, outputs: &[OutletId]) -> Result<(), Error>
Change model outputs.
pub fn set_output_names(
    &mut self, 
    outputs: impl IntoIterator<Item = impl AsRef<str>>
) -> Result<(), Error>
pub fn set_output_names(
    &mut self, 
    outputs: impl IntoIterator<Item = impl AsRef<str>>
) -> Result<(), Error>
Set model outputs by node names.
pub fn output_fact(&self, ix: usize) -> Result<&F, Error>
pub fn output_fact(&self, ix: usize) -> Result<&F, Error>
Get the ix-th input tensor type information.
pub fn output_fact_mut(&mut self, ix: usize) -> Result<&mut F, Error>
pub fn output_fact_mut(&mut self, ix: usize) -> Result<&mut F, Error>
Get the ix-th input tensor type information, mutably.
pub fn set_output_fact(&mut self, output: usize, fact: F) -> Result<(), Error>
pub fn set_output_fact(&mut self, output: usize, fact: F) -> Result<(), Error>
Set the ix-th output tensor type information.
pub fn node_names(&self) -> impl Iterator<Item = &str>
pub fn node_names(&self) -> impl Iterator<Item = &str>
Iterate over all node names.
pub fn node_id_by_name(&self, name: &str) -> Result<usize, Error>
pub fn node_by_name(&self, name: impl AsRef<str>) -> Result<&Node<F, O>, Error>
pub fn node_by_name(&self, name: impl AsRef<str>) -> Result<&Node<F, O>, Error>
Find a node by its name.
pub fn node_by_name_mut(
    &mut self, 
    name: impl AsRef<str>
) -> Result<&mut Node<F, O>, Error>
pub fn node_by_name_mut(
    &mut self, 
    name: impl AsRef<str>
) -> Result<&mut Node<F, O>, Error>
Borrow mutably a node by its name.
pub fn rename_node(&mut self, id: usize, name: &str) -> Result<(), Error>
pub fn node_facts(
    &self, 
    id: usize
) -> Result<(SmallVec<[&F; 4]>, SmallVec<[&F; 4]>), Error>
pub fn node_facts(
    &self, 
    id: usize
) -> Result<(SmallVec<[&F; 4]>, SmallVec<[&F; 4]>), Error>
Get input and output tensor information for a node.
pub fn node_input_facts(
    &self, 
    node_id: usize
) -> Result<SmallVec<[&F; 4]>, Error>
pub fn node_input_facts(
    &self, 
    node_id: usize
) -> Result<SmallVec<[&F; 4]>, Error>
Get input tensor information for a node.
pub fn node_output_facts(
    &self, 
    node_id: usize
) -> Result<SmallVec<[&F; 4]>, Error>
pub fn node_output_facts(
    &self, 
    node_id: usize
) -> Result<SmallVec<[&F; 4]>, Error>
Get output tensor information for a node.
pub fn outlet_fact(&self, outlet: OutletId) -> Result<&F, Error>
pub fn outlet_fact(&self, outlet: OutletId) -> Result<&F, Error>
Get tensor information for a single outlet.
pub fn outlet_fact_mut(&mut self, outlet: OutletId) -> Result<&mut F, Error>
pub fn outlet_fact_mut(&mut self, outlet: OutletId) -> Result<&mut F, Error>
Get tensor information for a single outlet.
pub fn outlets_fact_mut(
    &mut self, 
    outlets: &[OutletId]
) -> Result<SmallVec<[&mut F; 4]>, Error>
pub fn outlets_fact_mut(
    &mut self, 
    outlets: &[OutletId]
) -> Result<SmallVec<[&mut F; 4]>, Error>
Get multiple mutable tensor information for outlets.
pub fn set_outlet_fact(
    &mut self, 
    outlet: OutletId, 
    fact: F
) -> Result<(), Error>
pub fn set_outlet_fact(
    &mut self, 
    outlet: OutletId, 
    fact: F
) -> Result<(), Error>
Set tensor information for a single outlet.
pub fn outlet_label(&self, outlet: OutletId) -> Option<&str>
pub fn outlet_label(&self, outlet: OutletId) -> Option<&str>
Get label for an outlet.
pub fn set_outlet_label(
    &mut self, 
    outlet: OutletId, 
    label: String
) -> Result<(), Error>
pub fn set_outlet_label(
    &mut self, 
    outlet: OutletId, 
    label: String
) -> Result<(), Error>
Set label for an outlet.
pub fn find_outlet_label(&self, label: &str) -> Option<OutletId>
pub fn find_outlet_label(&self, label: &str) -> Option<OutletId>
Find outlet by label.
pub fn eval_order(&self) -> Result<Vec<usize, Global>, Error>
pub fn eval_order(&self) -> Result<Vec<usize, Global>, Error>
Computes an evalutation order for the graph inputs and outputs
pub fn check_edges(&self) -> Result<(), Error>
pub fn check_edges(&self) -> Result<(), Error>
Performs a sanity check on network connections.
pub fn single_prec(&self, id: usize) -> Result<Option<&Node<F, O>>, Error>
pub fn single_prec_at(
    &self, 
    id: usize, 
    count: usize
) -> Result<Option<&Node<F, O>>, Error>
pub fn single_succ_at(
    &self, 
    id: usize, 
    count: usize
) -> Result<Option<&Node<F, O>>, Error>
pub fn single_succ(&self, id: usize) -> Result<Option<&Node<F, O>>, Error>
pub fn outlet_successors(&self, outlet: OutletId) -> &[InletId]
pub fn add_const(
    &mut self, 
    name: impl Into<String>, 
    v: impl IntoArcTensor
) -> Result<OutletId, Error>
pub fn signature(&self) -> u64
pub fn concretize_dims(
    &self, 
    values: &SymbolValues
) -> Result<Graph<TypedFact, Box<dyn TypedOp + 'static, Global>>, Error>
pub fn optimize(&mut self) -> Result<(), Error>
pub fn optimize(&mut self) -> Result<(), Error>
Translate the graph to locally optimized operators (LIR or MIR ops).
pub fn invariants(&self) -> Result<Invariants, Error>
Trait Implementations
impl<F, O> Clone for ModelPatch<F, O> where
    F: Clone + 'static + Fact + Hash,
    O: Clone + 'static + Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Hash, 
impl<F, O> Clone for ModelPatch<F, O> where
    F: Clone + 'static + Fact + Hash,
    O: Clone + 'static + Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Hash, 
fn clone(&self) -> ModelPatch<F, O>
fn clone(&self) -> ModelPatch<F, O>
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
 
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source. Read more
impl<F, O> Debug for ModelPatch<F, O> where
    F: Debug + 'static + Fact + Clone + Hash,
    O: Debug + 'static + Display + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + Hash, 
impl<F, O> Debug for ModelPatch<F, O> where
    F: Debug + 'static + Fact + Clone + Hash,
    O: Debug + 'static + Display + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + Hash, 
impl<F, O> Default for ModelPatch<F, O> where
    F: 'static + Fact + Clone + Hash,
    O: 'static + Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + Hash, 
impl<F, O> Default for ModelPatch<F, O> where
    F: 'static + Fact + Clone + Hash,
    O: 'static + Display + Debug + AsRef<dyn Op + 'static> + AsMut<dyn Op + 'static> + Clone + Hash, 
fn default() -> ModelPatch<F, O>
fn default() -> ModelPatch<F, O>
Returns the “default value” for a type. Read more
Auto Trait Implementations
impl<F, O> RefUnwindSafe for ModelPatch<F, O> where
    F: RefUnwindSafe,
    O: RefUnwindSafe, 
impl<F, O> Send for ModelPatch<F, O> where
    O: Send, 
impl<F, O> Sync for ModelPatch<F, O> where
    O: Sync, 
impl<F, O> Unpin for ModelPatch<F, O> where
    F: Unpin,
    O: Unpin, 
impl<F, O> UnwindSafe for ModelPatch<F, O> where
    F: UnwindSafe + RefUnwindSafe,
    O: UnwindSafe, 
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
    T: ?Sized, 
 
impl<T> BorrowMut<T> for T where
    T: ?Sized, 
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
 
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Downcast for T where
    T: Any, 
 
impl<T> Downcast for T where
    T: Any, 
sourcefn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘNotable traits for Box<R, Global>impl<R> Read for Box<R, Global> where
    R: Read + ?Sized, impl<W> Write for Box<W, Global> where
    W: Write + ?Sized, impl<I, A> Iterator for Box<I, A> where
    I: Iterator + ?Sized,
    A: Allocator,     type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
    F: Future + Unpin + ?Sized,
    A: Allocator + 'static,     type Output = <F as Future>::Output;
 
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>ⓘNotable traits for Box<R, Global>impl<R> Read for Box<R, Global> where
    R: Read + ?Sized, impl<W> Write for Box<W, Global> where
    W: Write + ?Sized, impl<I, A> Iterator for Box<I, A> where
    I: Iterator + ?Sized,
    A: Allocator,     type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
    F: Future + Unpin + ?Sized,
    A: Allocator + 'static,     type Output = <F as Future>::Output;
R: Read + ?Sized, impl<W> Write for Box<W, Global> where
W: Write + ?Sized, impl<I, A> Iterator for Box<I, A> where
I: Iterator + ?Sized,
A: Allocator, type Item = <I as Iterator>::Item;impl<F, A> Future for Box<F, A> where
F: Future + Unpin + ?Sized,
A: Allocator + 'static, type Output = <F as Future>::Output;
Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait. Read more
sourcefn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
 
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait. Read more
sourcefn as_any(&self) -> &(dyn Any + 'static)
 
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s. Read more
sourcefn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
 
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s. Read more
sourceimpl<T> DowncastSync for T where
    T: Any + Send + Sync, 
 
impl<T> DowncastSync for T where
    T: Any + Send + Sync, 
sourceimpl<T> ToOwned for T where
    T: Clone, 
 
impl<T> ToOwned for T where
    T: Clone, 
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
 
fn clone_into(&self, target: &mut T)
toowned_clone_into)Uses borrowed data to replace owned data, usually by cloning. Read more