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

commonMain.space.kscience.kmath.domains.UnivariateDomain.kt Maven / Gradle / Ivy

package space.kscience.kmath.domains

import space.kscience.kmath.linear.Point
import space.kscience.kmath.structures.asBuffer

public inline class UnivariateDomain(public val range: ClosedFloatingPointRange) : RealDomain {
    public override val dimension: Int
        get() = 1

    public operator fun contains(d: Double): Boolean = range.contains(d)

    public override operator fun contains(point: Point): Boolean {
        require(point.size == 0)
        return contains(point[0])
    }

    public override fun nearestInDomain(point: Point): Point {
        require(point.size == 1)
        val value = point[0]

        return when {
            value in range -> point
            value >= range.endInclusive -> doubleArrayOf(range.endInclusive).asBuffer()
            else -> doubleArrayOf(range.start).asBuffer()
        }
    }

    public override fun getLowerBound(num: Int, point: Point): Double? {
        require(num == 0)
        return range.start
    }

    public override fun getUpperBound(num: Int, point: Point): Double? {
        require(num == 0)
        return range.endInclusive
    }

    public override fun getLowerBound(num: Int): Double? {
        require(num == 0)
        return range.start
    }

    public override fun getUpperBound(num: Int): Double? {
        require(num == 0)
        return range.endInclusive
    }

    public override fun volume(): Double = range.endInclusive - range.start
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy