@@ -242,54 +242,58 @@ impl<'p> Serialize for NumpyArray {
242242 S : Serializer ,
243243 {
244244 let mut seq = serializer. serialize_seq ( None ) . unwrap ( ) ;
245- if !self . children . is_empty ( ) {
246- for child in & self . children {
247- seq. serialize_element ( child) . unwrap ( ) ;
248- }
249- } else {
250- let data_ptr = self . data ( ) ;
251- let num_items = self . num_items ( ) ;
252- match self . kind ( ) . unwrap ( ) {
253- ItemType :: F64 => {
254- let slice: & [ f64 ] = slice ! ( data_ptr as * const f64 , num_items) ;
255- for & each in slice. iter ( ) {
256- seq. serialize_element ( & DataTypeF64 { obj : each } ) . unwrap ( ) ;
257- }
245+
246+ if self . depth >= self . shape ( ) . len ( ) || self . shape ( ) [ self . depth ] != 0 {
247+ if !self . children . is_empty ( ) {
248+ for child in & self . children {
249+ seq. serialize_element ( child) . unwrap ( ) ;
258250 }
259- ItemType :: F32 => {
260- let slice: & [ f32 ] = slice ! ( data_ptr as * const f32 , num_items) ;
261- for & each in slice. iter ( ) {
262- seq. serialize_element ( & DataTypeF32 { obj : each } ) . unwrap ( ) ;
251+
252+ } else {
253+ let data_ptr = self . data ( ) ;
254+ let num_items = self . num_items ( ) ;
255+ match self . kind ( ) . unwrap ( ) {
256+ ItemType :: F64 => {
257+ let slice: & [ f64 ] = slice ! ( data_ptr as * const f64 , num_items) ;
258+ for & each in slice. iter ( ) {
259+ seq. serialize_element ( & DataTypeF64 { obj : each } ) . unwrap ( ) ;
260+ }
263261 }
264- }
265- ItemType :: I64 => {
266- let slice : & [ i64 ] = slice ! ( data_ptr as * const i64 , num_items ) ;
267- for & each in slice . iter ( ) {
268- seq . serialize_element ( & DataTypeI64 { obj : each } ) . unwrap ( ) ;
262+ ItemType :: F32 => {
263+ let slice : & [ f32 ] = slice ! ( data_ptr as * const f32 , num_items ) ;
264+ for & each in slice . iter ( ) {
265+ seq . serialize_element ( & DataTypeF32 { obj : each } ) . unwrap ( ) ;
266+ }
269267 }
270- }
271- ItemType :: I32 => {
272- let slice : & [ i32 ] = slice ! ( data_ptr as * const i32 , num_items ) ;
273- for & each in slice . iter ( ) {
274- seq . serialize_element ( & DataTypeI32 { obj : each } ) . unwrap ( ) ;
268+ ItemType :: I64 => {
269+ let slice : & [ i64 ] = slice ! ( data_ptr as * const i64 , num_items ) ;
270+ for & each in slice . iter ( ) {
271+ seq . serialize_element ( & DataTypeI64 { obj : each } ) . unwrap ( ) ;
272+ }
275273 }
276- }
277- ItemType :: U64 => {
278- let slice : & [ u64 ] = slice ! ( data_ptr as * const u64 , num_items ) ;
279- for & each in slice . iter ( ) {
280- seq . serialize_element ( & DataTypeU64 { obj : each } ) . unwrap ( ) ;
274+ ItemType :: I32 => {
275+ let slice : & [ i32 ] = slice ! ( data_ptr as * const i32 , num_items ) ;
276+ for & each in slice . iter ( ) {
277+ seq . serialize_element ( & DataTypeI32 { obj : each } ) . unwrap ( ) ;
278+ }
281279 }
282- }
283- ItemType :: U32 => {
284- let slice : & [ u32 ] = slice ! ( data_ptr as * const u32 , num_items ) ;
285- for & each in slice . iter ( ) {
286- seq . serialize_element ( & DataTypeU32 { obj : each } ) . unwrap ( ) ;
280+ ItemType :: U64 => {
281+ let slice : & [ u64 ] = slice ! ( data_ptr as * const u64 , num_items ) ;
282+ for & each in slice . iter ( ) {
283+ seq . serialize_element ( & DataTypeU64 { obj : each } ) . unwrap ( ) ;
284+ }
287285 }
288- }
289- ItemType :: BOOL => {
290- let slice: & [ u8 ] = slice ! ( data_ptr as * const u8 , num_items) ;
291- for & each in slice. iter ( ) {
292- seq. serialize_element ( & DataTypeBOOL { obj : each } ) . unwrap ( ) ;
286+ ItemType :: U32 => {
287+ let slice: & [ u32 ] = slice ! ( data_ptr as * const u32 , num_items) ;
288+ for & each in slice. iter ( ) {
289+ seq. serialize_element ( & DataTypeU32 { obj : each } ) . unwrap ( ) ;
290+ }
291+ }
292+ ItemType :: BOOL => {
293+ let slice: & [ u8 ] = slice ! ( data_ptr as * const u8 , num_items) ;
294+ for & each in slice. iter ( ) {
295+ seq. serialize_element ( & DataTypeBOOL { obj : each } ) . unwrap ( ) ;
296+ }
293297 }
294298 }
295299 }
0 commit comments