bbgo_origin/pkg/fixedpoint/value_map.go
2022-06-16 10:44:13 +08:00

136 lines
1.7 KiB
Go

package fixedpoint
type ValueMap map[string]Value
func (m ValueMap) Eq(n ValueMap) bool {
if len(m) != len(n) {
return false
}
for m_k, m_v := range m {
n_v, ok := n[m_k]
if !ok {
return false
}
if !m_v.Eq(n_v) {
return false
}
}
return true
}
func (m ValueMap) Add(n ValueMap) ValueMap {
if len(m) != len(n) {
panic("unequal length")
}
o := ValueMap{}
for k, v := range m {
o[k] = v.Add(n[k])
}
return o
}
func (m ValueMap) Sub(n ValueMap) ValueMap {
if len(m) != len(n) {
panic("unequal length")
}
o := ValueMap{}
for k, v := range m {
o[k] = v.Sub(n[k])
}
return o
}
func (m ValueMap) Mul(n ValueMap) ValueMap {
if len(m) != len(n) {
panic("unequal length")
}
o := ValueMap{}
for k, v := range m {
o[k] = v.Mul(n[k])
}
return o
}
func (m ValueMap) Div(n ValueMap) ValueMap {
if len(m) != len(n) {
panic("unequal length")
}
o := ValueMap{}
for k, v := range m {
o[k] = v.Div(n[k])
}
return o
}
func (m ValueMap) AddScalar(x Value) ValueMap {
o := ValueMap{}
for k, v := range m {
o[k] = v.Add(x)
}
return o
}
func (m ValueMap) SubScalar(x Value) ValueMap {
o := ValueMap{}
for k, v := range m {
o[k] = v.Sub(x)
}
return o
}
func (m ValueMap) MulScalar(x Value) ValueMap {
o := ValueMap{}
for k, v := range m {
o[k] = v.Mul(x)
}
return o
}
func (m ValueMap) DivScalar(x Value) ValueMap {
o := ValueMap{}
for k, v := range m {
o[k] = v.Div(x)
}
return o
}
func (m ValueMap) Sum() Value {
var sum Value
for _, v := range m {
sum = sum.Add(v)
}
return sum
}
func (m ValueMap) Normalize() ValueMap {
sum := m.Sum()
if sum.Eq(Zero) {
panic("zero sum")
}
return m.DivScalar(sum)
}