pub struct GraphCompiler { /* private fields */ }Expand description
Compiler for traced tensor graphs.
A graph compiler lowers one or more TracedTensor outputs to a reusable
CompiledGraph without requiring a backend.
§Examples
use tenferro_runtime::{GraphCompiler, TracedTensor};
let x = TracedTensor::from_vec_col_major(vec![2], vec![1.0_f64, 2.0]).unwrap();
let y = (&x + &x).unwrap();
let mut compiler = GraphCompiler::new();
let program = compiler.compile(&y).unwrap();
assert_eq!(program.output_count(), 1);Implementations§
Source§impl GraphCompiler
impl GraphCompiler
Sourcepub fn new() -> Self
pub fn new() -> Self
Create a compiler with bounded default caches.
§Examples
use tenferro_runtime::GraphCompiler;
let compiler = GraphCompiler::new();
assert!(compiler.extension_caches().is_empty());Sourcepub fn with_compiler_options(compiler_options: CompilerOptions) -> Self
pub fn with_compiler_options(compiler_options: CompilerOptions) -> Self
Create a compiler with explicit lowering and optimizer options.
§Examples
use tenferro_runtime::{CompilerOptions, OptimizerConfig};
use tenferro_runtime::GraphCompiler;
let compiler = GraphCompiler::with_compiler_options(CompilerOptions {
optimizer: OptimizerConfig {
dot_decomposer: true,
..OptimizerConfig::default()
},
});
assert!(compiler.compiler_options().optimizer.dot_decomposer);Sourcepub fn compile(&mut self, output: &TracedTensor) -> Result<CompiledGraph>
pub fn compile(&mut self, output: &TracedTensor) -> Result<CompiledGraph>
Compile one traced output into a graph program.
§Examples
use tenferro_runtime::{GraphCompiler, TracedTensor};
let x = TracedTensor::from_vec_col_major(vec![1], vec![2.0_f64]).unwrap();
let mut compiler = GraphCompiler::new();
let y = x.neg().unwrap();
let program = compiler.compile(&y).unwrap();
assert_eq!(program.input_count(), 1);§Errors
Returns Error::Validation with ShapeMismatch, RankMismatch,
DTypeMismatch, or InvalidArgument for invalid graph metadata or
shape constraints, Error::RuntimeState for missing/inconsistent
metadata or cache state, and Error::Internal when the graph
violates a compiler invariant. Extension lowering failures retain
their typed Error::Extension source.
Sourcepub fn compile_traced_graph(
&mut self,
graph: &TracedGraph,
) -> Result<CompiledGraph>
pub fn compile_traced_graph( &mut self, graph: &TracedGraph, ) -> Result<CompiledGraph>
Compile an immutable semantic trace without consulting a backend.
This is the forward-only trace boundary. The compiler preserves the frozen semantic program and bindings without preparing backend/runtime staging. Runtime preparation owns backend-private staging and plan caches.
§Errors
Returns Error::Validation for invalid metadata or shape constraints,
Error::Extension when extension lowering fails,
Error::RuntimeState for inconsistent staging state, or
Error::Internal when compilation encounters an invariant violation.
Sourcepub fn compile_frozen_program(
&mut self,
frozen: &FrozenProgram,
) -> Result<CompiledGraph>
pub fn compile_frozen_program( &mut self, frozen: &FrozenProgram, ) -> Result<CompiledGraph>
Compile an immutable semantic program for ordered execution.
This entry is used by validation-preserving semantic transforms such as
whole-program AD. Tensor bindings remain outside semantic identity and
are preserved in the returned CompiledGraph.
§Examples
use tenferro_ops::dim_expr::DimExpr;
use tenferro_runtime::program::{
CoreSemanticOp, ProgramInputSpec, SemanticProgramBuilder,
};
use tenferro_runtime::{DType, GraphCompiler};
let mut builder = SemanticProgramBuilder::new();
let input = builder
.input(ProgramInputSpec::new(DType::F64, [DimExpr::Const(2)]))
.unwrap();
let output = builder.add_op(CoreSemanticOp::Neg, &[input]).unwrap()[0];
let frozen = builder.finish(&[output]).unwrap();
let compiled = GraphCompiler::new()
.compile_frozen_program(&frozen)
.unwrap();
assert_eq!(compiled.input_count(), 1);§Errors
Returns Error::Validation for invalid metadata or shape constraints,
Error::Extension when extension lowering fails,
Error::RuntimeState for inconsistent staging state, or
Error::Internal when compilation encounters an invariant violation.
Sourcepub fn compile_many(
&mut self,
outputs: &[&TracedTensor],
) -> Result<CompiledGraph>
pub fn compile_many( &mut self, outputs: &[&TracedTensor], ) -> Result<CompiledGraph>
Compile multiple traced outputs into one graph program.
§Examples
use tenferro_runtime::{GraphCompiler, TracedTensor};
let x = TracedTensor::from_vec_col_major(vec![1], vec![2.0_f64]).unwrap();
let y = x.neg().unwrap();
let mut compiler = GraphCompiler::new();
let program = compiler.compile_many(&[&x, &y]).unwrap();
assert_eq!(program.output_count(), 2);§Errors
Returns Error::Validation with ShapeMismatch, RankMismatch,
DTypeMismatch, or InvalidArgument for invalid graph metadata or
shape constraints, Error::RuntimeState for missing/inconsistent
metadata or cache state, and Error::Internal when the graph
violates a compiler invariant. Extension lowering failures retain
their typed Error::Extension source.
Sourcepub fn compile_with_input_specs(
&mut self,
output: &TracedTensor,
bindings: &[(&TracedTensor, DType, &[usize])],
) -> Result<CompiledGraph>
pub fn compile_with_input_specs( &mut self, output: &TracedTensor, bindings: &[(&TracedTensor, DType, &[usize])], ) -> Result<CompiledGraph>
Compile one traced output with concrete placeholder specs.
§Examples
use tenferro_runtime::{DType, GraphCompiler, TracedTensor};
let x = TracedTensor::input_symbolic_shape(DType::F64, 1).unwrap();
let mut compiler = GraphCompiler::new();
let y = x.neg().unwrap();
let program = compiler
.compile_with_input_specs(&y, &[(&x, DType::F64, &[3])])
.unwrap();
assert_eq!(program.input_count(), 1);§Errors
Returns Error::UnexpectedBinding for a data-carrying tensor,
Error::DuplicateBinding for repeated placeholders,
Error::PlaceholderDtypeMismatch,
Error::PlaceholderShapeMismatch, or
Error::PlaceholderRankMismatch for incompatible specs, and
Error::Validation with ShapeMismatch, RankMismatch,
DTypeMismatch, or InvalidArgument / Error::RuntimeState when
compilation or metadata lowering fails.
Sourcepub fn compiler_options(&self) -> CompilerOptions
pub fn compiler_options(&self) -> CompilerOptions
Return the compiler options used for future graph lowerings.
§Examples
use tenferro_runtime::CompilerOptions;
use tenferro_runtime::GraphCompiler;
let compiler = GraphCompiler::new();
assert_eq!(compiler.compiler_options(), CompilerOptions::default());Sourcepub fn set_compiler_options(&mut self, compiler_options: CompilerOptions)
pub fn set_compiler_options(&mut self, compiler_options: CompilerOptions)
Replace compiler options and clear compiler-owned extension cache entries.
§Examples
use tenferro_runtime::{CompilerOptions, OptimizerConfig};
use tenferro_runtime::GraphCompiler;
let mut compiler = GraphCompiler::new();
let options = CompilerOptions {
optimizer: OptimizerConfig {
dot_decomposer: true,
..OptimizerConfig::default()
},
};
compiler.set_compiler_options(options);
assert_eq!(compiler.compiler_options(), options);
assert_eq!(compiler.cache_stats().entries, 0);Sourcepub fn clear_extension_caches(&mut self)
pub fn clear_extension_caches(&mut self)
Clear generic extension compile-time cache entries.
§Examples
use tenferro_runtime::GraphCompiler;
let mut compiler = GraphCompiler::new();
compiler.clear_extension_caches();
assert_eq!(compiler.cache_stats().entries, 0);Sourcepub fn clear_caches(&mut self)
pub fn clear_caches(&mut self)
Clear every cache owned by the compiler.
§Examples
use tenferro_runtime::GraphCompiler;
let mut compiler = GraphCompiler::new();
compiler.clear_caches();
assert_eq!(compiler.cache_stats().entries, 0);Sourcepub fn cache_stats(&self) -> CacheStats
pub fn cache_stats(&self) -> CacheStats
Return compiler-owned extension cache-entry and retained-byte stats.
§Examples
use tenferro_runtime::GraphCompiler;
let compiler = GraphCompiler::new();
let stats = compiler.cache_stats();
assert_eq!(stats.entries, 0);Sourcepub fn extension_caches(&self) -> &ExtensionCacheStore
pub fn extension_caches(&self) -> &ExtensionCacheStore
Borrow generic compiler-owned extension cache storage.
§Examples
use tenferro_runtime::GraphCompiler;
let compiler = GraphCompiler::new();
assert!(compiler.extension_caches().is_empty());Sourcepub fn extension_caches_mut(&mut self) -> &mut ExtensionCacheStore
pub fn extension_caches_mut(&mut self) -> &mut ExtensionCacheStore
Mutably borrow generic compiler-owned extension cache storage.
§Examples
use tenferro_runtime::GraphCompiler;
let mut compiler = GraphCompiler::new();
compiler.extension_caches_mut().clear();Trait Implementations§
Source§impl Debug for GraphCompiler
impl Debug for GraphCompiler
Auto Trait Implementations§
impl Freeze for GraphCompiler
impl !RefUnwindSafe for GraphCompiler
impl Send for GraphCompiler
impl Sync for GraphCompiler
impl Unpin for GraphCompiler
impl UnsafeUnpin for GraphCompiler
impl !UnwindSafe for GraphCompiler
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more