#![warn(clippy::all, clippy::pedantic)]
#![deny(rust_2018_idioms)]
#![warn(missing_debug_implementations)]
#![allow(
// The IR is laid out so helper structs inherit their parents' naming;
// unifying would break call-site ergonomics.
clippy::module_name_repetitions,
// # Errors / # Panics sections will be added during the rustdoc pass
// tracked as a follow-up issue, not gated on this lint baseline.
clippy::missing_errors_doc,
clippy::missing_panics_doc,
// Op-dispatch `match` blocks mirror the operator taxonomy 1:1; splitting
// reduces legibility.
clippy::too_many_lines,
// Trivial casts are pervasive (offsets, indices, byte reinterpretation
// around GPU buffers); the explicit cast is more readable than alternatives.
clippy::cast_possible_truncation,
clippy::cast_possible_wrap,
clippy::cast_sign_loss,
clippy::cast_precision_loss,
// `#[must_use]` on every getter is churn for marginal value; callers in
clippy::must_use_candidate,
clippy::manual_let_else,
clippy::items_after_statements,
clippy::too_many_arguments,
clippy::unreadable_literal,
clippy::return_self_not_must_use,
clippy::many_single_char_names,
clippy::similar_names,
clippy::doc_markdown,
clippy::cast_lossless,
clippy::redundant_closure_for_method_calls,
clippy::single_match_else,
clippy::needless_range_loop,
clippy::match_wildcard_for_single_variants,
)]
#![allow(missing_docs)]
pub mod autograd;
pub mod bool_tensor;
pub mod complex_tensor;
pub mod cpu_pool;
pub mod creation;
pub mod device;
pub mod dispatch;
mod display;
pub mod dtype;
pub mod dtype_dispatch;
pub mod einops;
pub mod einsum;
pub mod error;
pub mod fft;
pub mod flex_attention;
pub mod gpu_dispatch;
pub mod grad_fns;
mod inplace;
pub mod int_tensor;
pub mod linalg;
pub mod masked;
pub mod meta_propagate;
mod methods;
pub mod named_tensor;
pub mod nested;
pub mod numeric_cast;
pub mod ops;
mod ops_trait;
pub mod profiler_hook;
pub mod pruning;
pub mod quantize;
pub mod rng;
pub mod shape;
pub mod signal;
pub mod simd_reduce;
pub mod sparse;
pub mod special;
pub mod storage;
pub mod stride_tricks;
pub mod tensor;
pub mod vmap;
pub use autograd::anomaly::{
AnomalyMode, ForwardBacktrace, check_gradient_anomaly, detect_anomaly,
};
pub use autograd::hooks::HookHandle;
pub use autograd::{
AutocastCategory, AutocastDtype, autocast, autocast_dtype, autocast_guard, backward,
backward_with_grad, cond, enable_grad, fixed_point, grad, grad_norm, gradient_penalty, hessian,
is_autocast_debug, is_autocast_enabled, is_grad_enabled, jacobian, jvp, no_grad, scan,
set_autocast_debug, set_grad_enabled, validate_cond_branches, vjp,
};
pub use autograd::{
DualTensor, dual_add, dual_cos, dual_div, dual_exp, dual_log, dual_matmul, dual_mul, dual_neg,
dual_relu, dual_sigmoid, dual_sin, dual_sub, dual_tanh, jacfwd, jvp_exact,
};
pub use bool_tensor::BoolTensor;
pub use complex_tensor::ComplexTensor;
pub use creation::{
arange, eye, from_slice, from_vec, full, full_like, linspace, ones, ones_like, rand, rand_like,
rand_on_device, randn, randn_like, randn_on_device, scalar, tensor, zeros, zeros_like,
};
pub use device::Device;
pub use dtype::{DType, Element, Float};
pub use einops::{EinopsReduction, rearrange, rearrange_with, reduce, repeat};
pub use einsum::{einsum, einsum_differentiable};
pub use error::{FerrotorchError, FerrotorchResult};
pub use int_tensor::{IntElement, IntTensor};
pub use named_tensor::NamedTensor;
pub use dispatch::{DispatchKey, DispatchKeySet, Dispatcher, Kernel};
pub use fft::{
FftNorm, fft, fft_norm, fft2, fft2_norm, fftfreq, fftn, fftn_norm, fftshift, hfft, hfft_norm,
hfft2, hfft2_norm, hfftn, hfftn_norm, ifft, ifft_norm, ifft2, ifft2_norm, ifftn, ifftn_norm,
ifftshift, ihfft, ihfft_norm, ihfft2, ihfft2_norm, ihfftn, ihfftn_norm, irfft, irfft_norm,
irfft2, irfft2_norm, irfftn, irfftn_norm, rfft, rfft_norm, rfft2, rfft2_norm, rfftfreq, rfftn,
rfftn_norm,
};
pub use flex_attention::flex_attention;
pub use grad_fns::activation::{GeluApproximate, gelu, gelu_with, sigmoid, tanh};
pub use grad_fns::cumulative::{cummax, cummin, cumprod, cumsum, logcumsumexp};
pub use grad_fns::fft::{
fft_differentiable, fft_differentiable_norm, fft2_differentiable, fft2_differentiable_norm,
fftn_differentiable, fftn_differentiable_norm, hfft_differentiable, ifft_differentiable,
ifft_differentiable_norm, ifft2_differentiable, ifft2_differentiable_norm,
ifftn_differentiable, ifftn_differentiable_norm, ihfft_differentiable, irfft_differentiable,
irfft_differentiable_norm, irfftn_differentiable, irfftn_differentiable_norm,
rfft_differentiable, rfft_differentiable_norm, rfftn_differentiable, rfftn_differentiable_norm,
};
pub use grad_fns::quantize_grad::fake_quantize_differentiable;
pub use grad_fns::reduction::{
max_with_dim, mean_dim, median_with_dim, min_with_dim, nanmedian_with_dim, norm_with_dim,
sum_dim,
};
pub use grad_fns::shape::{
broadcast_tensors, broadcast_to, cat, column_stack, dstack, expand, expand_as, flip, fliplr,
flipud, hstack, moveaxis, movedim, repeat_interleave, rot90, swapaxes, swapdims, tensor_split,
tile, unbind, unflatten, vstack,
};
pub use grad_fns::transcendental::{
atan2, clamp, copysign, cos, exp, hypot, log, nextafter, signbit, sin,
};
pub use masked::{
MaskedTensor, masked_count, masked_equal, masked_invalid, masked_max, masked_mean, masked_min,
masked_sum, masked_where,
};
pub use methods::{chunk_t, contiguous_t, permute_t, split_t, view_t};
pub use nested::{NestedTensor, PackedNestedTensor, nested_scaled_dot_product_attention};
pub use ops::cumulative::CumExtremeResult;
pub use ops::indexing::{gather, masked_select, scatter, scatter_add, where_cond, where_cond_bt};
pub use ops::scatter::scatter_add_segments;
pub use ops::search::{
MeshIndexing, bucketize, histc, meshgrid, meshgrid_indexing, searchsorted, topk, unique,
unique_consecutive,
};
pub use ops::tensor_ops::{cdist, diag, diagflat, roll, tril, triu};
pub use pruning::{apply_2_4_mask, magnitude_prune, sparsity_ratio};
pub use quantize::{
FakeQuantize, HistogramObserver, MinMaxObserver, Observer, PerChannelMinMaxObserver, QParams,
QatLayer, QatModel, QuantDtype, QuantScheme, QuantizedTensor, cuda_rng, dequantize,
prepare_qat, quantize, quantize_named_tensors, quantized_matmul,
};
pub use rng::{Generator, manual_seed};
pub use shape::{broadcast_shapes, normalize_axis};
pub use sparse::{CooTensor, CscTensor, CsrTensor, SparseGrad, SparseTensor};
pub use sparse::{SemiStructuredSparseTensor, sparse_matmul_24};
pub use special::{
airy_ai, beta, digamma, entr, erf, erfc, erfinv, expm1, gammainc, gammaincc, gammaln_sign, i0,
i0e, i1, i1e, lgamma, log_beta, log1p, modified_bessel_k0, modified_bessel_k1, multigammaln,
mvlgamma, ndtr, ndtri, scaled_modified_bessel_k0, scaled_modified_bessel_k1, sinc,
spherical_bessel_j0, xlogy, zeta,
};
pub use storage::{StorageBuffer, TensorStorage};
pub use stride_tricks::{AsStridedBackward, as_strided, as_strided_copy, as_strided_scatter};
pub use tensor::{GradFn, MemoryFormat, Tensor, TensorId};
pub use vmap::{select, stack, vmap, vmap2};