general

import "github.com/umbralcalc/stochadex/pkg/general"

Package general provides general-purpose iteration functions and utilities for stochadex simulations. It includes data transformation functions, aggregation utilities, and flexible iteration patterns that can be composed to create complex simulation behaviors.

Key Features:

Usage Patterns:

Index

func AppendFloatToKey

func AppendFloatToKey(key string, value float64, precision int) string

AppendFloatToKey appends a formatted float to a composite grouping key at a fixed precision.

func CountAggregation

func CountAggregation(defaultValues []float64, outputIndexByGroup map[string]int, groupings map[string][]float64, weightings map[string][]float64) []float64

CountAggregation outputs, per group, the sum of weights (i.e., a count when weights are all 1).

func DataValuesFunction

func DataValuesFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, stateHistoryDepthIndex int) []float64

DataValuesFunction returns values from “data_values_partition”, optionally subselecting indices.

func DataValuesVarianceFunction

func DataValuesVarianceFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, stateHistoryDepthIndex int) []float64

DataValuesVarianceFunction returns per-index squared deviations from the provided “mean” for “data_values_partition”.

func FloatTupleToKey

func FloatTupleToKey(tuple []float64, precision int) string

FloatTupleToKey converts a vector to a composite key string at fixed precision, suitable for use as a map key.

func MaxAggregation

func MaxAggregation(defaultValues []float64, outputIndexByGroup map[string]int, groupings map[string][]float64, weightings map[string][]float64) []float64

MaxAggregation computes the maximum of weighted values per group.

func MeanAggregation

func MeanAggregation(defaultValues []float64, outputIndexByGroup map[string]int, groupings map[string][]float64, weightings map[string][]float64) []float64

MeanAggregation computes the weighted mean of values per group.

func MinAggregation

func MinAggregation(defaultValues []float64, outputIndexByGroup map[string]int, groupings map[string][]float64, weightings map[string][]float64) []float64

MinAggregation computes the minimum of weighted values per group.

func NewTransformReduceFunction

func NewTransformReduceFunction(transform func(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) map[string][]float64, reduce func(values map[string][]float64) []float64) func(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

NewTransformReduceFunction returns a function that first transforms the provided simulation context into a map of vectors, then reduces those vectors into a single vector.

Usage hints:

func NextNonEmptyPopIndexFunction

func NextNonEmptyPopIndexFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) (int, bool)

NextNonEmptyPopIndexFunction scans the rolling collection for the next occupied slot (index > 0) and returns its index for popping.

Usage hints:

func OtherPartitionPushFunction

func OtherPartitionPushFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) ([]float64, bool)

OtherPartitionPushFunction collects the latest values from another partition to push into the collection, subject to empty_value.

Usage hints:

func OtherValuesFunction

func OtherValuesFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, stateHistoryDepthIndex int) []float64

OtherValuesFunction returns values from “other_values_partition”, optionally subselecting indices.

func ParamValuesPushFunction

func ParamValuesPushFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) ([]float64, bool)

ParamValuesPushFunction reads the next values directly from params under “next_values_push”, subject to empty_value.

Usage hints:

func ParamsEventFunction

func ParamsEventFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

ParamsEventFunction emits an event value from the “event” params.

func ParamsTransform

func ParamsTransform(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) map[string][]float64

ParamsTransform is a convenience transform that returns the current params map. Useful as a building block for transform/reduce pipelines.

func PartitionEventFunction

func PartitionEventFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

PartitionEventFunction emits an event value from the latest state of another partition.

Usage hints:

func PastDiscountedDataValuesFunction

func PastDiscountedDataValuesFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, stateHistoryDepthIndex int) []float64

PastDiscountedDataValuesFunction reads from “data_values_partition” and applies an exponential discount factor raised to the history depth index. Useful with a kernel for a past-discounted rolling mean.

func PastDiscountedOtherValuesFunction

func PastDiscountedOtherValuesFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, stateHistoryDepthIndex int) []float64

PastDiscountedOtherValuesFunction mirrors PastDiscountedDataValuesFunction for “other_values_partition”, optionally subselecting indices.

func PopFromOtherCollectionPushFunction

func PopFromOtherCollectionPushFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) ([]float64, bool)

PopFromOtherCollectionPushFunction pulls the current popped values from another collection-like partition and uses them as the next values to push.

Usage hints:

func SumAggregation

func SumAggregation(defaultValues []float64, outputIndexByGroup map[string]int, groupings map[string][]float64, weightings map[string][]float64) []float64

SumAggregation computes the weighted sum of values per group.

func SumReduce

func SumReduce(values map[string][]float64) []float64

SumReduce reduces a map of equally sized vectors by summing them element-wise into a single output vector.

Usage hints:

func UnitValueFunction

func UnitValueFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, stateHistoryDepthIndex int) []float64

UnitValueFunction returns [1]. Combine with “without_normalisation” to compute a kernel density (sum of weights) directly.

type ConstantValuesIteration

ConstantValuesIteration leaves initial state values unchanged over time.

Usage hints:

type ConstantValuesIteration struct {
}

func (*ConstantValuesIteration) Configure

func (c *ConstantValuesIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ConstantValuesIteration) Iterate

func (c *ConstantValuesIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type CopyValuesIteration

CopyValuesIteration copies selected values from other partitions’ latest states into its own state.

Usage hints:

type CopyValuesIteration struct {
}

func (*CopyValuesIteration) Configure

func (c *CopyValuesIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*CopyValuesIteration) Iterate

func (c *CopyValuesIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type CumulativeIteration

CumulativeIteration accumulates a provided iteration’s outputs over time.

Usage hints:

type CumulativeIteration struct {
    Iteration simulator.Iteration
}

func (*CumulativeIteration) Configure

func (c *CumulativeIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*CumulativeIteration) Iterate

func (c *CumulativeIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type EmbeddedSimulationRunIteration

EmbeddedSimulationRunIteration runs a nested simulation to termination at each outer step.

Usage hints:

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

func NewEmbeddedSimulationRunIteration

func NewEmbeddedSimulationRunIteration(settings *simulator.Settings, implementations *simulator.Implementations) *EmbeddedSimulationRunIteration

NewEmbeddedSimulationRunIteration constructs an embedded run iteration from prepared settings and implementations.

func (*EmbeddedSimulationRunIteration) Configure

func (e *EmbeddedSimulationRunIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*EmbeddedSimulationRunIteration) Iterate

func (e *EmbeddedSimulationRunIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type FromHistoryIteration

FromHistoryIteration streams data from an in-memory StateHistory.

Usage hints:

type FromHistoryIteration struct {
    Data           *simulator.StateHistory
    InitStepsTaken int
}

func (*FromHistoryIteration) Configure

func (f *FromHistoryIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*FromHistoryIteration) Iterate

func (f *FromHistoryIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

func (*FromHistoryIteration) UpdateMemory

func (f *FromHistoryIteration) UpdateMemory(params *simulator.Params, update StateMemoryUpdate)

type FromHistoryTimestepFunction

FromHistoryTimestepFunction streams timesteps from an in-memory CumulativeTimestepsHistory.

Usage hints:

type FromHistoryTimestepFunction struct {
    Data           *simulator.CumulativeTimestepsHistory
    InitStepsTaken int
}

func (*FromHistoryTimestepFunction) NextIncrement

func (f *FromHistoryTimestepFunction) NextIncrement(timestepsHistory *simulator.CumulativeTimestepsHistory) float64

type FromStorageIteration

FromStorageIteration streams data from an in-memory [][]float64.

Usage hints:

type FromStorageIteration struct {
    Data           [][]float64
    InitStepsTaken int
}

func (*FromStorageIteration) Configure

func (f *FromStorageIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*FromStorageIteration) Iterate

func (f *FromStorageIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type FromStorageTimestepFunction

FromStorageTimestepFunction streams timesteps from an in-memory []float64.

Usage hints:

type FromStorageTimestepFunction struct {
    Data           []float64
    InitStepsTaken int
}

func (*FromStorageTimestepFunction) NextIncrement

func (f *FromStorageTimestepFunction) NextIncrement(timestepsHistory *simulator.CumulativeTimestepsHistory) float64

type NamedIndexedState

NamedIndexedState pairs a partition’s name/index with its state history. Useful for initialising inner histories from a chosen outer partition.

type NamedIndexedState struct {
    NamedIndex simulator.NamedPartitionIndex
    History    *simulator.StateHistory
}

type ParamValuesIteration

ParamValuesIteration writes the float param values under “param_values” directly to the state.

Usage hints:

type ParamValuesIteration struct {
}

func (*ParamValuesIteration) Configure

func (p *ParamValuesIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ParamValuesIteration) Iterate

func (p *ParamValuesIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type SortingValues

SortingValues encapsulates a new entry to add to the sorting collection.

type SortingValues struct {
    SortBy float64
    Values []float64
}

func OtherPartitionsPushAndSortFunction

func OtherPartitionsPushAndSortFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) (SortingValues, bool)

OtherPartitionsPushAndSortFunction retrieves values from one partition and sorts by another partition’s value.

Usage hints:

func ParamValuesPushAndSortFunction

func ParamValuesPushAndSortFunction(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) (SortingValues, bool)

ParamValuesPushAndSortFunction uses params for both values and sort key.

Usage hints:

type StateMemoryIteration

StateMemoryIteration marks iterations that can receive state/time from a parent simulation and store it for later use.

type StateMemoryIteration interface {
    UpdateMemory(params *simulator.Params, update StateMemoryUpdate)
}

type StateMemoryUpdate

StateMemoryUpdate carries a named partition’s state and timestep history from an outer simulation into an inner (embedded) simulation.

Usage hints:

type StateMemoryUpdate struct {
    Name             string
    StateHistory     *simulator.StateHistory
    TimestepsHistory *simulator.CumulativeTimestepsHistory
}

type ValuesChangingEventsIteration

ValuesChangingEventsIteration calls and outputs from an iteration in the map keyed by an event. If no event key matches, it returns previous values or optional “default_values”.

Usage hints:

type ValuesChangingEventsIteration struct {
    EventIteration   simulator.Iteration
    IterationByEvent map[float64]simulator.Iteration
}

func (*ValuesChangingEventsIteration) Configure

func (v *ValuesChangingEventsIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ValuesChangingEventsIteration) Iterate

func (v *ValuesChangingEventsIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type ValuesCollectionIteration

ValuesCollectionIteration maintains a fixed-width rolling collection of value vectors.

Usage hints:

type ValuesCollectionIteration struct {
    PopIndex func(
        params *simulator.Params,
        partitionIndex int,
        stateHistories []*simulator.StateHistory,
        timestepsHistory *simulator.CumulativeTimestepsHistory,
    ) (int, bool)
    Push func(
        params *simulator.Params,
        partitionIndex int,
        stateHistories []*simulator.StateHistory,
        timestepsHistory *simulator.CumulativeTimestepsHistory,
    ) ([]float64, bool)
}

func (*ValuesCollectionIteration) Configure

func (v *ValuesCollectionIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ValuesCollectionIteration) Iterate

func (v *ValuesCollectionIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type ValuesFunctionIteration

ValuesFunctionIteration provides a flexible way to compute derived values from simulation state and parameters using user-defined functions.

This iteration type allows for custom computation logic within simulations, enabling feature engineering, data transformation, and complex derived value calculations. It’s particularly useful for creating custom aggregation functions, feature extraction, and data preprocessing.

Design Philosophy: The function-based approach emphasizes composition and reusability. By providing a pure function interface, this iteration enables:

Function Signature: The Function field must implement a pure mapping from simulation context to output values. It receives:

And returns a slice of float64 values representing the computed output.

Applications:

Example:

iteration := &ValuesFunctionIteration{
    Function: func(params *simulator.Params, partitionIndex int,
                   stateHistories []*simulator.StateHistory,
                   timestepsHistory *simulator.CumulativeTimestepsHistory) []float64 {
        // Extract current state from first partition
        currentState := stateHistories[0].Values.RawRowView(0)

        // Compute derived feature: moving average
        if len(currentState) >= 2 {
            return []float64{(currentState[0] + currentState[1]) / 2.0}
        }
        return []float64{0.0}
    },
}

Performance Considerations:

API Stability:

Related Types:

type ValuesFunctionIteration struct {
    Function func(
        params *simulator.Params,
        partitionIndex int,
        stateHistories []*simulator.StateHistory,
        timestepsHistory *simulator.CumulativeTimestepsHistory,
    ) []float64
}

func (*ValuesFunctionIteration) Configure

func (v *ValuesFunctionIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ValuesFunctionIteration) Iterate

func (v *ValuesFunctionIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type ValuesFunctionVectorCovarianceIteration

ValuesFunctionVectorCovarianceIteration computes a kernel-weighted rolling covariance of a function over historical values and times.

Usage hints:

type ValuesFunctionVectorCovarianceIteration struct {
    Function func(
        params *simulator.Params,
        partitionIndex int,
        stateHistories []*simulator.StateHistory,
        stateHistoryDepthIndex int,
    ) []float64
    Kernel kernels.IntegrationKernel
}

func (*ValuesFunctionVectorCovarianceIteration) Configure

func (v *ValuesFunctionVectorCovarianceIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ValuesFunctionVectorCovarianceIteration) Iterate

func (v *ValuesFunctionVectorCovarianceIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type ValuesFunctionVectorMeanIteration

ValuesFunctionVectorMeanIteration computes a kernel-weighted rolling mean of a function over historical values and times.

Usage hints:

type ValuesFunctionVectorMeanIteration struct {
    Function func(
        params *simulator.Params,
        partitionIndex int,
        stateHistories []*simulator.StateHistory,
        stateHistoryDepthIndex int,
    ) []float64
    Kernel kernels.IntegrationKernel
}

func (*ValuesFunctionVectorMeanIteration) Configure

func (v *ValuesFunctionVectorMeanIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ValuesFunctionVectorMeanIteration) Iterate

func (v *ValuesFunctionVectorMeanIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type ValuesGroupedAggregationIteration

ValuesGroupedAggregationIteration collects historical values and weights into grouping buckets (defined by tupled grouping series) and applies a caller-provided aggregation per bucket.

Usage hints:

type ValuesGroupedAggregationIteration struct {
    Aggregation func(
        defaultValues []float64,
        outputIndexByGroup map[string]int,
        groupings map[string][]float64,
        weightings map[string][]float64,
    ) []float64
    Kernel kernels.IntegrationKernel
    // contains filtered or unexported fields
}

func (*ValuesGroupedAggregationIteration) Configure

func (v *ValuesGroupedAggregationIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ValuesGroupedAggregationIteration) Iterate

func (v *ValuesGroupedAggregationIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type ValuesSortingCollectionIteration

ValuesSortingCollectionIteration maintains a sorted collection of entries.

Usage hints:

type ValuesSortingCollectionIteration struct {
    PushAndSort func(
        params *simulator.Params,
        partitionIndex int,
        stateHistories []*simulator.StateHistory,
        timestepsHistory *simulator.CumulativeTimestepsHistory,
    ) (SortingValues, bool)
}

func (*ValuesSortingCollectionIteration) Configure

func (v *ValuesSortingCollectionIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ValuesSortingCollectionIteration) Iterate

func (v *ValuesSortingCollectionIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

type ValuesWeightedResamplingIteration

ValuesWeightedResamplingIteration resamples historical values from other partitions according to provided (optionally discounted) weights.

Usage hints:

type ValuesWeightedResamplingIteration struct {
    Src rand.Source
    // contains filtered or unexported fields
}

func (*ValuesWeightedResamplingIteration) Configure

func (v *ValuesWeightedResamplingIteration) Configure(partitionIndex int, settings *simulator.Settings)

func (*ValuesWeightedResamplingIteration) Iterate

func (v *ValuesWeightedResamplingIteration) Iterate(params *simulator.Params, partitionIndex int, stateHistories []*simulator.StateHistory, timestepsHistory *simulator.CumulativeTimestepsHistory) []float64

Generated by gomarkdoc