Streaming ETA prediction primitives for MoonBit: Kalman smoothing, adaptive windows, route profiles, and evaluation helpers.
moon update
moon check --deny-warn --target all
moon test --deny-warn --target all
moon run cmd/main -- demo///|
test "README forecast example" {
let route = demo_route()
let batch = forecast_batch(demo_observations(), route, congestion=0.3)
assert_true(batch.results.length() > 0)
assert_true(batch.summary.count == batch.results.length())
}moon run cmd/main -- demo
moon run cmd/main -- benchmark table
moon run cmd/main -- calibrate
moon run cmd/main -- validatemoon fmt --check
moon check --deny-warn --target all
moon test --deny-warn --target all
moon infopub(all) struct BatchForecast {
results : Array[EtaResult]
points : Array[ForecastPoint]
summary : ErrorSummary
skipped : Int
} derive(Eq, Debug)pub(all) struct BenchmarkCase {
name : String
points : Int
summary : ErrorSummary
mean_confidence : Double
notes : String
} derive(Eq, Debug)pub(all) struct BenchmarkReport {
cases : Array[BenchmarkCase]
aggregate : ErrorSummary
total_points : Int
rendered : String
} derive(Eq, Debug)fn CalendarBucket::new(start_second : Double, end_second : Double, congestion : Double, label? : String) -> CalendarBucketpub(all) struct CalibrationCandidate {
congestion : Double
error : ErrorSummary
rank : Int
} derive(Eq, Debug)pub(all) struct CalibrationResult {
best_congestion : Double
best_error : ErrorSummary
candidates : Array[ForecastPoint]
} derive(Eq, Debug)pub(all) struct CrossValidationFold {
fold : Int
train_count : Int
test_count : Int
summary : ErrorSummary
} derive(Eq, Debug)pub(all) struct CrossValidationReport {
folds : Array[CrossValidationFold]
aggregate : ErrorSummary
best_congestion : Double
} derive(Eq, Debug)pub(all) struct DatasetRow {
observation : Observation
actual_remaining : Double?
weight : Double
} derive(Eq, Debug)pub(all) struct DatasetSchema {
name : String
required : Array[SchemaField]
optional : Array[SchemaField]
version : String
} derive(Eq, Debug)pub(all) struct DayCalendar {
weekday : Int
buckets : Array[CalendarBucket]
fallback_congestion : Double
} derive(Eq, Debug)pub(all) struct DetailedBreakdown {
forecasts : Array[SegmentForecast]
total : RouteBreakdown
weekday : Int
second_of_day : Double
} derive(Eq, Debug)pub(all) struct EtaEngine {
kalman : KalmanState
window : WindowState
route : RouteProfile
config : EtaConfig
last_observation : Observation?
} derive(Eq, Debug)pub(all) struct GridCalibration {
candidates : Array[CalibrationCandidate]
best : CalibrationCandidate
evaluated : Int
} derive(Eq, Debug)pub(all) struct GuardResult {
accepted : Bool
observation : Observation
reasons : Array[String]
} derive(Eq, Debug)pub(all) struct MetricReport {
summary : ErrorSummary
bias : Double
smape : Double
median_absolute_error : Double
coverage : Double
bins : Array[MetricBin]
} derive(Eq, Debug)pub(all) struct ObservationBatch {
observations : Array[Observation]
source : String
dropped : Int
} derive(Eq, Debug)fn ObservationDataset::between(self : ObservationDataset, start~ : Double, end~ : Double) -> ObservationDatasetpub(all) struct ObservationParseResult {
observations : Array[Observation]
error : ParseError?
lines_read : Int
} derive(Eq, Debug)pub(all) struct QualityGateResult {
passed : Bool
reasons : Array[String]
checked_points : Int
summary : ErrorSummary
} derive(Eq, Debug)pub(all) struct RollingEvaluation {
windows : Array[EvaluationWindow]
overall : ErrorSummary
} derive(Eq, Debug)pub(all) struct RouteBreakdown {
segments : Array[SegmentEta]
total_distance : Double
total_eta_seconds : Double
confidence : Double
} derive(Eq, Debug)pub(all) struct RouteCalendar {
days : Array[DayCalendar]
default_congestion : Double
} derive(Eq, Debug)fn RouteCalendar::congestion_at(self : RouteCalendar, weekday : Int, second_of_day : Double) -> Doublepub(all) struct RouteCandidate {
route_id : String
route : RouteProfile
breakdown : RouteBreakdown
score : Double
risk : Double
} derive(Eq, Debug)pub(all) struct RouteSelection {
selected : RouteCandidate?
alternatives : Array[RouteCandidate]
reason : String
} derive(Eq, Debug)pub(all) struct RouteStreamState {
route : RouteProfile
engine : EtaEngine
calendar : RouteCalendar
weekday : Int
second_of_day : Double
updates : Int
} derive(Eq, Debug)fn RouteStreamState::new(route : RouteProfile, initial_speed~ : Double, calendar? : RouteCalendar, weekday? : Int, second_of_day? : Double) -> RouteStreamStatefn RouteStreamState::observe(self : RouteStreamState, observation : Observation) -> (RouteStreamState, StreamSnapshot)pub(all) struct ScenarioTrace {
observations : Array[Observation]
actual_remaining : Array[Double]
} derive(Eq, Debug)pub(all) struct SchemaReport {
valid : Bool
missing : Array[SchemaField]
unknown : Array[String]
message : String
} derive(Eq, Debug)pub(all) struct SegmentForecast {
index : Int
segment : SegmentProfile
eta : SegmentEta
regime : TrafficRegime
congestion : Double
} derive(Eq, Debug)pub(all) struct SensitivityReport {
parameter : String
baseline : SensitivityPoint
points : Array[SensitivityPoint]
monotonic : Bool
elasticity : Double
} derive(Eq, Debug)pub(all) struct StreamSnapshot {
update : Int
observation : Observation
result : EtaResult
label : String
} derive(Eq, Debug)pub(all) struct StreamSummary {
snapshots : Array[StreamSnapshot]
latest : EtaResult
average_confidence : Double
dropped : Int
} derive(Eq, Debug)pub(all) struct ValidationIssue {
code : ValidationCode
index : Int
message : String
} derive(Eq, Debug)pub(all) struct ValidationReport {
valid : Bool
checked : Int
issues : Array[ValidationIssue]
} derive(Eq, Debug)pub(all) struct WindowState {
values : Array[Double]
target_size : Int
config : WindowConfig
} derive(Eq, Debug)fn allocate_live_speed(route : RouteProfile, live_speed : Double, segment : SegmentProfile) -> Doublefn benchmark_route(route : RouteProfile, scenarios : Array[(String, ScenarioConfig)]) -> BenchmarkReportfn calibrate_congestion(route : RouteProfile, observations : Array[Observation], actuals : Array[Double], config? : CalibrationConfig) -> CalibrationResultfn calibration_improvement(route : RouteProfile, dataset : ObservationDataset, baseline~ : Double, calibration : GridCalibration) -> Doublefn capabilities_are_named() -> Boolfn compare_double(left : Double, right : Double) -> Intfn cross_validate_congestion(route : RouteProfile, dataset : ObservationDataset, fold_count? : Int) -> CrossValidationReportfn dataset_from_observations(observations : Array[Observation], name? : String) -> ObservationDatasetfn dataset_from_targets(observations : Array[Observation], actuals : Array[Double], name? : String) -> ObservationDatasetfn detect_alerts(summary : StreamSummary, confidence_threshold? : Double, eta_jump_threshold? : Double) -> Array[ForecastAlert]fn eta_results_to_points(results : Array[EtaResult], actuals : Array[Double]) -> Array[ForecastPoint]fn evaluate_batch_quality(observations : Array[Observation], batch : BatchForecast, config : QualityGateConfig) -> QualityGateResultfn evaluate_quality_gate(results : Array[EtaResult], points : Array[ForecastPoint], config : QualityGateConfig) -> QualityGateResultfn explain_batch(batch : BatchForecast, route : RouteProfile, congestion~ : Double) -> Array[EtaExplanation]fn explain_eta(result : EtaResult, route : RouteProfile, congestion~ : Double, config? : EtaConfig) -> EtaExplanationfn forecast_batch(observations : Array[Observation], route : RouteProfile, congestion~ : Double) -> BatchForecastfn forecast_breakdown(route : RouteProfile, speed~ : Double, congestion~ : Double, policy? : SpeedPolicy) -> RouteBreakdownfn forecast_breakdown_at(route : RouteProfile, speed~ : Double, calendar : RouteCalendar, weekday~ : Int, second_of_day~ : Double, policy? : SpeedPolicy) -> DetailedBreakdownfn forecast_contract(observations : Array[Observation], results : Array[EtaResult]) -> ContractReportfn forecast_dataset(dataset : ObservationDataset, route : RouteProfile, congestion~ : Double) -> BatchForecastfn forecast_many(observations : Array[Observation], routes : Array[RouteProfile], congestion~ : Double) -> Array[BatchForecast]fn grid_calibrate(route : RouteProfile, dataset : ObservationDataset, minimum? : Double, maximum? : Double, steps? : Int) -> GridCalibrationfn guard_observation(previous : Observation?, observation : Observation, config : InputGuardConfig) -> GuardResultfn guard_trace(observations : Array[Observation], config : InputGuardConfig) -> (Array[Observation], Array[String])fn health_check(route : RouteProfile, config? : EtaConfig, calendar? : RouteCalendar) -> HealthReportfn holdout_evaluate(route : RouteProfile, dataset : ObservationDataset, holdout_ratio? : Double) -> (GridCalibration, ErrorSummary)fn interface_filename() -> Stringfn interpolate_congestion(start : Double, end : Double, progress : Double) -> Doublefn is_finite_value(value : Double) -> Boolfn make_route_candidates(routes : Array[(String, RouteProfile)], speed~ : Double, congestion~ : Double, risk_penalty? : Double) -> Array[RouteCandidate]fn metric_report(results : Array[EtaResult], points : Array[ForecastPoint], tolerance? : Double) -> MetricReportfn monitor_observations(observations : Array[Observation], route : RouteProfile) -> (StreamSummary, Array[ForecastAlert])fn normalize_weekday(weekday : Int) -> Intfn package_description() -> Stringfn package_repository() -> Stringfn package_version() -> Stringfn parse_double_token(token : String) -> Double?fn predict_segment_speed(segment : SegmentProfile, live_speed : Double, congestion : Double, policy? : SpeedPolicy) -> Doublefn refine_grid(route : RouteProfile, dataset : ObservationDataset, initial : GridCalibration, radius? : Double, steps? : Int) -> GridCalibrationfn replay_stream(observations : Array[Observation], route : RouteProfile, initial_speed? : Double) -> StreamSummaryfn rolling_evaluate(results : Array[EtaResult], actuals : Array[Double], window_size~ : Int) -> RollingEvaluationfn run_cli_benchmark() -> Stringfn sample_calendar(calendar : RouteCalendar, weekday : Int, start_second : Double, interval : Double, count : Int) -> Array[Double]fn smooth_values(values : Array[Double], initial~ : Double, config~ : KalmanConfig) -> Array[Double]fn speed_confidence(segment : SegmentProfile, live_speed : Double, predicted_speed : Double) -> Doublefn speed_sensitivity(route : RouteProfile, congestion~ : Double, baseline_speed? : Double, minimum_speed? : Double, maximum_speed? : Double, steps? : Int) -> SensitivityReportfn supports_target(target : String) -> Boolfn version_banner() -> StringInstall
Download zipStreaming ETA prediction primitives for MoonBit: Kalman smoothing, adaptive windows, route profiles, and evaluation helpers.