Skip to content

Commit 285d570

Browse files
committed
chore(deps): go mod: update
1 parent 573efe0 commit 285d570

File tree

10 files changed

+168
-101
lines changed

10 files changed

+168
-101
lines changed

charts/wchart/continuous_series.go

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,21 @@ import (
99
"github.com/grokify/gocharts/v2/data/timeseries"
1010
)
1111

12-
func TimeSeriesMapToContinuousSeriesMonths(dsm map[string]timeseries.TimeSeries, order []string) []chart.ContinuousSeries {
12+
func TimeSeriesMapToContinuousSeriesMonths(dsm map[string]timeseries.TimeSeries, order []string) ([]chart.ContinuousSeries, error) {
1313
csSet := []chart.ContinuousSeries{}
1414
for _, seriesName := range order {
1515
if ds, ok := dsm[seriesName]; ok {
16-
csSet = append(csSet, TimeSeriesToContinuousSeries(ds))
16+
if cs, err := TimeSeriesToContinuousSeries(ds); err != nil {
17+
return csSet, err
18+
} else {
19+
csSet = append(csSet, cs)
20+
}
1721
}
1822
}
19-
return csSet
23+
return csSet, nil
2024
}
2125

22-
func TimeSeriesToContinuousSeries(ds timeseries.TimeSeries) chart.ContinuousSeries {
26+
func TimeSeriesToContinuousSeries(ds timeseries.TimeSeries) (chart.ContinuousSeries, error) {
2327
series := chart.ContinuousSeries{
2428
Name: ds.SeriesName,
2529
XValues: []float64{},
@@ -29,11 +33,17 @@ func TimeSeriesToContinuousSeries(ds timeseries.TimeSeries) chart.ContinuousSeri
2933
for _, item := range items {
3034
switch ds.Interval {
3135
case timeutil.IntervalMonth:
32-
series.XValues = append(series.XValues,
33-
float64(month.TimeToMonthContinuous(item.Time)))
36+
if dtC, err := month.TimeToMonthContinuous(item.Time); err != nil {
37+
return series, err
38+
} else {
39+
series.XValues = append(series.XValues, float64(dtC))
40+
}
3441
case timeutil.IntervalQuarter:
35-
series.XValues = append(series.XValues,
36-
float64(quarter.TimeToQuarterContinuous(item.Time)))
42+
if dtC, err := quarter.TimeToQuarterContinuous(item.Time); err != nil {
43+
return series, err
44+
} else {
45+
series.XValues = append(series.XValues, float64(dtC))
46+
}
3747
default:
3848
series.XValues = append(series.XValues, float64(item.Time.Unix()))
3949
}
@@ -43,33 +53,41 @@ func TimeSeriesToContinuousSeries(ds timeseries.TimeSeries) chart.ContinuousSeri
4353
series.YValues = append(series.YValues, float64(item.Value))
4454
}
4555
}
46-
return series
56+
return series, nil
4757
}
4858

49-
func TimeSeriesMapToContinuousSeriesQuarters(dsm map[string]timeseries.TimeSeries, order []string) []chart.ContinuousSeries {
59+
func TimeSeriesMapToContinuousSeriesQuarters(dsm map[string]timeseries.TimeSeries, order []string) ([]chart.ContinuousSeries, error) {
5060
csSet := []chart.ContinuousSeries{}
5161
for _, seriesName := range order {
5262
if ds, ok := dsm[seriesName]; ok {
53-
csSet = append(csSet, TimeSeriesToContinuousSeriesQuarter(ds))
63+
if cs, err := TimeSeriesToContinuousSeriesQuarter(ds); err != nil {
64+
return csSet, err
65+
} else {
66+
csSet = append(csSet, cs)
67+
}
5468
}
5569
}
56-
return csSet
70+
return csSet, nil
5771
}
5872

59-
func TimeSeriesToContinuousSeriesQuarter(ds timeseries.TimeSeries) chart.ContinuousSeries {
73+
func TimeSeriesToContinuousSeriesQuarter(ds timeseries.TimeSeries) (chart.ContinuousSeries, error) {
6074
series := chart.ContinuousSeries{
6175
Name: ds.SeriesName,
6276
XValues: []float64{},
6377
YValues: []float64{}}
6478

6579
items := ds.ItemsSorted()
6680
for _, item := range items {
81+
dtQuarterContinuous, err := quarter.TimeToQuarterContinuous(item.Time)
82+
if err != nil {
83+
return series, err
84+
}
6785
series.XValues = append(
6886
series.XValues,
69-
float64(quarter.TimeToQuarterContinuous(item.Time)))
87+
float64(dtQuarterContinuous))
7088
series.YValues = append(
7189
series.YValues,
7290
float64(item.Value))
7391
}
74-
return series
92+
return series, nil
7593
}

charts/wchart/sts2wchart/line_chart.go

Lines changed: 45 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,13 @@ func TimeSeriesSetToLineChart(tset timeseries.TimeSeriesSet, opts *LineChartOpts
166166
if len(tset.Order) == 0 {
167167
tset.Inflate()
168168
}
169+
var err error
169170
for _, seriesName := range tset.Order {
170171
if ts, ok := tset.Series[seriesName]; ok {
171-
mainSeries = wchart.TimeSeriesToContinuousSeries(ts)
172+
mainSeries, err = wchart.TimeSeriesToContinuousSeries(ts)
173+
if err != nil {
174+
return graph, err
175+
}
172176

173177
mainSeries.Style = chart.Style{StrokeWidth: float64(3)}
174178

@@ -229,11 +233,17 @@ func TimeSeriesSetToLineChart(tset timeseries.TimeSeriesSet, opts *LineChartOpts
229233
if opts.YAxisMinEnable {
230234
minValue = int64(opts.YAxisMin)
231235
}
232-
graph = axesCreator.ChartAddAxesDataSeries(
236+
graph, err = axesCreator.ChartAddAxesDataSeries(
233237
graph, tset.Interval, minTime, maxTime, minValue, maxValue)
238+
if err != nil {
239+
return graph, err
240+
}
234241
} else {
235242
graph = axesCreator.AddBackground(graph)
236-
graph = axesCreator.AddXAxis(graph, tset.Interval, minTime, maxTime)
243+
graph, err = axesCreator.AddXAxis(graph, tset.Interval, minTime, maxTime)
244+
if err != nil {
245+
return graph, err
246+
}
237247
minValue, maxValue := tset.MinMaxValuesFloat64()
238248
if opts.YAxisMinEnable {
239249
minValue = opts.YAxisMin
@@ -271,36 +281,52 @@ func TimeSeriesMonthToAnnotations(ts timeseries.TimeSeries, opts LineChartOpts)
271281
xoxLast := xox.Last()
272282

273283
if opts.NowAnnotation {
274-
annoSeries.Annotations = append(annoSeries.Annotations, chart.Value2{
275-
XValue: float64(month.TimeToMonthContinuous(xoxLast.Time)),
276-
YValue: float64(xoxLast.Value),
277-
Label: strconvutil.Int64Abbreviation(xoxLast.Value)})
284+
if dtMC, err := month.TimeToMonthContinuous(xoxLast.Time); err != nil {
285+
return annoSeries, err
286+
} else {
287+
annoSeries.Annotations = append(annoSeries.Annotations, chart.Value2{
288+
XValue: float64(dtMC),
289+
YValue: float64(xoxLast.Value),
290+
Label: strconvutil.Int64Abbreviation(xoxLast.Value)})
291+
}
278292
}
279293
if opts.MAgoAnnotation {
280-
annoSeries.Annotations = append(annoSeries.Annotations, chart.Value2{
281-
XValue: float64(month.TimeToMonthContinuous(xoxLast.TimeMonthAgo)),
282-
YValue: float64(xoxLast.MMAgoValue),
283-
Label: "M: " + strconvutil.Int64Abbreviation(xoxLast.MMAgoValue)})
294+
if dtMC, err := month.TimeToMonthContinuous(xoxLast.TimeMonthAgo); err != nil {
295+
return annoSeries, err
296+
} else {
297+
annoSeries.Annotations = append(annoSeries.Annotations, chart.Value2{
298+
XValue: float64(dtMC),
299+
YValue: float64(xoxLast.MMAgoValue),
300+
Label: "M: " + strconvutil.Int64Abbreviation(xoxLast.MMAgoValue)})
301+
}
284302
}
285303
if opts.QAgoAnnotation {
286304
suffix := ""
287305
if opts.AgoAnnotationPct {
288306
suffix = fmt.Sprintf(", %d%%", int(xoxLast.QoQ))
289307
}
290-
annoSeries.Annotations = append(annoSeries.Annotations, chart.Value2{
291-
XValue: float64(month.TimeToMonthContinuous(xoxLast.TimeQuarterAgo)),
292-
YValue: float64(xoxLast.MQAgoValue),
293-
Label: "Q: " + strconvutil.Int64Abbreviation(xoxLast.MQAgoValue) + suffix})
308+
if dtMC, err := month.TimeToMonthContinuous(xoxLast.TimeQuarterAgo); err != nil {
309+
return annoSeries, err
310+
} else {
311+
annoSeries.Annotations = append(annoSeries.Annotations, chart.Value2{
312+
XValue: float64(dtMC),
313+
YValue: float64(xoxLast.MQAgoValue),
314+
Label: "Q: " + strconvutil.Int64Abbreviation(xoxLast.MQAgoValue) + suffix})
315+
}
294316
}
295317
if opts.YAgoAnnotation {
296318
suffix := ""
297319
if opts.AgoAnnotationPct {
298320
suffix = fmt.Sprintf(", %d%%", int(xoxLast.YoY))
299321
}
300-
annoSeries.Annotations = append(annoSeries.Annotations, chart.Value2{
301-
XValue: float64(month.TimeToMonthContinuous(xoxLast.TimeYearAgo)),
302-
YValue: float64(xoxLast.MYAgoValue),
303-
Label: "Y: " + strconvutil.Int64Abbreviation(xoxLast.MYAgoValue) + suffix})
322+
if dtMC, err := month.TimeToMonthContinuous(xoxLast.TimeYearAgo); err != nil {
323+
return annoSeries, err
324+
} else {
325+
annoSeries.Annotations = append(annoSeries.Annotations, chart.Value2{
326+
XValue: float64(dtMC),
327+
YValue: float64(xoxLast.MYAgoValue),
328+
Label: "Y: " + strconvutil.Int64Abbreviation(xoxLast.MYAgoValue) + suffix})
329+
}
304330
}
305331
return annoSeries, nil
306332
}

charts/wchart/sts2wchart/line_chart_axes_creator.go

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,17 @@ func (ac *AxesCreator) AddBackground(graph chart.Chart) chart.Chart {
3131
return graph
3232
}
3333

34-
func (ac *AxesCreator) AddXAxis(graph chart.Chart, interval timeutil.Interval, minTime, maxTime time.Time) chart.Chart {
35-
xTicks, xGridlines := wchart.TicksAndGridlinesTime(
34+
func (ac *AxesCreator) AddXAxis(graph chart.Chart, interval timeutil.Interval, minTime, maxTime time.Time) (chart.Chart, error) {
35+
xTicks, xGridlines, err := wchart.TicksAndGridlinesTime(
3636
interval, minTime, maxTime,
3737
ac.GridMajorStyle, ac.GridMinorStyle, ac.XAxisTickFormatFunc, ac.XAxisTickInterval, ac.XAxisGridInterval)
38+
if err != nil {
39+
return graph, err
40+
}
3841
graph.XAxis.Ticks = xTicks
3942
graph.XAxis.GridLines = xGridlines
4043
graph.XAxis.GridMajorStyle = ac.GridMajorStyle
41-
return graph
44+
return graph, nil
4245
}
4346

4447
func (ac *AxesCreator) AddYAxis(graph chart.Chart, minValue, maxValue int64) chart.Chart {
@@ -58,7 +61,7 @@ func (ac *AxesCreator) AddYAxisPercent(graph chart.Chart, minValue, maxValue flo
5861
return graph
5962
}
6063

61-
func (ac *AxesCreator) ChartAddAxesDataSeries(graph chart.Chart, interval timeutil.Interval, minTime, maxTime time.Time, minValue, maxValue int64) chart.Chart {
64+
func (ac *AxesCreator) ChartAddAxesDataSeries(graph chart.Chart, interval timeutil.Interval, minTime, maxTime time.Time, minValue, maxValue int64) (chart.Chart, error) {
6265
graph.Background = chart.Style{Padding: chart.Box{}}
6366
if ac.PaddingTop > 0 {
6467
graph.Background.Padding.Top = ac.PaddingTop
@@ -69,12 +72,15 @@ func (ac *AxesCreator) ChartAddAxesDataSeries(graph chart.Chart, interval timeut
6972
graph.YAxis.GridLines = wchart.GridLines(tickValues, ac.GridMinorStyle)
7073
graph.YAxis.GridMajorStyle = ac.GridMinorStyle
7174

72-
xTicks, xGridlines := wchart.TicksAndGridlinesTime(
75+
xTicks, xGridlines, err := wchart.TicksAndGridlinesTime(
7376
interval, minTime, maxTime,
7477
ac.GridMajorStyle, ac.GridMinorStyle, ac.XAxisTickFormatFunc, ac.XAxisTickInterval, ac.XAxisGridInterval)
78+
if err != nil {
79+
return graph, err
80+
}
7581
graph.XAxis.Ticks = xTicks
7682
graph.XAxis.GridLines = xGridlines
7783
graph.XAxis.GridMajorStyle = ac.GridMajorStyle
7884

79-
return graph
85+
return graph, nil
8086
}

charts/wchart/ticks_and_gridlines.go

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,37 @@ func GridLines(values []float64, style chart.Style) []chart.GridLine {
5050

5151
// TicksAndGridlinesTime takes a start and end time and converts it to
5252
// `[]chart.Tick` and `[]chart.GridLine.`.
53-
func TicksAndGridlinesTime(interval timeutil.Interval, timeStart, timeEnd time.Time, styleMajor, styleMinor chart.Style, timeFormat func(time.Time) string, tickInterval, gridInterval timeutil.Interval) ([]chart.Tick, []chart.GridLine) {
53+
func TicksAndGridlinesTime(interval timeutil.Interval, timeStart, timeEnd time.Time, styleMajor, styleMinor chart.Style, timeFormat func(time.Time) string, tickInterval, gridInterval timeutil.Interval) ([]chart.Tick, []chart.GridLine, error) {
5454
//fmt.Printf("TICK [%v] GRID [%v]\n", tickInterval, gridInterval)
55+
ticks := []chart.Tick{}
56+
gridlines := []chart.GridLine{}
5557

56-
timecStart := uint64(0)
57-
timecEnd := uint64(0)
58+
timecStart := uint32(0)
59+
timecEnd := uint32(0)
5860
if interval == timeutil.IntervalMonth {
59-
timecStart = month.TimeToMonthContinuous(timeStart)
60-
timecEnd = month.TimeToMonthContinuous(timeEnd)
61+
if timecStartTry, err := month.TimeToMonthContinuous(timeStart); err != nil {
62+
return ticks, gridlines, err
63+
} else {
64+
timecStart = timecStartTry
65+
}
66+
if timecEndTry, err := month.TimeToMonthContinuous(timeStart); err != nil {
67+
return ticks, gridlines, err
68+
} else {
69+
timecEnd = timecEndTry
70+
}
6171
} else if interval == timeutil.IntervalQuarter {
62-
timecStart = quarter.TimeToQuarterContinuous(timeStart)
63-
timecEnd = quarter.TimeToQuarterContinuous(timeEnd)
72+
if timecStartTry, err := quarter.TimeToQuarterContinuous(timeStart); err != nil {
73+
return ticks, gridlines, err
74+
} else {
75+
timecStart = timecStartTry
76+
}
77+
if timecEndTry, err := quarter.TimeToQuarterContinuous(timeEnd); err != nil {
78+
return ticks, gridlines, err
79+
} else {
80+
timecEnd = timecEndTry
81+
}
6482
}
6583

66-
ticks := []chart.Tick{}
67-
gridlines := []chart.GridLine{}
6884
if timecStart > timecEnd {
6985
tmp := timecStart
7086
timecStart = timecEnd
@@ -155,5 +171,5 @@ func TicksAndGridlinesTime(interval timeutil.Interval, timeStart, timeEnd time.T
155171
}
156172
}
157173

158-
return ticks, gridlines
174+
return ticks, gridlines, nil
159175
}

collections/write_data.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,17 +35,20 @@ func WriteFilesTimeSeries(filePrefix string, ts timeseries.TimeSeries, verbose b
3535
filePrefix = "_data"
3636
}
3737

38-
tblXox := ts.TableMonthXOX("Jan 2006", "", "", "", "", "",
38+
tblXox, err := ts.TableMonthXOX("Jan 2006", "", "", "", "", "",
3939
&timeseries.TableMonthXOXOpts{
4040
AddMOMGrowth: true,
4141
MOMGrowthPct: accounting.AnnualToMonthly(.3),
4242
MOMBaseMonth: timeutil.MustParse(timeutil.RFC3339FullDate, "2021-12-01"),
4343
})
44+
if err != nil {
45+
return err
46+
}
4447
if verbose {
4548
fmtutil.MustPrintJSON(tblXox.Rows)
4649
fmtutil.MustPrintJSON(tblXox.Columns)
4750
}
48-
err := tblXox.WriteXLSX(filePrefix+".xlsx", "data")
51+
err = tblXox.WriteXLSX(filePrefix+".xlsx", "data")
4952
if err != nil {
5053
return err
5154
}

data/table/format.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,14 @@ func (tbl *Table) Pivot(colCount uint32, haveColumns bool) (Table, error) {
4545
return newTbl, fmt.Errorf("has non-1 column count [%d]", colCountActual)
4646
}
4747
rowCount := len(tbl.Rows)
48-
_, remainder := mathutil.DivideInt64(int64(rowCount), int64(colCount))
48+
_, remainder := mathutil.Divide(int64(rowCount), int64(colCount))
4949
if remainder != 0 {
5050
return newTbl, fmt.Errorf("row count [%d] is not a multiple of col count [%d]", rowCount, colCount)
5151
}
5252
addedColumns := false
5353
newRow := []string{}
5454
for i, row := range tbl.Rows {
55-
_, remainder := mathutil.DivideInt64(int64(i), int64(colCount))
55+
_, remainder := mathutil.Divide(int64(i), int64(colCount))
5656
if remainder == 0 {
5757
if len(newRow) > 0 {
5858
if haveColumns && !addedColumns {

data/timeseries/time_series_export.go

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ type TableMonthXOXOpts struct {
8282
momBaseTimeItemExists bool
8383
}
8484

85-
func (ts *TimeSeries) TableMonthXOX(timeFmtColName, seriesName, valuesName, yoyName, qoqName, momName string, opts *TableMonthXOXOpts) table.Table {
85+
func (ts *TimeSeries) TableMonthXOX(timeFmtColName, seriesName, valuesName, yoyName, qoqName, momName string, opts *TableMonthXOXOpts) (*table.Table, error) {
8686
if len(strings.TrimSpace(seriesName)) == 0 {
8787
seriesName = "Series"
8888
}
@@ -107,7 +107,11 @@ func (ts *TimeSeries) TableMonthXOX(timeFmtColName, seriesName, valuesName, yoyN
107107
opts.MOMBaseMonth = minDt
108108
}
109109
opts.MOMBaseMonth = timeutil.NewTimeMore(opts.MOMBaseMonth.UTC(), 0).MonthStart()
110-
opts.momBaseMonthContinuous = month.TimeToMonthContinuous(opts.MOMBaseMonth)
110+
if try, err := month.TimeToMonthContinuous(opts.MOMBaseMonth); err != nil {
111+
return nil, err
112+
} else {
113+
opts.momBaseMonthContinuous = uint64(try)
114+
}
111115
momBaseTimeItem, err := ts.Get(opts.MOMBaseMonth)
112116
if err != nil {
113117
opts.momBaseTimeItemExists = false
@@ -171,7 +175,11 @@ func (ts *TimeSeries) TableMonthXOX(timeFmtColName, seriesName, valuesName, yoyN
171175
}
172176
if opts.AddMOMGrowth {
173177
if dt.After(opts.MOMBaseMonth) && opts.momBaseTimeItemExists {
174-
diffMonths := month.TimeToMonthContinuous(dt) - opts.momBaseMonthContinuous
178+
dtMonthContinuous, err := month.TimeToMonthContinuous(dt)
179+
if err != nil {
180+
return nil, err
181+
}
182+
diffMonths := uint64(dtMonthContinuous) - opts.momBaseMonthContinuous
175183
targetValue := opts.momBaseTimeItem.Float64() * math.Pow(1+opts.MOMGrowthPct, float64(diffMonths))
176184
momGrowthTargets = append(momGrowthTargets, strconvutil.Ftoa(targetValue, -1))
177185
actualValue := tiVal.Float64()
@@ -190,7 +198,7 @@ func (ts *TimeSeries) TableMonthXOX(timeFmtColName, seriesName, valuesName, yoyN
190198
if opts.AddMOMGrowth {
191199
tbl.Rows = append(tbl.Rows, momGrowthTargets, momGrowthPerform)
192200
}
193-
return tbl
201+
return &tbl, nil
194202
}
195203

196204
func (ts *TimeSeries) TableYearYOY(seriesName, valuesName, yoyName string) table.Table {

0 commit comments

Comments
 (0)