///|
pub fn sample_without_replacement(
length~ : Int,
count~ : Int,
seed~ : UInt,
) -> Array[Int] raise @core.GeometryError {
deterministic_indices(length~, count~, seed~)
}
///|
pub fn sample_probability(
inlier_ratio~ : Double,
sample_size~ : Int,
) -> Double raise @core.GeometryError {
if inlier_ratio < 0.0 || inlier_ratio > 1.0 || sample_size <= 0 {
raise @core.GeometryError::DegenerateInput(
"invalid sample probability parameters",
)
}
let mut result = 1.0
for _ in 0.. Double raise @core.GeometryError {
if iterations < 0 {
raise @core.GeometryError::DegenerateInput(
"iterations must be non-negative",
)
}
let probability = sample_probability(inlier_ratio~, sample_size~)
let mut failure = 1.0
for _ in 0.. Double raise @core.GeometryError {
if sigma < 0.0 || confidence_multiplier <= 0.0 {
raise @core.GeometryError::DegenerateInput(
"sigma threshold parameters are invalid",
)
}
sigma * confidence_multiplier
}
///|
pub fn select_best_score(
scores : ArrayView[Double],
) -> Int raise @core.GeometryError {
if scores.length() == 0 {
raise @core.GeometryError::NotEnoughPoints("scores must not be empty")
}
let mut best = 0
for i in 1..