github.com/gorgonia/agogo@v0.1.1/utils.go (about) 1 package agogo 2 3 import ( 4 "bytes" 5 "fmt" 6 7 "github.com/pkg/errors" 8 "gorgonia.org/tensor" 9 ) 10 11 type slicer struct { 12 v tensor.View 13 err error 14 } 15 16 func (s *slicer) Slice(a *tensor.Dense, slices ...tensor.Slice) *tensor.Dense { 17 if s.err != nil { 18 return nil 19 } 20 if s.v, s.err = a.Slice(slices...); s.err != nil { 21 s.err = errors.Wrapf(s.err, "Slicer failed") // get a stack trace 22 return nil 23 } 24 return s.v.(*tensor.Dense) 25 } 26 27 type rs struct { 28 start, end, step int 29 } 30 31 func (s rs) Start() int { return s.start } 32 func (s rs) End() int { return s.end } 33 func (s rs) Step() int { return s.step } 34 35 // s creates a ranged slice. It takes an optional step param. 36 func sli(start, end int, opts ...int) rs { 37 step := 1 38 if len(opts) > 0 { 39 step = opts[0] 40 } 41 return rs{ 42 start: start, 43 end: end, 44 step: step, 45 } 46 } 47 48 type manyErr []error 49 50 func (err manyErr) Error() string { 51 var buf bytes.Buffer 52 for _, e := range err { 53 fmt.Fprintln(&buf, e.Error()) 54 } 55 return buf.String() 56 }