@@ -233,7 +233,7 @@ impl<'py> pyo3::IntoPyObject<'py> for SparseVector {
233233 fn into_pyobject ( self , py : pyo3:: Python < ' py > ) -> Result < Self :: Output , Self :: Error > {
234234 use pyo3:: types:: PyDict ;
235235
236- let dict = PyDict :: new_bound ( py) ;
236+ let dict = PyDict :: new ( py) ;
237237 dict. set_item ( "indices" , self . indices ) ?;
238238 dict. set_item ( "values" , self . values ) ?;
239239 dict. set_item ( "tokens" , self . tokens ) ?;
@@ -247,20 +247,27 @@ impl<'py> pyo3::FromPyObject<'py> for SparseVector {
247247 use pyo3:: types:: PyDict ;
248248
249249 let dict = ob. downcast :: < PyDict > ( ) ?;
250- let indices_obj = dict
251- . get_item ( "indices" ) ?
252- . ok_or_else ( || pyo3:: exceptions:: PyKeyError :: new_err ( "missing 'indices' key" ) ) ?;
253- let values_obj = dict
254- . get_item ( "values" ) ?
255- . ok_or_else ( || pyo3:: exceptions:: PyKeyError :: new_err ( "missing 'values' key" ) ) ?;
250+ let indices_obj = dict. get_item ( "indices" ) ?;
251+ if indices_obj. is_none ( ) {
252+ return Err ( pyo3:: exceptions:: PyKeyError :: new_err (
253+ "missing 'indices' key" ,
254+ ) ) ;
255+ }
256+ let values_obj = dict. get_item ( "values" ) ?;
257+ if values_obj. is_none ( ) {
258+ return Err ( pyo3:: exceptions:: PyKeyError :: new_err (
259+ "missing 'values' key" ,
260+ ) ) ;
261+ }
256262
257263 let indices: Vec < u32 > = indices_obj. extract ( ) ?;
258264 let values: Vec < f32 > = values_obj. extract ( ) ?;
259265
260- let tokens = match dict. get_item ( "tokens" ) ? {
261- Some ( item) if item. is_none ( ) => None ,
262- Some ( item) => Some ( item. extract :: < Vec < String > > ( ) ?) ,
263- None => None ,
266+ let tokens_obj = dict. get_item ( "tokens" ) ?;
267+ let tokens = if tokens_obj. is_none ( ) {
268+ None
269+ } else {
270+ Some ( tokens_obj. extract :: < Vec < String > > ( ) ?)
264271 } ;
265272
266273 Ok ( SparseVector :: new ( indices, values, tokens) )
@@ -2438,7 +2445,7 @@ mod tests {
24382445 use pyo3:: types:: PyDict ;
24392446 use pyo3:: IntoPyObject ;
24402447
2441- let dict_in = PyDict :: new_bound ( py) ;
2448+ let dict_in = PyDict :: new ( py) ;
24422449 dict_in. set_item ( "indices" , vec ! [ 0u32 , 1 , 2 ] ) . unwrap ( ) ;
24432450 dict_in
24442451 . set_item ( "values" , vec ! [ 0.1f32 , 0.2f32 , 0.3f32 ] )
@@ -2461,10 +2468,8 @@ mod tests {
24612468
24622469 let py_obj = sparse. clone ( ) . into_pyobject ( py) . unwrap ( ) ;
24632470 let dict_out = py_obj. downcast :: < PyDict > ( ) . unwrap ( ) ;
2464- let tokens_obj = dict_out
2465- . get_item ( "tokens" )
2466- . unwrap ( )
2467- . expect ( "expected tokens key in Python dict" ) ;
2471+ let tokens_obj = dict_out. get_item ( "tokens" ) . unwrap ( ) ;
2472+ assert ! ( !tokens_obj. is_none( ) , "expected tokens key in Python dict" ) ;
24682473 let tokens: Vec < String > = tokens_obj. extract ( ) . unwrap ( ) ;
24692474 assert_eq ! (
24702475 tokens,
@@ -2480,7 +2485,7 @@ mod tests {
24802485 use pyo3:: types:: PyDict ;
24812486 use pyo3:: IntoPyObject ;
24822487
2483- let dict_in = PyDict :: new_bound ( py) ;
2488+ let dict_in = PyDict :: new ( py) ;
24842489 dict_in. set_item ( "indices" , vec ! [ 5u32 ] ) . unwrap ( ) ;
24852490 dict_in. set_item ( "values" , vec ! [ 1.5f32 ] ) . unwrap ( ) ;
24862491
@@ -2491,10 +2496,8 @@ mod tests {
24912496
24922497 let py_obj = sparse. into_pyobject ( py) . unwrap ( ) ;
24932498 let dict_out = py_obj. downcast :: < PyDict > ( ) . unwrap ( ) ;
2494- match dict_out. get_item ( "tokens" ) . unwrap ( ) {
2495- Some ( obj) => assert ! ( obj. is_none( ) ) ,
2496- None => panic ! ( "expected tokens key in Python dict" ) ,
2497- }
2499+ let tokens_obj = dict_out. get_item ( "tokens" ) . unwrap ( ) ;
2500+ assert ! ( tokens_obj. is_none( ) , "expected tokens to be None" ) ;
24982501 } ) ;
24992502 }
25002503
0 commit comments