github.com/wzzhu/tensor@v0.9.24/native/iterator_native2.go (about) 1 // Code generated by genlib2. DO NOT EDIT. 2 3 package native 4 5 import ( 6 "reflect" 7 "unsafe" 8 9 "github.com/pkg/errors" 10 . "github.com/wzzhu/tensor" 11 ) 12 13 func checkNativeSelectable(t *Dense, axis int, dt Dtype) error { 14 if !t.IsNativelyAccessible() { 15 return errors.New("Cannot select on non-natively accessible data") 16 } 17 if axis >= t.Shape().Dims() && !(t.IsScalar() && axis == 0) { 18 return errors.Errorf("Cannot select on axis %d. Shape is %v", axis, t.Shape()) 19 } 20 if t.F() || t.RequiresIterator() { 21 return errors.Errorf("Not yet implemented: native select for colmajor or unpacked matrices") 22 } 23 if t.Dtype() != dt { 24 return errors.Errorf("Native selection only works on %v. Got %v", dt, t.Dtype()) 25 } 26 return nil 27 } 28 29 /* Native Select for bool */ 30 31 // SelectB creates a slice of flat data types. See Example of NativeSelectF64. 32 func SelectB(t *Dense, axis int) (retVal [][]bool, err error) { 33 if err := checkNativeSelectable(t, axis, Bool); err != nil { 34 return nil, err 35 } 36 37 switch t.Shape().Dims() { 38 case 0, 1: 39 retVal = make([][]bool, 1) 40 retVal[0] = t.Bools() 41 case 2: 42 if axis == 0 { 43 return MatrixB(t) 44 } 45 fallthrough 46 default: 47 // size := t.Shape()[axis] 48 data := t.Bools() 49 stride := t.Strides()[axis] 50 upper := ProdInts(t.Shape()[:axis+1]) 51 retVal = make([][]bool, 0, upper) 52 for i, r := 0, 0; r < upper; i += stride { 53 s := make([]bool, 0) 54 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 55 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 56 hdr.Len = stride 57 hdr.Cap = stride 58 retVal = append(retVal, s) 59 r++ 60 } 61 return retVal, nil 62 63 } 64 return 65 } 66 67 /* Native Select for int */ 68 69 // SelectI creates a slice of flat data types. See Example of NativeSelectF64. 70 func SelectI(t *Dense, axis int) (retVal [][]int, err error) { 71 if err := checkNativeSelectable(t, axis, Int); err != nil { 72 return nil, err 73 } 74 75 switch t.Shape().Dims() { 76 case 0, 1: 77 retVal = make([][]int, 1) 78 retVal[0] = t.Ints() 79 case 2: 80 if axis == 0 { 81 return MatrixI(t) 82 } 83 fallthrough 84 default: 85 // size := t.Shape()[axis] 86 data := t.Ints() 87 stride := t.Strides()[axis] 88 upper := ProdInts(t.Shape()[:axis+1]) 89 retVal = make([][]int, 0, upper) 90 for i, r := 0, 0; r < upper; i += stride { 91 s := make([]int, 0) 92 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 93 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 94 hdr.Len = stride 95 hdr.Cap = stride 96 retVal = append(retVal, s) 97 r++ 98 } 99 return retVal, nil 100 101 } 102 return 103 } 104 105 /* Native Select for int8 */ 106 107 // SelectI8 creates a slice of flat data types. See Example of NativeSelectF64. 108 func SelectI8(t *Dense, axis int) (retVal [][]int8, err error) { 109 if err := checkNativeSelectable(t, axis, Int8); err != nil { 110 return nil, err 111 } 112 113 switch t.Shape().Dims() { 114 case 0, 1: 115 retVal = make([][]int8, 1) 116 retVal[0] = t.Int8s() 117 case 2: 118 if axis == 0 { 119 return MatrixI8(t) 120 } 121 fallthrough 122 default: 123 // size := t.Shape()[axis] 124 data := t.Int8s() 125 stride := t.Strides()[axis] 126 upper := ProdInts(t.Shape()[:axis+1]) 127 retVal = make([][]int8, 0, upper) 128 for i, r := 0, 0; r < upper; i += stride { 129 s := make([]int8, 0) 130 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 131 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 132 hdr.Len = stride 133 hdr.Cap = stride 134 retVal = append(retVal, s) 135 r++ 136 } 137 return retVal, nil 138 139 } 140 return 141 } 142 143 /* Native Select for int16 */ 144 145 // SelectI16 creates a slice of flat data types. See Example of NativeSelectF64. 146 func SelectI16(t *Dense, axis int) (retVal [][]int16, err error) { 147 if err := checkNativeSelectable(t, axis, Int16); err != nil { 148 return nil, err 149 } 150 151 switch t.Shape().Dims() { 152 case 0, 1: 153 retVal = make([][]int16, 1) 154 retVal[0] = t.Int16s() 155 case 2: 156 if axis == 0 { 157 return MatrixI16(t) 158 } 159 fallthrough 160 default: 161 // size := t.Shape()[axis] 162 data := t.Int16s() 163 stride := t.Strides()[axis] 164 upper := ProdInts(t.Shape()[:axis+1]) 165 retVal = make([][]int16, 0, upper) 166 for i, r := 0, 0; r < upper; i += stride { 167 s := make([]int16, 0) 168 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 169 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 170 hdr.Len = stride 171 hdr.Cap = stride 172 retVal = append(retVal, s) 173 r++ 174 } 175 return retVal, nil 176 177 } 178 return 179 } 180 181 /* Native Select for int32 */ 182 183 // SelectI32 creates a slice of flat data types. See Example of NativeSelectF64. 184 func SelectI32(t *Dense, axis int) (retVal [][]int32, err error) { 185 if err := checkNativeSelectable(t, axis, Int32); err != nil { 186 return nil, err 187 } 188 189 switch t.Shape().Dims() { 190 case 0, 1: 191 retVal = make([][]int32, 1) 192 retVal[0] = t.Int32s() 193 case 2: 194 if axis == 0 { 195 return MatrixI32(t) 196 } 197 fallthrough 198 default: 199 // size := t.Shape()[axis] 200 data := t.Int32s() 201 stride := t.Strides()[axis] 202 upper := ProdInts(t.Shape()[:axis+1]) 203 retVal = make([][]int32, 0, upper) 204 for i, r := 0, 0; r < upper; i += stride { 205 s := make([]int32, 0) 206 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 207 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 208 hdr.Len = stride 209 hdr.Cap = stride 210 retVal = append(retVal, s) 211 r++ 212 } 213 return retVal, nil 214 215 } 216 return 217 } 218 219 /* Native Select for int64 */ 220 221 // SelectI64 creates a slice of flat data types. See Example of NativeSelectF64. 222 func SelectI64(t *Dense, axis int) (retVal [][]int64, err error) { 223 if err := checkNativeSelectable(t, axis, Int64); err != nil { 224 return nil, err 225 } 226 227 switch t.Shape().Dims() { 228 case 0, 1: 229 retVal = make([][]int64, 1) 230 retVal[0] = t.Int64s() 231 case 2: 232 if axis == 0 { 233 return MatrixI64(t) 234 } 235 fallthrough 236 default: 237 // size := t.Shape()[axis] 238 data := t.Int64s() 239 stride := t.Strides()[axis] 240 upper := ProdInts(t.Shape()[:axis+1]) 241 retVal = make([][]int64, 0, upper) 242 for i, r := 0, 0; r < upper; i += stride { 243 s := make([]int64, 0) 244 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 245 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 246 hdr.Len = stride 247 hdr.Cap = stride 248 retVal = append(retVal, s) 249 r++ 250 } 251 return retVal, nil 252 253 } 254 return 255 } 256 257 /* Native Select for uint */ 258 259 // SelectU creates a slice of flat data types. See Example of NativeSelectF64. 260 func SelectU(t *Dense, axis int) (retVal [][]uint, err error) { 261 if err := checkNativeSelectable(t, axis, Uint); err != nil { 262 return nil, err 263 } 264 265 switch t.Shape().Dims() { 266 case 0, 1: 267 retVal = make([][]uint, 1) 268 retVal[0] = t.Uints() 269 case 2: 270 if axis == 0 { 271 return MatrixU(t) 272 } 273 fallthrough 274 default: 275 // size := t.Shape()[axis] 276 data := t.Uints() 277 stride := t.Strides()[axis] 278 upper := ProdInts(t.Shape()[:axis+1]) 279 retVal = make([][]uint, 0, upper) 280 for i, r := 0, 0; r < upper; i += stride { 281 s := make([]uint, 0) 282 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 283 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 284 hdr.Len = stride 285 hdr.Cap = stride 286 retVal = append(retVal, s) 287 r++ 288 } 289 return retVal, nil 290 291 } 292 return 293 } 294 295 /* Native Select for uint8 */ 296 297 // SelectU8 creates a slice of flat data types. See Example of NativeSelectF64. 298 func SelectU8(t *Dense, axis int) (retVal [][]uint8, err error) { 299 if err := checkNativeSelectable(t, axis, Uint8); err != nil { 300 return nil, err 301 } 302 303 switch t.Shape().Dims() { 304 case 0, 1: 305 retVal = make([][]uint8, 1) 306 retVal[0] = t.Uint8s() 307 case 2: 308 if axis == 0 { 309 return MatrixU8(t) 310 } 311 fallthrough 312 default: 313 // size := t.Shape()[axis] 314 data := t.Uint8s() 315 stride := t.Strides()[axis] 316 upper := ProdInts(t.Shape()[:axis+1]) 317 retVal = make([][]uint8, 0, upper) 318 for i, r := 0, 0; r < upper; i += stride { 319 s := make([]uint8, 0) 320 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 321 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 322 hdr.Len = stride 323 hdr.Cap = stride 324 retVal = append(retVal, s) 325 r++ 326 } 327 return retVal, nil 328 329 } 330 return 331 } 332 333 /* Native Select for uint16 */ 334 335 // SelectU16 creates a slice of flat data types. See Example of NativeSelectF64. 336 func SelectU16(t *Dense, axis int) (retVal [][]uint16, err error) { 337 if err := checkNativeSelectable(t, axis, Uint16); err != nil { 338 return nil, err 339 } 340 341 switch t.Shape().Dims() { 342 case 0, 1: 343 retVal = make([][]uint16, 1) 344 retVal[0] = t.Uint16s() 345 case 2: 346 if axis == 0 { 347 return MatrixU16(t) 348 } 349 fallthrough 350 default: 351 // size := t.Shape()[axis] 352 data := t.Uint16s() 353 stride := t.Strides()[axis] 354 upper := ProdInts(t.Shape()[:axis+1]) 355 retVal = make([][]uint16, 0, upper) 356 for i, r := 0, 0; r < upper; i += stride { 357 s := make([]uint16, 0) 358 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 359 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 360 hdr.Len = stride 361 hdr.Cap = stride 362 retVal = append(retVal, s) 363 r++ 364 } 365 return retVal, nil 366 367 } 368 return 369 } 370 371 /* Native Select for uint32 */ 372 373 // SelectU32 creates a slice of flat data types. See Example of NativeSelectF64. 374 func SelectU32(t *Dense, axis int) (retVal [][]uint32, err error) { 375 if err := checkNativeSelectable(t, axis, Uint32); err != nil { 376 return nil, err 377 } 378 379 switch t.Shape().Dims() { 380 case 0, 1: 381 retVal = make([][]uint32, 1) 382 retVal[0] = t.Uint32s() 383 case 2: 384 if axis == 0 { 385 return MatrixU32(t) 386 } 387 fallthrough 388 default: 389 // size := t.Shape()[axis] 390 data := t.Uint32s() 391 stride := t.Strides()[axis] 392 upper := ProdInts(t.Shape()[:axis+1]) 393 retVal = make([][]uint32, 0, upper) 394 for i, r := 0, 0; r < upper; i += stride { 395 s := make([]uint32, 0) 396 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 397 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 398 hdr.Len = stride 399 hdr.Cap = stride 400 retVal = append(retVal, s) 401 r++ 402 } 403 return retVal, nil 404 405 } 406 return 407 } 408 409 /* Native Select for uint64 */ 410 411 // SelectU64 creates a slice of flat data types. See Example of NativeSelectF64. 412 func SelectU64(t *Dense, axis int) (retVal [][]uint64, err error) { 413 if err := checkNativeSelectable(t, axis, Uint64); err != nil { 414 return nil, err 415 } 416 417 switch t.Shape().Dims() { 418 case 0, 1: 419 retVal = make([][]uint64, 1) 420 retVal[0] = t.Uint64s() 421 case 2: 422 if axis == 0 { 423 return MatrixU64(t) 424 } 425 fallthrough 426 default: 427 // size := t.Shape()[axis] 428 data := t.Uint64s() 429 stride := t.Strides()[axis] 430 upper := ProdInts(t.Shape()[:axis+1]) 431 retVal = make([][]uint64, 0, upper) 432 for i, r := 0, 0; r < upper; i += stride { 433 s := make([]uint64, 0) 434 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 435 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 436 hdr.Len = stride 437 hdr.Cap = stride 438 retVal = append(retVal, s) 439 r++ 440 } 441 return retVal, nil 442 443 } 444 return 445 } 446 447 /* Native Select for float32 */ 448 449 // SelectF32 creates a slice of flat data types. See Example of NativeSelectF64. 450 func SelectF32(t *Dense, axis int) (retVal [][]float32, err error) { 451 if err := checkNativeSelectable(t, axis, Float32); err != nil { 452 return nil, err 453 } 454 455 switch t.Shape().Dims() { 456 case 0, 1: 457 retVal = make([][]float32, 1) 458 retVal[0] = t.Float32s() 459 case 2: 460 if axis == 0 { 461 return MatrixF32(t) 462 } 463 fallthrough 464 default: 465 // size := t.Shape()[axis] 466 data := t.Float32s() 467 stride := t.Strides()[axis] 468 upper := ProdInts(t.Shape()[:axis+1]) 469 retVal = make([][]float32, 0, upper) 470 for i, r := 0, 0; r < upper; i += stride { 471 s := make([]float32, 0) 472 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 473 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 474 hdr.Len = stride 475 hdr.Cap = stride 476 retVal = append(retVal, s) 477 r++ 478 } 479 return retVal, nil 480 481 } 482 return 483 } 484 485 /* Native Select for float64 */ 486 487 // SelectF64 creates a slice of flat data types. See Example of NativeSelectF64. 488 func SelectF64(t *Dense, axis int) (retVal [][]float64, err error) { 489 if err := checkNativeSelectable(t, axis, Float64); err != nil { 490 return nil, err 491 } 492 493 switch t.Shape().Dims() { 494 case 0, 1: 495 retVal = make([][]float64, 1) 496 retVal[0] = t.Float64s() 497 case 2: 498 if axis == 0 { 499 return MatrixF64(t) 500 } 501 fallthrough 502 default: 503 // size := t.Shape()[axis] 504 data := t.Float64s() 505 stride := t.Strides()[axis] 506 upper := ProdInts(t.Shape()[:axis+1]) 507 retVal = make([][]float64, 0, upper) 508 for i, r := 0, 0; r < upper; i += stride { 509 s := make([]float64, 0) 510 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 511 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 512 hdr.Len = stride 513 hdr.Cap = stride 514 retVal = append(retVal, s) 515 r++ 516 } 517 return retVal, nil 518 519 } 520 return 521 } 522 523 /* Native Select for complex64 */ 524 525 // SelectC64 creates a slice of flat data types. See Example of NativeSelectF64. 526 func SelectC64(t *Dense, axis int) (retVal [][]complex64, err error) { 527 if err := checkNativeSelectable(t, axis, Complex64); err != nil { 528 return nil, err 529 } 530 531 switch t.Shape().Dims() { 532 case 0, 1: 533 retVal = make([][]complex64, 1) 534 retVal[0] = t.Complex64s() 535 case 2: 536 if axis == 0 { 537 return MatrixC64(t) 538 } 539 fallthrough 540 default: 541 // size := t.Shape()[axis] 542 data := t.Complex64s() 543 stride := t.Strides()[axis] 544 upper := ProdInts(t.Shape()[:axis+1]) 545 retVal = make([][]complex64, 0, upper) 546 for i, r := 0, 0; r < upper; i += stride { 547 s := make([]complex64, 0) 548 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 549 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 550 hdr.Len = stride 551 hdr.Cap = stride 552 retVal = append(retVal, s) 553 r++ 554 } 555 return retVal, nil 556 557 } 558 return 559 } 560 561 /* Native Select for complex128 */ 562 563 // SelectC128 creates a slice of flat data types. See Example of NativeSelectF64. 564 func SelectC128(t *Dense, axis int) (retVal [][]complex128, err error) { 565 if err := checkNativeSelectable(t, axis, Complex128); err != nil { 566 return nil, err 567 } 568 569 switch t.Shape().Dims() { 570 case 0, 1: 571 retVal = make([][]complex128, 1) 572 retVal[0] = t.Complex128s() 573 case 2: 574 if axis == 0 { 575 return MatrixC128(t) 576 } 577 fallthrough 578 default: 579 // size := t.Shape()[axis] 580 data := t.Complex128s() 581 stride := t.Strides()[axis] 582 upper := ProdInts(t.Shape()[:axis+1]) 583 retVal = make([][]complex128, 0, upper) 584 for i, r := 0, 0; r < upper; i += stride { 585 s := make([]complex128, 0) 586 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 587 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 588 hdr.Len = stride 589 hdr.Cap = stride 590 retVal = append(retVal, s) 591 r++ 592 } 593 return retVal, nil 594 595 } 596 return 597 } 598 599 /* Native Select for string */ 600 601 // SelectStr creates a slice of flat data types. See Example of NativeSelectF64. 602 func SelectStr(t *Dense, axis int) (retVal [][]string, err error) { 603 if err := checkNativeSelectable(t, axis, String); err != nil { 604 return nil, err 605 } 606 607 switch t.Shape().Dims() { 608 case 0, 1: 609 retVal = make([][]string, 1) 610 retVal[0] = t.Strings() 611 case 2: 612 if axis == 0 { 613 return MatrixStr(t) 614 } 615 fallthrough 616 default: 617 // size := t.Shape()[axis] 618 data := t.Strings() 619 stride := t.Strides()[axis] 620 upper := ProdInts(t.Shape()[:axis+1]) 621 retVal = make([][]string, 0, upper) 622 for i, r := 0, 0; r < upper; i += stride { 623 s := make([]string, 0) 624 hdr := (*reflect.SliceHeader)(unsafe.Pointer(&s)) 625 hdr.Data = uintptr(unsafe.Pointer(&data[i])) 626 hdr.Len = stride 627 hdr.Cap = stride 628 retVal = append(retVal, s) 629 r++ 630 } 631 return retVal, nil 632 633 } 634 return 635 }