Skip to documentation
SLOP

tiny.profiling.experiment.model

Reference tiny.profiling experiment model

Defined in experiment.

API (26)

Actions

Public operations.

Types and contracts

Public types and contracts.

Values and defaults

Public values and defaults.

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

Source

Called byCallsNo direct callsexperiment.model.Planvalidateexperiment.model.Designvalidate
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callsexperiment.parseparseexperiment.model.Metricparse
Static calls · unresolved targets: 0 · external targets: 0.
Called byCallsNo direct callersexperiment.model.Designvalidateprivate; no linksrc.profiling.experiment.modelvalidateScenarioprivate; no linksrc.profiling.experiment.modelvalidateVariantexperiment.model.Planvalidate
Static calls · unresolved targets: 0 · external targets: 0.

Source: src/profiling/experiment/model.zig

zig
const std = @import("std");const profiling = @import("../root.zig");const scenario = profiling.scenario;pub const schema = "tiny.profiling.experiment/v1";pub const receipt_schema = "tiny.profiling.experiment-receipt/v1";pub const maximum_plan_bytes: usize = 1024 * 1024;pub const maximum_pairs: usize = 1000;pub const default_calibration_pairs: usize = 8;pub const default_minimum_evaluation_pairs: usize = 8;pub const default_maximum_evaluation_pairs: usize = 100;pub const confidence: f64 = 0.95;pub const power: f64 = 0.80;pub const normal_critical_sum: f64 = 2.801_585_218_112_968;pub const Metric = enum {    wall_ns,    max_rss_kib,    pub fn parse(value: []const u8) ?Metric {        if (std.mem.eql(u8, value, "wall_ns")) return .wall_ns;        if (std.mem.eql(u8, value, "max_rss_kib")) return .max_rss_kib;        return null;    }    pub fn unit(self: Metric) []const u8 {        return switch (self) {            .wall_ns => "nanoseconds",            .max_rss_kib => "kibibytes",        };    }};pub const Build = struct {    argv: []const []const u8,    artifact: []const u8,    cwd: ?[]const u8 = null,};pub const Ref = struct {    name: []const u8,    build: ?Build = null,};pub const Variant = union(enum) {    binary: []const u8,    git_ref: Ref,};pub const Design = struct {    calibration_pairs: usize = default_calibration_pairs,    minimum_evaluation_pairs: usize = default_minimum_evaluation_pairs,    maximum_evaluation_pairs: usize = default_maximum_evaluation_pairs,    pub fn validate(self: Design) !void {        if (self.calibration_pairs < 2 or            self.calibration_pairs > maximum_pairs)        {            return error.InvalidCalibrationPairs;        }        if (self.minimum_evaluation_pairs < 2 or            self.minimum_evaluation_pairs > maximum_pairs)        {            return error.InvalidMinimumEvaluationPairs;        }        if (self.maximum_evaluation_pairs < self.minimum_evaluation_pairs or            self.maximum_evaluation_pairs > maximum_pairs)        {            return error.InvalidMaximumEvaluationPairs;        }    }};pub const Plan = struct {    name: []const u8,    scenario: scenario.Definition,    baseline: Variant,    candidate: Variant,    metric: Metric,    practical_effect_percent: f64,    seed: u64,    design: Design = .{},    pub fn validate(self: Plan) !void {        if (self.name.len == 0 or self.name.len > scenario.maximum_string_bytes) {            return error.InvalidExperimentName;        }        if (!std.math.isFinite(self.practical_effect_percent) or            self.practical_effect_percent <= 0 or            self.practical_effect_percent > 100)        {            return error.InvalidPracticalEffect;        }        try self.design.validate();        try validateScenario(self.scenario);        try validateVariant(self.baseline, self.scenario);        try validateVariant(self.candidate, self.scenario);    }};fn validateVariant(    variant: Variant,    definition: scenario.Definition,) !void {    switch (variant) {        .binary => |path| {            if (path.len == 0 or path.len > scenario.maximum_string_bytes) {                return error.InvalidVariantBinary;            }        },        .git_ref => |value| {            if (value.name.len == 0 or                value.name.len > scenario.maximum_string_bytes)            {                return error.InvalidVariantRef;            }            if (definition.input == .command and value.build == null) {                return error.RefCommandRequiresBuild;            }            if (value.build) |build| {                if (build.argv.len == 0 or                    build.argv.len > scenario.maximum_arguments or                    build.artifact.len == 0)                {                    return error.InvalidVariantBuild;                }            }        },    }}fn validateScenario(definition: scenario.Definition) !void {    switch (definition.input) {        .catalog => {},        .command => |argv| {            for (argv) |argument| {                if (std.mem.indexOf(u8, argument, "{binary}") != null) break;            } else return error.MissingBinaryPlaceholder;        },    }}pub const Phase = enum {    calibration,    evaluation,};pub const Side = enum {    baseline,    candidate,};pub const Verdict = enum {    faster,    slower,    equivalent,    inconclusive,    unsupported,};pub const Support = enum {    supported,    budget_insufficient,    setup_failed,    reset_failed,    execution_failed,    oracle_failed,    metric_unavailable,    invalid_metric_value,    layout_unavailable,};pub const Interval = struct {    low_percent: f64,    high_percent: f64,};pub const SamplePlan = struct {    calibration_standard_deviation_log_ratio: f64,    calculated_evaluation_pairs: usize,    evaluation_pairs: usize,    within_budget: bool,};test "profiling experiment model validates fixed two-stage bounds" {    const definition = scenario.Definition{        .name = "startup",        .input = .{ .command = &.{"{binary}"} },    };    const plan = Plan{        .name = "startup comparison",        .scenario = definition,        .baseline = .{ .binary = "base" },        .candidate = .{ .binary = "candidate" },        .metric = .wall_ns,        .practical_effect_percent = 5,        .seed = 42,    };    try plan.validate();    var invalid = plan;    invalid.design.maximum_evaluation_pairs = 1;    try std.testing.expectError(        error.InvalidMaximumEvaluationPairs,        invalid.validate(),    );}

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

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

Audit

Definitions27
Public names27
Members44
Version26.7.0
Revisiondaab053ee433