@@ -9,21 +9,21 @@ use diesel::{deserialize::FromSqlRow, expression::AsExpression};
9
9
#[ cfg_attr( feature = "diesel" , derive( FromSqlRow , AsExpression ) ) ]
10
10
#[ cfg_attr( feature = "diesel" , diesel( sql_type = SparseVectorType ) ) ]
11
11
pub struct SparseVector {
12
- pub ( crate ) dim : i32 ,
13
- pub ( crate ) indices : Vec < i32 > ,
12
+ pub ( crate ) dim : usize ,
13
+ pub ( crate ) indices : Vec < usize > ,
14
14
pub ( crate ) values : Vec < f32 > ,
15
15
}
16
16
17
17
impl SparseVector {
18
18
/// Creates a sparse vector from a dense vector.
19
19
pub fn from_dense ( vec : & [ f32 ] ) -> SparseVector {
20
- let dim: i32 = vec. len ( ) . try_into ( ) . unwrap ( ) ;
20
+ let dim = vec. len ( ) ;
21
21
let mut indices = Vec :: new ( ) ;
22
22
let mut values = Vec :: new ( ) ;
23
23
24
24
for ( i, v) in vec. iter ( ) . enumerate ( ) {
25
25
if * v != 0.0 {
26
- indices. push ( i. try_into ( ) . unwrap ( ) ) ;
26
+ indices. push ( i) ;
27
27
values. push ( * v) ;
28
28
}
29
29
}
@@ -36,13 +36,13 @@ impl SparseVector {
36
36
}
37
37
38
38
/// Creates a sparse vector from a map of non-zero elements.
39
- pub fn from_map < ' a , I : IntoIterator < Item = ( & ' a i32 , & ' a f32 ) > > (
39
+ pub fn from_map < ' a , I : IntoIterator < Item = ( & ' a usize , & ' a f32 ) > > (
40
40
map : I ,
41
- dim : i32 ,
41
+ dim : usize ,
42
42
) -> SparseVector {
43
- let mut elements: Vec < ( & i32 , & f32 ) > = map. into_iter ( ) . filter ( |v| * v. 1 != 0.0 ) . collect ( ) ;
43
+ let mut elements: Vec < ( & usize , & f32 ) > = map. into_iter ( ) . filter ( |v| * v. 1 != 0.0 ) . collect ( ) ;
44
44
elements. sort_by_key ( |v| * v. 0 ) ;
45
- let indices: Vec < i32 > = elements. iter ( ) . map ( |v| * v. 0 ) . collect ( ) ;
45
+ let indices: Vec < usize > = elements. iter ( ) . map ( |v| * v. 0 ) . collect ( ) ;
46
46
let values: Vec < f32 > = elements. iter ( ) . map ( |v| * v. 1 ) . collect ( ) ;
47
47
48
48
SparseVector {
@@ -53,12 +53,12 @@ impl SparseVector {
53
53
}
54
54
55
55
/// Returns the number of dimensions.
56
- pub fn dimensions ( & self ) -> i32 {
56
+ pub fn dimensions ( & self ) -> usize {
57
57
self . dim
58
58
}
59
59
60
60
/// Returns the non-zero indices.
61
- pub fn indices ( & self ) -> & [ i32 ] {
61
+ pub fn indices ( & self ) -> & [ usize ] {
62
62
& self . indices
63
63
}
64
64
@@ -69,9 +69,9 @@ impl SparseVector {
69
69
70
70
/// Returns the sparse vector as a `Vec<f32>`.
71
71
pub fn to_vec ( & self ) -> Vec < f32 > {
72
- let mut vec = vec ! [ 0.0 ; self . dim. try_into ( ) . unwrap ( ) ] ;
72
+ let mut vec = vec ! [ 0.0 ; self . dim] ;
73
73
for ( i, v) in self . indices . iter ( ) . zip ( & self . values ) {
74
- vec[ usize :: try_from ( * i ) . unwrap ( ) ] = * v;
74
+ vec[ * i ] = * v;
75
75
}
76
76
vec
77
77
}
@@ -80,7 +80,7 @@ impl SparseVector {
80
80
pub ( crate ) fn from_sql (
81
81
buf : & [ u8 ] ,
82
82
) -> Result < SparseVector , Box < dyn std:: error:: Error + Sync + Send > > {
83
- let dim = i32:: from_be_bytes ( buf[ 0 ..4 ] . try_into ( ) ?) ;
83
+ let dim = i32:: from_be_bytes ( buf[ 0 ..4 ] . try_into ( ) ?) . try_into ( ) ? ;
84
84
let nnz = i32:: from_be_bytes ( buf[ 4 ..8 ] . try_into ( ) ?) . try_into ( ) ?;
85
85
let unused = i32:: from_be_bytes ( buf[ 8 ..12 ] . try_into ( ) ?) ;
86
86
if unused != 0 {
@@ -90,7 +90,7 @@ impl SparseVector {
90
90
let mut indices = Vec :: with_capacity ( nnz) ;
91
91
for i in 0 ..nnz {
92
92
let s = 12 + 4 * i;
93
- indices. push ( i32:: from_be_bytes ( buf[ s..s + 4 ] . try_into ( ) ?) ) ;
93
+ indices. push ( i32:: from_be_bytes ( buf[ s..s + 4 ] . try_into ( ) ?) . try_into ( ) ? ) ;
94
94
}
95
95
96
96
let mut values = Vec :: with_capacity ( nnz) ;
0 commit comments