@mark1russell7/rigor-bench 0.2.12 → 0.2.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -206,6 +206,62 @@ const shards = controlFactor(shardRows);
206
206
  - The fields `low` and `high` are the quartiles of the ratios. A wide spread means that one factor does not explain the load.
207
207
  - The function refuses a group with fewer usable keys than `minPairs`. The default is 5.
208
208
 
209
+ ## Check that a trick does not buy a measure
210
+
211
+ A control is a strategy made to win one measure and nothing else. A real entry can win that measure by the same trick. So `checkMeasures` reads the controls of a bench, and `winClaim` tells a page what to show beside a win. Each project keeps its own controls.
212
+
213
+ ```ts
214
+ import { checkMeasures, winClaim } from "@mark1russell7/rigor-bench";
215
+
216
+ const check = checkMeasures(rows, {
217
+ asOf: "2026-11-05",
218
+ controls: ["only-fill"],
219
+ rules: [
220
+ { measure: "fill", sense: "higher", controls: ["only-fill"], partners: ["order"] },
221
+ { measure: "order", sense: "lower", controls: [], partners: [], noControl: { because: "The control has no code yet.", until: "2026-11-20" } },
222
+ ],
223
+ });
224
+ if (check.findings.length > 0) process.exitCode = 1;
225
+ const claim = winClaim(check, "fill", "my-entry");
226
+ ```
227
+
228
+ Each row has a `measure`, a `group`, a `key` and a `value`. The optional fields are `censored`, `method` and `stratum`. The function throws a `RangeError` for a repeat of a measure, a group and a key. The caller states how repeats reduce to one row.
229
+
230
+ - **Beats:** the Holm-corrected sign test passes. With a `resolution`, the median paired difference is also over it. Without one, the output says `test only`.
231
+ - **A control wins** when no real entry beats it. A tie counts for the control.
232
+ - **A control loses a partner** when one real entry beats it on that partner, at the level divided by the count of partners. One passed partner clears `uncaught`, so each partner is one more chance.
233
+ - **Families:** one Holm family holds one control on one measure, over all real entries and all strata. A second family holds the same tests in the other direction, and `beatsEntries` of `of` gives its count. One family holds the spread of one measure.
234
+ - **Too few:** the need comes from `signTestPower` at the level of that family, over the untied keys. So 31 real entries need 10 untied keys at the level 0.05. A test under the need beats nothing. A pair with enough keys that ties reads as equal.
235
+ - **Strata:** the keys of one stratum come from one family of inputs, so they are not independent draws. A result is about these keys.
236
+
237
+ Strata make a family larger, so each stratum needs more keys:
238
+
239
+ | The family | Tests | Sides | Untied keys for each test |
240
+ | --- | --- | --- | --- |
241
+ | 31 entries, no strata | 31 | 1 | 10 |
242
+ | 14 entries, 15 strata | 210 | 1 | 13 |
243
+ | 30 entries, 20 strata | 600 | 1 | 14 |
244
+ | The spread of 31 entries, 20 strata | 9,300 | 2 | 19 |
245
+
246
+ So a stratum of 10 keys reads `too-few` by construction. That result is true, and the check keeps it. A caller gets the pooled read when the rows have no `stratum`. A sign test needs independent signs and not equal distributions, so a read can pool the keys of different families. A bench reads pooled for its gate, and by stratum where the keys are sufficient.
247
+
248
+ Each finding fails a gate, and each one carries its tests with `n`, `ties`, `p` and the Holm result.
249
+
250
+ | Finding | Meaning |
251
+ | --- | --- |
252
+ | `uncaught` | A control wins the measure and loses no partner. The trick pays. |
253
+ | `weak-control` | A control with power beats no real entry on its measure, in any stratum. The trick buys nothing. A control in second place that beats other entries is not weak. |
254
+ | `censored-win` | A control wins with more censored keys than an entry it is read against. |
255
+ | `no-spread` | No pair of real entries separates on the measure. |
256
+ | `too-few` | No read of the controls or of the spread has enough keys. A control that wins and has a partner with too few keys also gives it. A small stratum alone gives only a row. |
257
+ | `mixed-method` | The rows mix methods, or a method and no method. The check has no read of the measure. |
258
+ | `no-rule` | The rows hold a measure with no rule. |
259
+ | `no-rows` | A rule names a measure or a control with no rows. This does not read as "not beaten". |
260
+ | `no-control` | A rule has no control and no `noControl`. |
261
+ | `control-late` | The date of `noControl` is before `asOf`. |
262
+
263
+ `winClaim(check, measure, entry, stratum)` gives `alone`, `show`, `likeControl`, `censored` and `open`. The fields are about this entry. The field `likeControl` is true when this entry does not beat a control on the measure and beats it on no partner. A win by another entry clears nothing. The field `alone` is true only when this entry itself beats each control on the measure, so a measure with no control is not `alone`.
264
+
209
265
  ## The fresh runner
210
266
 
211
267
  The entry `@mark1russell7/rigor-bench/fresh` starts child processes, so it is for Node only. The root entry stays free of `node:child_process`.
@@ -265,7 +321,7 @@ const result = await superviseCases({
265
321
  The child calls `caseProgress(file).start(id, stage)` before each stage, and `end(id)` after the result is on the disk.
266
322
 
267
323
  - A stage over its budget gives `over-budget`. This time is a lower bound, so a statistic treats it as censored, not as a value. The next child runs the cases that are left.
268
- - After 2 overruns in one group (the option `overruns`), each other case of the group gives `not-run`, with the ids of the 2 overruns. An overrun is measured, and a skip is not. Keep these tags different.
324
+ - After 2 overruns in one group (the option `overruns`), each other case of the group gives `not-run`, with the ids of the 2 overruns. When cases have a `rank`, for example an input size, the count is for each rank. The stop is for that rank and above, and a smaller rank goes on. An overrun is measured, and a skip is not. Keep these tags different.
269
325
  - An overrun counts for the group of its stage only. A slow router thus does not count against the packer of its cases.
270
326
  - A case in `done` does not run, so a resume runs no case two times.
271
327
  - The option `earlier` takes the ends of a stopped run. Its overruns count for their groups, so a stop and a resume give the same ends as a run with no stop. Keep each case in `cases`, and put the ids of the finished cases in `done`.
package/build/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { a as checkPairedTime, i as caseRatios, n as CaseRatio, o as firstArm, r as PairedTime, t as Arm } from "./paired.js";
2
- import { BootstrapOptions, Comparison, Interval } from "@mark1russell7/rigor-statistics";
2
+ import { BootstrapOptions, Comparison as Comparison$1, Interval } from "@mark1russell7/rigor-statistics";
3
3
  /** One value of one build on one case. The value is finite and 0 or more. */
4
4
  interface BudgetRound {
5
5
  /** The name of the case: one input of the bench. */
@@ -498,7 +498,7 @@ interface TimeVerdict {
498
498
  * The counts of the cases out of the band, or undefined without a band.
499
499
  * The comparison uses the value `1 + log(ratio)` of each case and the noise of the band, so its two sides are the ends of the band.
500
500
  */
501
- readonly comparison: Comparison | undefined;
501
+ readonly comparison: Comparison$1 | undefined;
502
502
  /** The facts of the pooled band. The verdict has this field only with the option `pool`. */
503
503
  readonly pool?: PoolFacts;
504
504
  /** The noise cap. The verdict has this field only with the option `noiseCap`. */
@@ -698,6 +698,226 @@ interface RunPairs {
698
698
  * It balances the records of each pair with `balanceOrders` first. It refuses an `aaPair` that the run does not have.
699
699
  */
700
700
  export declare function armVerdicts(run: RunPairs, aaPair: string, options?: VerdictOptions): Record<string, TimeVerdict>;
701
+ /** One value of one measure, for one entry and one input. */
702
+ interface MeasureRow {
703
+ /** The name of the measure. */
704
+ readonly measure: string;
705
+ /** The name of the entry: a real strategy or a control. */
706
+ readonly group: string;
707
+ /** The name of the input. Equal keys in two groups name equal work, so the two values make a pair. */
708
+ readonly key: string;
709
+ /** The value. It is finite. No test reads the value of a censored row. */
710
+ readonly value: number;
711
+ /** This field is true when the entry did not finish this input, for example over its budget. */
712
+ readonly censored?: boolean;
713
+ /** The way that the value was made, for example a sample or a full count. Two ways in one measure do not compare. */
714
+ readonly method?: string;
715
+ /** The family of the input. A key has one stratum in all its rows. Rows without a stratum make one group. */
716
+ readonly stratum?: string;
717
+ }
718
+ /** A measure with no control yet: the reason and the date of the control. */
719
+ interface NoControl {
720
+ /** The reason that the measure has no control at this time. */
721
+ readonly because: string;
722
+ /** The date of the control, as `YYYY-MM-DD`. A date before `asOf` gives the finding `control-late`. */
723
+ readonly until: string;
724
+ }
725
+ /** The rule of one measure. */
726
+ interface MeasureRule {
727
+ readonly measure: string;
728
+ /** The direction of a better value. */
729
+ readonly sense: "higher" | "lower";
730
+ /** The controls made to win this measure. Each one is in `controls` of the options. */
731
+ readonly controls: readonly string[];
732
+ /** The measures that a control of this measure is to lose. Each one has its own rule. */
733
+ readonly partners: readonly string[];
734
+ /** The smallest median paired difference that counts. Without it, only the test decides, and the output says so. It has no default. */
735
+ readonly resolution?: number;
736
+ /** The reason and the date, for a rule with no controls. */
737
+ readonly noControl?: NoControl;
738
+ }
739
+ /** The options of `checkMeasures`. */
740
+ interface MeasureCheckOptions {
741
+ readonly rules: readonly MeasureRule[];
742
+ /** Each group that is a control. Each other group is a real entry. */
743
+ readonly controls: readonly string[];
744
+ /** The date of the check, as `YYYY-MM-DD`. The caller gives it, so the function stays pure. */
745
+ readonly asOf: string;
746
+ /** The level of each family of tests. The default is 0.05. */
747
+ readonly alpha?: number;
748
+ }
749
+ /** One test: `better` beats `other` on the keys that the two finished. */
750
+ interface Comparison {
751
+ readonly better: string;
752
+ readonly other: string;
753
+ readonly stratum: string | undefined;
754
+ /** The keys that both finished. */
755
+ readonly shared: number;
756
+ /** The shared keys with different values. The test reads only these. */
757
+ readonly n: number;
758
+ readonly ties: number;
759
+ /** The keys where `better` has the better value. */
760
+ readonly wins: number;
761
+ /** The keys where `other` has the better value. */
762
+ readonly losses: number;
763
+ /** The median paired difference over the shared keys, with ties. A positive value favours `better`. */
764
+ readonly medianDifference: number;
765
+ /** The p of the sign test. */
766
+ readonly p: number;
767
+ /** The p after the Holm correction. */
768
+ readonly adjusted: number;
769
+ /** The size of the Holm family. */
770
+ readonly family: number;
771
+ /** The least count of untied keys with the power to pass in this family. */
772
+ readonly needs: number;
773
+ /** This field is true when `n` is under `needs`. Such a test beats nothing. */
774
+ readonly tooFew: boolean;
775
+ /** This field is true when the shared keys reach `needs` and ties took them under it. So the two read as equal, not as unread. */
776
+ readonly tied: boolean;
777
+ /** The test passes, and the median difference is over the resolution when the measure has one. */
778
+ readonly beats: boolean;
779
+ }
780
+ /** The read of one control on one measure and one stratum. */
781
+ interface ControlRead {
782
+ readonly measure: string;
783
+ readonly control: string;
784
+ readonly stratum: string | undefined;
785
+ /**
786
+ * The state of the read. `wins`: no real entry with enough pairs beats the control. `beaten`: a real entry beats it.
787
+ * `too-few`: no real entry has enough shared keys. `no-rows`: no real entry shares a finished key with it.
788
+ */
789
+ readonly status: "wins" | "beaten" | "too-few" | "no-rows";
790
+ /** The real entries with fewer winning keys than the control. It is a plain count with no test. */
791
+ readonly aheadOf: number;
792
+ /** One test for each real entry: `better` is the real entry, and `other` is the control. */
793
+ readonly comparisons: readonly Comparison[];
794
+ /** The real entries that the control beats by test on this stratum. */
795
+ readonly beatsEntries: number;
796
+ /** The tests of the control against the real entries that have power on this stratum. */
797
+ readonly of: number;
798
+ /** One test for each real entry: `better` is the control, and `other` is the real entry. This family is apart from `comparisons`. */
799
+ readonly against: readonly Comparison[];
800
+ }
801
+ /** The counts of one entry on one measure and one stratum. */
802
+ interface EntryCount {
803
+ readonly group: string;
804
+ readonly stratum: string | undefined;
805
+ readonly finished: number;
806
+ readonly censored: number;
807
+ }
808
+ /** The read of the spread of one measure on one stratum, over the pairs of real entries. */
809
+ interface SpreadRead {
810
+ readonly stratum: string | undefined;
811
+ /** The pairs of real entries that share a finished key. */
812
+ readonly pairs: number;
813
+ /** The pairs with a test that passes in one direction. */
814
+ readonly separated: number;
815
+ /** The pairs with too few shared keys for the test. A pair that ties on enough keys does not count here. */
816
+ readonly tooFew: number;
817
+ /** The largest absolute median paired difference of a pair. */
818
+ readonly widest: number | undefined;
819
+ }
820
+ /** The result of one control and one partner on one stratum. */
821
+ interface PartnerRead {
822
+ readonly partner: string;
823
+ /**
824
+ * `lost`: a real entry beats the control at the level divided by the count of partners. Each partner is one more chance to clear the control.
825
+ * `not-lost`: no real entry does. `too-few`: no test has the power at that level. `no-rows`: nothing to read.
826
+ */
827
+ readonly status: "lost" | "not-lost" | "too-few" | "no-rows";
828
+ }
829
+ /** The result of one control on its measure and one stratum, with its partners. */
830
+ interface GuardRead {
831
+ readonly control: string;
832
+ readonly stratum: string | undefined;
833
+ readonly status: ControlRead["status"];
834
+ readonly partners: readonly PartnerRead[];
835
+ }
836
+ /** The read of one measure. */
837
+ interface MeasureCheck {
838
+ readonly measure: string;
839
+ readonly sense: "higher" | "lower";
840
+ /** `test only`: a measure with no resolution. `test and resolution`: a measure with one. */
841
+ readonly basis: "test only" | "test and resolution";
842
+ /** The only method of the rows. It is undefined when the rows give none. */
843
+ readonly method: string | undefined;
844
+ /** This field is true when the rows mix methods. The check then has no read of the measure. */
845
+ readonly mixed: boolean;
846
+ readonly guards: readonly GuardRead[];
847
+ readonly spread: readonly SpreadRead[];
848
+ readonly entries: readonly EntryCount[];
849
+ /** The partners that the rule names. */
850
+ readonly partners: readonly string[];
851
+ /** The reason and the date, for a measure with no control. */
852
+ readonly open: NoControl | undefined;
853
+ }
854
+ /** The kind of a finding. Each finding fails a gate. */
855
+ type MeasureFindingKind = "uncaught" | "weak-control" | "censored-win" | "no-spread" | "too-few" | "mixed-method" | "no-rule" | "no-rows" | "no-control" | "control-late";
856
+ /** One finding of the check, with the numbers behind it. */
857
+ interface MeasureFinding {
858
+ readonly kind: MeasureFindingKind;
859
+ readonly measure: string;
860
+ readonly stratum?: string | undefined;
861
+ readonly control?: string;
862
+ /** The count of the partners of the rule, for a finding about the partners of a control. */
863
+ readonly partners?: number;
864
+ /** The finding in plain words, with its numbers. */
865
+ readonly text: string;
866
+ /** The tests behind the finding. */
867
+ readonly comparisons: readonly Comparison[];
868
+ }
869
+ /** The result of `checkMeasures`. */
870
+ interface MeasureChecks {
871
+ /** The level of each family of tests. */
872
+ readonly alpha: number;
873
+ readonly measures: readonly MeasureCheck[];
874
+ /** Each read of a control, on its own measures and on their partners. */
875
+ readonly reads: readonly ControlRead[];
876
+ readonly findings: readonly MeasureFinding[];
877
+ }
878
+ /** What a page says about the win of one entry on one measure. */
879
+ interface WinClaim {
880
+ /** This field is true only when a control was read on this measure and this entry beats each control on it. A win by another entry does not count. */
881
+ readonly alone: boolean;
882
+ /** The partners that a winning control loses. When this entry does not beat a control that does not win, or with no read of a control, all partners of the rule. */
883
+ readonly show: readonly string[];
884
+ /** This field is true when this entry does not beat a control on this measure and beats it on no partner. The win then reads the same as the trick. The status of the control does not change this. */
885
+ readonly likeControl: boolean;
886
+ /** The censored keys of this entry and of each control that it does not beat. A page shows them beside the win. */
887
+ readonly censored: {
888
+ readonly entry: number;
889
+ readonly controls: readonly {
890
+ readonly control: string;
891
+ readonly censored: number;
892
+ }[];
893
+ };
894
+ /** The reason and the date, for a measure with no control. */
895
+ readonly open: NoControl | undefined;
896
+ }
897
+ /**
898
+ * This function reads the controls and the spread of each measure of a bench.
899
+ *
900
+ * - A control wins a measure when no real entry beats it on the keys that both finished. A tie counts for the control.
901
+ * - A real entry beats a control when the Holm-corrected sign test passes and the median paired difference is over the resolution.
902
+ * - One Holm family holds the tests of one control on one measure over all real entries and all strata.
903
+ * - One more Holm family holds the tests of one control against the real entries, with the same need and resolution. A control that beats none of them is weak.
904
+ * - One Holm family holds the tests of the spread of one measure over all pairs of real entries and all strata.
905
+ * - A test with fewer untied keys than `signTestPower` needs for that family reads `tooFew` and beats nothing.
906
+ * - A test with enough shared keys and too few untied keys is `tied`. The two entries read as equal, so a constant measure is `no-spread` and not `too-few`.
907
+ * - A control loses a partner only at the level divided by the count of its partners. One passed partner clears `uncaught`, so each partner is one more chance.
908
+ *
909
+ * The function throws a `RangeError` for a value that is not finite, a repeat of measure, group and key, or a key in two strata.
910
+ * It also throws one for rules that contradict each other.
911
+ * The rules, the controls and the date are stated, so the result depends only on the arguments.
912
+ */
913
+ export declare function checkMeasures(rows: readonly MeasureRow[], options: MeasureCheckOptions): MeasureChecks;
914
+ /**
915
+ * This function tells what a page says about the win of one real entry on one measure.
916
+ * The claim is about this entry: only this entry beating the control, on this measure or on a partner, clears the entry. A win by another entry clears nothing.
917
+ * With a stratum, the function reads that stratum. Without one, it reads the rows with no stratum.
918
+ * The function throws a `RangeError` for a measure with no read and for an entry that the rows do not hold.
919
+ */
920
+ export declare function winClaim(check: MeasureChecks, measure: string, entry: string, stratum?: string): WinClaim;
701
921
  /** The options of a power test. */
702
922
  interface PowerOptions {
703
923
  /** The count of the cases of the candidate and of the A/A arm. */
@@ -760,5 +980,5 @@ interface Rounds {
760
980
  * keeps the work.
761
981
  */
762
982
  export declare function timeRounds(arms: Readonly<Record<Arm, () => number>>, options: RoundsOptions): Rounds;
763
- export { type Arm, type Balanced, type Band, type BandKind, type BandOptions, type BudgetLook, type BudgetLooksOptions, type BudgetLooksVerdict, type BudgetMore, type BudgetOptions, type BudgetOutcome, type BudgetResult, type BudgetRound, type BudgetVerdict, type CaseBudget, type CaseInterval, type CaseLimit, type CaseRatio, type ControlFactors, type ControlOptions, type ControlRow, type GroupCounts, type GroupFactor, type JobLimitVerdict, type JobRecords, type JobVerdict, type Ladder, type LadderDimension, type LadderOptions, type LadderVerdict, type LimitOptions, type LimitOutcome, type LimitVerdict, type MeasuredFactor, type MedianBudget, type NoFactor, type NoiseCheck, type PairedTime, type PoolFacts, type PoolOptions, type PooledJob, type PooledLimitVerdict, type PooledRecords, type PooledVerdict, type Power, type PowerOptions, type QuantileBudget, type RateBudget, type Rounds, type RoundsOptions, type RunPairs, type Rung, type RungBudget, type RungEvidence, type RungRecord, type RungVerdict, type TimeOutcome, type TimeVerdict, type VerdictOptions, type VerdictRule, type WorstBudget, caseRatios, checkPairedTime, firstArm };
983
+ export { type Arm, type Balanced, type Band, type BandKind, type BandOptions, type BudgetLook, type BudgetLooksOptions, type BudgetLooksVerdict, type BudgetMore, type BudgetOptions, type BudgetOutcome, type BudgetResult, type BudgetRound, type BudgetVerdict, type CaseBudget, type CaseInterval, type CaseLimit, type CaseRatio, type Comparison, type ControlFactors, type ControlOptions, type ControlRead, type ControlRow, type EntryCount, type GroupCounts, type GroupFactor, type GuardRead, type JobLimitVerdict, type JobRecords, type JobVerdict, type Ladder, type LadderDimension, type LadderOptions, type LadderVerdict, type LimitOptions, type LimitOutcome, type LimitVerdict, type MeasureCheck, type MeasureCheckOptions, type MeasureChecks, type MeasureFinding, type MeasureFindingKind, type MeasureRow, type MeasureRule, type MeasuredFactor, type MedianBudget, type NoControl, type NoFactor, type NoiseCheck, type PairedTime, type PartnerRead, type PoolFacts, type PoolOptions, type PooledJob, type PooledLimitVerdict, type PooledRecords, type PooledVerdict, type Power, type PowerOptions, type QuantileBudget, type RateBudget, type Rounds, type RoundsOptions, type RunPairs, type Rung, type RungBudget, type RungEvidence, type RungRecord, type RungVerdict, type SpreadRead, type TimeOutcome, type TimeVerdict, type VerdictOptions, type VerdictRule, type WinClaim, type WorstBudget, caseRatios, checkPairedTime, firstArm };
764
984
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/budget.ts","../src/control.ts","../src/ladder.ts","../src/verdict.ts","../src/limit.ts","../src/merge.ts","../src/power.ts","../src/rounds.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":["Comparison"],"sources":["../src/budget.ts","../src/control.ts","../src/ladder.ts","../src/verdict.ts","../src/limit.ts","../src/merge.ts","../src/measures.ts","../src/power.ts","../src/rounds.ts"],"mappings":"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"}