github.com/wzzhu/tensor@v0.9.24/internal/execution/eng_reduce.go (about) 1 // Code generated by genlib2. DO NOT EDIT. 2 3 package execution 4 5 import ( 6 "reflect" 7 "unsafe" 8 9 "github.com/pkg/errors" 10 "github.com/wzzhu/tensor/internal/storage" 11 ) 12 13 func (e E) ReduceFirst(t reflect.Type, data *storage.Header, retVal *storage.Header, split int, size int, fn interface{}) (err error) { 14 switch t { 15 case Bool: 16 dt := data.Bools() 17 rt := retVal.Bools() 18 switch f := fn.(type) { 19 case func([]bool, []bool): 20 reduceFirstB(dt, rt, split, size, f) 21 case func(bool, bool) bool: 22 genericReduceFirstB(dt, rt, split, size, f) 23 default: 24 return errors.Errorf(reductionErrMsg, fn) 25 } 26 return nil 27 case Int: 28 dt := data.Ints() 29 rt := retVal.Ints() 30 switch f := fn.(type) { 31 case func([]int, []int): 32 reduceFirstI(dt, rt, split, size, f) 33 case func(int, int) int: 34 genericReduceFirstI(dt, rt, split, size, f) 35 default: 36 return errors.Errorf(reductionErrMsg, fn) 37 } 38 return nil 39 case Int8: 40 dt := data.Int8s() 41 rt := retVal.Int8s() 42 switch f := fn.(type) { 43 case func([]int8, []int8): 44 reduceFirstI8(dt, rt, split, size, f) 45 case func(int8, int8) int8: 46 genericReduceFirstI8(dt, rt, split, size, f) 47 default: 48 return errors.Errorf(reductionErrMsg, fn) 49 } 50 return nil 51 case Int16: 52 dt := data.Int16s() 53 rt := retVal.Int16s() 54 switch f := fn.(type) { 55 case func([]int16, []int16): 56 reduceFirstI16(dt, rt, split, size, f) 57 case func(int16, int16) int16: 58 genericReduceFirstI16(dt, rt, split, size, f) 59 default: 60 return errors.Errorf(reductionErrMsg, fn) 61 } 62 return nil 63 case Int32: 64 dt := data.Int32s() 65 rt := retVal.Int32s() 66 switch f := fn.(type) { 67 case func([]int32, []int32): 68 reduceFirstI32(dt, rt, split, size, f) 69 case func(int32, int32) int32: 70 genericReduceFirstI32(dt, rt, split, size, f) 71 default: 72 return errors.Errorf(reductionErrMsg, fn) 73 } 74 return nil 75 case Int64: 76 dt := data.Int64s() 77 rt := retVal.Int64s() 78 switch f := fn.(type) { 79 case func([]int64, []int64): 80 reduceFirstI64(dt, rt, split, size, f) 81 case func(int64, int64) int64: 82 genericReduceFirstI64(dt, rt, split, size, f) 83 default: 84 return errors.Errorf(reductionErrMsg, fn) 85 } 86 return nil 87 case Uint: 88 dt := data.Uints() 89 rt := retVal.Uints() 90 switch f := fn.(type) { 91 case func([]uint, []uint): 92 reduceFirstU(dt, rt, split, size, f) 93 case func(uint, uint) uint: 94 genericReduceFirstU(dt, rt, split, size, f) 95 default: 96 return errors.Errorf(reductionErrMsg, fn) 97 } 98 return nil 99 case Uint8: 100 dt := data.Uint8s() 101 rt := retVal.Uint8s() 102 switch f := fn.(type) { 103 case func([]uint8, []uint8): 104 reduceFirstU8(dt, rt, split, size, f) 105 case func(uint8, uint8) uint8: 106 genericReduceFirstU8(dt, rt, split, size, f) 107 default: 108 return errors.Errorf(reductionErrMsg, fn) 109 } 110 return nil 111 case Uint16: 112 dt := data.Uint16s() 113 rt := retVal.Uint16s() 114 switch f := fn.(type) { 115 case func([]uint16, []uint16): 116 reduceFirstU16(dt, rt, split, size, f) 117 case func(uint16, uint16) uint16: 118 genericReduceFirstU16(dt, rt, split, size, f) 119 default: 120 return errors.Errorf(reductionErrMsg, fn) 121 } 122 return nil 123 case Uint32: 124 dt := data.Uint32s() 125 rt := retVal.Uint32s() 126 switch f := fn.(type) { 127 case func([]uint32, []uint32): 128 reduceFirstU32(dt, rt, split, size, f) 129 case func(uint32, uint32) uint32: 130 genericReduceFirstU32(dt, rt, split, size, f) 131 default: 132 return errors.Errorf(reductionErrMsg, fn) 133 } 134 return nil 135 case Uint64: 136 dt := data.Uint64s() 137 rt := retVal.Uint64s() 138 switch f := fn.(type) { 139 case func([]uint64, []uint64): 140 reduceFirstU64(dt, rt, split, size, f) 141 case func(uint64, uint64) uint64: 142 genericReduceFirstU64(dt, rt, split, size, f) 143 default: 144 return errors.Errorf(reductionErrMsg, fn) 145 } 146 return nil 147 case Uintptr: 148 dt := data.Uintptrs() 149 rt := retVal.Uintptrs() 150 switch f := fn.(type) { 151 case func([]uintptr, []uintptr): 152 reduceFirstUintptr(dt, rt, split, size, f) 153 case func(uintptr, uintptr) uintptr: 154 genericReduceFirstUintptr(dt, rt, split, size, f) 155 default: 156 return errors.Errorf(reductionErrMsg, fn) 157 } 158 return nil 159 case Float32: 160 dt := data.Float32s() 161 rt := retVal.Float32s() 162 switch f := fn.(type) { 163 case func([]float32, []float32): 164 reduceFirstF32(dt, rt, split, size, f) 165 case func(float32, float32) float32: 166 genericReduceFirstF32(dt, rt, split, size, f) 167 default: 168 return errors.Errorf(reductionErrMsg, fn) 169 } 170 return nil 171 case Float64: 172 dt := data.Float64s() 173 rt := retVal.Float64s() 174 switch f := fn.(type) { 175 case func([]float64, []float64): 176 reduceFirstF64(dt, rt, split, size, f) 177 case func(float64, float64) float64: 178 genericReduceFirstF64(dt, rt, split, size, f) 179 default: 180 return errors.Errorf(reductionErrMsg, fn) 181 } 182 return nil 183 case Complex64: 184 dt := data.Complex64s() 185 rt := retVal.Complex64s() 186 switch f := fn.(type) { 187 case func([]complex64, []complex64): 188 reduceFirstC64(dt, rt, split, size, f) 189 case func(complex64, complex64) complex64: 190 genericReduceFirstC64(dt, rt, split, size, f) 191 default: 192 return errors.Errorf(reductionErrMsg, fn) 193 } 194 return nil 195 case Complex128: 196 dt := data.Complex128s() 197 rt := retVal.Complex128s() 198 switch f := fn.(type) { 199 case func([]complex128, []complex128): 200 reduceFirstC128(dt, rt, split, size, f) 201 case func(complex128, complex128) complex128: 202 genericReduceFirstC128(dt, rt, split, size, f) 203 default: 204 return errors.Errorf(reductionErrMsg, fn) 205 } 206 return nil 207 case String: 208 dt := data.Strings() 209 rt := retVal.Strings() 210 switch f := fn.(type) { 211 case func([]string, []string): 212 reduceFirstStr(dt, rt, split, size, f) 213 case func(string, string) string: 214 genericReduceFirstStr(dt, rt, split, size, f) 215 default: 216 return errors.Errorf(reductionErrMsg, fn) 217 } 218 return nil 219 case UnsafePointer: 220 dt := data.UnsafePointers() 221 rt := retVal.UnsafePointers() 222 switch f := fn.(type) { 223 case func([]unsafe.Pointer, []unsafe.Pointer): 224 reduceFirstUnsafePointer(dt, rt, split, size, f) 225 case func(unsafe.Pointer, unsafe.Pointer) unsafe.Pointer: 226 genericReduceFirstUnsafePointer(dt, rt, split, size, f) 227 default: 228 return errors.Errorf(reductionErrMsg, fn) 229 } 230 return nil 231 default: 232 return errors.Errorf("Unsupported type %v for ReduceFirst", t) 233 } 234 } 235 236 func (e E) ReduceLast(t reflect.Type, data *storage.Header, retVal *storage.Header, dimSize int, defaultValue interface{}, fn interface{}) (err error) { 237 var ok bool 238 switch t { 239 case Bool: 240 var def bool 241 242 if def, ok = defaultValue.(bool); !ok { 243 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 244 } 245 dt := data.Bools() 246 rt := retVal.Bools() 247 switch f := fn.(type) { 248 case func([]bool) bool: 249 reduceLastB(dt, rt, dimSize, def, f) 250 case func(bool, bool) bool: 251 genericReduceLastB(dt, rt, dimSize, def, f) 252 default: 253 return errors.Errorf(reductionErrMsg, fn) 254 } 255 return nil 256 case Int: 257 var def int 258 259 if def, ok = defaultValue.(int); !ok { 260 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 261 } 262 dt := data.Ints() 263 rt := retVal.Ints() 264 switch f := fn.(type) { 265 case func([]int) int: 266 reduceLastI(dt, rt, dimSize, def, f) 267 case func(int, int) int: 268 genericReduceLastI(dt, rt, dimSize, def, f) 269 default: 270 return errors.Errorf(reductionErrMsg, fn) 271 } 272 return nil 273 case Int8: 274 var def int8 275 276 if def, ok = defaultValue.(int8); !ok { 277 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 278 } 279 dt := data.Int8s() 280 rt := retVal.Int8s() 281 switch f := fn.(type) { 282 case func([]int8) int8: 283 reduceLastI8(dt, rt, dimSize, def, f) 284 case func(int8, int8) int8: 285 genericReduceLastI8(dt, rt, dimSize, def, f) 286 default: 287 return errors.Errorf(reductionErrMsg, fn) 288 } 289 return nil 290 case Int16: 291 var def int16 292 293 if def, ok = defaultValue.(int16); !ok { 294 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 295 } 296 dt := data.Int16s() 297 rt := retVal.Int16s() 298 switch f := fn.(type) { 299 case func([]int16) int16: 300 reduceLastI16(dt, rt, dimSize, def, f) 301 case func(int16, int16) int16: 302 genericReduceLastI16(dt, rt, dimSize, def, f) 303 default: 304 return errors.Errorf(reductionErrMsg, fn) 305 } 306 return nil 307 case Int32: 308 var def int32 309 310 if def, ok = defaultValue.(int32); !ok { 311 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 312 } 313 dt := data.Int32s() 314 rt := retVal.Int32s() 315 switch f := fn.(type) { 316 case func([]int32) int32: 317 reduceLastI32(dt, rt, dimSize, def, f) 318 case func(int32, int32) int32: 319 genericReduceLastI32(dt, rt, dimSize, def, f) 320 default: 321 return errors.Errorf(reductionErrMsg, fn) 322 } 323 return nil 324 case Int64: 325 var def int64 326 327 if def, ok = defaultValue.(int64); !ok { 328 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 329 } 330 dt := data.Int64s() 331 rt := retVal.Int64s() 332 switch f := fn.(type) { 333 case func([]int64) int64: 334 reduceLastI64(dt, rt, dimSize, def, f) 335 case func(int64, int64) int64: 336 genericReduceLastI64(dt, rt, dimSize, def, f) 337 default: 338 return errors.Errorf(reductionErrMsg, fn) 339 } 340 return nil 341 case Uint: 342 var def uint 343 344 if def, ok = defaultValue.(uint); !ok { 345 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 346 } 347 dt := data.Uints() 348 rt := retVal.Uints() 349 switch f := fn.(type) { 350 case func([]uint) uint: 351 reduceLastU(dt, rt, dimSize, def, f) 352 case func(uint, uint) uint: 353 genericReduceLastU(dt, rt, dimSize, def, f) 354 default: 355 return errors.Errorf(reductionErrMsg, fn) 356 } 357 return nil 358 case Uint8: 359 var def uint8 360 361 if def, ok = defaultValue.(uint8); !ok { 362 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 363 } 364 dt := data.Uint8s() 365 rt := retVal.Uint8s() 366 switch f := fn.(type) { 367 case func([]uint8) uint8: 368 reduceLastU8(dt, rt, dimSize, def, f) 369 case func(uint8, uint8) uint8: 370 genericReduceLastU8(dt, rt, dimSize, def, f) 371 default: 372 return errors.Errorf(reductionErrMsg, fn) 373 } 374 return nil 375 case Uint16: 376 var def uint16 377 378 if def, ok = defaultValue.(uint16); !ok { 379 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 380 } 381 dt := data.Uint16s() 382 rt := retVal.Uint16s() 383 switch f := fn.(type) { 384 case func([]uint16) uint16: 385 reduceLastU16(dt, rt, dimSize, def, f) 386 case func(uint16, uint16) uint16: 387 genericReduceLastU16(dt, rt, dimSize, def, f) 388 default: 389 return errors.Errorf(reductionErrMsg, fn) 390 } 391 return nil 392 case Uint32: 393 var def uint32 394 395 if def, ok = defaultValue.(uint32); !ok { 396 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 397 } 398 dt := data.Uint32s() 399 rt := retVal.Uint32s() 400 switch f := fn.(type) { 401 case func([]uint32) uint32: 402 reduceLastU32(dt, rt, dimSize, def, f) 403 case func(uint32, uint32) uint32: 404 genericReduceLastU32(dt, rt, dimSize, def, f) 405 default: 406 return errors.Errorf(reductionErrMsg, fn) 407 } 408 return nil 409 case Uint64: 410 var def uint64 411 412 if def, ok = defaultValue.(uint64); !ok { 413 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 414 } 415 dt := data.Uint64s() 416 rt := retVal.Uint64s() 417 switch f := fn.(type) { 418 case func([]uint64) uint64: 419 reduceLastU64(dt, rt, dimSize, def, f) 420 case func(uint64, uint64) uint64: 421 genericReduceLastU64(dt, rt, dimSize, def, f) 422 default: 423 return errors.Errorf(reductionErrMsg, fn) 424 } 425 return nil 426 case Uintptr: 427 var def uintptr 428 429 if def, ok = defaultValue.(uintptr); !ok { 430 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 431 } 432 dt := data.Uintptrs() 433 rt := retVal.Uintptrs() 434 switch f := fn.(type) { 435 case func([]uintptr) uintptr: 436 reduceLastUintptr(dt, rt, dimSize, def, f) 437 case func(uintptr, uintptr) uintptr: 438 genericReduceLastUintptr(dt, rt, dimSize, def, f) 439 default: 440 return errors.Errorf(reductionErrMsg, fn) 441 } 442 return nil 443 case Float32: 444 var def float32 445 446 if def, ok = defaultValue.(float32); !ok { 447 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 448 } 449 dt := data.Float32s() 450 rt := retVal.Float32s() 451 switch f := fn.(type) { 452 case func([]float32) float32: 453 reduceLastF32(dt, rt, dimSize, def, f) 454 case func(float32, float32) float32: 455 genericReduceLastF32(dt, rt, dimSize, def, f) 456 default: 457 return errors.Errorf(reductionErrMsg, fn) 458 } 459 return nil 460 case Float64: 461 var def float64 462 463 if def, ok = defaultValue.(float64); !ok { 464 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 465 } 466 dt := data.Float64s() 467 rt := retVal.Float64s() 468 switch f := fn.(type) { 469 case func([]float64) float64: 470 reduceLastF64(dt, rt, dimSize, def, f) 471 case func(float64, float64) float64: 472 genericReduceLastF64(dt, rt, dimSize, def, f) 473 default: 474 return errors.Errorf(reductionErrMsg, fn) 475 } 476 return nil 477 case Complex64: 478 var def complex64 479 480 if def, ok = defaultValue.(complex64); !ok { 481 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 482 } 483 dt := data.Complex64s() 484 rt := retVal.Complex64s() 485 switch f := fn.(type) { 486 case func([]complex64) complex64: 487 reduceLastC64(dt, rt, dimSize, def, f) 488 case func(complex64, complex64) complex64: 489 genericReduceLastC64(dt, rt, dimSize, def, f) 490 default: 491 return errors.Errorf(reductionErrMsg, fn) 492 } 493 return nil 494 case Complex128: 495 var def complex128 496 497 if def, ok = defaultValue.(complex128); !ok { 498 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 499 } 500 dt := data.Complex128s() 501 rt := retVal.Complex128s() 502 switch f := fn.(type) { 503 case func([]complex128) complex128: 504 reduceLastC128(dt, rt, dimSize, def, f) 505 case func(complex128, complex128) complex128: 506 genericReduceLastC128(dt, rt, dimSize, def, f) 507 default: 508 return errors.Errorf(reductionErrMsg, fn) 509 } 510 return nil 511 case String: 512 var def string 513 514 if def, ok = defaultValue.(string); !ok { 515 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 516 } 517 dt := data.Strings() 518 rt := retVal.Strings() 519 switch f := fn.(type) { 520 case func([]string) string: 521 reduceLastStr(dt, rt, dimSize, def, f) 522 case func(string, string) string: 523 genericReduceLastStr(dt, rt, dimSize, def, f) 524 default: 525 return errors.Errorf(reductionErrMsg, fn) 526 } 527 return nil 528 case UnsafePointer: 529 var def unsafe.Pointer 530 531 if def, ok = defaultValue.(unsafe.Pointer); !ok { 532 return errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 533 } 534 dt := data.UnsafePointers() 535 rt := retVal.UnsafePointers() 536 switch f := fn.(type) { 537 case func([]unsafe.Pointer) unsafe.Pointer: 538 reduceLastUnsafePointer(dt, rt, dimSize, def, f) 539 case func(unsafe.Pointer, unsafe.Pointer) unsafe.Pointer: 540 genericReduceLastUnsafePointer(dt, rt, dimSize, def, f) 541 default: 542 return errors.Errorf(reductionErrMsg, fn) 543 } 544 return nil 545 default: 546 return errors.Errorf("Unsupported type %v for ReduceLast", t) 547 } 548 } 549 550 func (e E) ReduceDefault(t reflect.Type, data *storage.Header, retVal *storage.Header, dim0 int, dimSize int, outerStride int, stride int, expected int, fn interface{}) (err error) { 551 var ok bool 552 switch t { 553 case Bool: 554 var f func(bool, bool) bool 555 if f, ok = fn.(func(bool, bool) bool); !ok { 556 return errors.Errorf(reductionErrMsg, fn) 557 } 558 dt := data.Bools() 559 rt := retVal.Bools() 560 reduceDefaultB(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 561 return nil 562 case Int: 563 var f func(int, int) int 564 if f, ok = fn.(func(int, int) int); !ok { 565 return errors.Errorf(reductionErrMsg, fn) 566 } 567 dt := data.Ints() 568 rt := retVal.Ints() 569 reduceDefaultI(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 570 return nil 571 case Int8: 572 var f func(int8, int8) int8 573 if f, ok = fn.(func(int8, int8) int8); !ok { 574 return errors.Errorf(reductionErrMsg, fn) 575 } 576 dt := data.Int8s() 577 rt := retVal.Int8s() 578 reduceDefaultI8(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 579 return nil 580 case Int16: 581 var f func(int16, int16) int16 582 if f, ok = fn.(func(int16, int16) int16); !ok { 583 return errors.Errorf(reductionErrMsg, fn) 584 } 585 dt := data.Int16s() 586 rt := retVal.Int16s() 587 reduceDefaultI16(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 588 return nil 589 case Int32: 590 var f func(int32, int32) int32 591 if f, ok = fn.(func(int32, int32) int32); !ok { 592 return errors.Errorf(reductionErrMsg, fn) 593 } 594 dt := data.Int32s() 595 rt := retVal.Int32s() 596 reduceDefaultI32(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 597 return nil 598 case Int64: 599 var f func(int64, int64) int64 600 if f, ok = fn.(func(int64, int64) int64); !ok { 601 return errors.Errorf(reductionErrMsg, fn) 602 } 603 dt := data.Int64s() 604 rt := retVal.Int64s() 605 reduceDefaultI64(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 606 return nil 607 case Uint: 608 var f func(uint, uint) uint 609 if f, ok = fn.(func(uint, uint) uint); !ok { 610 return errors.Errorf(reductionErrMsg, fn) 611 } 612 dt := data.Uints() 613 rt := retVal.Uints() 614 reduceDefaultU(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 615 return nil 616 case Uint8: 617 var f func(uint8, uint8) uint8 618 if f, ok = fn.(func(uint8, uint8) uint8); !ok { 619 return errors.Errorf(reductionErrMsg, fn) 620 } 621 dt := data.Uint8s() 622 rt := retVal.Uint8s() 623 reduceDefaultU8(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 624 return nil 625 case Uint16: 626 var f func(uint16, uint16) uint16 627 if f, ok = fn.(func(uint16, uint16) uint16); !ok { 628 return errors.Errorf(reductionErrMsg, fn) 629 } 630 dt := data.Uint16s() 631 rt := retVal.Uint16s() 632 reduceDefaultU16(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 633 return nil 634 case Uint32: 635 var f func(uint32, uint32) uint32 636 if f, ok = fn.(func(uint32, uint32) uint32); !ok { 637 return errors.Errorf(reductionErrMsg, fn) 638 } 639 dt := data.Uint32s() 640 rt := retVal.Uint32s() 641 reduceDefaultU32(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 642 return nil 643 case Uint64: 644 var f func(uint64, uint64) uint64 645 if f, ok = fn.(func(uint64, uint64) uint64); !ok { 646 return errors.Errorf(reductionErrMsg, fn) 647 } 648 dt := data.Uint64s() 649 rt := retVal.Uint64s() 650 reduceDefaultU64(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 651 return nil 652 case Uintptr: 653 var f func(uintptr, uintptr) uintptr 654 if f, ok = fn.(func(uintptr, uintptr) uintptr); !ok { 655 return errors.Errorf(reductionErrMsg, fn) 656 } 657 dt := data.Uintptrs() 658 rt := retVal.Uintptrs() 659 reduceDefaultUintptr(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 660 return nil 661 case Float32: 662 var f func(float32, float32) float32 663 if f, ok = fn.(func(float32, float32) float32); !ok { 664 return errors.Errorf(reductionErrMsg, fn) 665 } 666 dt := data.Float32s() 667 rt := retVal.Float32s() 668 reduceDefaultF32(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 669 return nil 670 case Float64: 671 var f func(float64, float64) float64 672 if f, ok = fn.(func(float64, float64) float64); !ok { 673 return errors.Errorf(reductionErrMsg, fn) 674 } 675 dt := data.Float64s() 676 rt := retVal.Float64s() 677 reduceDefaultF64(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 678 return nil 679 case Complex64: 680 var f func(complex64, complex64) complex64 681 if f, ok = fn.(func(complex64, complex64) complex64); !ok { 682 return errors.Errorf(reductionErrMsg, fn) 683 } 684 dt := data.Complex64s() 685 rt := retVal.Complex64s() 686 reduceDefaultC64(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 687 return nil 688 case Complex128: 689 var f func(complex128, complex128) complex128 690 if f, ok = fn.(func(complex128, complex128) complex128); !ok { 691 return errors.Errorf(reductionErrMsg, fn) 692 } 693 dt := data.Complex128s() 694 rt := retVal.Complex128s() 695 reduceDefaultC128(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 696 return nil 697 case String: 698 var f func(string, string) string 699 if f, ok = fn.(func(string, string) string); !ok { 700 return errors.Errorf(reductionErrMsg, fn) 701 } 702 dt := data.Strings() 703 rt := retVal.Strings() 704 reduceDefaultStr(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 705 return nil 706 case UnsafePointer: 707 var f func(unsafe.Pointer, unsafe.Pointer) unsafe.Pointer 708 if f, ok = fn.(func(unsafe.Pointer, unsafe.Pointer) unsafe.Pointer); !ok { 709 return errors.Errorf(reductionErrMsg, fn) 710 } 711 dt := data.UnsafePointers() 712 rt := retVal.UnsafePointers() 713 reduceDefaultUnsafePointer(dt, rt, dim0, dimSize, outerStride, stride, expected, f) 714 return nil 715 default: 716 return errors.Errorf("Unsupported type %v for ReduceDefault", t) 717 } 718 } 719 720 func (e E) Reduce(t reflect.Type, a *storage.Header, defaultValue interface{}, fn interface{}) (retVal interface{}, err error) { 721 var ok bool 722 switch t { 723 case Bool: 724 var f func(bool, bool) bool 725 var def bool 726 if f, ok = fn.(func(bool, bool) bool); !ok { 727 return nil, errors.Errorf(reductionErrMsg, fn) 728 } 729 if def, ok = defaultValue.(bool); !ok { 730 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 731 } 732 retVal = ReduceB(f, def, a.Bools()...) 733 return 734 case Int: 735 var f func(int, int) int 736 var def int 737 if f, ok = fn.(func(int, int) int); !ok { 738 return nil, errors.Errorf(reductionErrMsg, fn) 739 } 740 if def, ok = defaultValue.(int); !ok { 741 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 742 } 743 retVal = ReduceI(f, def, a.Ints()...) 744 return 745 case Int8: 746 var f func(int8, int8) int8 747 var def int8 748 if f, ok = fn.(func(int8, int8) int8); !ok { 749 return nil, errors.Errorf(reductionErrMsg, fn) 750 } 751 if def, ok = defaultValue.(int8); !ok { 752 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 753 } 754 retVal = ReduceI8(f, def, a.Int8s()...) 755 return 756 case Int16: 757 var f func(int16, int16) int16 758 var def int16 759 if f, ok = fn.(func(int16, int16) int16); !ok { 760 return nil, errors.Errorf(reductionErrMsg, fn) 761 } 762 if def, ok = defaultValue.(int16); !ok { 763 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 764 } 765 retVal = ReduceI16(f, def, a.Int16s()...) 766 return 767 case Int32: 768 var f func(int32, int32) int32 769 var def int32 770 if f, ok = fn.(func(int32, int32) int32); !ok { 771 return nil, errors.Errorf(reductionErrMsg, fn) 772 } 773 if def, ok = defaultValue.(int32); !ok { 774 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 775 } 776 retVal = ReduceI32(f, def, a.Int32s()...) 777 return 778 case Int64: 779 var f func(int64, int64) int64 780 var def int64 781 if f, ok = fn.(func(int64, int64) int64); !ok { 782 return nil, errors.Errorf(reductionErrMsg, fn) 783 } 784 if def, ok = defaultValue.(int64); !ok { 785 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 786 } 787 retVal = ReduceI64(f, def, a.Int64s()...) 788 return 789 case Uint: 790 var f func(uint, uint) uint 791 var def uint 792 if f, ok = fn.(func(uint, uint) uint); !ok { 793 return nil, errors.Errorf(reductionErrMsg, fn) 794 } 795 if def, ok = defaultValue.(uint); !ok { 796 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 797 } 798 retVal = ReduceU(f, def, a.Uints()...) 799 return 800 case Uint8: 801 var f func(uint8, uint8) uint8 802 var def uint8 803 if f, ok = fn.(func(uint8, uint8) uint8); !ok { 804 return nil, errors.Errorf(reductionErrMsg, fn) 805 } 806 if def, ok = defaultValue.(uint8); !ok { 807 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 808 } 809 retVal = ReduceU8(f, def, a.Uint8s()...) 810 return 811 case Uint16: 812 var f func(uint16, uint16) uint16 813 var def uint16 814 if f, ok = fn.(func(uint16, uint16) uint16); !ok { 815 return nil, errors.Errorf(reductionErrMsg, fn) 816 } 817 if def, ok = defaultValue.(uint16); !ok { 818 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 819 } 820 retVal = ReduceU16(f, def, a.Uint16s()...) 821 return 822 case Uint32: 823 var f func(uint32, uint32) uint32 824 var def uint32 825 if f, ok = fn.(func(uint32, uint32) uint32); !ok { 826 return nil, errors.Errorf(reductionErrMsg, fn) 827 } 828 if def, ok = defaultValue.(uint32); !ok { 829 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 830 } 831 retVal = ReduceU32(f, def, a.Uint32s()...) 832 return 833 case Uint64: 834 var f func(uint64, uint64) uint64 835 var def uint64 836 if f, ok = fn.(func(uint64, uint64) uint64); !ok { 837 return nil, errors.Errorf(reductionErrMsg, fn) 838 } 839 if def, ok = defaultValue.(uint64); !ok { 840 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 841 } 842 retVal = ReduceU64(f, def, a.Uint64s()...) 843 return 844 case Uintptr: 845 var f func(uintptr, uintptr) uintptr 846 var def uintptr 847 if f, ok = fn.(func(uintptr, uintptr) uintptr); !ok { 848 return nil, errors.Errorf(reductionErrMsg, fn) 849 } 850 if def, ok = defaultValue.(uintptr); !ok { 851 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 852 } 853 retVal = ReduceUintptr(f, def, a.Uintptrs()...) 854 return 855 case Float32: 856 var f func(float32, float32) float32 857 var def float32 858 if f, ok = fn.(func(float32, float32) float32); !ok { 859 return nil, errors.Errorf(reductionErrMsg, fn) 860 } 861 if def, ok = defaultValue.(float32); !ok { 862 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 863 } 864 retVal = ReduceF32(f, def, a.Float32s()...) 865 return 866 case Float64: 867 var f func(float64, float64) float64 868 var def float64 869 if f, ok = fn.(func(float64, float64) float64); !ok { 870 return nil, errors.Errorf(reductionErrMsg, fn) 871 } 872 if def, ok = defaultValue.(float64); !ok { 873 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 874 } 875 retVal = ReduceF64(f, def, a.Float64s()...) 876 return 877 case Complex64: 878 var f func(complex64, complex64) complex64 879 var def complex64 880 if f, ok = fn.(func(complex64, complex64) complex64); !ok { 881 return nil, errors.Errorf(reductionErrMsg, fn) 882 } 883 if def, ok = defaultValue.(complex64); !ok { 884 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 885 } 886 retVal = ReduceC64(f, def, a.Complex64s()...) 887 return 888 case Complex128: 889 var f func(complex128, complex128) complex128 890 var def complex128 891 if f, ok = fn.(func(complex128, complex128) complex128); !ok { 892 return nil, errors.Errorf(reductionErrMsg, fn) 893 } 894 if def, ok = defaultValue.(complex128); !ok { 895 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 896 } 897 retVal = ReduceC128(f, def, a.Complex128s()...) 898 return 899 case String: 900 var f func(string, string) string 901 var def string 902 if f, ok = fn.(func(string, string) string); !ok { 903 return nil, errors.Errorf(reductionErrMsg, fn) 904 } 905 if def, ok = defaultValue.(string); !ok { 906 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 907 } 908 retVal = ReduceStr(f, def, a.Strings()...) 909 return 910 case UnsafePointer: 911 var f func(unsafe.Pointer, unsafe.Pointer) unsafe.Pointer 912 var def unsafe.Pointer 913 if f, ok = fn.(func(unsafe.Pointer, unsafe.Pointer) unsafe.Pointer); !ok { 914 return nil, errors.Errorf(reductionErrMsg, fn) 915 } 916 if def, ok = defaultValue.(unsafe.Pointer); !ok { 917 return nil, errors.Errorf(defaultValueErrMsg, def, defaultValue, defaultValue) 918 } 919 retVal = ReduceUnsafePointer(f, def, a.UnsafePointers()...) 920 return 921 default: 922 return nil, errors.Errorf("Unsupported type %v for Reduce", t) 923 } 924 }