Skip to main content

NirGraph

Struct NirGraph 

Source
pub struct NirGraph {
    pub nodes: IndexMap<String, NirNode>,
    pub edges: Vec<(String, String)>,
    pub metadata: HashMap<String, MetadataValue>,
    pub version: Option<String>,
}
Expand description

Directed NIR computation graph.

Node insertion order is preserved via IndexMap (stable iteration for serialization and debugging). Edges are an ordered list of (src, dst) name pairs.

Fields§

§nodes: IndexMap<String, NirNode>

Named computational nodes (insertion-ordered).

§edges: Vec<(String, String)>

Directed edges as (source_name, destination_name).

§metadata: HashMap<String, MetadataValue>

Free-form graph metadata.

§version: Option<String>

Optional NIR version string (set when loading from HDF5 in v0.3).

Implementations§

Source§

impl NirGraph

Source

pub const MAX_NESTING_DEPTH: usize = 1024

Maximum nesting depth of NirNode::Graph subgraphs that Self::validate_structure will walk.

The root graph has depth 0. Each nested NirNode::Graph increments the depth. A subgraph whose depth would exceed this limit is rejected with NirError::InvalidGraph instead of growing the process stack.

This bound is independent of the HDF5 reader/writer nested-graph budget: it applies to adversarial in-memory graphs after deserialization succeeds; parsing depth is controlled by the serde format and deserializer.

Source

pub fn new() -> Self

Create an empty graph.

Source

pub fn insert_node( &mut self, name: impl Into<String>, node: NirNode, ) -> Result<()>

Insert a node under name.

§Errors

Returns NirError::DuplicateNode if name is already present.

Source

pub fn add_edge(&mut self, from: impl Into<String>, to: impl Into<String>)

Append a directed edge (from → to) without validating endpoints.

Call validate_structure to check that endpoints exist and that the edge is not duplicated.

Source

pub fn get(&self, name: &str) -> Option<&NirNode>

Borrow the node named name, if present.

Source

pub fn get_mut(&mut self, name: &str) -> Option<&mut NirNode>

Mutably borrow the node named name, if present.

Source

pub fn len(&self) -> usize

Number of nodes.

Source

pub fn is_empty(&self) -> bool

Whether the graph has no nodes.

Source

pub fn validate_structure(&self) -> Result<()>

Validate structural integrity.

Checks:

  • every edge endpoint names an existing node
  • no duplicate directed edges (src, dst)
  • nested NirNode::Graph subgraphs also validate, in node insertion order, depth-first

Nested subgraphs are walked with an explicit heap-allocated work list, so process-stack usage does not grow with nesting depth. A chain deeper than Self::MAX_NESTING_DEPTH fails with NirError::InvalidGraph.

Cycles are allowed. Type/shape inference is out of scope for v0.2. Convolution and pooling parameter invariants are checked separately by validate_parameters.

First-error ordering matches a recursive walk: missing endpoints, then duplicate edges, then nested subgraphs in insertion order. Nested failures are re-prefixed so the message names each enclosing subgraph.

§Errors
Source

pub fn validate_parameters(&self) -> Result<()>

Validate local convolution and pooling parameter invariants.

Complements validate_structure: structure checks only edge endpoints and duplicate directed edges, while this walks each node for weight rank, grouped-convolution divisibility, stride/dilation/padding extents, bias length, and pooling windows.

HDF5 crate::io::read does not call this method. The default writer also does not — invoke it explicitly after assembling or importing a graph.

Nested crate::NirNode::Graph subgraphs are visited. Failures name the node with a /-separated path ("encoder/conv").

§Errors

NirError::InvalidNodeParameters for the first node whose convolution or pooling fields violate a local invariant.

Trait Implementations§

Source§

impl Clone for NirGraph

Source§

fn clone(&self) -> NirGraph

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NirGraph

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for NirGraph

Source§

fn default() -> NirGraph

Returns the “default value” for a type. Read more
Source§

impl PartialEq for NirGraph

Source§

fn eq(&self, other: &NirGraph) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for NirGraph

Auto Trait Implementations§

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<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.