Skip to main content

lift_tensor/
dialect.rs

1use lift_core::dialect::Dialect;
2use crate::ops::TensorOp;
3
4#[derive(Debug)]
5pub struct TensorDialect;
6
7impl Dialect for TensorDialect {
8    fn name(&self) -> &str { "tensor" }
9
10    fn verify_op(&self, op_name: &str, num_inputs: usize, num_results: usize) -> Result<(), String> {
11        let full_name = if op_name.starts_with("tensor.") {
12            op_name.to_string()
13        } else {
14            format!("tensor.{}", op_name)
15        };
16
17        match TensorOp::from_name(&full_name) {
18            Some(op) => {
19                let (min_inputs, max_inputs) = op.num_inputs();
20                if num_inputs < min_inputs || num_inputs > max_inputs {
21                    return Err(format!(
22                        "Operation {} expects {}-{} inputs, got {}",
23                        full_name, min_inputs, max_inputs, num_inputs
24                    ));
25                }
26                let _ = num_results;
27                Ok(())
28            }
29            None => Err(format!("Unknown tensor operation: {}", full_name)),
30        }
31    }
32}
33
34pub fn register_tensor_dialect(registry: &mut lift_core::dialect::DialectRegistry) {
35    registry.register(Box::new(TensorDialect));
36}