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 577)
556fn generate_complex_graphs(num_graphs: usize) -> Result<Vec<Graph>> {
557 let mut graphs = Vec::new();
558
559 for graph_idx in 0..num_graphs {
560 let num_nodes = 10 + graph_idx % 20; // 10-30 nodes
561 let num_edges = num_nodes * 2; // Sparse graphs
562
563 // Generate node features
564 let node_features = Array2::from_shape_fn((num_nodes, 64), |(i, j)| {
565 let node_factor = i as f64 * 0.1;
566 let feature_factor = j as f64 * 0.05;
567 (node_factor + feature_factor).sin() + fastrand::f64() * 0.1
568 });
569
570 // Generate edge indices (ensuring valid connections)
571 let mut edge_indices = Array2::zeros((2, num_edges));
572 for edge in 0..num_edges {
573 edge_indices[[0, edge]] = fastrand::usize(..num_nodes);
574 edge_indices[[1, edge]] = fastrand::usize(..num_nodes);
575 }
576
577 let graph = Graph::new(node_features, edge_indices, None, None);
578 graphs.push(graph);
579 }
580
581 Ok(graphs)
582}
583
584fn extract_pde_features_with_qpinn() -> Result<Array1<f64>> {
585 // Simulate PDE feature extraction
586 Ok(Array1::from_shape_fn(20, |i| (i as f64 * 0.2).exp() * 0.1))
587}
588
589fn process_temporal_with_qrc(features: &Array1<f64>) -> Result<Array2<f64>> {
590 // Simulate temporal processing
591 let temporal_length = 10;
592 Ok(Array2::from_shape_fn(
593 (temporal_length, features.len()),
594 |(t, f)| features[f] * (t as f64 * 0.1).cos(),
595 ))
596}
597
598fn create_relationship_graph(patterns: &Array2<f64>) -> Result<Graph> {
599 let num_nodes = patterns.nrows();
600 let node_features = patterns.clone();
601
602 // Create edges based on similarity
603 let mut edges = Vec::new();
604 for i in 0..num_nodes {
605 for j in i + 1..num_nodes {
606 if fastrand::f64() < 0.3 {
607 // 30% connection probability
608 edges.push(i);
609 edges.push(j);
610 }
611 }
612 }
613
614 let num_edges = edges.len() / 2;
615 let edge_indices = Array2::from_shape_vec((2, num_edges), edges)?;
616
617 Ok(Graph::new(node_features, edge_indices, None, None))
618}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.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.