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  }