1#[doc(hidden)]
36pub mod ad_support;
37mod checkpoint;
38mod compiler;
39pub mod error;
40mod exec;
41pub mod extension;
42pub mod extension_cache;
43pub mod extension_runtime;
44pub mod graph;
45mod metadata;
46#[doc(hidden)]
47pub mod scalar_semantics;
48mod segment;
49mod shape_infer;
50mod shape_packing;
51pub mod sym_dim;
52mod tensor;
53pub mod traced;
54mod typed_tensor;
55
56pub use compiler::{CompilerOptions, OptimizerConfig};
57pub use error::{ContextId, Error, Result};
58pub use extension_cache::{
59 ExtensionCacheKey, ExtensionCacheLimits, ExtensionCacheSelector, ExtensionCacheStore,
60};
61pub use extension_runtime::{
62 ExtensionExecutionContext, ExtensionExecutor, ExtensionRegistry, ExtensionRuntime,
63 ExtensionRuntimeRegistryError, HostReferenceRuntime,
64};
65pub use graph::{
66 GraphCompiler, GraphCompilerCacheStats, GraphExecutor, GraphExecutorCacheStats,
67 GraphInstructionView, GraphOpView, GraphProgram, GraphProgramInput,
68 GraphProgramLoweringShapeError, GraphProgramLoweringView,
69};
70pub use shape_packing::TracedSliceBuilder;
71pub use sym_dim::SymDim;
72pub use tenferro_tensor::{
73 CacheStats, CompareDir, DType, DotGeneralConfig, GatherConfig, PadConfig, ScatterConfig,
74 SliceConfig, Tensor, TensorBackend, TensorRead, TensorScalar, TensorValue, TensorView,
75 TypedTensor, TypedTensorView,
76};
77
78pub trait TensorOpsExt {
104 fn convert<B: TensorBackend>(
106 &self,
107 to: DType,
108 backend: &mut B,
109 ) -> tenferro_tensor::Result<Tensor>;
110 fn cast<B: TensorBackend>(&self, to: DType, backend: &mut B)
112 -> tenferro_tensor::Result<Tensor>;
113 fn add<B: TensorBackend>(
115 &self,
116 rhs: &Tensor,
117 backend: &mut B,
118 ) -> tenferro_tensor::Result<Tensor>;
119 fn sub<B: TensorBackend>(
121 &self,
122 rhs: &Tensor,
123 backend: &mut B,
124 ) -> tenferro_tensor::Result<Tensor>;
125 fn mul<B: TensorBackend>(
127 &self,
128 rhs: &Tensor,
129 backend: &mut B,
130 ) -> tenferro_tensor::Result<Tensor>;
131 fn div<B: TensorBackend>(
133 &self,
134 rhs: &Tensor,
135 backend: &mut B,
136 ) -> tenferro_tensor::Result<Tensor>;
137 fn rem<B: TensorBackend>(
139 &self,
140 rhs: &Tensor,
141 backend: &mut B,
142 ) -> tenferro_tensor::Result<Tensor>;
143 fn pow<B: TensorBackend>(
145 &self,
146 rhs: &Tensor,
147 backend: &mut B,
148 ) -> tenferro_tensor::Result<Tensor>;
149 fn maximum<B: TensorBackend>(
151 &self,
152 rhs: &Tensor,
153 backend: &mut B,
154 ) -> tenferro_tensor::Result<Tensor>;
155 fn minimum<B: TensorBackend>(
157 &self,
158 rhs: &Tensor,
159 backend: &mut B,
160 ) -> tenferro_tensor::Result<Tensor>;
161 fn neg<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
163 fn abs<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
165 fn sign<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
167 fn conj<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
169 fn exp<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
171 fn log<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
173 fn sin<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
175 fn cos<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
177 fn tanh<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
179 fn sqrt<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
181 fn rsqrt<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
183 fn expm1<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
185 fn log1p<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<Tensor>;
187 fn compare<B: TensorBackend>(
189 &self,
190 rhs: &Tensor,
191 dir: CompareDir,
192 backend: &mut B,
193 ) -> tenferro_tensor::Result<Tensor>;
194 fn where_select<B: TensorBackend>(
196 &self,
197 on_true: &Tensor,
198 on_false: &Tensor,
199 backend: &mut B,
200 ) -> tenferro_tensor::Result<Tensor>;
201 fn clamp<B: TensorBackend>(
203 &self,
204 lower: &Tensor,
205 upper: &Tensor,
206 backend: &mut B,
207 ) -> tenferro_tensor::Result<Tensor>;
208 fn matmul<B: TensorBackend>(
210 &self,
211 rhs: &Tensor,
212 backend: &mut B,
213 ) -> tenferro_tensor::Result<Tensor>;
214 fn reshape<B: TensorBackend>(
216 &self,
217 shape: &[usize],
218 backend: &mut B,
219 ) -> tenferro_tensor::Result<Tensor>;
220 fn transpose<B: TensorBackend>(
222 &self,
223 perm: &[usize],
224 backend: &mut B,
225 ) -> tenferro_tensor::Result<Tensor>;
226 fn reduce_sum<B: TensorBackend>(
228 &self,
229 axes: &[usize],
230 backend: &mut B,
231 ) -> tenferro_tensor::Result<Tensor>;
232}
233
234pub trait TypedTensorOpsExt<T: TensorScalar> {
261 fn add<B: TensorBackend>(
263 &self,
264 rhs: &TypedTensor<T>,
265 backend: &mut B,
266 ) -> tenferro_tensor::Result<TypedTensor<T>>;
267 fn sub<B: TensorBackend>(
269 &self,
270 rhs: &TypedTensor<T>,
271 backend: &mut B,
272 ) -> tenferro_tensor::Result<TypedTensor<T>>;
273 fn mul<B: TensorBackend>(
275 &self,
276 rhs: &TypedTensor<T>,
277 backend: &mut B,
278 ) -> tenferro_tensor::Result<TypedTensor<T>>;
279 fn div<B: TensorBackend>(
281 &self,
282 rhs: &TypedTensor<T>,
283 backend: &mut B,
284 ) -> tenferro_tensor::Result<TypedTensor<T>>;
285 fn rem<B: TensorBackend>(
287 &self,
288 rhs: &TypedTensor<T>,
289 backend: &mut B,
290 ) -> tenferro_tensor::Result<TypedTensor<T>>;
291 fn pow<B: TensorBackend>(
293 &self,
294 rhs: &TypedTensor<T>,
295 backend: &mut B,
296 ) -> tenferro_tensor::Result<TypedTensor<T>>;
297 fn maximum<B: TensorBackend>(
299 &self,
300 rhs: &TypedTensor<T>,
301 backend: &mut B,
302 ) -> tenferro_tensor::Result<TypedTensor<T>>;
303 fn minimum<B: TensorBackend>(
305 &self,
306 rhs: &TypedTensor<T>,
307 backend: &mut B,
308 ) -> tenferro_tensor::Result<TypedTensor<T>>;
309 fn neg<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
311 fn abs<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
313 fn sign<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
315 fn conj<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
317 fn exp<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
319 fn log<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
321 fn sin<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
323 fn cos<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
325 fn tanh<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
327 fn sqrt<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
329 fn rsqrt<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
331 fn expm1<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
333 fn log1p<B: TensorBackend>(&self, backend: &mut B) -> tenferro_tensor::Result<TypedTensor<T>>;
335 fn compare<B: TensorBackend>(
337 &self,
338 rhs: &TypedTensor<T>,
339 dir: CompareDir,
340 backend: &mut B,
341 ) -> tenferro_tensor::Result<TypedTensor<bool>>;
342 fn clamp<B: TensorBackend>(
344 &self,
345 lower: &TypedTensor<T>,
346 upper: &TypedTensor<T>,
347 backend: &mut B,
348 ) -> tenferro_tensor::Result<TypedTensor<T>>;
349 fn matmul<B: TensorBackend>(
351 &self,
352 rhs: &TypedTensor<T>,
353 backend: &mut B,
354 ) -> tenferro_tensor::Result<TypedTensor<T>>;
355 fn reduce_sum<B: TensorBackend>(
357 &self,
358 axes: &[usize],
359 backend: &mut B,
360 ) -> tenferro_tensor::Result<TypedTensor<T>>;
361 fn reshape<B: TensorBackend>(
363 &self,
364 shape: &[usize],
365 backend: &mut B,
366 ) -> tenferro_tensor::Result<TypedTensor<T>>;
367 fn transpose<B: TensorBackend>(
369 &self,
370 perm: &[usize],
371 backend: &mut B,
372 ) -> tenferro_tensor::Result<TypedTensor<T>>;
373 fn broadcast_in_dim<B: TensorBackend>(
375 &self,
376 shape: &[usize],
377 dims: &[usize],
378 backend: &mut B,
379 ) -> tenferro_tensor::Result<TypedTensor<T>>;
380}
381
382pub trait TypedTensorMaskOpsExt {
391 fn where_select<T: TensorScalar, B: TensorBackend>(
393 &self,
394 on_true: &TypedTensor<T>,
395 on_false: &TypedTensor<T>,
396 backend: &mut B,
397 ) -> tenferro_tensor::Result<TypedTensor<T>>;
398}
399
400pub use traced::TracedTensor;