Heart Rate Variability (HRV) toolkit in MoonBit for recovery monitoring and training status analysis.
moon version --all
moon update
moon fmt --check
moon check --deny-warn --target all
moon test --deny-warn --target nativelet config = @hrvkit.HrvConfig::default()
let (cleaned, quality) = @hrvkit.clean_rr_intervals(
[800.0, 802.0, 798.0, 2200.0, 801.0],
@hrvkit.InterpolateLocalMedian,
config,
)
let metrics = @hrvkit.calculate_metrics(cleaned, config, quality)
println(metrics.rmssd.to_string())moon run --target native cmd/main -- [options]| Option | Values | Purpose |
|---|---|---|
| --action | clean, metrics, trends, report, quality, benchmark | Select the operation |
| --format | csv, json | Input and output encoding for the selected operation |
| --cleaning | remove, median, linear | Artifact correction policy |
| --sample-rate | positive number | Tachogram sample rate for reports and benchmarks |
| --repetitions | positive integer | Number of benchmark repetitions |
| --data | inline CSV or JSON | Input recording or morning-history data |
# Calculate metrics from a JSON array and emit JSON.
moon run --target native cmd/main -- --action metrics --format json --data "[800,802,798,805,801]"
# Clean a CSV recording and emit CSV.
moon run --target native cmd/main -- --action clean --format csv --cleaning median --data "800,802,2200,798,801"
# Generate a complete analysis report.
moon run --target native cmd/main -- --action report --format json --sample-rate 4 --data "[800,802,798,805,801]"
# Run the deterministic benchmark workload.
moon run --target native --release cmd/main -- --action benchmark --format csv --repetitions 10 --sample-rate 4hrvkit.mbt / indicators.mbt domain types and core HRV metrics
validation.mbt / cleaning*.mbt validation, artifact policy, and repair audit
statistics.mbt / time_domain*.mbt robust descriptive and time-domain features
frequency*.mbt / respiration.mbt spectral and respiratory features
nonlinear.mbt / advanced_indicators.mbt geometric and nonlinear features
pipeline.mbt / reporting*.mbt end-to-end reports and stable exports
readiness*.mbt / sleep*.mbt recovery, sleep, and training summaries
session*.mbt / streaming.mbt longitudinal and online analysis
wearable_pipeline.mbt normalized wearable ingestion and windows
protocol_adapters.mbt source-specific CSV dialect adaptation
training_load_plus.mbt load dose, ratios, monotony, and alerts
longitudinal_plus.mbt robust recovery baselines and trajectories
quality_pipeline.mbt staged quality gates and batch orchestration
decision_support.mbt explainable findings and action plans
forecast_plus.mbt / scenario*.mbt forecasts and what-if training plans
telemetry_store.mbt / cohort*.mbt bounded storage and quality-aware cohorts
reporting_plus.mbt / audit*.mbt structured reports and provenance events
runtime_diagnostics.mbt runtime aggregates and regression budgets
configuration_registry.mbt validated application profiles
batch.mbt / matrix.mbt cohort aggregation and feature computation
protocol*.mbt / calibration*.mbt reproducible recording and sensor handling
synthetic*.mbt / benchmarks.mbt deterministic fixtures and benchmark API
cmd/main/main.mbt command-line interfacesamples=256, repetitions=10, feature_count=35
mean_rr=799.8931407352728, rmssd=2.368779541044154
total_power=14633.821047418522, quality_ratio=1moon run --target native --release cmd/main -- --action benchmark --format csv --repetitions 10 --sample-rate 4moon test --deny-warn --target wasm-gc
moon test --deny-warn --target nativepub(all) struct ActivityBlock {
start_index : Int
end_index : Int
state : ActivityState
duration_seconds : Double
sample_count : Int
mean_hr : Double
mean_rr : Double
rmssd : Double
quality_ratio : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct AmbulatorySummary {
sample_count : Int
duration_seconds : Double
rest_seconds : Double
light_seconds : Double
moderate_seconds : Double
vigorous_seconds : Double
mean_hr : Double
mean_rr : Double
valid_ratio : Double
block_count : Int
dominant_state : ActivityState
hr_load : Double
temperature_mean : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct AnalysisOptions {
cleaning_method : CleaningMethod
sample_rate_hz : Double
remove_trend : Bool
window_function : WindowFunction
segment_size : Int
segment_hop : Int
nonlinear_enabled : Bool
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct AnalysisReport {
raw_count : Int
cleaned_intervals : Array[Double]
raw_validation : IntervalValidation
quality : QualityReport
metrics : HrvMetrics
distribution : DistributionStats
poincare : PoincareMetrics
geometric : GeometricMetrics
heart_rate : HeartRateSummary
frequency : FrequencyMetrics
nonlinear : NonlinearMetrics
segments : Array[SegmentSummary]
feature_vector : Array[Double]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ApplicationConfig {
environment : ConfigurationEnvironment
hrv : HrvConfig
analysis : AnalysisOptions
ingest : WearableIngestConfig
gate : QualityGatePolicy
load : LoadModelConfig
forecast : ForecastConfig
subject_retention_days : Int
deterministic : Bool
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ArtifactEvent {
index : Int
value : Double
kind : IntervalDisposition
replacement : Double
confidence : Double
left_neighbor : Double
right_neighbor : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ArtifactProfile {
sample_count : Int
flagged_count : Int
range_violations : Int
local_outliers : Int
sudden_jumps : Int
repeated_values : Int
missing_values : Int
artifact_ratio : Double
median_step : Double
mad_step : Double
flags : Array[QualityFlag]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct AuditEvent {
ordinal : Int
run_id : String
timestamp : String
kind : AuditEventKind
outcome : AuditOutcome
component : String
message : String
input_count : Int
output_count : Int
quality_score : Double
checksum : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct AuditFilter {
run_id : String?
component : String?
kind : AuditEventKind?
outcome : AuditOutcome?
minimum_quality : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct AuditSummary {
event_count : Int
success_count : Int
warning_count : Int
rejection_count : Int
error_count : Int
component_count : Int
mean_quality : Double
last_outcome : AuditOutcome
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct AuditTrail {
run_id : String
started_at : String
finished_at : String
events : Array[AuditEvent]
outcome : AuditOutcome
input_checksum : String
output_checksum : String
feature_count : Int
} derive(Eq, ToJson, Debug, FromJson)fn AuditTrail::append(self : AuditTrail, kind : AuditEventKind, outcome : AuditOutcome, component : String, message : String, input_count : Int, output_count : Int, quality_score : Double, checksum : String, timestamp : String) -> Unitfn AuditTrail::finish(self : AuditTrail, finished_at : String, output_checksum : String, feature_count : Int) -> Unitpub(all) struct CleaningResult {
intervals : Array[Double]
quality : QualityReport
validation : IntervalValidation
events : Array[ArtifactEvent]
changed_count : Int
max_correction : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct CohortComparisonSummary {
observations : Int
quality_eligible : Int
quality_ratio : Double
ranges : Array[CohortMetricRange]
comparisons : Array[CohortComparison]
feature_vector : Array[Double]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct CohortSummary {
record_count : Int
subject_count : Int
rmssd_mean : Double
rmssd_median : Double
rmssd_sd : Double
rmssd_q1 : Double
rmssd_q3 : Double
mean_hr : Double
mean_quality : Double
low_quality_count : Int
strongest_subject : String
weakest_subject : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ConfigValidation {
valid : Bool
issues : Array[ConfigIssue]
normalized : ApplicationConfig
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct DailyLoadLedger {
date : String
entries : Array[TrainingLoadEntry]
doses : Array[LoadDose]
total_load : Double
effective_load : Double
duration_minutes : Double
session_count : Int
average_intensity : Double
quality_ratio : Double
recovery_cost : Double
high_intensity_minutes : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct DecisionContext {
quality_report : QualityReport?
recovery_report : LongitudinalRecoveryReport?
load_plan : TrainingLoadPlan?
sleep_hours : Double
sleep_efficiency : Double
symptom_score : Double
user_goal : String
requested_intensity : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct DecisionFinding {
code : String
domain : DecisionDomain
severity : DecisionSeverity
title : String
evidence : String
observed : Double
reference : Double
confidence : Double
action : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct DecisionPlan {
score : Double
confidence : Double
level : DecisionSeverity
findings : Array[DecisionFinding]
actions : Array[DecisionAction]
headline : String
disclaimer : String
} derive(Eq, ToJson, Debug, FromJson)fn FeatureTable::from_features(features : Array[NamedFeature], schema_version : String) -> FeatureTablepub(all) struct ForecastBundle {
recovery : OperationalForecastResult
load : OperationalForecastResult
backtest : ForecastBacktest
recommendation : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ForecastPoint {
step : Int
value : Double
lower : Double
upper : Double
confidence : Double
algorithm : ForecastMethod
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct FrequencyMetrics {
sample_rate_hz : Double
total_power : Double
vlf : FrequencyBandPower
lf : FrequencyBandPower
hf : FrequencyBandPower
lf_hf_ratio : Double
spectral_centroid_hz : Double
spectral_entropy : Double
peak_frequency_hz : Double
spectrum : Array[SpectrumBin]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct HrvMetrics {
mean_rr : Double
mean_hr : Double
sdnn : Double
rmssd : Double
pnn50 : Double
pnn_custom : Double
quality : QualityReport
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct HrvPipelineRun {
run_id : String
report : AnalysisReport?
gate : QualityGateResult
stages : Array[PipelineStageTrace]
input_count : Int
accepted : Bool
feature_vector : Array[Double]
export_csv : String
} derive(Eq, ToJson, Debug, FromJson)fn IngestCursor::push(self : IngestCursor, sample : WearableSample, config : WearableIngestConfig) -> IngestNotice?pub(all) struct IngestNotice {
index : Int
code : String
message : String
severity : String
disposition : WearableSampleDisposition
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct IntervalObservation {
index : Int
value : Double
disposition : IntervalDisposition
distance_from_median : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct LoadAlert {
date : String
level : LoadRiskLevel
code : String
title : String
explanation : String
observed : Double
threshold : Double
action : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct LoadDose {
duration_component : Double
cardiovascular_component : Double
perceived_effort_component : Double
distance_component : Double
elevation_component : Double
quality_weight : Double
raw_load : Double
effective_load : Double
intensity_score : Double
band : LoadIntensityBand
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct LoadModelConfig {
max_hr_bpm : Double
resting_hr_floor_bpm : Double
acute_window_days : Int
chronic_window_days : Int
easy_rpe : Double
hard_rpe : Double
quality_floor : Double
monotony_floor : Double
caution_ratio : Double
critical_ratio : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct LongitudinalRecoveryReport {
records : Array[RecoveryDayRecord]
assessments : Array[RecoveryDayAssessment]
baseline : RecoveryBaseline
trajectory : RecoveryTrajectory
current_score : Double
current_status : RecoveryDayStatus
missing_days : Int
quality_ratio : Double
stable_streak : Int
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct NormalizedWearableSample {
sample : WearableSample
quality_weight : Double
disposition : WearableSampleDisposition
repaired : Bool
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct OperationalForecastResult {
algorithm : ForecastMethod
history_count : Int
points : Array[ForecastPoint]
baseline : Double
slope : Double
mean_absolute_error : Double
root_mean_squared_error : Double
coverage : Double
usable : Bool
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct OperationalReportSection {
kind : ReportSectionKind
title : String
summary : String
metrics : Array[OperationalReportMetric]
rows : Array[Array[String]]
warnings : Array[String]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct PipelineStageTrace {
ordinal : Int
kind : PipelineStageKind
status : PipelineStageStatus
input_count : Int
output_count : Int
quality : Double
duration_ms : Double
message : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ProtocolAdapterConfig {
dialect : WearableProtocolDialect
delimiter : String
has_header : Bool
default_quality : Double
source_id : String
start_timestamp_seconds : Double
infer_heart_rate : Bool
infer_quality : Bool
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ProtocolAdapterResult {
dialect : WearableProtocolDialect
mapping : ProtocolColumnMapping
samples : Array[WearableSample]
notices : Array[ProtocolAdapterNotice]
accepted_count : Int
rejected_count : Int
header : Array[String]
source_id : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ProtocolColumnMapping {
timestamp_index : Int
rr_index : Int
heart_rate_index : Int
quality_index : Int
movement_index : Int
temperature_index : Int
timestamp_unit : ProtocolUnit
rr_unit : ProtocolUnit
quality_unit : ProtocolUnit
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct QualityDecision {
accepted : Bool
confidence : Double
reasons : Array[String]
recommended_method : CleaningMethod
validation : IntervalValidation
diagnostic : SignalDiagnostic
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct QualityFlag {
index : Int
value : Double
reason : ArtifactReason
severity : Double
replacement : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ReadinessScore {
score : Double
level : ReadinessLevel
baseline_z : Double
trend_component : Double
quality_component : Double
explanation : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RecordingComparison {
left_mean : Double
right_mean : Double
mean_delta : Double
left_rmssd : Double
right_rmssd : Double
rmssd_delta : Double
standardized_delta : Double
agreement_bias : Double
agreement_limits_lower : Double
agreement_limits_upper : Double
distance : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RecoveryDayAssessment {
record : RecoveryDayRecord
baseline : RecoveryBaseline
rr_z : Double
rmssd_z : Double
heart_rate_z : Double
sleep_z : Double
readiness_score : Double
status : RecoveryDayStatus
confidence : Double
reasons : Array[String]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RecoveryDayRecord {
date : String
mean_rr_ms : Double
rmssd_ms : Double
sdnn_ms : Double
resting_hr_bpm : Double
sleep_hours : Double
sleep_efficiency : Double
respiratory_rate : Double
training_load : Double
signal_quality : Double
source : String
missing : Bool
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RecoveryTrendPoint {
date : String
score : Double
rmssd : Double
resting_hr : Double
load : Double
status : RecoveryDayStatus
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RecoveryWeekSummary {
week_index : Int
start_date : String
end_date : String
record_count : Int
usable_count : Int
average_readiness : Double
minimum_readiness : Double
average_rmssd : Double
average_sleep_hours : Double
total_training_load : Double
quality_ratio : Double
missing_count : Int
trajectory : RecoveryTrajectory
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RollingLoadProfile {
dates : Array[String]
daily_loads : Array[Double]
acute_load : Double
chronic_load : Double
acute_chronic_ratio : Double
exponentially_weighted_load : Double
monotony : Double
strain : Double
load_trend : Double
rest_day_count : Int
high_load_day_count : Int
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RuntimeCheck {
aggregate : RuntimeAggregate
budget : RuntimeBudget
passed : Bool
reasons : Array[String]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct RuntimeReport {
samples : Array[RuntimeSample]
aggregates : Array[RuntimeAggregate]
checks : Array[RuntimeCheck]
passed : Bool
feature_vector : Array[Double]
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ScenarioComparison {
baseline : ScenarioResult
alternatives : Array[ScenarioResult]
recommended_index : Int
recommendation : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct ScenarioResult {
kind : TrainingScenarioKind
sessions : Array[ScenarioSession]
projected_load : Double
projected_ratio : Double
intensity_ceiling : Double
recovery_cost : Double
risk_score : Double
suitable : Bool
rationale : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct SegmentSummary {
range : SegmentRange
count : Int
mean_rr : Double
sdnn : Double
rmssd : Double
pnn50 : Double
median_rr : Double
quality_ratio : Double
sd1 : Double
sd2 : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct SessionAnalytics {
count : Int
usable_count : Int
mean_rmssd : Double
median_rmssd : Double
rmssd_trend : Double
rmssd_volatility : Double
mean_hr : Double
mean_quality : Double
total_load : Double
load_trend : Double
best_session_id : String
worst_session_id : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct SignalDiagnostic {
sample_count : Int
duration_seconds : Double
valid_ratio : Double
artifact_ratio : Double
mean_rr : Double
median_rr : Double
mean_hr : Double
hr_range : Double
rmssd : Double
sdnn : Double
drift_slope : Double
gap_candidates : Int
grade : String
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct SimulationConfig {
length : Int
baseline_rr : Double
variability_ms : Double
sample_rate_hz : Double
scenario : SimulationScenario
artifact_period : Int
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct SleepEpoch {
start_minute : Double
duration_minutes : Double
stage : SleepStage
mean_rr : Double
rmssd : Double
quality_ratio : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct SleepRecoverySummary {
total_minutes : Double
asleep_minutes : Double
awake_minutes : Double
deep_minutes : Double
rem_minutes : Double
light_minutes : Double
sleep_efficiency : Double
stage_transition_count : Int
overnight_mean_rr : Double
overnight_rmssd : Double
overnight_quality : Double
recovery_delta : Double
fragmentation_index : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct StreamingSession {
stats : OnlineStats
intervals : Array[Double]
config : HrvConfig
started : Bool
finished : Bool
} derive(Debug)pub(all) struct StreamingSnapshot {
metrics : HrvMetrics
validation : IntervalValidation
diagnostic : SignalDiagnostic
sample_count : Int
duration_seconds : Double
finished : Bool
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct TelemetryStore {
records : Array[TelemetryRecord]
notices : Array[TelemetryStoreNotice]
policy : TelemetryStorePolicy
} derive(Debug)fn TelemetryStore::apply_retention(self : TelemetryStore, newest_timestamp : Double) -> TelemetryRetentionResultfn TelemetryStore::retain_after(self : TelemetryStore, cutoff_seconds : Double) -> TelemetryRetentionResultpub(all) struct TelemetrySummary {
record_count : Int
subject_count : Int
source_count : Int
first_timestamp : Double
last_timestamp : Double
duration_seconds : Double
mean_rr_ms : Double
mean_heart_rate_bpm : Double
mean_quality : Double
low_quality_count : Int
duplicate_notice_count : Int
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct TimeDomainExtended {
mean_rr : Double
mean_hr : Double
sdnn : Double
rmssd : Double
sdsd : Double
cvnn : Double
pnn20 : Double
pnn50 : Double
median_rr : Double
iqr_rr : Double
min_rr : Double
max_rr : Double
range_rr : Double
mad_rr : Double
triangular_index : Double
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct TrainingLoadEntry {
date : String
session_id : String
duration_minutes : Double
average_hr_bpm : Double
maximum_hr_bpm : Double
resting_hr_bpm : Double
rpe : Double
distance_km : Double
elevation_m : Double
signal_quality : Double
band : LoadIntensityBand
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct TrainingLoadPlan {
days : Array[DailyLoadLedger]
profile : RollingLoadProfile
alerts : Array[LoadAlert]
total_load : Double
total_effective_load : Double
average_session_load : Double
peak_day : String
recommended_easy_days : Int
} derive(Eq, ToJson, Debug, FromJson)pub(all) struct WearableIngestReport {
samples : Array[WearableSample]
notices : Array[IngestNotice]
accepted_count : Int
rejected_count : Int
duplicate_count : Int
out_of_order_count : Int
low_quality_count : Int
invalid_count : Int
gap_count : Int
duration_seconds : Double
quality_ratio : Double
complete : Bool
} derive(Eq, ToJson, Debug, FromJson)fn aggregate_runtime_samples(samples : Array[RuntimeSample], case_name : String, target : String) -> RuntimeAggregatefn analyze_rr(intervals : Array[Double], config : HrvConfig, options : AnalysisOptions) -> AnalysisReportfn analyze_windows(intervals : Array[Double], window_size : Int, hop_size : Int, config : HrvConfig) -> Array[WindowedAnalysis]fn assess_recovery_day(record : RecoveryDayRecord, baseline : RecoveryBaseline) -> RecoveryDayAssessmentfn baseline_state(history : Array[MorningMeasurement], today_index : Int, config : HrvConfig) -> MorningBaselineStatefn bpm_to_rr(rate_bpm : Double) -> Doublefn build_cohort_summary(observations : Array[CohortObservation], quality_floor : Double) -> CohortComparisonSummaryfn build_forecast_bundle(recovery_scores : Array[Double], load_values : Array[Double], config : ForecastConfig) -> ForecastBundlefn build_longitudinal_recovery_report(records : Array[RecoveryDayRecord], baseline_window : Int) -> LongitudinalRecoveryReportfn build_operational_report(report_id : String, generated_at : String, subject_id : String, analysis : AnalysisReport?, gate : QualityGateResult, recovery : LongitudinalRecoveryReport?, training : TrainingLoadPlan?, forecast : ForecastBundle?, decision : DecisionPlan?) -> OperationalReportfn build_rolling_load_profile(days : Array[DailyLoadLedger], config : LoadModelConfig) -> RollingLoadProfilefn build_runtime_report(samples : Array[RuntimeSample], budgets : Array[RuntimeBudget]) -> RuntimeReportfn build_training_load_plan(entries : Array[TrainingLoadEntry], config : LoadModelConfig) -> TrainingLoadPlanfn calculate_approximate_entropy(values : Array[Double], dimension : Int, tolerance : Double) -> Doublefn calculate_band_powers(spectrum : Array[SpectrumBin], bands : Array[SpectralBand]) -> Array[BandPower]fn calculate_frequency_metrics(intervals : Array[Double], sample_rate_hz : Double) -> FrequencyMetricsfn calculate_load_ratio(days : Array[DailyLoadLedger], acute_window : Int, chronic_window : Int) -> Doublefn calculate_metrics(intervals : Array[Double], config : HrvConfig, quality : QualityReport) -> HrvMetricsfn calculate_morning_trends(history : Array[MorningMeasurement], window_size : Int, config : HrvConfig) -> Array[MorningTrend]fn calculate_readiness(today_rmssd : Double, baseline : RobustBaseline, trend_slope : Double, quality_ratio : Double) -> ReadinessScorefn calculate_readiness_series(history : Array[MorningMeasurement], config : HrvConfig) -> Array[ReadinessScore]fn calculate_robust_baseline(values : Array[Double], fence : Double, range_factor : Double) -> RobustBaselinefn calculate_spectral_profile(intervals : Array[Double], sample_rate_hz : Double, bands : Array[SpectralBand]) -> SpectralProfilefn classify_session_history(observations : Array[SessionObservation], window_size : Int, load_threshold : Double) -> Array[SessionStatus]fn classify_session_status(observation : SessionObservation, baseline_rmssd : Double, baseline_scale : Double, load_threshold : Double) -> SessionStatusfn classify_sleep_epoch(mean_rr : Double, rmssd : Double, movement_score : Double, quality_ratio : Double) -> SleepStagefn clean_rr_intervals(intervals : Array[Double], cleaning_method : CleaningMethod, config : HrvConfig) -> (Array[Double], QualityReport)fn cohort_compare(observation : CohortObservation, observations : Array[CohortObservation], quality_floor : Double) -> CohortComparisonfn cohort_metric_range(observations : Array[CohortObservation], metric : String) -> CohortMetricRangefn cohort_percentile_for(summary : CohortComparisonSummary, reference : String, metric : String) -> Doublefn cohort_quality_adjusted_score(observation : CohortObservation, summary : CohortComparisonSummary) -> Doublefn cohort_ranges(observations : Array[CohortObservation], quality_floor : Double) -> Array[CohortMetricRange]fn cohort_rank(observation : CohortObservation, observations : Array[CohortObservation], metric : String, higher_is_better : Bool, quality_floor : Double) -> CohortRankfn cohort_training_load_flag(observation : CohortObservation, summary : CohortComparisonSummary) -> Boolfn compare_subject_to_cohort(subject : SubjectSummary, cohort : Array[SubjectSummary]) -> SubjectSummaryfn compare_training_scenarios(plan : TrainingLoadPlan, recovery_score : Double, config : ScenarioConfig) -> ScenarioComparisonfn count_activity_state(samples : Array[AmbulatorySample], state : ActivityState, thresholds : ActivityThresholds) -> Intfn coverage_quality_score(sample_count : Int, minimum : Int, target : Int) -> Doublefn days_in_month(year : Int, month : Int) -> Intfn decision_action(priority : Int, title : String, instruction : String, duration_minutes : Double, intensity_ceiling : Double, requires_recheck : Bool) -> DecisionActionfn decision_actions(context : DecisionContext, findings : Array[DecisionFinding], score : Double) -> Array[DecisionAction]fn decision_collect_findings(context : DecisionContext, thresholds : DecisionThresholds) -> Array[DecisionFinding]fn decision_finding(code : String, domain : DecisionDomain, severity : DecisionSeverity, title : String, evidence : String, observed : Double, reference : Double, confidence : Double, action : String) -> DecisionFindingfn decision_findings_for_severity(plan : DecisionPlan, severity : DecisionSeverity) -> Array[DecisionFinding]fn decision_load_findings(plan : TrainingLoadPlan, thresholds : DecisionThresholds) -> Array[DecisionFinding]fn decision_quality_finding(report : QualityReport, thresholds : DecisionThresholds) -> DecisionFinding?fn decision_recovery_findings(report : LongitudinalRecoveryReport, thresholds : DecisionThresholds) -> Array[DecisionFinding]fn decision_sleep_findings(context : DecisionContext, thresholds : DecisionThresholds) -> Array[DecisionFinding]fn decision_symptom_finding(context : DecisionContext, thresholds : DecisionThresholds) -> DecisionFinding?fn detect_artifact_clusters(intervals : Array[Double], config : HrvConfig, minimum_count : Int) -> Array[ArtifactCluster]fn detect_change_points(values : Array[Double], window_size : Int, minimum_magnitude : Double) -> Array[ChangePoint]fn detect_morning_alerts(history : Array[MorningMeasurement], config : HrvConfig) -> Array[MorningAlert]fn detect_rate_episodes(intervals : Array[Double], lower_bpm : Double, upper_bpm : Double, minimum_beats : Int) -> Array[RateEpisode]fn dominant_autocorrelation_lag(values : Array[Double], minimum_lag : Int, maximum_lag : Int) -> Intfn estimate_respiration(intervals : Array[Double], config : RespirationConfig) -> RespirationSummaryfn estimate_respiratory_cycles(intervals : Array[Double], frequency_hz : Double, sample_rate_hz : Double) -> Intfn evaluate_protocol_run(plan : ProtocolPlan, results : Array[ProtocolStepResult], tolerance_seconds : Double) -> ProtocolRunReportfn evaluate_quality_policy(intervals : Array[Double], config : HrvConfig, policy : QualityPolicy) -> QualityDecisionfn evaluate_quality_with_runs(intervals : Array[Double], config : HrvConfig, minimum_run : Int) -> SignalQualitySummaryfn evaluate_signal_quality(intervals : Array[Double], config : HrvConfig, weights : SignalQualityWeights, minimum_beats : Int, target_beats : Int) -> SignalQualitySummaryfn export_escape(value : String) -> Stringfn export_with_provenance(content : String, source : String) -> Stringfn forecast_backtest(history : Array[Double], algorithm : ForecastMethod, config : ForecastConfig, holdout : Int) -> ForecastBacktestfn forecast_method_value(values : Array[Double], algorithm : ForecastMethod, config : ForecastConfig) -> Doublefn forecast_point(step : Int, value : Double, scale : Double, confidence : Double, algorithm : ForecastMethod, config : ForecastConfig) -> ForecastPointfn forecast_values(history : Array[Double], algorithm : ForecastMethod, config : ForecastConfig) -> OperationalForecastResultfn generate_drift_fixture(length : Int, baseline : Double, drift_per_beat : Double) -> Array[Double]fn group_training_load_days(entries : Array[TrainingLoadEntry], config : LoadModelConfig) -> Array[DailyLoadLedger]fn heart_rate_in_zone(rate : Double, lower_bpm : Double, upper_bpm : Double) -> Boolfn heart_rate_recovery_after_activity(blocks : Array[ActivityBlock], recovery_minutes : Double) -> Doublefn ingest_sorted_wearable_samples(input : Array[WearableSample], config : WearableIngestConfig) -> WearableIngestReportfn ingest_wearable_samples(input : Array[WearableSample], config : WearableIngestConfig) -> WearableIngestReportfn inspect_cleaning(intervals : Array[Double], cleaning_method : CleaningMethod, config : HrvConfig) -> CleaningResultfn integrate_band_power(spectrum : Array[SpectrumBin], lower_hz : Double, upper_hz : Double) -> Doublefn interpolate_spectrum(spectrum : Array[SpectrumBin], step_hz : Double, maximum_hz : Double) -> Array[SpectrumBin]fn is_extreme_anomaly(score : Double, threshold : Double) -> Boolfn is_leap_year(year : Int) -> Boolfn is_valid_date(year : Int, month : Int, day : Int) -> Boolfn latest_morning_status(history : Array[MorningMeasurement], config : HrvConfig) -> MorningBaselineStatefn load_days_in_range(days : Array[DailyLoadLedger], start_date : String, end_date : String) -> Array[DailyLoadLedger]fn load_plan_with_quality_floor(entries : Array[TrainingLoadEntry], minimum_quality : Double) -> TrainingLoadPlanfn make_audit_event(ordinal : Int, run_id : String, timestamp : String, kind : AuditEventKind, outcome : AuditOutcome, component : String, message : String, input_count : Int, output_count : Int, quality_score : Double, checksum : String) -> AuditEventfn make_cohort_observation(reference : String, rmssd_ms : Double, mean_rr_ms : Double, resting_hr_bpm : Double, readiness_score : Double, training_load : Double, signal_quality : Double, age_band : String, activity_band : String) -> CohortObservationfn make_decision_context(quality_report : QualityReport?, recovery_report : LongitudinalRecoveryReport?, load_plan : TrainingLoadPlan?, sleep_hours : Double, sleep_efficiency : Double, symptom_score : Double, user_goal : String, requested_intensity : Double) -> DecisionContextfn make_frequency_band(name : String, lower_hz : Double, upper_hz : Double, spectrum : Array[SpectrumBin], total_power : Double) -> FrequencyBandPowerfn make_named_features(names : Array[String], values : Array[Double], source : String) -> Array[NamedFeature]fn make_recovery_day_record(date : String, mean_rr_ms : Double, rmssd_ms : Double, sdnn_ms : Double, resting_hr_bpm : Double, sleep_hours : Double, sleep_efficiency : Double, respiratory_rate : Double, training_load : Double, signal_quality : Double, source : String) -> RecoveryDayRecordfn make_runtime_sample(case_name : String, target : String, repetitions : Int, elapsed_ms : Double, input_size : Int, output_size : Int, accepted : Bool) -> RuntimeSamplefn make_telemetry_record(record_id : String, subject_id : String, source_id : String, timestamp_seconds : Double, rr_ms : Double, heart_rate_bpm : Double, movement_g : Double, temperature_c : Double, signal_quality : Double, tags : Array[String]) -> TelemetryRecordfn make_training_load_entry(date : String, session_id : String, duration_minutes : Double, average_hr_bpm : Double, maximum_hr_bpm : Double, resting_hr_bpm : Double, rpe : Double, distance_km : Double, elevation_m : Double, signal_quality : Double) -> TrainingLoadEntryfn make_wearable_sample(timestamp_seconds : Double, rr_ms : Double, heart_rate_bpm : Double, signal_quality : Double, source_id : String, sequence_number : Int) -> WearableSamplefn missing_protocol_results(plan : ProtocolPlan, results : Array[ProtocolStepResult]) -> Array[ProtocolStepResult]fn normalize_wearable_sample(sample : WearableSample, config : WearableIngestConfig) -> NormalizedWearableSamplefn operational_report_section(report : OperationalReport, kind : ReportSectionKind) -> OperationalReportSection?fn overnight_recovery_delta(overnight_rmssd : Double, baseline_rmssd : Double) -> Doublefn pipeline_policy_with_minimum_samples(policy : QualityGatePolicy, samples : Int) -> QualityGatePolicyfn position_in_reference_range(value : Double, range : ReferenceRange, standard_deviation_value : Double, population_values : Array[Double]) -> RangePositionfn post_episode_recovery_slope(intervals : Array[Double], episode : RateEpisode, observation_beats : Int) -> Doublefn prepare_spectral_values(values : Array[Double], remove_trend : Bool, function : WindowFunction) -> Array[Double]fn prepare_tachogram(intervals : Array[Double], sample_rate_hz : Double, remove_trend : Bool, function : WindowFunction) -> Tachogramfn prolonged_awakenings(epochs : Array[SleepEpoch], threshold_minutes : Double) -> Array[SleepEpoch]fn protocol_mapping_for_headers(dialect : WearableProtocolDialect, headers : Array[String]) -> ProtocolColumnMappingfn quality_change_is_material(left : SignalQualitySummary, right : SignalQualitySummary, threshold : Double) -> Boolfn quantize_interval(value : Double, resolution_ms : Double) -> Doublefn rank_sessions_by_recovery(observations : Array[SessionObservation], window_size : Int, load_threshold : Double) -> Array[SessionStatus]fn reconcile_cardiac_channels(sample : WearableSample, config : WearableIngestConfig) -> (WearableSample, Bool)fn recovery_compare_days(current : RecoveryDayRecord, previous : RecoveryDayRecord) -> Array[Double]fn recovery_day_is_better(current : RecoveryDayAssessment, previous : RecoveryDayAssessment) -> Boolfn recovery_recent_records(records : Array[RecoveryDayRecord], count : Int) -> Array[RecoveryDayRecord]fn recovery_score_quantile(assessments : Array[RecoveryDayAssessment], proportion : Double) -> Doublefn recovery_trajectory_from_assessments(assessments : Array[RecoveryDayAssessment]) -> RecoveryTrajectoryfn report_metric(key : String, label : String, value : Double, unit : String, status : String, confidence : Double) -> OperationalReportMetricfn report_overview_section(report : AnalysisReport, gate : QualityGateResult) -> OperationalReportSectionfn report_section(kind : ReportSectionKind, title : String, summary : String, metrics : Array[OperationalReportMetric], rows : Array[Array[String]], warnings : Array[String]) -> OperationalReportSectionfn respiratory_coherence(intervals : Array[Double], frequency_hz : Double, sample_rate_hz : Double) -> Doublefn respiratory_phase_consistency(intervals : Array[Double], frequency_hz : Double, sample_rate_hz : Double) -> Doublefn respiratory_rate_bpm(frequency_hz : Double) -> Doublefn rr_to_bpm(interval_ms : Double) -> Doublefn run_hrv_quality_pipeline(run_id : String, intervals : Array[Double], config : HrvConfig, options : AnalysisOptions, policy : QualityGatePolicy) -> HrvPipelineRunfn runtime_budget(case_name : String, target : String, maximum_mean_ms : Double, maximum_p95_ms : Double, minimum_throughput : Double, minimum_stability : Double) -> RuntimeBudgetfn runtime_has_regression(current : RuntimeAggregate, previous : RuntimeAggregate, threshold : Double) -> Boolfn runtime_samples_for(samples : Array[RuntimeSample], case_name : String, target : String) -> Array[RuntimeSample]fn scenario_from_plan(plan : TrainingLoadPlan, recovery_score : Double, kind : TrainingScenarioKind) -> ScenarioResultfn scenario_session(date : String, duration_minutes : Double, intensity : Double, purpose : String) -> ScenarioSessionfn segment_activity(samples : Array[AmbulatorySample], thresholds : ActivityThresholds, minimum_block_samples : Int) -> Array[ActivityBlock]fn session_baseline(observations : Array[SessionObservation], end_exclusive : Int, window_size : Int) -> (Double, Double)fn session_outlier_indices(observations : Array[SessionObservation], z_threshold : Double, window_size : Int) -> Array[Int]fn session_training_load(duration_minutes : Double, intensity : Double) -> Doublefn signal_quality_grade(score : Double) -> Stringfn simulate_respiratory_trace(length : Int, sample_rate_hz : Double, rate_bpm : Double) -> Array[Double]fn simulate_training_scenario(sessions : Array[ScenarioSession], kind : TrainingScenarioKind, recovery_score : Double, current_ratio : Double, config : ScenarioConfig) -> ScenarioResultfn split_wearable_gaps(samples : Array[WearableSample], maximum_gap_seconds : Double) -> Array[Array[WearableSample]]fn summarize_ambulatory(samples : Array[AmbulatorySample], thresholds : ActivityThresholds) -> AmbulatorySummaryfn summarize_recovery_weeks(records : Array[RecoveryDayRecord], baseline_window : Int) -> Array[RecoveryWeekSummary]fn summarize_segments(intervals : Array[Double], segment_size : Int, hop_size : Int, config : HrvConfig) -> Array[SegmentSummary]fn summarize_session_analytics(observations : Array[SessionObservation], minimum_quality : Double) -> SessionAnalyticsfn summarize_sleep_recovery(epochs : Array[SleepEpoch], baseline_rmssd : Double) -> SleepRecoverySummaryfn summarize_training_load(daily_loads : Array[Double], acute_days : Int, chronic_days : Int) -> TrainingLoadSummaryfn telemetry_query_window(subject_id : String, start_seconds : Double, end_seconds : Double) -> TelemetryQueryfn telemetry_records_for_source(records : Array[TelemetryRecord], source_id : String) -> Array[TelemetryRecord]fn telemetry_records_for_subject(records : Array[TelemetryRecord], subject_id : String) -> Array[TelemetryRecord]fn time_in_heart_rate_zone(intervals : Array[Double], lower_bpm : Double, upper_bpm : Double) -> Doublefn validate_recording_protocol(intervals : Array[Double], config : HrvConfig, protocol : RecordingProtocol, dates : Array[String]) -> ProtocolValidationfn wearable_finite(value : Double) -> Boolfn wearable_gap_detected(previous_timestamp : Double, current_timestamp : Double, maximum_gap_seconds : Double) -> Boolfn wearable_quality_weight(value : Double) -> Doublefn wearable_sample_with_context(sample : WearableSample, movement_g : Double, temperature_c : Double) -> WearableSamplefn weighted_signal_quality(components : SignalQualityComponents, weights : SignalQualityWeights) -> Doublefn welch_periodogram(values : Array[Double], sample_rate_hz : Double, frame_size : Int, hop_size : Int, function : WindowFunction) -> Array[SpectrumBin]fn window_wearable_samples(samples : Array[WearableSample], window_seconds : Double, step_seconds : Double, maximum_gap_seconds : Double) -> Array[TelemetryWindow]Heart Rate Variability (HRV) toolkit in MoonBit for recovery monitoring and training status analysis.