use crate::expr::Expression;
#[must_use]
pub fn sigma_x() -> Expression {
Expression::new("Matrix([[0, 1], [1, 0]])")
}
#[must_use]
pub fn sigma_y() -> Expression {
Expression::new("Matrix([[0, -I], [I, 0]])")
}
#[must_use]
pub fn sigma_z() -> Expression {
Expression::new("Matrix([[1, 0], [0, -1]])")
}
#[must_use]
pub fn identity() -> Expression {
Expression::new("Matrix([[1, 0], [0, 1]])")
}
#[must_use]
pub fn sigma_vector() -> Vec<Expression> {
vec![sigma_x(), sigma_y(), sigma_z()]
}
#[must_use]
pub fn sigma_plus() -> Expression {
(sigma_x() + Expression::i() * sigma_y()) / Expression::int(2)
}
#[must_use]
pub fn sigma_minus() -> Expression {
(sigma_x() - Expression::i() * sigma_y()) / Expression::int(2)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_pauli_matrices() {
let sx = sigma_x();
let sy = sigma_y();
let sz = sigma_z();
let id = identity();
assert!(!sx.to_string().is_empty());
assert!(!sy.to_string().is_empty());
assert!(!sz.to_string().is_empty());
assert!(!id.to_string().is_empty());
}
#[test]
fn test_sigma_vector() {
let sigmas = sigma_vector();
assert_eq!(sigmas.len(), 3);
}
}