Deterministic mechanical tolerance stack-up analysis for MoonBit.
moon test --target wasm-gc --deny-warn
moon run cmd/mainlet chain = @moonbitTolerance.Chain::new("shaft", [
@moonbitTolerance.Dimension::new("housing", 20.0, 0.05),
@moonbitTolerance.Dimension::new(
"cover", 0.2, 0.02,
direction=@moonbitTolerance.negative_direction(),
),
])
let result = chain.monte_carlo(10000, seed=42U)moon run cmd/mainmoon fmt --check
moon check --deny-warn
moon test --target wasm-gc --deny-warn
moon test --target native --deny-warn
moon infopub struct AllocationReport {
items : Array[AllocationItem]
total_nominal : Double
total_rss : Double
worst_case_span : Double
strategy : AllocationStrategy
} derive(Eq, Debug)pub struct BenchmarkCase {
name : String
dimensions : Int
tolerance : Double
seed : UInt
} derive(Debug)pub struct CapabilityReport {
statistics : SampleStatistics
cp : Double
cpu : Double
cpl : Double
cpk : Double
observed_yield : Double
} derive(Eq, Debug)fn Chain::simulate(self : Chain, samples : Int, policy : SamplingPolicy, window : AcceptanceWindow) -> SimulationSummarypub struct ConstraintReport {
passed : Int
failed : Int
inconclusive : Int
statuses : Array[(String, ConstraintStatus)]
} derive(Debug)pub struct DatumFrame {
primary : DatumReference
secondary : DatumReference
tertiary : DatumReference
} derive(Eq, Debug)fn DatumFrame::new(primary : DatumReference, secondary : DatumReference, tertiary : DatumReference) -> DatumFramepub struct FeasibilityReport {
nominal : Double
window : AcceptanceWindow
worst_case_interval : Interval
rss_interval : Interval
worst_case_margin : Double
rss_margin : Double
worst_case_passes : Bool
rss_passes : Bool
} derive(Eq, Debug)pub struct FeatureControlFrame {
mode : GeometricMode
tolerance : Double
datum_frame : DatumFrame
} derive(Eq, Debug)fn FeatureControlFrame::concentricity(tolerance : Double, datum_frame : DatumFrame) -> FeatureControlFramefn FeatureControlFrame::position(tolerance : Double, datum_frame : DatumFrame) -> FeatureControlFramepub struct FeatureEvaluation {
name : String
status : ConstraintStatus
deviation : Double
margin : Double
datum_label : String
} derive(Eq, Debug)pub struct FeatureEvaluationReport {
total : Int
passed : Int
failed : Int
evaluations : Array[FeatureEvaluation]
} derive(Eq, Debug)fn FeatureMeasurement::new(name : String, nominal : Vector2, measured : Vector2) -> FeatureMeasurementpub struct FitAnalysis {
hole_nominal : Double
shaft_nominal : Double
nominal_clearance : Double
minimum_clearance : Double
maximum_clearance : Double
classification : FitClassification
} derive(Eq, Debug)fn FitRequirement::new(name : String, minimum_clearance : Double, maximum_clearance : Double) -> FitRequirementpub struct FitRequirementReport {
passed : Int
failed : Int
inconclusive : Int
statuses : Array[(String, ConstraintStatus)]
} derive(Eq, Debug)fn GeometricTolerance::evaluate(self : GeometricTolerance, measured : Vector2, nominal : Vector2) -> ConstraintStatuspub struct Histogram {
bins : Array[HistogramBin]
total : Int
minimum : Double
maximum : Double
} derive(Eq, Debug)pub struct InspectionReport {
statistics : SampleStatistics
window : AcceptanceWindow
accepted : Int
rejected : Int
yield_rate : Double
capability : CapabilityReport
} derive(Eq, Debug)pub struct ProcessCapability {
lower_spec : Double
upper_spec : Double
mean : Double
standard_deviation : Double
} derive(Debug)fn ProcessCapability::new(lower_spec : Double, upper_spec : Double, mean : Double, standard_deviation : Double) -> ProcessCapabilitypub struct ProcessPerformance {
statistics : SampleStatistics
accepted : Int
rejected : Int
lower_defects : Int
upper_defects : Int
observed_yield : Double
defect_rate : Double
capability : CapabilityReport
} derive(Eq, Debug)fn ProjectedDimension::new(name : String, vector : Vector2, tolerance : Double) -> ProjectedDimensionfn RunningStatistics::add_all(self : RunningStatistics, values : Array[Double]) -> RunningStatisticsfn RunningStatistics::merge(self : RunningStatistics, other : RunningStatistics) -> RunningStatisticspub struct SamplingPolicy {
distribution : Distribution
sigma_factor : Double
seed : UInt
} derive(Debug)fn SamplingPolicy::new(distribution? : Distribution, sigma_factor? : Double, seed? : UInt) -> SamplingPolicypub struct ScenarioResult {
name : String
analysis_method : ScenarioMethod
nominal : Double
lower : Double
upper : Double
mean : Double
standard_deviation : Double
yield_rate : Double
sensitivity : Array[(String, Double)]
} derive(Eq, Debug)pub struct ScenarioSpec {
name : String
chain : Chain
analysis_method : ScenarioMethod
samples : Int
window : AcceptanceWindow
policy : SamplingPolicy
} derive(Debug)fn ScenarioSpec::new(name : String, chain : Chain, analysis_method : ScenarioMethod, samples : Int, window : AcceptanceWindow) -> ScenarioSpecpub struct TighteningPlan {
current_rss : Double
target_rss : Double
projected_rss : Double
items : Array[TighteningItem]
} derive(Eq, Debug)pub struct UncertaintyBudget {
contributors : Array[UncertaintyContribution]
combined : Double
total_variance : Double
} derive(Eq, Debug)fn UncertaintyBudget::interval(self : UncertaintyBudget, nominal : Double, coverage_factor : Double) -> Intervalfn UncertaintySource::new(name : String, standard_uncertainty : Double, sensitivity : Double) -> UncertaintySourcepub struct ValidationReport {
valid : Bool
issue_count : Int
issues : Array[ValidationIssue]
} derive(Eq, Debug)fn allocate_chain(chain : Chain, total_rss : Double, strategy : AllocationStrategy) -> AllocationReportfn correlated_interval(chain : Chain, terms : Array[CorrelationTerm], coverage_factor : Double) -> Intervalfn correlated_rss(dimensions : Array[Dimension], terms : Array[CorrelationTerm]) -> CorrelatedRSSReportfn evaluate_constraints(result : AnalysisResult, constraints : Array[GapConstraint]) -> ConstraintReportfn evaluate_feature(control : FeatureControlFrame, measurement : FeatureMeasurement) -> FeatureEvaluationfn evaluate_features(controls : Array[FeatureControlFrame], measurements : Array[FeatureMeasurement]) -> FeatureEvaluationReportfn evaluate_fit_requirements(fit : FitAnalysis, requirements : Array[FitRequirement]) -> FitRequirementReportfn evaluate_specification(values : Array[Double], specification : Specification) -> SpecificationReportfn gauge_rr(values : Array[Double], part_count : Int, operator_count : Int, repeat_count : Int, tolerance_width : Double) -> GaugeRRReportfn propose_tightening(chain : Chain, target_rss : Double, max_changes : Int) -> Array[TighteningItem]fn required_rss_budget(chain : Chain, window : AcceptanceWindow, coverage_factor : Double) -> Doublefn rss_budget_is_feasible(chain : Chain, window : AcceptanceWindow, standard_deviation : Double, coverage_factor : Double) -> Boolfn sample_deviation_with_state(policy : SamplingPolicy, state : UInt, tolerance : Double) -> (UInt, Double)Deterministic mechanical tolerance stack-up analysis for MoonBit.