#![doc = include_str!("../docs/2-overview.md")]
#![doc = ""]
#![doc = include_str!("../docs/1-quickstart.md")]
#![doc = ""]
#![doc = include_str!("../docs/3-using-the-macros.md")]
#![doc = ""]
#![doc = include_str!("../docs/4-expressions-and-operators.md")]
#![doc = ""]
#![doc = include_str!("../docs/5-optimization-pipeline.md")]
#![doc = ""]
#![doc = include_str!("../docs/6-backends-and-features.md")]
#![doc = ""]
#![doc = include_str!("../docs/7-troubleshooting.md")]
use proc_macro::TokenStream;
mod basis_grammar;
mod builder;
mod clifford;
mod optimizer;
mod spec;
mod symbol_field;
#[cfg(feature = "bits_u128")]
pub(crate) type BladeBits = u128;
#[cfg(feature = "bits_u64")]
pub(crate) type BladeBits = u64;
#[cfg(feature = "bits_u32")]
pub(crate) type BladeBits = u32;
#[cfg(feature = "bits_u16")]
pub(crate) type BladeBits = u16;
#[cfg(feature = "bits_u8")]
pub(crate) type BladeBits = u8;
#[cfg(not(any(
feature = "bits_u8",
feature = "bits_u16",
feature = "bits_u32",
feature = "bits_u64",
feature = "bits_u128",
)))]
pub(crate) type BladeBits = u32;
pub(crate) type FrameType = BladeBits;
#[proc_macro_attribute]
pub fn algebra(attr: TokenStream, item: TokenStream) -> TokenStream {
let build = builder::do_algebra_macro(attr.into(), item.into());
build.unwrap_or_else(|err| err.to_compile_error()).into()
}
#[proc_macro]
pub fn build_expr(item: TokenStream) -> TokenStream {
let build = builder::do_build_expr_macro(item.into());
build.unwrap_or_else(|err| err.to_compile_error()).into()
}