Skip to documentation
SLOP

tiny.profiling.experiment.design

Reference tiny.profiling experiment design

Defined in experiment.

API (2)

Actions

Public operations.

No direct callersNo direct callsexperimentdesign
Static calls · unresolved targets: unknown · external targets: unknown.

Source

Called byCallsNo direct callstest; no linksrc.profiling.experiment.designtest: profiling experiment verdict re...private; no linksrc.profiling.experiment.runassessexperiment.designclassify
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallstest; no linksrc.profiling.experiment.designtest: profiling experiment derives ev...private; no linksrc.profiling.experiment.runevaluationSamplePlanprivate; no linksrc.profiling.experiment.designsampleStandardDeviationexperiment.designsamplePlan
Static calls · unresolved targets: 0 · external targets: 1.

Source: src/profiling/experiment/design.zig

zig
const std = @import("std");const model = @import("model.zig");pub fn samplePlan(    calibration_log_ratios: []const f64,    practical_effect_percent: f64,    design: model.Design,) !model.SamplePlan {    try design.validate();    if (calibration_log_ratios.len != design.calibration_pairs) {        return error.InvalidCalibrationSamples;    }    const standard_deviation = sampleStandardDeviation(calibration_log_ratios);    const effect_log = std.math.log1p(practical_effect_percent / 100.0);    if (!std.math.isFinite(standard_deviation) or        !std.math.isFinite(effect_log) or effect_log <= 0)    {        return error.InvalidExperimentStatistics;    }    const raw = std.math.pow(        f64,        model.normal_critical_sum * standard_deviation / effect_log,        2,    );    const calculated = if (raw >= @as(f64, @floatFromInt(model.maximum_pairs)))        model.maximum_pairs + 1    else        @as(usize, @intFromFloat(@ceil(raw)));    const evaluation_pairs = @max(        calculated,        design.minimum_evaluation_pairs,    );    return .{        .calibration_standard_deviation_log_ratio = standard_deviation,        .calculated_evaluation_pairs = calculated,        .evaluation_pairs = evaluation_pairs,        .within_budget = evaluation_pairs <= design.maximum_evaluation_pairs,    };}fn sampleStandardDeviation(values: []const f64) f64 {    std.debug.assert(values.len >= 2);    var total: f64 = 0;    for (values) |value| total += value;    const mean = total / @as(f64, @floatFromInt(values.len));    var squared: f64 = 0;    for (values) |value| {        const delta = value - mean;        squared += delta * delta;    }    return @sqrt(squared / @as(f64, @floatFromInt(values.len - 1)));}pub fn classify(    interval: model.Interval,    practical_effect_percent: f64,) model.Verdict {    std.debug.assert(practical_effect_percent > 0);    if (interval.high_percent < -practical_effect_percent) return .faster;    if (interval.low_percent > practical_effect_percent) return .slower;    if (interval.low_percent >= -practical_effect_percent and        interval.high_percent <= practical_effect_percent)    {        return .equivalent;    }    return .inconclusive;}test "profiling experiment derives evaluation N from discarded calibration" {    const low_noise = [_]f64{        -0.012,        0.008,        -0.004,        0.010,        -0.006,        0.004,        -0.009,        0.009,    };    const plan = try samplePlan(&low_noise, 5, .{});    try std.testing.expect(plan.within_budget);    try std.testing.expectEqual(        model.default_minimum_evaluation_pairs,        plan.evaluation_pairs,    );    const noisy = [_]f64{        -0.40,        0.35,        -0.30,        0.25,        -0.20,        0.15,        -0.10,        0.05,    };    const unsupported = try samplePlan(&noisy, 1, .{});    try std.testing.expect(!unsupported.within_budget);}test "profiling experiment verdict requires practical support" {    try std.testing.expectEqual(        model.Verdict.faster,        classify(.{ .low_percent = -9, .high_percent = -6 }, 5),    );    try std.testing.expectEqual(        model.Verdict.slower,        classify(.{ .low_percent = 6, .high_percent = 9 }, 5),    );    try std.testing.expectEqual(        model.Verdict.equivalent,        classify(.{ .low_percent = -2, .high_percent = 3 }, 5),    );    try std.testing.expectEqual(        model.Verdict.inconclusive,        classify(.{ .low_percent = -7, .high_percent = 2 }, 5),    );}

Source: src/profiling/experiment/root.zig:2

zig
pub const design = @import("design.zig");

Audit

Definitions3
Public names3
Members0
Version26.7.0
Revisiondaab053ee433