#networking #tensor-dot #greedy-algorithm #tensor-contraction #tensor-network

qua_ten_net

Rust package providing essential tools for working with tensor networks in computational quantum physics

1 unstable release

new 0.1.0 Dec 17, 2024

#685 in #networking

GPL-3.0-or-later

13KB
217 lines

QuaTenNet

QuaTenNet is a Rust package providing essential tools for working with tensor networks in computational quantum physics. This library aims to facilitate the development and analysis of tensor network algorithms, making it easier for researchers and developers to implement computational quantum simulations.

Features

  • General tools for constructing and manipulating tensor networks.
  • Utilizes ndarray for efficient manipulation of high-dimensional tensors.
  • Use Greedy algorithm for tensor contraction.
  • User-friendly API for seamless integration into quantum physics projects.

Installation

To include QuaTenNet in your Rust project, add the following line to your Cargo.toml file:

[dependencies]
qua_ten_net = "0.1.0"  # Replace with the latest version

Examples

You can find examples of how to use QuaTenNet in the examples directory.
To run an example, use the following command:

cargo run --example tencon
cargo run --example tendot

Sample code for Tensor Dot Product and Tensor Contraction:

// Tensro Dot Product:
let vec_a: Vec<f64> = (0..6).map(|x| x as f64).collect();
let a = Array::from_shape_vec(vec![2, 3], vec_a).expect("ShapeError!");

let vec_b = (0..12).map(|x| x as f64).collect();
let b = Array::from_shape_vec(vec![3, 2, 2], vec_b).expect("ShapeError!");

let dot = tensor_dot(&a, &b, vec![1, 0]);

match dot {
    Ok(result) => {
        println!("Dot Product: {:?}", result);
    }
    Err(err) => {
        println!("Error: {}", err);
    }
}

// Tensor Contraction:
let vec_a: Vec<f64> = (0..12).map(|x| x as f64).collect();
let a = Array::from_shape_vec(vec![2, 3, 2], vec_a).expect("ShapeError!");

let vec_b: Vec<f64> = (0..4).map(|x| x as f64).collect();
let b = Array::from_shape_vec(vec![2, 2], vec_b).expect("ShapeError!");

let vec_b = (0..81).map(|x| x as f64).collect();
let c = Array::from_shape_vec(vec![3, 3, 3, 3], vec_b).expect("ShapeError!");

let order: Vec<Vec<i32>> = vec![vec![1, 2, -1], vec![1, -2], vec![2, -3, -4, -5]];

let con = contract(vec![a.clone(), b.clone(), c.clone()], order.clone());
let con_map = contract_map(vec![a, b, c], order);
println!("\n Contraction Output: {:?}", con);
println!("\n Contraction Map: {:?}", con_map);

License

This project is licensed under the GPLv3.

Dependencies

~1.5MB
~30K SLoC