#![deny(missing_docs)]
mod block_sparse;
mod capability;
mod dense;
mod error;
mod layout;
mod ops;
mod reorder;
mod sector;
mod storage;
mod tensor;
mod tensor_data;
#[cfg(any(test, feature = "test-fixtures"))]
pub mod test_fixtures;
pub use ariadnetor_core::{
Complex, ComputeBackend, ContractionError, ContractionPlan, EinsumExpr, MemoryOrder, Scalar,
compute_permutation,
};
pub use block_sparse::{
BlockCoord, BlockMeta, BlockSparseLayout, BlockSparseStorage, BlockSparseTensorData, Direction,
QNIndex,
};
pub use capability::{Host, OpsFor};
pub use dense::{DenseLayout, DenseStorage, DenseTensorData};
pub use error::TensorError;
pub use layout::{StorageFor, TensorLayout};
pub use ops::{add_all, linear_combine};
pub use reorder::{flat_index, normalize_to_data, reorder_data};
pub use sector::{Sector, U1Sector, Z2Sector};
pub use storage::Storage;
pub use tensor::{BlockSparseTensor, DenseTensor, Tensor};
pub use tensor_data::TensorData;
pub use ariadnetor_native::NativeBackend;
pub trait ComputeBackendTensorExt: ComputeBackend {
fn make_tensor<T: Clone>(&self, data: Vec<T>, shape: Vec<usize>) -> DenseTensorData<T> {
DenseTensorData::from_raw_parts(data, shape, self.preferred_order())
}
fn dense<T: Clone>(&self, data: Vec<T>, shape: Vec<usize>) -> DenseTensor<T> {
DenseTensor::from_data(self.make_tensor(data, shape))
}
fn zeros<T: Clone + num_traits::Zero>(&self, shape: Vec<usize>) -> DenseTensorData<T> {
DenseTensorData::zeros_in_order(shape, self.preferred_order())
}
fn ones<T: Clone + num_traits::Zero + num_traits::One>(
&self,
shape: Vec<usize>,
) -> DenseTensorData<T> {
DenseTensorData::ones_in_order(shape, self.preferred_order())
}
fn filled<T: Clone>(&self, shape: Vec<usize>, value: T) -> DenseTensorData<T> {
DenseTensorData::filled_in_order(shape, value, self.preferred_order())
}
fn eye<T: Clone + num_traits::Zero + num_traits::One>(&self, n: usize) -> DenseTensorData<T> {
DenseTensorData::eye_in_order(n, self.preferred_order())
}
}
impl<B: ComputeBackend> ComputeBackendTensorExt for B {}