tensorlogic-compiler 0.1.0-rc.1

Compiler for transforming logic expressions into tensor computation graphs
Documentation
//! Predicate compilation.

use anyhow::Result;
use tensorlogic_ir::{EinsumGraph, Term};

use crate::context::{CompileState, CompilerContext};

pub(crate) fn compile_predicate(
    name: &str,
    args: &[Term],
    ctx: &mut CompilerContext,
    graph: &mut EinsumGraph,
) -> Result<CompileState> {
    for arg in args {
        if let Term::Var(v) = arg {
            ctx.assign_axis(v);
        }
    }

    let axes = ctx.get_axes(args)?;
    let tensor_name = format!("{}[{}]", name, axes);
    let tensor_idx = graph.add_tensor(tensor_name);

    Ok(CompileState { tensor_idx, axes })
}