Skip to main content

tenflowers_dataset/visualization/
extensions.rs

1//! Extension traits for easy visualization access
2//!
3//! This module provides convenient trait extensions that add visualization
4//! methods directly to datasets.
5
6use crate::{transforms::Transform, Dataset};
7use tenflowers_core::Result;
8
9use super::types::*;
10use super::visualizer::DatasetVisualizer;
11
12/// Extension trait for easy visualization access
13pub trait DatasetVisualizationExt<T>: Dataset<T> + Sized {
14    /// Create a sample preview
15    fn sample_preview(&self, num_samples: usize) -> Result<SamplePreview>
16    where
17        T: Clone + Default + scirs2_core::numeric::Zero + Send + Sync + 'static,
18    {
19        DatasetVisualizer::sample_preview(self, num_samples)
20    }
21
22    /// Get feature distribution information
23    fn feature_distribution(&self, max_samples: Option<usize>) -> Result<DistributionInfo<T>>
24    where
25        T: Clone
26            + Default
27            + scirs2_core::numeric::Zero
28            + Send
29            + Sync
30            + 'static
31            + scirs2_core::numeric::Float,
32    {
33        DatasetVisualizer::feature_distribution(self, max_samples)
34    }
35
36    /// Get class distribution
37    fn class_distribution(&self) -> Result<ClassDistribution>
38    where
39        T: Clone + Default + scirs2_core::numeric::Zero + Send + Sync + 'static,
40    {
41        DatasetVisualizer::class_distribution(self)
42    }
43
44    /// Create a histogram for a specific feature
45    fn feature_histogram(&self, feature_index: usize, bins: usize) -> Result<FeatureHistogram<T>>
46    where
47        T: Clone
48            + Default
49            + scirs2_core::numeric::Zero
50            + Send
51            + Sync
52            + 'static
53            + scirs2_core::numeric::Float
54            + PartialOrd,
55    {
56        DatasetVisualizer::feature_histogram(self, feature_index, bins)
57    }
58
59    /// Analyze the effects of a transform on dataset samples
60    fn analyze_augmentation_effects<Tr>(
61        &self,
62        transform: &Tr,
63        num_samples: usize,
64    ) -> Result<AugmentationEffects<T>>
65    where
66        T: Clone
67            + Default
68            + scirs2_core::numeric::Zero
69            + Send
70            + Sync
71            + 'static
72            + scirs2_core::numeric::Float
73            + PartialOrd,
74        Tr: Transform<T>,
75    {
76        DatasetVisualizer::analyze_augmentation_effects(self, transform, num_samples)
77    }
78}
79
80// Implement the extension trait for all datasets
81impl<T, D: Dataset<T> + Sized> DatasetVisualizationExt<T> for D {}