#![cfg_attr(not(feature = "std"), no_std)]
#![allow(clippy::result_large_err)]
#![allow(clippy::type_complexity)]
#![allow(clippy::missing_safety_doc)]
#![allow(unexpected_cfgs)]
#[cfg(not(feature = "std"))]
extern crate alloc;
pub mod alloc_optimizer;
pub mod api_compat;
pub mod backend_detection;
pub mod cache_oblivious; pub mod chunking;
pub mod compression;
pub mod debug_validation; pub mod device;
pub mod distributed; pub mod dtype;
pub mod error;
pub mod error_codes; pub mod error_recovery;
pub mod examples;
pub mod federated;
pub mod ffi;
pub mod gpu_shape_ops; pub mod hdf5_metadata;
pub mod health;
pub mod ieee754_compliance;
pub mod inspector;
pub mod interop;
pub mod jax_transforms; pub mod layout_optimizer; pub mod memory_debug;
pub mod memory_monitor;
pub mod memory_visualization; pub mod mlir_integration; pub mod neuromorphic; pub mod op_trace;
pub mod perf_metrics;
pub mod perf_monitor; pub mod perf_regression;
pub mod profiling;
pub mod runtime_config;
pub mod scirs2_bridge;
pub mod shape;
pub mod shape_debug;
pub mod shape_graph; pub mod shape_utils; pub mod shape_validation;
pub mod simd_arm;
pub mod sparse;
pub mod storage;
pub mod symbolic_shape;
pub mod telemetry;
pub mod tensor_expr; pub mod tensor_network; pub mod type_level_ad; pub mod type_level_shapes; pub mod webgpu; pub mod xla_integration;
#[cfg(feature = "std")]
pub use alloc_optimizer::{
acquire_shape_buffer, get_allocation_stats, release_shape_buffer, reset_allocation_stats,
track_allocation, BufferPool, ScopedBuffer,
};
pub use alloc_optimizer::{
AllocationStats, CowShape, OptimizationRecommendations, StackShape, MAX_STACK_DIMS,
};
pub use api_compat::{
clear_deprecation_counts, configure_deprecation_warnings, deprecation_warning,
deprecation_warning_inline, get_all_deprecations, get_deprecation_info, get_deprecation_stats,
register_deprecation, DeprecationInfo, DeprecationReport, DeprecationSeverity, Version,
TORSH_VERSION,
};
pub use backend_detection::{
BackendFeatureDetector, BackendSummary, DeviceInfo, PerformanceTier, RuntimeFeatures,
WorkloadType,
};
pub use cache_oblivious::{
CacheObliviousAnalyzer, CacheObliviousLayout, CacheObliviousMatMul, CacheObliviousReshape,
CacheObliviousTranspose,
};
pub use chunking::{ChunkingRecommendation, ChunkingStrategy, ChunkingUtils, TensorChunkConfig};
pub use compression::{
BitmapEncoded, CompressionAnalysis, CompressionEncoding, CompressionSelector, DeltaEncoded,
MagnitudeThresholdCalculator, PruningMetadata, PruningStrategy, RunLengthEncoded,
};
pub use debug_validation::{
validate_allocation_size, validate_broadcast_compatible, validate_dtype_compatibility,
validate_dtype_supports_operation, validate_index_bounds, validate_shape_consistency,
validate_shape_valid, validate_strides,
};
pub use device::{
AllToAllTopology, CrossDeviceOp, Device, DeviceCapabilities, DeviceGroup, DeviceHandle,
DeviceTopology, DeviceType, PeerToPeerOps, PhantomCpu, PhantomCuda, PhantomDevice,
PhantomMetal, PhantomWgpu, RingTopology, TransferCompatible, TreeTopology, TypedDeviceAffinity,
};
pub use distributed::{
CheckpointMetadata, CollectiveOp as DistributedCollectiveOp, CommBackend,
CommunicationDescriptor, DeviceGroup as DistributedDeviceGroup,
DeviceId as DistributedDeviceId, DeviceTopology as DistributedDeviceTopology,
DistributedTensor, ReduceOp as DistributedReduceOp, Shard, ShardingStrategy,
};
pub use dtype::{
AutoPromote, Complex32, Complex64, ComplexElement, DType, FloatElement, QInt8, QUInt8,
TensorElement, TypePromotion,
};
pub use error::{ErrorLocation, Result, TorshError};
pub use error_codes::{ErrorCategory, ErrorCodeMapper, ErrorDetails, StandardErrorCode};
pub use federated::{
AggregationStrategy, ClientId, ClientSelectionStrategy, ClientSelector, ClientUpdate,
CompressionTechnique, CoordinatorStatistics, DataDistribution, FairnessMetrics,
FederatedClient, FederatedCoordinator, PrivacyParameters, TrainingRound,
};
pub use ffi::{TorshDType, TorshDevice, TorshErrorCode, TorshShape};
#[cfg(feature = "std")]
pub use gpu_shape_ops::GpuShapeAccelerator;
pub use gpu_shape_ops::{AcceleratorConfig, AcceleratorStats};
pub use hdf5_metadata::{
BloscCompressor, BloscShuffle, Hdf5AttributeValue, Hdf5ByteOrder, Hdf5Chunking,
Hdf5DatasetMetadata, Hdf5Datatype, Hdf5DimensionScale, Hdf5FileMetadata, Hdf5Filter,
Hdf5GroupMetadata, Hdf5TypeClass,
};
#[cfg(feature = "std")]
pub use health::{health_checker, init_health_checker, HealthChecker};
pub use health::{HealthCheckConfig, HealthCheckResult, HealthReport, HealthStatus};
pub use ieee754_compliance::{
is_ieee754_compliant, validate_ieee754_operation, ComplianceChecker, Exception, IEEE754Float,
RoundingMode, SpecialValue,
};
pub use interop::{
ArrowDataType, ArrowTypeInfo, ConversionUtils, FromExternal, FromExternalZeroCopy, InteropDocs,
NumpyArrayInfo, OnnxDataType, OnnxTensorInfo, ToExternal, ToExternalZeroCopy,
};
pub use jax_transforms::{
CacheStats, ComposedTransform, GradTransform, JitTransform, Jittable, Parallelizable,
PmapTransform, TransformId, TransformMetadata, TransformRegistry, TransformType, Vectorizable,
VmapTransform,
};
pub use layout_optimizer::{
AccessPattern, AccessStatistics, AccessTracker, LayoutOptimizer, LayoutRecommendation,
TransformationCost,
};
pub use memory_debug::{
detect_memory_leaks, generate_memory_report, get_memory_stats, init_memory_debugger,
init_memory_debugger_with_config, record_allocation, record_deallocation, AllocationInfo,
AllocationPattern, DebuggingAllocator, MemoryDebugConfig, MemoryDebugger, MemoryLeak,
MemoryReport, MemoryStats, SystemDebuggingAllocator,
};
pub use memory_monitor::{
AllocationStrategy, MemoryMonitorConfig, MemoryPressure, MemoryPressureThresholds,
SystemMemoryMonitor, SystemMemoryStats,
};
pub use memory_visualization::{AllocationSummary, AllocationTimeline, MemoryMap, SizeHistogram};
pub use mlir_integration::{
MlirAttributes, MlirBuilder, MlirDialect, MlirModule, MlirOp, MlirOpcode, MlirPass, MlirType,
MlirValue,
};
pub use neuromorphic::{
CoreUtilization, EventDrivenSimulation, IzhikevichNeuron, LIFNeuron, NeuromorphicCore,
RateDecoder, RateEncoder, STDPSynapse, SpikeEncoding, SpikeEvent, SpikeTrain,
};
pub use op_trace::{
trace_operation, trace_operation_result, OpTracer, OperationTrace, TensorMetadata,
TraceBuilder, TraceConfig, TraceId, TraceStatistics,
};
pub use perf_metrics::{
get_metrics_tracker, init_metrics_tracker, AdvancedMetricsConfig, AdvancedMetricsTracker,
CacheEfficiencyMetrics, MemoryBandwidthMetrics, ParallelEfficiencyMetrics, RegressionDetection,
SimdUtilizationMetrics,
};
#[cfg(feature = "std")]
pub use perf_regression::BenchmarkRunner;
pub use perf_regression::{
PerfBaseline, PerfComparison, PerfMeasurement, PerfStatistics, RegressionReport,
RegressionSeverity, RegressionTracker,
};
pub use profiling::{
get_profiler, init_profiler, profile_closure, OperationContext, OperationHandle,
OperationRecord, OperationStats, OperationType, PerformanceBottleneck, PerformanceProfiler,
ProfilerConfig,
};
pub use runtime_config::{
ConfigPreset, DebugLevel, MemoryTrackingConfig, MonitoringScope, OperationConfig,
RuntimeConfig, RuntimeConfigSnapshot, ValidationLevel,
};
#[cfg(feature = "std")]
pub use scirs2_bridge::SharedBufferManager;
pub use scirs2_bridge::{
ErrorMapper, SciRS2Bridge, TransferMetadata, TransferStrategy, ZeroCopyView,
};
pub use shape::Shape;
pub use shape_graph::{
InferenceResult, NodeId, ShapeGraph, ShapeInferenceError, ShapeNode, ShapeOp,
};
pub use shape_utils::{
are_compatible, batch_shape, expand_to_rank, flatten_from, image_shape, matrix_shape, numel,
permute, scalar_shape, sequence_shape, squeeze, unsqueeze_at, vector_shape,
};
pub use simd_arm::ArmSimdOps;
pub use sparse::{
CompressionStats, CooIndices, CooStorage, CsrIndices, CsrStorage, SparseFormat, SparseMetadata,
SparseStorage,
};
pub use storage::{
allocate_pooled, clear_pooled_memory, deallocate_pooled, pooled_memory_stats, MemoryFormat,
MemoryPool, PoolStats, SharedStorage, Storage, StorageView,
};
pub use symbolic_shape::{
DimExpression, ShapeInference, SymbolId, SymbolRegistry, SymbolicDim, SymbolicShape,
};
#[cfg(feature = "std")]
pub use telemetry::{init_telemetry, telemetry, Span, SpanEvent, SpanMetrics, TelemetrySystem};
pub use telemetry::{ErrorCode, LogEvent, LogLevel, TelemetryConfig};
pub use tensor_expr::{
math::{AbsExpr, MathExpr, SqrExpr},
AddOp, ArrayExpr, BinaryExpr, DivOp, ExprBuilder, MapExpr, MulOp, NegExpr, ScalarExpr, SubOp,
TensorExpr,
};
pub use tensor_network::{
EdgeId, IndexDim, MatrixProductState, NodeId as TensorNodeId, ProjectedEntangledPairState,
TensorEdge, TensorNetwork, TensorNetworkError, TensorNode,
};
pub use type_level_ad::{
stop_gradient, ADComputation, ADMode, BackwardOp, BinaryOp, ChainRule, CheckpointedOp,
ComputeGradReq, ComputeHessian, ComputeJacobian, CustomGradient, ForwardMode, GradOp,
GradState, Gradient, GradientAccumulator, GradientClipper, Hessian, HigherOrderDiff, Jacobian,
NoGrad, RequiresGrad, ReverseMode, TypedTensor, UnaryGradOp,
};
pub use type_level_shapes::{
Assert, AssertShapeEq, Batched, BroadcastCompatible, Concat, Conv2D, Dim, DimList, Flatten,
ImageBatchNCHW, ImageBatchNHWC, MatMul, Matrix, Pool2D, Reshape, Reverse, Scalar, Squeeze,
Tensor, Tensor3D, Tensor4D, Transpose2D, Unsqueeze, Vector,
};
pub use webgpu::{
BindGroupEntry, BindGroupLayout, BufferUsage, ComputePipeline, GPUBuffer, PipelineCache,
ResourceType, ShaderError, ShaderStage, WGSLShader, WorkgroupOptimizer,
};
pub use xla_integration::{
AlgebraicSimplificationPass, CommonSubexpressionEliminationPass, ConstantFoldingPass,
CopyEliminationPass, DeadCodeEliminationPass, HloOpcode, LayoutOptimizationPass,
MemoryAllocationOptimizationPass, OperationFusionPass, ParallelizationAnalysisPass,
PassStatistics, XlaBuilder, XlaComputation, XlaConfig, XlaMetadata, XlaNode, XlaNodeId,
XlaPassManager, XlaTarget,
};
pub mod numeric {
#[cfg(feature = "std")]
pub use scirs2_core::numeric::*;
}
pub mod random {
#[cfg(feature = "std")]
pub use scirs2_core::random::*;
}
pub mod ndarray {
#[cfg(feature = "std")]
pub use scirs2_core::ndarray::*;
}
#[cfg(feature = "parallel")]
pub mod parallel {
pub use scirs2_core::parallel_ops::*;
}
#[cfg(feature = "simd")]
pub mod simd {
pub use scirs2_core::simd_ops::*;
pub use scirs2_core::simd_aligned::{AlignedVec, SIMD_ALIGNMENT};
pub mod prelude {
pub use scirs2_core::simd_aligned::{AlignedVec, SIMD_ALIGNMENT};
pub use scirs2_core::simd_ops::SimdUnifiedOps;
}
}
#[cfg(feature = "gpu")]
pub mod gpu {
#[cfg(scirs2_gpu_available)]
pub use scirs2_core::gpu::*;
#[cfg(not(scirs2_gpu_available))]
pub mod fallback {
#[allow(unused_imports)]
use super::*;
pub fn is_gpu_available() -> bool {
false
}
#[derive(Debug, Clone)]
pub struct GpuError {
message: String,
}
impl GpuError {
pub fn new(message: impl Into<String>) -> Self {
Self {
message: message.into(),
}
}
pub fn unavailable() -> Self {
Self::new("GPU support not available in this build")
}
}
impl std::fmt::Display for GpuError {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(f, "GPU Error: {}", self.message)
}
}
impl std::error::Error for GpuError {}
#[derive(Debug, Clone)]
pub struct GpuDevice {
device_id: usize,
}
impl GpuDevice {
pub fn new(_device_id: usize) -> Result<Self, GpuError> {
Err(GpuError::unavailable())
}
pub fn device_id(&self) -> usize {
self.device_id
}
}
}
#[cfg(not(scirs2_gpu_available))]
pub use fallback::*;
pub mod info {
pub fn status() -> &'static str {
#[cfg(scirs2_gpu_available)]
{
"GPU support enabled via scirs2-core with multi-backend support (CUDA/Metal/WebGPU/ROCm/OpenCL)"
}
#[cfg(not(scirs2_gpu_available))]
{
"GPU support requires scirs2-core compiled with 'gpu' feature. \
Current build does not have GPU support enabled. \
This is expected in development/testing environments. \
\
To enable GPU support:\n\
1. Ensure scirs2-core is compiled with 'gpu' feature\n\
2. Add appropriate backend features (cuda, metal, wgpu, rocm, opencl)\n\
3. Rebuild with: cargo build --features gpu"
}
}
pub fn is_enabled() -> bool {
cfg!(scirs2_gpu_available)
}
pub fn available_backends() -> &'static [&'static str] {
#[cfg(scirs2_gpu_available)]
{
&["CUDA", "Metal", "WebGPU"]
}
#[cfg(not(scirs2_gpu_available))]
{
&[]
}
}
}
pub fn is_gpu_available() -> bool {
info::is_enabled()
}
}
pub const VERSION: &str = env!("CARGO_PKG_VERSION");
pub const VERSION_MAJOR: u32 = 0;
pub const VERSION_MINOR: u32 = 1;
pub const VERSION_PATCH: u32 = 0;
pub mod prelude {
pub use crate::device::{Device, DeviceCapabilities, DeviceType};
pub use crate::dtype::{DType, TensorElement};
pub use crate::error::{Result, TorshError};
pub use crate::shape::Shape;
#[cfg(feature = "std")]
pub use crate::ndarray;
#[cfg(feature = "std")]
pub use crate::numeric;
#[cfg(feature = "std")]
pub use crate::random;
#[cfg(feature = "parallel")]
pub use crate::parallel;
#[cfg(feature = "simd")]
pub use crate::simd;
#[cfg(feature = "gpu")]
pub use crate::gpu;
#[cfg(feature = "std")]
pub use crate::profiling;
}