pub fn random_sparse_vec(
rng: &mut impl Rng,
dims: usize,
sparsity: usize,
) -> SparseVecExpand description
Generate a random sparse vector with specified dimensions and sparsity
§Arguments
rng- Random number generatordims- Total dimensions of the vectorsparsity- Number of non-zero elements (split roughly evenly between pos/neg)
§Example
ⓘ
use rand::thread_rng;
let mut rng = thread_rng();
let vec = random_sparse_vec(&mut rng, 10000, 200);
assert_eq!(vec.pos.len() + vec.neg.len(), 200);Examples found in repository?
examples/performance_metrics.rs (line 22)
10fn main() {
11 println!("=== Embeddenator TestKit - Performance Metrics ===\n");
12
13 // Create test metrics
14 let mut metrics = TestMetrics::new("example_operations");
15
16 // Time a simple operation
17 println!("1. Timing vector generation...");
18 let mut rng = rand::rngs::StdRng::seed_from_u64(42);
19
20 for _ in 0..10 {
21 metrics.time_operation(|| {
22 let _vec = random_sparse_vec(&mut rng, 10000, 200);
23 });
24 }
25
26 println!(" Completed 10 operations");
27 let stats = metrics.timing_stats();
28 println!(" Mean: {:.2}µs", stats.mean_ns / 1000.0);
29 println!(" Median: {:.2}µs", stats.p50_ns as f64 / 1000.0);
30 println!(" P95: {:.2}µs", stats.p95_ns as f64 / 1000.0);
31
32 // Record custom metrics
33 println!("\n2. Recording custom metrics...");
34 metrics.record_metric("accuracy", 0.95);
35 metrics.record_metric("precision", 0.92);
36 metrics.record_metric("recall", 0.89);
37 metrics.inc_op("validation_checks");
38
39 // Record memory usage
40 println!("\n3. Recording memory snapshots...");
41 for i in 1..=5 {
42 metrics.record_memory(i * 1024 * 1024); // Simulate growing memory usage
43 }
44
45 // Display full summary
46 println!("\n4. Full metrics summary:");
47 println!("{}", metrics.summary());
48
49 // Test timing with actual work
50 println!("\n5. Timing with simulated work...");
51 let mut work_metrics = TestMetrics::new("simulated_work");
52
53 for sleep_ms in [1, 2, 5, 10, 20] {
54 work_metrics.time_operation(|| {
55 thread::sleep(Duration::from_millis(sleep_ms));
56 });
57 }
58
59 let work_stats = work_metrics.timing_stats();
60 println!(" Operations: {}", work_stats.count);
61 println!(
62 " Total time: {:.2}ms",
63 work_stats.total_ns as f64 / 1_000_000.0
64 );
65 println!(" Throughput: {:.2} ops/sec", work_stats.ops_per_sec());
66
67 println!("\n✅ Performance metrics example complete!");
68}More examples
examples/basic_generators.rs (line 16)
8fn main() {
9 println!("=== Embeddenator TestKit - Basic Generators ===\n");
10
11 // Create a deterministic RNG for reproducibility
12 let mut rng = rand::rngs::StdRng::seed_from_u64(42);
13
14 // Generate random sparse vector
15 println!("1. Generating random sparse vector...");
16 let vec = random_sparse_vec(&mut rng, 10000, 200);
17 println!(
18 " Created vector: dim={}, nnz={} (pos={}, neg={})",
19 10000,
20 vec.pos.len() + vec.neg.len(),
21 vec.pos.len(),
22 vec.neg.len()
23 );
24
25 // Generate deterministic sparse vector
26 println!("\n2. Generating deterministic sparse vector...");
27 let vec1 = deterministic_sparse_vec(10000, 200, 42);
28 let vec2 = deterministic_sparse_vec(10000, 200, 42);
29 println!(
30 " Vector 1: pos.len={}, neg.len={}",
31 vec1.pos.len(),
32 vec1.neg.len()
33 );
34 println!(
35 " Vector 2: pos.len={}, neg.len={}",
36 vec2.pos.len(),
37 vec2.neg.len()
38 );
39 println!(
40 " Determinism check: {}",
41 vec1.pos == vec2.pos && vec1.neg == vec2.neg
42 );
43
44 // Test sparse dot product
45 println!("\n3. Computing sparse dot product...");
46 let a = deterministic_sparse_vec(10000, 100, 123);
47 let b = deterministic_sparse_vec(10000, 100, 456);
48 let dot_ab = sparse_dot(&a, &b);
49 let dot_ba = sparse_dot(&b, &a);
50 println!(" dot(a, b) = {}", dot_ab);
51 println!(" dot(b, a) = {}", dot_ba);
52 println!(" Symmetric: {}", dot_ab == dot_ba);
53
54 // Generate noise pattern
55 println!("\n4. Generating noise patterns...");
56 let noise1 = generators::generate_noise_pattern(1024, 42);
57 let noise2 = generators::generate_noise_pattern(1024, 42);
58 println!(" Noise 1 length: {}", noise1.len());
59 println!(" Noise 2 length: {}", noise2.len());
60 println!(" Deterministic: {}", noise1 == noise2);
61
62 // Generate gradient pattern
63 println!("\n5. Generating gradient pattern...");
64 let gradient = generators::generate_gradient_pattern(256, 256);
65 println!(" Gradient size: {} bytes", gradient.len());
66 println!(" First pixel: {}", gradient[0]);
67 println!(" Center pixel: {}", gradient[gradient.len() / 2]);
68 println!(" Last pixel: {}", gradient[gradient.len() - 1]);
69
70 println!("\n✅ All generators working correctly!");
71}