gts

package module
v0.0.0-...-c3f3aa7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 18, 2021 License: MIT Imports: 7 Imported by: 0

README

go-gts

Lightweight Go module for defining very general time series objects.

Install
go get github.com/uscott/go-gts
Usage

The module defines interface GenericDataPoint

type GenericDataPoint interface {
	GetTimeStamp() time.Time
	GetValue() interface{}
}

and


type GenericRawSeries []GenericDataPoint

type GenericTimeSeries struct {
	data 	GenericRawSeries
	durcap 	time.Duration
	lencap 	int
}

which allows any array of objects that implements the GenericDataPoint interface to be made into a GenericTimeSeries.

Example

Refer to example folder

package main

import (
	"math/rand"
	"time"

	"github.com/uscott/go-clog"
	"github.com/uscott/go-gts"
)

type X struct {
	TimeStamp time.Time
	V1        float64
	V2        int
}

func (x *X) GetTimeStamp() time.Time { return x.TimeStamp }
func (x *X) GetValue() interface{} { return x }

func main() {

	rand.Seed(time.Now().UnixNano())
	const n = 20

	logger := clog.StandardLogger()

	x := make(gts.GenericRawSeries, n)
	start := time.Date(2021, 1, 1, 0, 0, 0, 0, time.UTC)

	for i := 0; i < n; i++ {
		t := start.Add(time.Duration(i) * time.Minute)
		x[i] = &X{TimeStamp: t, V1: rand.NormFloat64(), V2: rand.Int() }
	}

	g, err := gts.New(x, 0, 30 * time.Minute, true)
	if err != nil {
		logger.Fatal(err)
	}

	g.Print(logger.Printf)

	t := start.Add((n+1)*time.Minute)
	v1 := rand.NormFloat64()
	v2 := rand.Int()
	p0 := &X{TimeStamp: t, V1: v1, V2: v2}
	if err = g.Add(p0); err != nil {
		logger.Fatal(err)
	}
	logger.Printf("Len(g) = %d", g.Len())

	x = x[:2]
	t0, t1 := start.Add(3*time.Minute/2), start.Add(5*time.Minute/2)
	x[0] = &X{TimeStamp: t0, V1: 3.14, V2: 1}
	x[1] = &X{TimeStamp: t1, V1: 2.71, V2: 2}

	if err = g.AddMany(x, true); err != nil {
		logger.Fatal(err)
	}

	logger.Printf("Len(g) = %d", g.Len())

	for i := 0; i < g.Len(); i++ {
		p, ok := g.Index(i).(*X)
		if !ok {
			logger.Fatal("Conversion fail")
		}
		logger.Printf("Index(%d) = %+v", i, *p)
	}
}

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrNonUniformType = errors.New("data does not have uniform value type")

Functions

This section is empty.

Types

type GenericDataPoint

type GenericDataPoint interface {
	GetTimeStamp() time.Time
	GetValue() interface{}
}

func SliceToGenericRawSeries

func SliceToGenericRawSeries(s interface{}) ([]GenericDataPoint, error)

type GenericRawSeries

type GenericRawSeries []GenericDataPoint

GenericRawSeries is a slice of GenericDataPoints

func (GenericRawSeries) Duration

func (s GenericRawSeries) Duration() time.Duration

func (GenericRawSeries) GetAtOrBefore

func (s GenericRawSeries) GetAtOrBefore(t time.Time) (GenericDataPoint, int, bool)

func (GenericRawSeries) GetFirstAfter

func (s GenericRawSeries) GetFirstAfter(t time.Time) (GenericDataPoint, int, bool)

func (GenericRawSeries) GetNearest

func (s GenericRawSeries) GetNearest(t time.Time) (GenericDataPoint, int, bool)

func (GenericRawSeries) GetRange

func (s GenericRawSeries) GetRange(t0, t1 time.Time, makecopy bool) GenericRawSeries

func (GenericRawSeries) GetSearchFunc

func (s GenericRawSeries) GetSearchFunc(t time.Time) func(int) bool

func (GenericRawSeries) Kind

func (s GenericRawSeries) Kind() reflect.Kind

func (GenericRawSeries) Last

func (GenericRawSeries) Len

func (s GenericRawSeries) Len() int

Implement sort.Interface

func (GenericRawSeries) Less

func (s GenericRawSeries) Less(i, j int) bool

func (GenericRawSeries) Swap

func (s GenericRawSeries) Swap(i, j int)

func (GenericRawSeries) TrimByDuration

func (s GenericRawSeries) TrimByDuration(d time.Duration) (GenericRawSeries, error)

func (GenericRawSeries) UniformTypes

func (s GenericRawSeries) UniformTypes() bool

type GenericTimeSeries

type GenericTimeSeries struct {
	// contains filtered or unexported fields
}

func New

func New(
	data []GenericDataPoint,
	lencap int,
	durcap time.Duration,
	makecopy bool,
) (*GenericTimeSeries, error)

func (*GenericTimeSeries) Add

func (g *GenericTimeSeries) Add(p GenericDataPoint) (err error)

Add adds a data point to the series

func (*GenericTimeSeries) AddMany

func (g *GenericTimeSeries) AddMany(x []GenericDataPoint, makecopy bool) (err error)

func (*GenericTimeSeries) Caps

func (g *GenericTimeSeries) Caps() (int, time.Duration)

func (*GenericTimeSeries) Copy

Copy returns a pointer to copy of the time series

func (*GenericTimeSeries) Data

func (*GenericTimeSeries) Duration

func (g *GenericTimeSeries) Duration() time.Duration

func (*GenericTimeSeries) EnforceCap

func (g *GenericTimeSeries) EnforceCap() (err error)

EnforceCap trims the time series if necessary if it is capped

func (*GenericTimeSeries) GetAtOrBefore

func (g *GenericTimeSeries) GetAtOrBefore(t time.Time) (GenericDataPoint, int, bool)

GetAtOrBefore tries to find the datapoint observed at time t or the most recent one before t.

func (*GenericTimeSeries) GetFirstAfter

func (g *GenericTimeSeries) GetFirstAfter(t time.Time) (GenericDataPoint, int, bool)

func (*GenericTimeSeries) GetNearest

func (g *GenericTimeSeries) GetNearest(t time.Time) (GenericDataPoint, int, bool)

GetNearest finds datapoint nearest a certain time, before or after

func (*GenericTimeSeries) GetRange

func (g *GenericTimeSeries) GetRange(t0, t1 time.Time, makecopy bool) GenericRawSeries

func (*GenericTimeSeries) GetSearchFunc

func (g *GenericTimeSeries) GetSearchFunc(t time.Time) func(int) bool

GetSearchFunc returns a function to be used in sort.Search

func (*GenericTimeSeries) Index

func (*GenericTimeSeries) IsCapped

func (g *GenericTimeSeries) IsCapped() bool

func (*GenericTimeSeries) Kind

func (g *GenericTimeSeries) Kind() reflect.Kind

func (*GenericTimeSeries) Last

Last returns the most recent (last) element of the time series

func (*GenericTimeSeries) Len

func (g *GenericTimeSeries) Len() int

func (*GenericTimeSeries) Print

func (g *GenericTimeSeries) Print(fn func(string, ...interface{}))

Print prints each value in s.data to a separate line

func (*GenericTimeSeries) Prune

func (g *GenericTimeSeries) Prune(
	start time.Time,
	resolution time.Duration) (*GenericTimeSeries, error)

func (*GenericTimeSeries) SetCap

func (g *GenericTimeSeries) SetCap(lencap int, durcap time.Duration) error

func (*GenericTimeSeries) SetIsCapped

func (g *GenericTimeSeries) SetIsCapped(capped bool)

func (*GenericTimeSeries) Sort

func (g *GenericTimeSeries) Sort()

Sort sorts the underlying data so that it is in ascending order of time

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL