moving ledger predictions to /ana
This commit is contained in:
@@ -124,39 +124,6 @@ func registerWithContributionPredictionForNameForCurrency(reg Register, window t
|
||||
return nil
|
||||
}
|
||||
|
||||
func BPIsWithFixedGrowthPrediction(bpis BPIs, window time.Duration, pattern string, apy float64) (BPIs, error) {
|
||||
last := map[Currency]struct {
|
||||
t string
|
||||
v float64
|
||||
}{}
|
||||
for currency, bpi := range bpis {
|
||||
for date, value := range bpi {
|
||||
if date > last[currency].t {
|
||||
was := last[currency]
|
||||
was.t = date
|
||||
was.v = value
|
||||
last[currency] = was
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
result := make(BPIs)
|
||||
p := regexp.MustCompile(pattern)
|
||||
for currency, v := range bpis {
|
||||
result[currency] = maps.Clone(v)
|
||||
if p.MatchString(string(currency)) {
|
||||
for _, predictionTime := range predictionTimes(window) {
|
||||
k2 := predictionTime.Format("2006-01")
|
||||
was := last[currency]
|
||||
was.v *= 1.0 + (apy / 12.0)
|
||||
result[currency][k2] = was.v
|
||||
last[currency] = was
|
||||
}
|
||||
}
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func RegisterWithCompoundingInterestPrediction(reg Register, window time.Duration, pattern string, apy float64) (Register, error) {
|
||||
lastBalances := make(Balances)
|
||||
p := regexp.MustCompile(pattern)
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package ledger
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
@@ -51,32 +50,6 @@ func TestRegisterPrediction(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
func TestBPIPrediction(t *testing.T) {
|
||||
t.Run("fixed growth", func(t *testing.T) {
|
||||
bpis := BPIs{
|
||||
USD: BPI{
|
||||
"2001-01": -1000,
|
||||
"2001-02": 100,
|
||||
},
|
||||
}
|
||||
|
||||
got, err := BPIsWithFixedGrowthPrediction(bpis, time.Hour*24*365, string(USD), 0.06)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
dates := []string{}
|
||||
for d := range got[USD] {
|
||||
dates = append(dates, d)
|
||||
}
|
||||
slices.Sort(dates)
|
||||
|
||||
for _, d := range dates {
|
||||
t.Logf("%s | %s %.2f", USD, d, got[USD][d])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func newTestRegister() map[string]Balances {
|
||||
s := func(t time.Time) string {
|
||||
return t.Format("2006-01")
|
||||
|
||||
Reference in New Issue
Block a user