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}