gorgonia.org/tensor@v0.9.24/dense_arith.go (about)

     1  // Code generated by genlib2. DO NOT EDIT.
     2  
     3  package tensor
     4  
     5  import "github.com/pkg/errors"
     6  
     7  // Add performs t + other elementwise. Both t and other must have the same shape.
     8  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
     9  func (t *Dense) Add(other *Dense, opts ...FuncOpt) (retVal *Dense, err error) {
    10  
    11  	var ret Tensor
    12  	if t.oe != nil {
    13  		if ret, err = t.oe.Add(t, other, opts...); err != nil {
    14  			return nil, errors.Wrapf(err, "Unable to do Add()")
    15  		}
    16  		if retVal, err = assertDense(ret); err != nil {
    17  			return nil, errors.Wrapf(err, opFail, "Add")
    18  		}
    19  		return
    20  	}
    21  
    22  	if adder, ok := t.e.(Adder); ok {
    23  		if ret, err = adder.Add(t, other, opts...); err != nil {
    24  			return nil, errors.Wrapf(err, "Unable to do Add()")
    25  		}
    26  		if retVal, err = assertDense(ret); err != nil {
    27  			return nil, errors.Wrapf(err, opFail, "Add")
    28  		}
    29  		return
    30  	}
    31  	return nil, errors.Errorf("Engine does not support Add()")
    32  }
    33  
    34  // Sub performs t - other elementwise. Both t and other must have the same shape.
    35  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
    36  func (t *Dense) Sub(other *Dense, opts ...FuncOpt) (retVal *Dense, err error) {
    37  
    38  	var ret Tensor
    39  	if t.oe != nil {
    40  		if ret, err = t.oe.Sub(t, other, opts...); err != nil {
    41  			return nil, errors.Wrapf(err, "Unable to do Sub()")
    42  		}
    43  		if retVal, err = assertDense(ret); err != nil {
    44  			return nil, errors.Wrapf(err, opFail, "Sub")
    45  		}
    46  		return
    47  	}
    48  
    49  	if suber, ok := t.e.(Suber); ok {
    50  		if ret, err = suber.Sub(t, other, opts...); err != nil {
    51  			return nil, errors.Wrapf(err, "Unable to do Sub()")
    52  		}
    53  		if retVal, err = assertDense(ret); err != nil {
    54  			return nil, errors.Wrapf(err, opFail, "Sub")
    55  		}
    56  		return
    57  	}
    58  	return nil, errors.Errorf("Engine does not support Sub()")
    59  }
    60  
    61  // Mul performs t × other elementwise. Both t and other must have the same shape.
    62  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
    63  func (t *Dense) Mul(other *Dense, opts ...FuncOpt) (retVal *Dense, err error) {
    64  
    65  	var ret Tensor
    66  	if t.oe != nil {
    67  		if ret, err = t.oe.Mul(t, other, opts...); err != nil {
    68  			return nil, errors.Wrapf(err, "Unable to do Mul()")
    69  		}
    70  		if retVal, err = assertDense(ret); err != nil {
    71  			return nil, errors.Wrapf(err, opFail, "Mul")
    72  		}
    73  		return
    74  	}
    75  
    76  	if muler, ok := t.e.(Muler); ok {
    77  		if ret, err = muler.Mul(t, other, opts...); err != nil {
    78  			return nil, errors.Wrapf(err, "Unable to do Mul()")
    79  		}
    80  		if retVal, err = assertDense(ret); err != nil {
    81  			return nil, errors.Wrapf(err, opFail, "Mul")
    82  		}
    83  		return
    84  	}
    85  	return nil, errors.Errorf("Engine does not support Mul()")
    86  }
    87  
    88  // Div performs t ÷ other elementwise. Both t and other must have the same shape.
    89  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
    90  func (t *Dense) Div(other *Dense, opts ...FuncOpt) (retVal *Dense, err error) {
    91  
    92  	var ret Tensor
    93  	if t.oe != nil {
    94  		if ret, err = t.oe.Div(t, other, opts...); err != nil {
    95  			return nil, errors.Wrapf(err, "Unable to do Div()")
    96  		}
    97  		if retVal, err = assertDense(ret); err != nil {
    98  			return nil, errors.Wrapf(err, opFail, "Div")
    99  		}
   100  		return
   101  	}
   102  
   103  	if diver, ok := t.e.(Diver); ok {
   104  		if ret, err = diver.Div(t, other, opts...); err != nil {
   105  			return nil, errors.Wrapf(err, "Unable to do Div()")
   106  		}
   107  		if retVal, err = assertDense(ret); err != nil {
   108  			return nil, errors.Wrapf(err, opFail, "Div")
   109  		}
   110  		return
   111  	}
   112  	return nil, errors.Errorf("Engine does not support Div()")
   113  }
   114  
   115  // Pow performs t ^ other elementwise. Both t and other must have the same shape.
   116  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
   117  func (t *Dense) Pow(other *Dense, opts ...FuncOpt) (retVal *Dense, err error) {
   118  
   119  	var ret Tensor
   120  	if t.oe != nil {
   121  		if ret, err = t.oe.Pow(t, other, opts...); err != nil {
   122  			return nil, errors.Wrapf(err, "Unable to do Pow()")
   123  		}
   124  		if retVal, err = assertDense(ret); err != nil {
   125  			return nil, errors.Wrapf(err, opFail, "Pow")
   126  		}
   127  		return
   128  	}
   129  
   130  	if power, ok := t.e.(Power); ok {
   131  		if ret, err = power.Pow(t, other, opts...); err != nil {
   132  			return nil, errors.Wrapf(err, "Unable to do Pow()")
   133  		}
   134  		if retVal, err = assertDense(ret); err != nil {
   135  			return nil, errors.Wrapf(err, opFail, "Pow")
   136  		}
   137  		return
   138  	}
   139  	return nil, errors.Errorf("Engine does not support Pow()")
   140  }
   141  
   142  // Mod performs t % other elementwise. Both t and other must have the same shape.
   143  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
   144  func (t *Dense) Mod(other *Dense, opts ...FuncOpt) (retVal *Dense, err error) {
   145  
   146  	var ret Tensor
   147  	if t.oe != nil {
   148  		if ret, err = t.oe.Mod(t, other, opts...); err != nil {
   149  			return nil, errors.Wrapf(err, "Unable to do Mod()")
   150  		}
   151  		if retVal, err = assertDense(ret); err != nil {
   152  			return nil, errors.Wrapf(err, opFail, "Mod")
   153  		}
   154  		return
   155  	}
   156  
   157  	if moder, ok := t.e.(Moder); ok {
   158  		if ret, err = moder.Mod(t, other, opts...); err != nil {
   159  			return nil, errors.Wrapf(err, "Unable to do Mod()")
   160  		}
   161  		if retVal, err = assertDense(ret); err != nil {
   162  			return nil, errors.Wrapf(err, opFail, "Mod")
   163  		}
   164  		return
   165  	}
   166  	return nil, errors.Errorf("Engine does not support Mod()")
   167  }
   168  
   169  // AddScalar performs t + other elementwise. The leftTensor parameter indicates if the tensor is the left operand. Only scalar types are accepted in other.
   170  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
   171  func (t *Dense) AddScalar(other interface{}, leftTensor bool, opts ...FuncOpt) (retVal *Dense, err error) {
   172  	var ret Tensor
   173  	if t.oe != nil {
   174  		if ret, err = t.oe.AddScalar(t, other, leftTensor, opts...); err != nil {
   175  			return nil, errors.Wrapf(err, "Unable to do AddScalar()")
   176  		}
   177  		if retVal, err = assertDense(ret); err != nil {
   178  			return nil, errors.Wrapf(err, opFail, "AddScalar")
   179  		}
   180  		return
   181  	}
   182  
   183  	if adder, ok := t.e.(Adder); ok {
   184  		if ret, err = adder.AddScalar(t, other, leftTensor, opts...); err != nil {
   185  			return nil, errors.Wrapf(err, "Unable to do AddScalar()")
   186  		}
   187  		if retVal, err = assertDense(ret); err != nil {
   188  			return nil, errors.Wrapf(err, opFail, "AddScalar")
   189  		}
   190  		return
   191  	}
   192  	return nil, errors.Errorf("Engine does not support AddScalar()")
   193  }
   194  
   195  // SubScalar performs t - other elementwise. The leftTensor parameter indicates if the tensor is the left operand. Only scalar types are accepted in other.
   196  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
   197  func (t *Dense) SubScalar(other interface{}, leftTensor bool, opts ...FuncOpt) (retVal *Dense, err error) {
   198  	var ret Tensor
   199  	if t.oe != nil {
   200  		if ret, err = t.oe.SubScalar(t, other, leftTensor, opts...); err != nil {
   201  			return nil, errors.Wrapf(err, "Unable to do SubScalar()")
   202  		}
   203  		if retVal, err = assertDense(ret); err != nil {
   204  			return nil, errors.Wrapf(err, opFail, "SubScalar")
   205  		}
   206  		return
   207  	}
   208  
   209  	if suber, ok := t.e.(Suber); ok {
   210  		if ret, err = suber.SubScalar(t, other, leftTensor, opts...); err != nil {
   211  			return nil, errors.Wrapf(err, "Unable to do SubScalar()")
   212  		}
   213  		if retVal, err = assertDense(ret); err != nil {
   214  			return nil, errors.Wrapf(err, opFail, "SubScalar")
   215  		}
   216  		return
   217  	}
   218  	return nil, errors.Errorf("Engine does not support SubScalar()")
   219  }
   220  
   221  // MulScalar performs t × other elementwise. The leftTensor parameter indicates if the tensor is the left operand. Only scalar types are accepted in other.
   222  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
   223  func (t *Dense) MulScalar(other interface{}, leftTensor bool, opts ...FuncOpt) (retVal *Dense, err error) {
   224  	var ret Tensor
   225  	if t.oe != nil {
   226  		if ret, err = t.oe.MulScalar(t, other, leftTensor, opts...); err != nil {
   227  			return nil, errors.Wrapf(err, "Unable to do MulScalar()")
   228  		}
   229  		if retVal, err = assertDense(ret); err != nil {
   230  			return nil, errors.Wrapf(err, opFail, "MulScalar")
   231  		}
   232  		return
   233  	}
   234  
   235  	if muler, ok := t.e.(Muler); ok {
   236  		if ret, err = muler.MulScalar(t, other, leftTensor, opts...); err != nil {
   237  			return nil, errors.Wrapf(err, "Unable to do MulScalar()")
   238  		}
   239  		if retVal, err = assertDense(ret); err != nil {
   240  			return nil, errors.Wrapf(err, opFail, "MulScalar")
   241  		}
   242  		return
   243  	}
   244  	return nil, errors.Errorf("Engine does not support MulScalar()")
   245  }
   246  
   247  // DivScalar performs t ÷ other elementwise. The leftTensor parameter indicates if the tensor is the left operand. Only scalar types are accepted in other.
   248  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
   249  func (t *Dense) DivScalar(other interface{}, leftTensor bool, opts ...FuncOpt) (retVal *Dense, err error) {
   250  	var ret Tensor
   251  	if t.oe != nil {
   252  		if ret, err = t.oe.DivScalar(t, other, leftTensor, opts...); err != nil {
   253  			return nil, errors.Wrapf(err, "Unable to do DivScalar()")
   254  		}
   255  		if retVal, err = assertDense(ret); err != nil {
   256  			return nil, errors.Wrapf(err, opFail, "DivScalar")
   257  		}
   258  		return
   259  	}
   260  
   261  	if diver, ok := t.e.(Diver); ok {
   262  		if ret, err = diver.DivScalar(t, other, leftTensor, opts...); err != nil {
   263  			return nil, errors.Wrapf(err, "Unable to do DivScalar()")
   264  		}
   265  		if retVal, err = assertDense(ret); err != nil {
   266  			return nil, errors.Wrapf(err, opFail, "DivScalar")
   267  		}
   268  		return
   269  	}
   270  	return nil, errors.Errorf("Engine does not support DivScalar()")
   271  }
   272  
   273  // PowScalar performs t ^ other elementwise. The leftTensor parameter indicates if the tensor is the left operand. Only scalar types are accepted in other.
   274  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
   275  func (t *Dense) PowScalar(other interface{}, leftTensor bool, opts ...FuncOpt) (retVal *Dense, err error) {
   276  	var ret Tensor
   277  	if t.oe != nil {
   278  		if ret, err = t.oe.PowScalar(t, other, leftTensor, opts...); err != nil {
   279  			return nil, errors.Wrapf(err, "Unable to do PowScalar()")
   280  		}
   281  		if retVal, err = assertDense(ret); err != nil {
   282  			return nil, errors.Wrapf(err, opFail, "PowScalar")
   283  		}
   284  		return
   285  	}
   286  
   287  	if power, ok := t.e.(Power); ok {
   288  		if ret, err = power.PowScalar(t, other, leftTensor, opts...); err != nil {
   289  			return nil, errors.Wrapf(err, "Unable to do PowScalar()")
   290  		}
   291  		if retVal, err = assertDense(ret); err != nil {
   292  			return nil, errors.Wrapf(err, opFail, "PowScalar")
   293  		}
   294  		return
   295  	}
   296  	return nil, errors.Errorf("Engine does not support PowScalar()")
   297  }
   298  
   299  // ModScalar performs t % other elementwise. The leftTensor parameter indicates if the tensor is the left operand. Only scalar types are accepted in other.
   300  // Acceptable FuncOpts are: UseUnsafe(), WithReuse(T), WithIncr(T)
   301  func (t *Dense) ModScalar(other interface{}, leftTensor bool, opts ...FuncOpt) (retVal *Dense, err error) {
   302  	var ret Tensor
   303  	if t.oe != nil {
   304  		if ret, err = t.oe.ModScalar(t, other, leftTensor, opts...); err != nil {
   305  			return nil, errors.Wrapf(err, "Unable to do ModScalar()")
   306  		}
   307  		if retVal, err = assertDense(ret); err != nil {
   308  			return nil, errors.Wrapf(err, opFail, "ModScalar")
   309  		}
   310  		return
   311  	}
   312  
   313  	if moder, ok := t.e.(Moder); ok {
   314  		if ret, err = moder.ModScalar(t, other, leftTensor, opts...); err != nil {
   315  			return nil, errors.Wrapf(err, "Unable to do ModScalar()")
   316  		}
   317  		if retVal, err = assertDense(ret); err != nil {
   318  			return nil, errors.Wrapf(err, opFail, "ModScalar")
   319  		}
   320  		return
   321  	}
   322  	return nil, errors.Errorf("Engine does not support ModScalar()")
   323  }