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  }