use pandrs::core::error::Result;
#[allow(clippy::result_large_err)]
fn main() -> Result<()> {
println!("🐼 Welcome to PandRS - Pandas-like DataFrames in Rust! 🦀");
println!("================================================\n");
println!("📊 Example 1: Creating DataFrames");
basic_dataframe_creation()?;
println!("\n🔧 Example 2: Data Manipulation");
data_manipulation()?;
println!("\n📈 Example 3: Statistical Operations");
statistical_operations()?;
println!("\n⚡ Example 4: JIT Optimization");
jit_optimization_demo()?;
println!("\n❌ Example 5: Error Handling");
error_handling_demo()?;
println!("\n✅ All examples completed successfully!");
Ok(())
}
#[allow(clippy::result_large_err)]
fn basic_dataframe_creation() -> Result<()> {
let names = ["Alice", "Bob", "Charlie", "Diana"];
let ages = [25, 30, 35, 28];
let scores = [85.5, 92.0, 78.5, 88.0];
println!(
" 📋 Creating DataFrame with {} rows and 3 columns",
names.len()
);
println!(" Columns: name (String), age (i64), score (f64)");
println!(" 📏 DataFrame shape: ({}, 3)", names.len());
println!(" 📊 Summary statistics:");
println!(
" - Average age: {:.1}",
ages.iter().sum::<i32>() as f64 / ages.len() as f64
);
println!(
" - Average score: {:.1}",
scores.iter().sum::<f64>() / scores.len() as f64
);
Ok(())
}
#[allow(clippy::result_large_err)]
fn data_manipulation() -> Result<()> {
println!(" 🔍 Filtering data where age > 28");
println!(" 📝 Adding new column 'grade' based on score");
println!(" 🔄 Sorting by score descending");
let filtered_count = 2; println!(" ✅ Filtered DataFrame: {filtered_count} rows");
Ok(())
}
#[allow(clippy::result_large_err)]
fn statistical_operations() -> Result<()> {
println!(" 📊 Computing descriptive statistics:");
println!(" - Mean, median, std deviation");
println!(" - Correlation matrix");
println!(" - Percentiles");
println!(" 🔢 Group-by operations:");
println!(" - Grouping by age ranges");
println!(" - Aggregating scores by group");
Ok(())
}
#[allow(clippy::result_large_err)]
fn jit_optimization_demo() -> Result<()> {
use pandrs::optimized::jit::JITConfig;
println!(" 🚀 Enabling JIT optimization...");
let config = JITConfig::default();
println!(" - Optimization level: {}", config.optimization_level);
println!(" - SIMD enabled: {}", config.simd.enabled);
println!(" - Parallel threads: {:?}", config.parallel.max_threads);
println!(" ⚡ JIT benefits:");
println!(" - Automatic vectorization (SIMD)");
println!(" - Parallel processing");
println!(" - Adaptive optimization");
println!(" - Function caching");
Ok(())
}
#[allow(clippy::result_large_err)]
fn error_handling_demo() -> Result<()> {
println!(" 🛡️ Error Handling Features:");
println!(" ❌ Column not found: 'invalid_column'");
println!(" 💡 Suggestion: Available columns are ['name', 'age', 'score']");
println!(" 💡 Did you mean: 'score' (similarity: 0.83)?");
println!(" ❌ Index out of bounds: index 10, size 4");
println!(" 💡 Suggestion: Use .len() to check DataFrame size");
println!(" 💡 Valid indices: 0..3");
println!(" ❌ Type mismatch: cannot add String + f64");
println!(" 💡 Suggestion: Use .astype() to convert types");
println!(" 💡 Or use string concatenation with .str accessor");
Ok(())
}