mod tensor {
use std::io::Read;
use metatensor::TensorMap;
const DATA_PATH: &str = "../../metatensor-core/tests/data.npz";
#[test]
fn load_file() {
let tensor = metatensor::io::load(DATA_PATH).unwrap();
check_tensor(&tensor);
let tensor = TensorMap::load(DATA_PATH).unwrap();
check_tensor(&tensor);
}
#[test]
fn load_buffer() {
let mut file = std::fs::File::open(DATA_PATH).unwrap();
let mut buffer = Vec::new();
file.read_to_end(&mut buffer).unwrap();
let tensor = metatensor::io::load_buffer(&buffer).unwrap();
check_tensor(&tensor);
let tensor = TensorMap::load_buffer(&buffer).unwrap();
check_tensor(&tensor);
}
#[test]
fn save_buffer() {
let mut file = std::fs::File::open(DATA_PATH).unwrap();
let mut buffer = Vec::new();
file.read_to_end(&mut buffer).unwrap();
let tensor = metatensor::io::load_buffer(&buffer).unwrap();
let mut saved = Vec::new();
metatensor::io::save_buffer(&tensor, &mut saved).unwrap();
assert_eq!(buffer, saved);
saved.clear();
tensor.save_buffer(&mut saved).unwrap();
assert_eq!(buffer, saved);
}
fn check_tensor(tensor: &TensorMap) {
assert_eq!(tensor.keys().names(), ["o3_lambda", "o3_sigma", "center_type", "neighbor_type"]);
assert_eq!(tensor.keys().count(), 27);
let block = tensor.block_by_id(13);
assert_eq!(block.values().as_array().shape(), [9, 3, 3]);
assert_eq!(block.samples().names(), ["system", "atom"]);
assert_eq!(block.components().len(), 1);
assert_eq!(block.components()[0].names(), ["o3_mu"]);
assert_eq!(block.properties().names(), ["n"]);
assert_eq!(block.gradient_list(), ["positions"]);
let gradient = block.gradient("positions").unwrap();
assert_eq!(gradient.values().as_array().shape(), [27, 3, 3, 3]);
assert_eq!(gradient.samples().names(), ["sample", "system", "atom"]);
assert_eq!(gradient.components().len(), 2);
assert_eq!(gradient.components()[0].names(), ["xyz"]);
assert_eq!(gradient.components()[1].names(), ["o3_mu"]);
assert_eq!(gradient.properties().names(), ["n"]);
}
}
mod block {
use std::io::Read;
use metatensor::{TensorBlock, TensorBlockRef};
const DATA_PATH: &str = "../../metatensor-core/tests/block.npz";
#[test]
fn load_file() {
let block = metatensor::io::load_block(DATA_PATH).unwrap();
check_block(block.as_ref());
let block = TensorBlock::load(DATA_PATH).unwrap();
check_block(block.as_ref());
}
#[test]
fn load_buffer() {
let mut file = std::fs::File::open(DATA_PATH).unwrap();
let mut buffer = Vec::new();
file.read_to_end(&mut buffer).unwrap();
let block = metatensor::io::load_block_buffer(&buffer).unwrap();
check_block(block.as_ref());
let block = TensorBlock::load_buffer(&buffer).unwrap();
check_block(block.as_ref());
}
#[test]
fn save_buffer() {
let mut file = std::fs::File::open(DATA_PATH).unwrap();
let mut buffer = Vec::new();
file.read_to_end(&mut buffer).unwrap();
let block = metatensor::io::load_block_buffer(&buffer).unwrap();
let mut saved = Vec::new();
metatensor::io::save_block_buffer(block.as_ref(), &mut saved).unwrap();
assert_eq!(buffer, saved);
saved.clear();
block.save_buffer(&mut saved).unwrap();
assert_eq!(buffer, saved);
}
fn check_block(block: TensorBlockRef) {
assert_eq!(block.values().as_array().shape(), [9, 5, 3]);
assert_eq!(block.samples().names(), ["system", "atom"]);
assert_eq!(block.components().len(), 1);
assert_eq!(block.components()[0].names(), ["o3_mu"]);
assert_eq!(block.properties().names(), ["n"]);
assert_eq!(block.gradient_list(), ["positions"]);
let gradient = block.gradient("positions").unwrap();
assert_eq!(gradient.values().as_array().shape(), [59, 3, 5, 3]);
assert_eq!(gradient.samples().names(), ["sample", "system", "atom"]);
assert_eq!(gradient.components().len(), 2);
assert_eq!(gradient.components()[0].names(), ["xyz"]);
assert_eq!(gradient.components()[1].names(), ["o3_mu"]);
assert_eq!(gradient.properties().names(), ["n"]);
}
}
mod labels {
use std::io::Read;
use metatensor::Labels;
const DATA_PATH: &str = "../../metatensor-core/tests/keys.npy";
#[test]
fn load_file() {
let labels = metatensor::io::load_labels(DATA_PATH).unwrap();
check_labels(&labels);
let labels = Labels::load(DATA_PATH).unwrap();
check_labels(&labels);
}
#[test]
fn load_buffer() {
let mut file = std::fs::File::open(DATA_PATH).unwrap();
let mut buffer = Vec::new();
file.read_to_end(&mut buffer).unwrap();
let labels = metatensor::io::load_labels_buffer(&buffer).unwrap();
check_labels(&labels);
let labels = Labels::load_buffer(&buffer).unwrap();
check_labels(&labels);
}
#[test]
fn save_buffer() {
let mut file = std::fs::File::open(DATA_PATH).unwrap();
let mut buffer = Vec::new();
file.read_to_end(&mut buffer).unwrap();
let labels = metatensor::io::load_labels_buffer(&buffer).unwrap();
let mut saved = Vec::new();
metatensor::io::save_labels_buffer(&labels, &mut saved).unwrap();
assert_eq!(buffer, saved);
saved.clear();
labels.save_buffer(&mut saved).unwrap();
assert_eq!(buffer, saved);
}
fn check_labels(labels: &Labels) {
assert_eq!(labels.names(), ["o3_lambda", "o3_sigma", "center_type", "neighbor_type"]);
assert_eq!(labels.count(), 27);
}
}