Expand description
ยงSciRS2 Core - Foundation for Scientific Computing in Rust
scirs2-core is the foundational crate for the SciRS2 scientific computing ecosystem, providing essential utilities, abstractions, and optimizations used by all SciRS2 modules.
ยง๐ฏ Design Philosophy
- Zero-Cost Abstractions: Performance without compromising safety
- Layered Architecture: Clear separation between interface and implementation
- Policy Compliance: Enforce SciRS2 POLICY - only scirs2-core uses external dependencies directly
- Production Ready: Enterprise-grade error handling, diagnostics, and stability guarantees
ยง๐ Key Features
ยงPerformance Acceleration
- SIMD Operations: CPU vector instructions (SSE, AVX, NEON) for array operations
- Parallel Processing: Multi-threaded execution with intelligent load balancing
- GPU Acceleration: Unified interface for CUDA, Metal, OpenCL, and WebGPU
- Memory Efficiency: Zero-copy views, memory-mapped arrays, adaptive chunking
ยงCore Utilities
- Error Handling: ML-inspired diagnostics with recovery strategies
- Validation: Input checking with informative error messages
- Caching: Memoization and result caching for expensive computations
- Profiling: Performance monitoring and bottleneck detection
ยงScientific Infrastructure
- Constants: Physical and mathematical constants (via
constantsmodule) - Random Number Generation: Consistent RNG interface across the ecosystem
- Complex Numbers: Type-safe complex arithmetic
- Array Protocol: Unified array interface for interoperability
ยง๐ฆ Module Overview
ยงPerformance & Optimization
| Module | Description |
|---|---|
simd_ops | SIMD-accelerated operations with platform detection |
[parallel_ops] | Parallel processing primitives |
[gpu] | GPU acceleration abstractions |
[memory] | Memory management (buffer pools, zero-copy views) |
[memory_efficient] | Memory-mapped arrays and lazy evaluation |
ยงError Handling & Diagnostics
| Module | Description |
|---|---|
[error] | Error types and traits |
validation | Input validation utilities |
[logging] | Structured logging for diagnostics |
[profiling] | Performance profiling tools |
ยงScientific Computing Basics
| Module | Description |
|---|---|
ndarray | Unified ndarray interface (re-exports with SciRS2 extensions) |
numeric | Generic numerical operations |
[random] | Random number generation |
constants | Mathematical and physical constants |
ยงInfrastructure
| Module | Description |
|---|---|
config | Configuration management |
[cache] | Result caching and memoization |
io | I/O utilities |
[cloud] | Cloud storage integration (S3, GCS, Azure) |
ยง๐ Quick Start
ยงInstallation
[dependencies]
scirs2-core = { version = "0.1.0-rc.2", features = ["simd", "parallel"] }ยงSIMD Operations
use scirs2_core::simd_ops::SimdUnifiedOps;
use ndarray::array;
// Automatic SIMD acceleration based on CPU capabilities
let a = array![1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0];
let b = array![8.0, 7.0, 6.0, 5.0, 4.0, 3.0, 2.0, 1.0];
// SIMD-accelerated element-wise addition
let result = f64::simd_add(&a.view(), &b.view());ยงParallel Processing
use scirs2_core::parallel_ops::*;
// Parallel iteration over chunks
let data = vec![1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
par_chunks(&data, 3).for_each(|chunk| {
// Process each chunk in parallel
let sum: i32 = chunk.iter().sum();
println!("Chunk sum: {}", sum);
});ยงInput Validation
use scirs2_core::validation::*;
use scirs2_core::error::CoreResult;
use ndarray::Array2;
fn process_matrix(data: &Array2<f64>, k: usize) -> CoreResult<()> {
// Validate inputs
check_positive(k, "k")?;
checkarray_finite(data, "data")?;
checkshape(data, &[2, 3], "data")?;
// Process data...
Ok(())
}ยงConstants
use scirs2_core::constants::{math, physical};
// Mathematical constants
let pi = math::PI;
let e = math::E;
// Physical constants
let c = physical::SPEED_OF_LIGHT;
let h = physical::PLANCK;ยงRandom Number Generation
use scirs2_core::random::*;
use rand::Rng;
// Standard distributions
let mut rng = rand::rng();
let normal = Normal::new(0.0, 1.0)?;
let samples: Vec<f64> = (0..1000).map(|_| normal.sample(&mut rng)).collect();
let uniform = Uniform::new(0.0, 1.0)?;
let samples: Vec<f64> = (0..1000).map(|_| uniform.sample(&mut rng)).collect();ยงMemory-Efficient Operations
use scirs2_core::memory_efficient::*;
use std::path::Path;
use ndarray::Array2;
// Memory-mapped array for large datasets
let data = Array2::<f64>::zeros((1000, 1000));
let path = Path::new("/path/to/large_file.dat");
let mmap = create_mmap(&data, path, AccessMode::ReadWrite, 0)?;
// Chunked operations for out-of-core processing
let result = chunk_wise_op(&data, |chunk| {
chunk.mapv(|x| x * 2.0)
}, ChunkingStrategy::Fixed(10000))?;ยง๐๏ธ Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ SciRS2 Ecosystem Modules โ
โ (linalg, stats, neural, vision, etc.) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ scirs2-core (This Crate) โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ High-Level Abstractions โ โ
โ โ - SIMD Operations โ โ
โ โ - Parallel Processing โ โ
โ โ - GPU Acceleration โ โ
โ โ - Error Handling โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โ โ Core Utilities โ โ
โ โ - Array Protocol โ โ
โ โ - Validation โ โ
โ โ - Memory Management โ โ
โ โ - Configuration โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ External Dependencies โ
โ (ndarray, rayon, BLAS, etc.) โ
โ โ ๏ธ Only scirs2-core depends directly โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโยง๐จ Feature Flags
ยงPerformance Features
simd- SIMD acceleration (SSE, AVX, NEON)parallel- Multi-threaded execution via Rayongpu- GPU acceleration (CUDA, Metal, OpenCL)
ยงMemory Management
memory_management- Advanced memory management (buffer pools, tracking)memory_efficient- Memory-mapped arrays and lazy evaluationmemory_metrics- Memory usage tracking and profiling
ยงScientific Computing
array- Scientific array types (MaskedArray, RecordArray)random- Random number generationlinalg- Linear algebra with BLAS/LAPACK
ยงDevelopment & Debugging
validation- Input validation (recommended for development)logging- Structured loggingprofiling- Performance profilingtesting- Testing utilities
ยงAdvanced Features
cloud- Cloud storage (S3, GCS, Azure)jit- Just-in-time compilation with LLVMml_pipeline- ML pipeline integration
ยงConvenience
default- Commonly used features (parallel, validation)all- All features except backend-specific ones
ยง๐ SciRS2 Policy Compliance
Important: scirs2-core is the only crate in the SciRS2 ecosystem that directly
depends on external crates like ndarray, rand, rayon, etc.
All other SciRS2 crates must use abstractions provided by scirs2-core:
โ
// โ
CORRECT: Use scirs2-core abstractions
use scirs2_core::ndarray::Array2;
use scirs2_core::random::Normal;
use scirs2_core::parallel_ops::*;
// โ WRONG: Don't import external deps directly in other crates
// use ndarray::Array2; // NO!
// use rand_distr::Normal; // NO!
// use rayon::prelude::*; // NO!This policy ensures:
- Consistent APIs across the ecosystem
- Centralized version management
- Easy addition of SciRS2-specific extensions
- Better compile times through reduced duplication
ยง๐ Performance
scirs2-core provides multiple optimization levels:
| Feature | Speedup | Use Case |
|---|---|---|
| SIMD | 2-8x | Array operations, numerical computations |
| Parallel | 2-16x | Large datasets, independent operations |
| GPU | 10-100x | Massive parallelism, deep learning |
| Memory-mapped | โ | Out-of-core processing, datasets larger than RAM |
ยงPlatform Detection
Automatic CPU feature detection for optimal SIMD usage:
use scirs2_core::simd_ops::PlatformCapabilities;
let caps = PlatformCapabilities::detect();
println!("SIMD available: {}", caps.simd_available);
println!("AVX2 available: {}", caps.avx2_available);
println!("GPU available: {}", caps.gpu_available);ยง๐ Integration
scirs2-core integrates seamlessly with the Rust ecosystem:
- ndarray: Core array operations
- num-traits: Generic numeric operations
- rayon: Parallel processing
- BLAS/LAPACK: Optimized linear algebra
ยง๐ Version
Current version: 0.1.0-rc.2 (Released October 19, 2025)
ยง๐ Examples
See the examples directory for more detailed usage examples.
Re-exportsยง
pub use crate::config::production as config_production;pub use crate::config::get_config;pub use crate::config::get_config_value;pub use crate::config::set_config_value;pub use crate::config::set_global_config;pub use crate::config::Config;pub use crate::config::ConfigValue;pub use crate::constants::math;pub use crate::constants::physical;pub use crate::constants::prefixes;pub use crate::array::is_masked;pub use crate::array::mask_array;pub use crate::array::masked_equal;pub use crate::array::masked_greater;pub use crate::array::masked_inside;pub use crate::array::masked_invalid;pub use crate::array::masked_less;pub use crate::array::masked_outside;pub use crate::array::masked_where;pub use crate::array::record_array_from_typed_arrays;pub use crate::array::record_array_fromrecords;pub use crate::array::ArrayError;pub use crate::array::FieldValue;pub use crate::array::MaskedArray;pub use crate::array::Record;pub use crate::array::RecordArray;pub use crate::array::NOMASK;pub use crate::metrics::global_healthmonitor;pub use crate::metrics::global_metrics_registry;pub use crate::metrics::Counter;pub use crate::metrics::Gauge;pub use crate::metrics::HealthCheck;pub use crate::metrics::HealthMonitor;pub use crate::metrics::HealthStatus;pub use crate::metrics::Histogram;pub use crate::metrics::MetricPoint;pub use crate::metrics::MetricType;pub use crate::metrics::MetricValue;pub use crate::metrics::Timer;pub use crate::resource::get_available_memory;pub use crate::resource::get_performance_tier;pub use crate::resource::get_recommended_chunk_size;pub use crate::resource::get_recommended_thread_count;pub use crate::resource::get_system_resources;pub use crate::resource::get_total_memory;pub use crate::resource::is_gpu_available;pub use crate::resource::is_simd_supported;pub use crate::resource::DiscoveryConfig;pub use crate::resource::PerformanceTier;pub use crate::resource::ResourceDiscovery;pub use crate::resource::SystemResources;pub use crate::units::convert;pub use crate::units::global_unit_registry;pub use crate::units::unit_value;pub use crate::units::Dimension;pub use crate::units::UnitDefinition;pub use crate::units::UnitRegistry;pub use crate::units::UnitSystem;pub use crate::units::UnitValue;pub use crate::validation::production as validation_production;pub use crate::validation::check_finite;pub use crate::validation::check_in_bounds;pub use crate::validation::check_positive;pub use crate::validation::checkarray_finite;pub use crate::validation::checkshape;pub use crate::observability::audit;pub use crate::observability::tracing;pub use crate::stability::global_stability_manager;pub use crate::stability::ApiContract;pub use crate::stability::BreakingChange;pub use crate::stability::BreakingChangeType;pub use crate::stability::ConcurrencyContract;pub use crate::stability::MemoryContract;pub use crate::stability::NumericalContract;pub use crate::stability::PerformanceContract;pub use crate::stability::StabilityGuaranteeManager;pub use crate::stability::StabilityLevel;pub use crate::stability::UsageContext;pub use crate::versioning::compatibility;pub use crate::versioning::deprecation;pub use crate::versioning::migration;pub use crate::versioning::negotiation;pub use crate::versioning::semantic;pub use crate::versioning::ApiVersion;pub use crate::versioning::CompatibilityLevel;pub use crate::versioning::SupportStatus;pub use crate::versioning::Version;pub use crate::versioning::VersionManager;pub use crate::neural_architecture_search::ActivationType;pub use crate::neural_architecture_search::Architecture;pub use crate::neural_architecture_search::ArchitecturePerformance;pub use crate::neural_architecture_search::ConnectionType;pub use crate::neural_architecture_search::HardwareConstraints;pub use crate::neural_architecture_search::LayerType;pub use crate::neural_architecture_search::NASStrategy;pub use crate::neural_architecture_search::NeuralArchitectureSearch;pub use crate::neural_architecture_search::OptimizationObjectives;pub use crate::neural_architecture_search::OptimizerType;pub use crate::neural_architecture_search::SearchResults;pub use crate::neural_architecture_search::SearchSpace;pub use crate::quantum_optimization::OptimizationResult;pub use crate::quantum_optimization::QuantumOptimizer;pub use crate::quantum_optimization::QuantumParameters;pub use crate::quantum_optimization::QuantumState;pub use crate::quantum_optimization::QuantumStrategy;pub use crate::error::*;pub use crate::io::*;pub use crate::numeric::*;pub use crate::utils::*;
Modulesยง
- advanced_
distributed_ computing - Advanced Distributed Computing Framework
- advanced_
ecosystem_ integration - Advanced Mode Ecosystem Integration (Refactored)
- advanced_
jit_ compilation - Advanced JIT Compilation Framework
- advanced_
tensor_ cores - Advanced Tensor Cores and Automatic Kernel Tuning Framework
- api_
freeze - API freeze module for scirs2-core 1.0
- apiversioning
- API versioning system for backward compatibility
- array
- Array module that provides enhanced array types and utilities
- array_
protocol - Implementation of Array Protocol (similar to
NumPyโs__array_function__protocol) - chunking
- Advanced chunking strategies for optimal parallel performance
- config
- Configuration system for
SciRS2 - constants
- Physical and Mathematical Constants
- distributed
- Production-grade distributed computing infrastructure
- ecosystem
- Ecosystem management and validation for SciRS2
- error
- Advanced error handling and recovery system for
SciRS2 - error_
templates - Standardized error message templates for consistent error reporting
- io
- I/O utilities for
SciRS2 - metrics
- Production-Level Metrics Collection and Monitoring
- ndarray
- Complete ndarray re-export for SciRS2 ecosystem
- ndarray_
ext - Extended ndarray operations for scientific computing
- neural_
architecture_ search - Self-Optimizing Neural Architecture Search (NAS) System
- numeric
- Numeric traits and utilities for SciRS2
- observability
- Observability Infrastructure
- performance
- Performance optimization and monitoring for SciRS2 Core
- performance_
optimization - Performance optimization utilities for critical paths
- prelude
- Convenient re-exports of commonly used items
- quantum_
optimization - Quantum-Inspired Optimization Algorithms for SciRS2
- resource
- Resource Discovery and Hardware Detection
- safe_
ops - Safe mathematical operations that handle edge cases and validate results
- simd_
aligned - Memory-aligned SIMD operations for optimal performance
- simd_
ops - Unified SIMD operations abstraction layer
- stability
- Long-term stability guarantees and API contracts for SciRS2
- units
- Unit Conversion System
- utils
- Utility functions for numerical operations
- validation
- Validation utilities for
SciRS2 - versioning
- API Versioning Infrastructure
Macrosยง
- array
- Re-export essential macros that were missing in some modules
Create an
Arraywith one, two, three, four, five, or six dimensions. - array_
function_ def - Convenience macro for defining array protocol functions.
- array_
function_ dispatch - array_
legacy - Create an
Arraywith one, two, three, four, five, or six dimensions. - batch_
operation - Macro for batch error handling
- computationerror
- Macro to create a computation error with location information
- config_
get - Configuration convenience macros Get a configuration value with type conversion
- config_
set - Set a configuration value
- convert_
units - Macro for convenient unit conversions
- counter
- Convenience macros for metrics Create and register a counter metric
- deprecated_
in - Macro to mark deprecated APIs
- diagnosticerror
- Macro to create a diagnostic error with automatic context
- dimensionerror
- Macro to create a dimension error with location information
- domainerror
- Macro to create a domain error with location information
- enhanced_
error - Macro to create an enhanced error with automatic severity detection
- error_
context - Macro to create a new error context with location information
- feature_
enabled - Check if a feature is enabled
- gauge
- Create and register a gauge metric
- histogram
- Create and register a histogram metric
- require_
api - Macro to check API availability at compile time
- s
- Re-export essential macros that were missing in some modules Slice argument constructor.
- since_
version - Macro to mark APIs with version information
- timer
- Create and register a timer metric
- trace_
fn - Convenience macro for creating traced functions
- track_
precision - Convenience macros for precision tracking
- update_
precision - valueerror
- Macro to create a value error with location information
- with_
retry - Macro for error recovery with retry logic
Structsยง
- Axis
- An axis index.
- ChaCha8
Rng - A cryptographically secure random number generator that uses the ChaCha algorithm.
- ChaCha12
Rng - A cryptographically secure random number generator that uses the ChaCha algorithm.
- ChaCha20
Rng - A cryptographically secure random number generator that uses the ChaCha algorithm.
- Complex
- A complex number in Cartesian form.
Functionsยง
- Ix1
- Create a one-dimensional index
- Ix2
- Create a two-dimensional index
- IxDyn
- Create a dynamic-dimensional index
- _version
SciRS2core version information- arr1
- Re-export essential macros that were missing in some modules
Create a one-dimensional array with elements from
xs. - arr2
- Re-export essential macros that were missing in some modules
Create a two-dimensional array with elements from
xs.
Type Aliasesยง
- Array
- An array that owns its data uniquely.
- Array1
- one-dimensional array
- Array2
- two-dimensional array
- ArrayD
- dynamic-dimensional array
- Array
View - A read-only array view.
- Array
View1 - one-dimensional array view
- Array
View2 - two-dimensional array view
- Array
View Mut - A read-write array view.
- Complex32
- Alias for a
Complex<f32> - Complex64
- Alias for a
Complex<f64> - Ix1
- one-dimensional
- Ix2
- two-dimensional
- IxDyn
- dynamic-dimensional