All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.space.kscience.kmath.misc.cumulative.kt Maven / Gradle / Ivy

package space.kscience.kmath.misc

import space.kscience.kmath.operations.Space
import space.kscience.kmath.operations.invoke
import kotlin.jvm.JvmName

/**
 * Generic cumulative operation on iterator.
 *
 * @param T the type of initial iterable.
 * @param R the type of resulting iterable.
 * @param initial lazy evaluated.
 */
public inline fun  Iterator.cumulative(initial: R, crossinline operation: (R, T) -> R): Iterator =
    object : Iterator {
        var state: R = initial

        override fun hasNext(): Boolean = [email protected]()

        override fun next(): R {
            state = operation(state, [email protected]())
            return state
        }
    }

public inline fun  Iterable.cumulative(initial: R, crossinline operation: (R, T) -> R): Iterable =
    Iterable { [email protected]().cumulative(initial, operation) }

public inline fun  Sequence.cumulative(initial: R, crossinline operation: (R, T) -> R): Sequence =
    Sequence { [email protected]().cumulative(initial, operation) }

public fun  List.cumulative(initial: R, operation: (R, T) -> R): List =
    iterator().cumulative(initial, operation).asSequence().toList()

//Cumulative sum

/**
 * Cumulative sum with custom space
 */
public fun  Iterable.cumulativeSum(space: Space): Iterable =
    space { cumulative(zero) { element: T, sum: T -> sum + element } }

@JvmName("cumulativeSumOfDouble")
public fun Iterable.cumulativeSum(): Iterable = cumulative(0.0) { element, sum -> sum + element }

@JvmName("cumulativeSumOfInt")
public fun Iterable.cumulativeSum(): Iterable = cumulative(0) { element, sum -> sum + element }

@JvmName("cumulativeSumOfLong")
public fun Iterable.cumulativeSum(): Iterable = cumulative(0L) { element, sum -> sum + element }

public fun  Sequence.cumulativeSum(space: Space): Sequence =
    space { cumulative(zero) { element: T, sum: T -> sum + element } }

@JvmName("cumulativeSumOfDouble")
public fun Sequence.cumulativeSum(): Sequence = cumulative(0.0) { element, sum -> sum + element }

@JvmName("cumulativeSumOfInt")
public fun Sequence.cumulativeSum(): Sequence = cumulative(0) { element, sum -> sum + element }

@JvmName("cumulativeSumOfLong")
public fun Sequence.cumulativeSum(): Sequence = cumulative(0L) { element, sum -> sum + element }

public fun  List.cumulativeSum(space: Space): List =
    space { cumulative(zero) { element: T, sum: T -> sum + element } }

@JvmName("cumulativeSumOfDouble")
public fun List.cumulativeSum(): List = cumulative(0.0) { element, sum -> sum + element }

@JvmName("cumulativeSumOfInt")
public fun List.cumulativeSum(): List = cumulative(0) { element, sum -> sum + element }

@JvmName("cumulativeSumOfLong")
public fun List.cumulativeSum(): List = cumulative(0L) { element, sum -> sum + element }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy