pub struct Graph {
pub node_features: Array2<f64>,
pub edge_indices: Array2<usize>,
pub edge_features: Option<Array2<f64>>,
pub graph_features: Option<Array1<f64>>,
pub num_nodes: usize,
pub num_edges: usize,
}Expand description
Graph data structure
Fields§
§node_features: Array2<f64>Node features
edge_indices: Array2<usize>Edge indices (source, target pairs)
edge_features: Option<Array2<f64>>Edge features
graph_features: Option<Array1<f64>>Graph-level features
num_nodes: usizeNumber of nodes
num_edges: usizeNumber of edges
Implementations§
Source§impl Graph
impl Graph
Sourcepub fn new(
node_features: Array2<f64>,
edge_indices: Array2<usize>,
edge_features: Option<Array2<f64>>,
graph_features: Option<Array1<f64>>,
) -> Self
pub fn new( node_features: Array2<f64>, edge_indices: Array2<usize>, edge_features: Option<Array2<f64>>, graph_features: Option<Array1<f64>>, ) -> Self
Create a new graph
Examples found in repository?
examples/quantum_ml_ultrathink_showcase.rs (line 574)
553fn generate_complex_graphs(num_graphs: usize) -> Result<Vec<Graph>> {
554 let mut graphs = Vec::new();
555
556 for graph_idx in 0..num_graphs {
557 let num_nodes = 10 + graph_idx % 20; // 10-30 nodes
558 let num_edges = num_nodes * 2; // Sparse graphs
559
560 // Generate node features
561 let node_features = Array2::from_shape_fn((num_nodes, 64), |(i, j)| {
562 let node_factor = i as f64 * 0.1;
563 let feature_factor = j as f64 * 0.05;
564 fastrand::f64().mul_add(0.1, (node_factor + feature_factor).sin())
565 });
566
567 // Generate edge indices (ensuring valid connections)
568 let mut edge_indices = Array2::zeros((2, num_edges));
569 for edge in 0..num_edges {
570 edge_indices[[0, edge]] = fastrand::usize(..num_nodes);
571 edge_indices[[1, edge]] = fastrand::usize(..num_nodes);
572 }
573
574 let graph = Graph::new(node_features, edge_indices, None, None);
575 graphs.push(graph);
576 }
577
578 Ok(graphs)
579}
580
581fn extract_pde_features_with_qpinn() -> Result<Array1<f64>> {
582 // Simulate PDE feature extraction
583 Ok(Array1::from_shape_fn(20, |i| (i as f64 * 0.2).exp() * 0.1))
584}
585
586fn process_temporal_with_qrc(features: &Array1<f64>) -> Result<Array2<f64>> {
587 // Simulate temporal processing
588 let temporal_length = 10;
589 Ok(Array2::from_shape_fn(
590 (temporal_length, features.len()),
591 |(t, f)| features[f] * (t as f64 * 0.1).cos(),
592 ))
593}
594
595fn create_relationship_graph(patterns: &Array2<f64>) -> Result<Graph> {
596 let num_nodes = patterns.nrows();
597 let node_features = patterns.clone();
598
599 // Create edges based on similarity
600 let mut edges = Vec::new();
601 for i in 0..num_nodes {
602 for j in i + 1..num_nodes {
603 if fastrand::f64() < 0.3 {
604 // 30% connection probability
605 edges.push(i);
606 edges.push(j);
607 }
608 }
609 }
610
611 let num_edges = edges.len() / 2;
612 let edge_indices = Array2::from_shape_vec((2, num_edges), edges)?;
613
614 Ok(Graph::new(node_features, edge_indices, None, None))
615}Sourcepub fn get_neighbors(&self, node: usize) -> Vec<usize>
pub fn get_neighbors(&self, node: usize) -> Vec<usize>
Get neighbors of a node
Sourcepub fn get_adjacency_matrix(&self) -> Array2<f64>
pub fn get_adjacency_matrix(&self) -> Array2<f64>
Get adjacency matrix
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Graph
impl RefUnwindSafe for Graph
impl Send for Graph
impl Sync for Graph
impl Unpin for Graph
impl UnwindSafe for Graph
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
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>
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 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>
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
The inverse inclusion map: attempts to construct
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
Checks if
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
Use with care! Same as
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
The inclusion map: converts
self to the equivalent element of its superset.