mod errors;
mod extensions;
mod traits;
mod types;
mod utils;
pub use crate::errors::causal_tensor_error::CausalTensorError;
pub use crate::errors::ein_sum_validation_error::EinSumValidationError;
pub use crate::traits::backend_linear_algebra::LinearAlgebraBackend;
pub use crate::traits::backend_tensor::TensorBackend;
pub use crate::traits::tensor::Tensor;
pub use crate::traits::tensor_data::TensorData;
pub use crate::types::backend_tensor::BackendTensor;
pub use crate::types::cpu_tensor::InternalCpuTensor;
pub use crate::types::cpu_tensor::{EinSumAST as GenericEinSumAST, EinSumOp as GenericEinSumOp};
pub use crate::types::backend::Device;
pub use crate::types::backend::cpu::CpuBackend;
#[cfg(all(feature = "mlx", target_os = "macos", target_arch = "aarch64"))]
pub use crate::types::backend::mlx::{MlxBackend, MlxCausalTensor};
pub use crate::extensions::ext_hkt::CausalTensorWitness;
pub use crate::extensions::ext_math::CausalTensorMathExt;
pub use crate::utils::utils_tests;
#[cfg(not(feature = "mlx"))]
pub type DefaultBackend = CpuBackend;
#[cfg(feature = "mlx")]
pub type DefaultBackend = CpuBackend;
#[cfg(all(feature = "mlx", target_os = "macos", target_arch = "aarch64"))]
pub type DefaultFloat = f32;
#[cfg(not(all(feature = "mlx", target_os = "macos", target_arch = "aarch64")))]
pub type DefaultFloat = f64;
pub type CausalTensor<T> = BackendTensor<T, DefaultBackend>;
pub type EinSumOp<T> = GenericEinSumOp<CausalTensor<T>>;
pub type EinSumAST<T> = GenericEinSumAST<CausalTensor<T>>;