Skip to main content

sklears_utils/
lib.rs

1//! Utility functions and helpers for sklears
2//!
3//! This crate provides common utilities used across the sklears ecosystem,
4//! including data validation, array manipulation, random number generation,
5//! and dataset creation utilities.
6//!
7//! # Examples
8//!
9//! ```rust
10//! use sklears_utils::validation::check_consistent_length;
11//! use sklears_utils::random::set_random_state;
12//! use scirs2_core::ndarray::array;
13//!
14//! // Validation
15//! let x = array![1, 2, 3];
16//! let y = array![4, 5, 6];
17//! assert!(check_consistent_length(&[&x, &y]).is_ok());
18//!
19//! // Random state
20//! set_random_state(42);
21//! ```
22
23pub mod api_integration;
24// Temporarily commented out due to missing submodules
25// pub mod architecture;
26pub mod array_utils;
27pub mod cloud_storage;
28pub mod config;
29pub mod cross_validation;
30pub mod data_generation;
31pub mod data_pipeline;
32pub mod data_structures;
33pub mod database;
34pub mod debug;
35pub mod distributed_computing;
36pub mod ensemble;
37pub mod environment;
38pub mod error_handling;
39pub mod external_integration;
40pub mod feature_engineering;
41pub mod file_io;
42pub mod gpu_computing;
43pub mod linear_algebra;
44pub mod logging;
45pub mod math_utils;
46pub mod memory;
47pub mod metrics;
48pub mod multiclass;
49pub mod optimization;
50pub mod parallel;
51pub mod performance;
52pub mod performance_regression;
53pub mod preprocessing;
54pub mod probabilistic;
55pub mod profile_guided_optimization;
56pub mod r_integration;
57pub mod random;
58pub mod simd;
59pub mod spatial;
60pub mod statistical;
61pub mod stats;
62pub mod text_processing;
63pub mod time_series;
64pub mod type_safety;
65pub mod validation;
66pub mod visualization;
67
68#[allow(non_snake_case)]
69#[cfg(test)]
70mod property_tests;
71
72// Re-export specific functions to avoid conflicts
73pub use api_integration::{
74    ApiClient, ApiConfig, ApiError, ApiMetrics, ApiRequest, ApiResponse, ApiService,
75    Authentication, HttpMethod, MLApiPatterns, MethodStats, MockApiClient, RequestBuilder,
76};
77// Temporarily commented out due to missing submodules
78/*
79pub use architecture::{
80    AspectContext, AspectManager, BackoffStrategy, ChainValidationRule, ChainValidationType,
81    ComparisonOperator, ComponentError, ComponentFactory, ComponentRegistry, ConfigurationBuilder,
82    ConfigurationPreset, ErrorHandleResult, ErrorHandler, Event, EventBus, EventError,
83    EventHandler, EventRecord, ExecutionStats, FeatureModule, FluentApiBuilder, FluentChainBuilder,
84    FluentCondition, FluentConditionType, FluentError, FluentErrorHandling, FluentExecutionResult,
85    FluentExecutionStats, FluentOperation, FluentOperationType, FluentRetryPolicy,
86    FluentUtilityChain, Hook, HookConfig, HookContext, HookError, HookErrorHandling,
87    HookExecutionStats, HookRegistry, HookResult, HookType, MiddlewareContext, MiddlewareError,
88    MiddlewarePipeline, ModuleConfig, ModuleError, ModuleRegistry, PipelineHookManager, Plugin,
89    PluginContext, PluginError, PluginExecution, PluginManager, PluginResult,
90    PresetApplicationResult, PresetBuilder, PresetError, PresetRegistry, RetryCondition,
91    ServiceLifecycle, ServiceLocator, ServiceMetadata, UtilityContext, UtilityError,
92    UtilityFunction, UtilityHookManager, UtilityRegistry, UtilityResult, UtilityValue,
93    ValidationError, ValidationRule, ValidationRuleType,
94};
95*/
96pub use array_utils::{
97    argmax,
98    argmin,
99    argsort,
100    array_add_constant_inplace,
101    array_apply_inplace,
102    array_concatenate,
103    array_cumsum,
104    array_describe,
105    array_max,
106    array_mean,
107    array_mean_f64,
108    array_median,
109    array_min,
110    array_min_max,
111    array_min_max_normalize,
112    array_min_max_normalize_inplace,
113    array_percentile,
114    array_quantiles,
115    array_resize,
116    array_reverse,
117
118    array_scale_inplace,
119    array_split,
120    array_standardize,
121    // In-place operations
122    array_standardize_inplace,
123    array_std,
124    // Statistical functions
125    array_sum,
126    array_unique_counts,
127    array_var,
128    array_variance_f64,
129    boolean_indexing_1d,
130    boolean_indexing_2d,
131    broadcast_shape,
132    // Core utilities
133    check_array_1d,
134    check_array_2d,
135    column_or_1d,
136    compatible_layout,
137
138    compress_1d,
139
140    concatenate_2d,
141    create_mask,
142    densify_threshold,
143
144    efficient_copy,
145    // Advanced indexing
146    fancy_indexing_1d,
147    fancy_indexing_2d,
148    fast_dot_product_f32,
149    fast_dot_product_f64,
150    fast_sum_f32,
151
152    fast_sum_f64,
153    filter_array,
154    flatten_2d,
155    get_strides,
156    is_broadcastable,
157    // Memory operations
158    is_contiguous,
159    label_counts,
160    make_contiguous,
161    normalize_array,
162    pad_2d,
163
164    put_1d,
165    // Shape operations
166    reshape_1d_to_2d,
167    safe_indexing,
168    safe_indexing_2d,
169    // Sparse operations
170    safe_sparse_dot,
171    safe_sparse_dot_f32,
172    safe_sparse_dot_f64,
173    simd_add_arrays_f32,
174    // SIMD operations
175    simd_add_arrays_f64,
176    simd_multiply_arrays_f32,
177    simd_multiply_arrays_f64,
178    simd_scale_array_f32,
179    simd_scale_array_f64,
180    slice_with_step,
181    sparse_add,
182    sparse_diag,
183    sparse_transpose,
184    split_2d,
185    stack_1d,
186    take_1d,
187    tile_2d,
188    transpose,
189    unique_labels,
190    where_condition,
191    ArrayStatistics,
192};
193pub use cloud_storage::{
194    CloudProvider, CloudStorageClient, CloudStorageConfig, CloudStorageFactory, CloudStorageUtils,
195    MockCloudStorageClient, ObjectMetadata, StorageMetrics, SyncMode, SyncResult,
196};
197pub use config::{
198    ArgParser, Config, ConfigBuilder, ConfigSource, ConfigValidator, ConfigValue, HotReloadConfig,
199};
200pub use cross_validation::{
201    CVSplit, GroupKFold, LeaveOneGroupOut, StratifiedKFold, TimeSeriesSplit,
202};
203pub use data_generation::*;
204pub use data_pipeline::{
205    DataPipeline, MLPipelineBuilder, PipelineContext, PipelineMetrics, PipelineMonitor,
206    PipelineResult, PipelineStep, StepMetrics, TransformStep,
207};
208pub use data_structures::{
209    AtomicCounter, BinarySearchTree, BlockMatrix, ConcurrentHashMap, ConcurrentQueue,
210    ConcurrentRingBuffer, Graph, RingBuffer, TreeNode, TreeStatistics, Trie, TrieStatistics,
211    WeightedGraph, WorkQueue,
212};
213pub use database::{
214    Connection, DatabaseConfig, DatabaseError, DatabasePool, Query, QueryBuilder, QueryResult,
215    ResultSet, Transaction,
216};
217pub use debug::{
218    ArrayDebugger, DebugContext, DiagnosticTools, MemoryDebugger, PerformanceDebugger,
219    TestDataGenerator, TimingStats,
220};
221pub use distributed_computing::{
222    ClusterConfig, ClusterNode, ClusterStats, DistributedCluster, DistributedError, DistributedJob,
223    FaultDetector, JobExecution, JobPriority, JobScheduler, JobStatus, JobType, LoadBalancer,
224    LoadMetrics, NodeCapabilities, NodeStatus, ResourceRequirements, ResourceUsage,
225    SchedulingStrategy,
226};
227pub use ensemble::{
228    AggregationStrategy, BaggingPredictor, Bootstrap, OOBScoreEstimator, StackingHelper,
229};
230pub use environment::{
231    CacheInfo, CpuInfo, EnvironmentInfo, FeatureChecker, HardwareDetector, MemoryInfo, OSInfo,
232    PerformanceCharacteristics, RuntimeInfo,
233};
234pub use error_handling::{
235    create_error, create_error_at, EnhancedError, ErrorAggregator, ErrorContext, ErrorRecovery,
236    ErrorReporter, ErrorStatistics, ErrorSummary, RecoveryStrategy,
237};
238pub use external_integration::{
239    ArrayTransfer, CFunctionSignature, CParameter, CType, FFIUtils, PyArrayBuffer, PythonInterop,
240    PythonParameter, PythonValue, WasmBuildConfig, WasmOptimization, WasmParameter, WasmType,
241    WasmUtils,
242};
243pub use feature_engineering::{
244    BinningStrategy, FeatureBinner, InteractionFeatures, PolynomialFeatures,
245};
246pub use file_io::{
247    CompressionUtils, EfficientFileReader, EfficientFileWriter, FormatConverter,
248    SerializationUtils, StreamProcessor,
249};
250pub use gpu_computing::{
251    ActivationFunction, GpuArrayOps, GpuDevice, GpuError, GpuKernelExecution, GpuKernelInfo,
252    GpuMemoryAllocation, GpuProfiler, GpuUtils, KernelStats, MemoryStats, MemoryTransferStats,
253};
254pub use linear_algebra::{
255    ConditionNumber, EigenDecomposition, MatrixDecomposition, MatrixNorms, MatrixRank, MatrixUtils,
256    Pseudoinverse,
257};
258pub use logging::{
259    flush_global_logger, get_global_logger, set_global_level, ConsoleOutput, DistributedLogger,
260    FileOutput, JsonFormatter, LogAnalysis, LogAnalyzer, LogEntry, LogLevel, LogStats, Logger,
261    LoggerConfig, OperationStats, PerformanceLogger, TextFormatter,
262};
263pub use math_utils::{
264    constants, NumericalPrecision, OverflowDetection, RobustArrayOps, SpecialFunctions,
265};
266pub use memory::{
267    AllocationStats, GcHelper, LeakDetector, MemoryAlignment, MemoryMappedFile, MemoryMonitor,
268    MemoryPool, MemoryValidator, SafeBuffer, SafePtr, SafeVec, StackGuard, TrackingAllocator,
269};
270pub use metrics::{
271    bhattacharyya_distance, braycurtis_distance, canberra_distance, chebyshev_distance,
272    cosine_distance, cosine_distance_f32, cosine_similarity, cosine_similarity_f32,
273    euclidean_distance, euclidean_distance_f32, hamming_distance, hamming_distance_normalized,
274    hellinger_distance, jaccard_distance, jaccard_similarity, jensen_shannon_divergence,
275    kl_divergence, mahalanobis_distance, manhattan_distance, manhattan_distance_f32,
276    minkowski_distance, wasserstein_1d,
277};
278pub use multiclass::*;
279pub use optimization::{
280    ConstraintHandler, ConstraintViolation, ConvergenceCriteria, ConvergenceStatus,
281    GradientComputer, GradientMethod, LineSearch, LineSearchMethod, OptimizationHistory,
282};
283pub use parallel::{ParallelIterator, ParallelReducer, ThreadPool, WorkStealingQueue};
284pub use performance::{
285    BaselineMetrics, Benchmark, BenchmarkResult, MemoryTracker, ProfileReport, ProfileResult,
286    Profiler, RegressionDetector, RegressionResult, Timer, TimerSummary,
287};
288pub use performance_regression::{
289    PerformanceRegressionTester, RegressionTestResult, RegressionThresholds,
290};
291pub use preprocessing::{DataCleaner, DataQualityAssessor, FeatureScaler, OutlierDetector};
292pub use probabilistic::{
293    BloomFilter, BloomFilterStats, CountMinSketch, CountMinSketchStats, HyperLogLog,
294    HyperLogLogStats, LSHash, LSHashStats, MinHash, MinHashStats,
295};
296pub use profile_guided_optimization::{
297    BranchProfile, BranchType, CacheStatistics, DependencyChain, FunctionProfile,
298    ImplementationEffort, InstructionMix, LoopProfile, MemoryAccessPattern, MemoryAccessType,
299    OptimizationApplication, OptimizationOpportunity, OptimizationRecommendation,
300    OptimizationReport, OptimizationRule, OptimizationType, PerformanceProfile, PerformanceTargets,
301    ProfileError, ProfileGuidedOptimizer, ProfileSummary, ProfilerConfig, RiskLevel, StridePattern,
302    TriggerCondition,
303};
304pub use r_integration::{
305    RDataFrame, RError, RIntegration, RMatrix, RPackageManager, RScriptBuilder,
306    RStatisticalFunctions, RValue,
307};
308pub use random::{
309    bootstrap_indices, get_rng, importance_sampling, k_fold_indices, random_indices,
310    random_permutation, random_weights, reservoir_sampling, set_random_state, shuffle_indices,
311    stratified_split_indices, train_test_split_indices, weighted_sampling_without_replacement,
312    DistributionSampler, ThreadSafeRng,
313};
314pub use simd::{
315    SimdCapabilities, SimdDistanceOps, SimdF32Ops, SimdF64Ops, SimdMatrixOps, SimdStatsOps,
316};
317pub use spatial::{
318    geographic::{CoordinateSystem, GeoBounds, GeoPoint, GeoUtils, Hemisphere},
319    KdTree, OctTree, Point, QuadTree, RTree, Rectangle, SpatialHash, SpatialHashStats,
320};
321pub use statistical::{
322    ConfidenceInterval, ConfidenceIntervals, CorrelationAnalysis, DistributionFitting,
323    StatisticalTests, TestResult,
324};
325pub use text_processing::{
326    RegexUtils, StringSimilarity, TextAnalysis, TextNormalizer, TextParser, UnicodeUtils,
327};
328pub use time_series::{
329    AggregationMethod, LagFeatureGenerator, SlidingWindow, TemporalAggregator, TemporalIndex,
330    TimeSeries, TimeSeriesPoint, TimeZoneUtils, Timestamp, TrendDirection, WindowStats,
331};
332pub use type_safety::{
333    DataState, ExactSize, Kilograms, MatrixMul, Measurement, Meters, MinSize, ModelState,
334    NonNegative, Normalized, One, Pixels, Positive, Seconds, Three, Trained, Two, TypedArray,
335    Untrained, Unvalidated, Validated, ValidatedArray, Zero, D1, D2, D3,
336};
337pub use validation::*;
338pub use visualization::{
339    AxisConfig, BoxPlotData, ChartData, Color, HeatmapData, HistogramData, LinePlotData,
340    MLVisualizationUtils, PlotData, PlotLayout, PlotMargin, PlotSummary, PlotUtils, Point2D,
341    ScatterPlotData,
342};
343
344/// Common error type for utils
345#[derive(thiserror::Error, Debug, Clone)]
346pub enum UtilsError {
347    #[error("Shape mismatch: expected {expected:?}, got {actual:?}")]
348    ShapeMismatch {
349        expected: Vec<usize>,
350        actual: Vec<usize>,
351    },
352    #[error("Invalid parameter: {0}")]
353    InvalidParameter(String),
354    #[error("Empty input")]
355    EmptyInput,
356    #[error("Invalid random state: {0}")]
357    InvalidRandomState(String),
358    #[error("Insufficient data: need at least {min} samples, got {actual}")]
359    InsufficientData { min: usize, actual: usize },
360}
361
362impl From<UtilsError> for sklears_core::error::SklearsError {
363    fn from(err: UtilsError) -> Self {
364        sklears_core::error::SklearsError::InvalidInput(err.to_string())
365    }
366}
367
368impl From<serde_json::Error> for UtilsError {
369    fn from(err: serde_json::Error) -> Self {
370        UtilsError::InvalidParameter(format!("JSON serialization error: {err}"))
371    }
372}
373
374/// Type alias for utils results
375pub type UtilsResult<T> = std::result::Result<T, UtilsError>;