@mark1russell7/layout-contract 0.2.9 → 0.2.11
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 +8 -1
- package/build/index.d.ts +315 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1044 -9
- package/build/index.js.map +1 -1
- package/package.json +1 -1
- package/src/corpus.ts +144 -4
- package/src/index.ts +2 -0
- package/src/strategy-space.ts +854 -0
- package/src/verdict.ts +296 -0
package/README.md
CHANGED
|
@@ -21,7 +21,11 @@ The package has no runtime dependencies.
|
|
|
21
21
|
| The portfolio | `portfolio`, `Portfolio`, `PortfolioKey`, `PortfolioLevel`, `PortfolioOptions`, `PortfolioPick`, `PortfolioTrace`, `Member`, `MemberTrace`, `MemberStatus`, `pickMoves` |
|
|
22
22
|
| The pick rule | `selectBest`, `SelectCandidate`, `SelectLevel`, `Selection`, `PickSpec` |
|
|
23
23
|
| The corpus checks | `ClaimBreak`, `checkDeclared`, `declaredCounts`, `declaredClaimOf`, `DeclaredClaim`, `Declares`, `corpusHashOf`, `CorpusEntry` |
|
|
24
|
+
| The families | `familyOf`, `FamilyBy`, `FamilyCell`, `FAMILY_ANY_KIND` |
|
|
25
|
+
| The verdict | `verdict`, `VerdictOptions`, `VerdictResult`, `VerdictRecord`, `VerdictSide`, `VerdictInterval`, `FamilyVerdict`, `VerdictPermutation`, `VerdictSignTest`, `VerdictLabel`, `VERDICT_EXACT_MAX`, `VERDICT_EXACT_CAP`, `VERDICT_RUNS`, `VERDICT_DRAWS`, `VERDICT_SEED` |
|
|
24
26
|
| The split files | `checkSplit`, `splitFolds`, `leaveOneSeedOut`, `splitFileName`, `SPLIT_SCHEMA`, `CorpusSplit`, `SplitFold`, `SplitCorpus` |
|
|
27
|
+
| The strategy space | `StrategySpace`, `SpaceStage`, `StageOption`, `SpaceParam`, `ParamWhen`, `MemberRule`, `SpaceConstraint`, `OptionRef`, `StrategyConfig`, `StageChoice`, `ParamKind`, `ParamValue`, `STRATEGY_SPACE_SCHEMA` |
|
|
28
|
+
| The space functions | `checkSpace`, `checkConfig`, `canonicalConfig`, `configId`, `spaceSize`, `paramLevels`, `enumerateSpace`, `productSpace`, `joinConfigs`, `splitConfig`, `SpaceSize`, `SpaceSizeOptions`, `EnumerateOptions`, `GridOptions`, `SampleOptions` |
|
|
25
29
|
| The turn | `turnBox`, `turnPort`, `turnMargin`, `turnRegion`, `turnSide`, `turnPoint` |
|
|
26
30
|
| The tolerances | `EPS`, `RECORD_EPS`, `RECORD_SCALE`, `Tolerance`, `DEFAULT_TOLERANCE` |
|
|
27
31
|
| The hard rules | `countOverlaps`, `countObstacleHits`, `regionHitsRect`, `rectInRegion`, `countOutside`, `ContainerTest`, `countPortsOffBorder`, `packHard`, `PackHard`, `placedRect`, `checkInput` |
|
|
@@ -37,6 +41,7 @@ The package has no runtime dependencies.
|
|
|
37
41
|
- **The exact container.** Give `{ exactContainer: true }` to `packHard` or `countOutside`. Then a box of a shaped container with the size `fixed` must stay inside the shape. A cut corner, a notch and a hole count. A container with a free side keeps the bounding test. The default changes to the exact test at the next breaking version.
|
|
38
42
|
- **The output hash.** `outputHash` gives the first 16 hex characters of the SHA-256 of the canonical JSON of an output. Each number goes to the grid of `RECORD_EPS` first.
|
|
39
43
|
- **The corpus checks.** `checkDeclared` and `checkSplit` give a list of `ClaimBreak`. An empty list tells that each claim is true. `corpusHashOf` gives the corpus hash of `packing`.
|
|
44
|
+
- **The verdict.** `verdict` compares two strategies on one measure, with the family as the unit. A verdict counts only when it holds for the mean of the family means and for the mean of the inputs.
|
|
40
45
|
- **The tolerances.** `EPS` (`1e-6`) is for the float compares in an engine. `RECORD_EPS` (`1e-3`) is for the compares on a written file. A record writes the tolerance of each hard rule in its field `tolerance`. The defaults are `overlap` `0.001` and `through` `0.5`.
|
|
41
46
|
|
|
42
47
|
## An example
|
|
@@ -56,4 +61,6 @@ const placed = applyPack(input, output);
|
|
|
56
61
|
const hard = packHard(input, output);
|
|
57
62
|
```
|
|
58
63
|
|
|
59
|
-
The formats are in `docs/FORMAT.md` of `packing` and `docs/LAYOUT-RECORDS.md` of `highways`. The joint measures are in `docs/JOINT-MEASURES.md` of this repository, and the joint corpus is in `docs/JOINT-CORPUS.md`. The promotion guards are in `docs/PROMOTION.md`. The portfolio and its pick rule are in `docs/PORTFOLIO.md`. The corpus checks and the split files are in `docs/CORPUS-CHECKS.md`.
|
|
64
|
+
The formats are in `docs/FORMAT.md` of `packing` and `docs/LAYOUT-RECORDS.md` of `highways`. The joint measures are in `docs/JOINT-MEASURES.md` of this repository, and the joint corpus is in `docs/JOINT-CORPUS.md`. The promotion guards are in `docs/PROMOTION.md`. The portfolio and its pick rule are in `docs/PORTFOLIO.md`. The corpus checks and the split files are in `docs/CORPUS-CHECKS.md`. The strategy space is in [`docs/STRATEGY-SPACE.md`](https://github.com/mark1russell7/layout-contract/blob/main/docs/STRATEGY-SPACE.md).
|
|
65
|
+
|
|
66
|
+
The verdict over families is in [`docs/VERDICT.md`](https://github.com/mark1russell7/layout-contract/blob/main/docs/VERDICT.md).
|
package/build/index.d.ts
CHANGED
|
@@ -714,7 +714,30 @@ export interface DeclaredClaim {
|
|
|
714
714
|
readonly thin: readonly string[];
|
|
715
715
|
/** The count of the inputs for each property id. */
|
|
716
716
|
readonly counts: Readonly<Record<string, number>>;
|
|
717
|
+
/** The key of the family of an input. `familyOf` gives the key of one cell. The family is the unit of a verdict. */
|
|
718
|
+
readonly familyBy?: FamilyBy;
|
|
719
|
+
/** The minimum count of the inputs of each family. Without it, `checkDeclared` does not count the families. */
|
|
720
|
+
readonly familyMin?: number;
|
|
717
721
|
}
|
|
722
|
+
/**
|
|
723
|
+
* The key of the family of a cell (`docs/CORPUS-CHECKS.md`).
|
|
724
|
+
*
|
|
725
|
+
* - The flat form is a list of dimensions. The key is the values of these dimensions of the cell, in order, with `/` between them.
|
|
726
|
+
* - The map form chooses an entry by the field `kind` of the cell, or the entry `"*"`. The key is the kind, then the values of the dimensions of the entry.
|
|
727
|
+
*/
|
|
728
|
+
export type FamilyBy = readonly string[] | {
|
|
729
|
+
readonly [kind: string]: readonly string[];
|
|
730
|
+
};
|
|
731
|
+
/** A cell of an input: one value for each dimension. The map form of `FamilyBy` also reads the field `kind`. */
|
|
732
|
+
export type FamilyCell = Readonly<Record<string, unknown>>;
|
|
733
|
+
/** The entry of the map form of `FamilyBy` for each kind without its own entry. */
|
|
734
|
+
export declare const FAMILY_ANY_KIND = "*";
|
|
735
|
+
/**
|
|
736
|
+
* This function gives the family key of a cell. It throws a `RangeError` when the cell does not have a dimension of the key.
|
|
737
|
+
* In the map form, it also throws for a cell without `kind`, and for a kind with no entry and no entry `"*"`.
|
|
738
|
+
* For example, `{ "rect-grid": ["obstacles"], "*": [] }` gives `rect-grid/wall` for a `rect-grid` cell and `gallery` for a `gallery` cell.
|
|
739
|
+
*/
|
|
740
|
+
export declare function familyOf(cell: FamilyCell, familyBy: FamilyBy): string;
|
|
718
741
|
/** The hook that gives the ids of the properties that one input declares. */
|
|
719
742
|
export type Declares<I> = (input: I) => readonly string[];
|
|
720
743
|
/**
|
|
@@ -734,8 +757,14 @@ export declare function declaredClaimOf(manifest: object): DeclaredClaim | undef
|
|
|
734
757
|
* - Each id of `ids` has a count in `claim.counts`, and `claim.counts` has no other id. Each count is the count of the inputs.
|
|
735
758
|
* - An id with a count below `minCount` is in `thin`. Each id of `thin` is an id of `ids`.
|
|
736
759
|
* - Each id that `declares` gives is an id of `ids`.
|
|
760
|
+
*
|
|
761
|
+
* With `claim.familyBy`, the hook `cellOf` gives the cell of each input. The default reads the field `cell` of the input.
|
|
762
|
+
*
|
|
763
|
+
* - Each cell has each dimension of its key. In the map form, each cell has a `kind`, and the kind has an entry or the entry `"*"` is there.
|
|
764
|
+
* - Two cells with different dimension values do not give the same key.
|
|
765
|
+
* - With `claim.familyMin`, each family has `familyMin` inputs or more.
|
|
737
766
|
*/
|
|
738
|
-
export declare function checkDeclared<I>(inputs: Iterable<I>, declares: Declares<I>, claim: DeclaredClaim, ids?: readonly string[]): ClaimBreak[];
|
|
767
|
+
export declare function checkDeclared<I>(inputs: Iterable<I>, declares: Declares<I>, claim: DeclaredClaim, ids?: readonly string[], cellOf?: (input: I) => FamilyCell | undefined): ClaimBreak[];
|
|
739
768
|
/** The id and the hash of one input of a corpus. */
|
|
740
769
|
export interface CorpusEntry {
|
|
741
770
|
readonly id: string;
|
|
@@ -790,4 +819,289 @@ export declare function checkSplit(split: unknown, corpus: SplitCorpus, name?: s
|
|
|
790
819
|
export declare function splitFolds(split: unknown, corpus: SplitCorpus, name: string, where?: string): SplitFold[];
|
|
791
820
|
/** This function gives the folds that hold out one seed each, in the order of the seeds. Each fold trains on the other seeds. */
|
|
792
821
|
export declare function leaveOneSeedOut(seeds: readonly number[]): SplitFold[];
|
|
822
|
+
/** The schema of a strategy space. */
|
|
823
|
+
export declare const STRATEGY_SPACE_SCHEMA = "strategy-space/1";
|
|
824
|
+
/** The kind of a param: a whole number, a real number, one value of a list, or `true` and `false`. */
|
|
825
|
+
export type ParamKind = "int" | "real" | "enum" | "bool";
|
|
826
|
+
/** The value of one param in a config. */
|
|
827
|
+
export type ParamValue = number | string | boolean;
|
|
828
|
+
/** The condition of a conditional param: the param is active only when an earlier param of the same option has one of the values `in`. */
|
|
829
|
+
export interface ParamWhen {
|
|
830
|
+
/** The name of an earlier param of the same option. */
|
|
831
|
+
readonly param: string;
|
|
832
|
+
/** The values of that param that make this param active. */
|
|
833
|
+
readonly in: readonly ParamValue[];
|
|
834
|
+
}
|
|
835
|
+
/** One param of a stage option, with its range. */
|
|
836
|
+
export interface SpaceParam {
|
|
837
|
+
readonly name: string;
|
|
838
|
+
readonly kind: ParamKind;
|
|
839
|
+
/** The smallest value of an `int` or `real` param. */
|
|
840
|
+
readonly min?: number;
|
|
841
|
+
/** The largest value of an `int` or `real` param. */
|
|
842
|
+
readonly max?: number;
|
|
843
|
+
/** The step of the values from `min`. An `int` param has the step 1 by default. */
|
|
844
|
+
readonly step?: number;
|
|
845
|
+
/** The scale of the grid and of the samples. The scale `log` needs a `min` above 0. The default is `linear`. */
|
|
846
|
+
readonly scale?: "linear" | "log";
|
|
847
|
+
/** The values of an `enum` param. */
|
|
848
|
+
readonly values?: readonly (string | number)[];
|
|
849
|
+
/** The value that a config gets when it does not set the param. */
|
|
850
|
+
readonly default: ParamValue;
|
|
851
|
+
/** Without `when`, the param is active each time its option is chosen. */
|
|
852
|
+
readonly when?: ParamWhen;
|
|
853
|
+
}
|
|
854
|
+
/** The rule of the members of a meta option: a count from `min` to `max`. Members with `ordered: false` are sorted by their `configId`. */
|
|
855
|
+
export interface MemberRule {
|
|
856
|
+
readonly min: number;
|
|
857
|
+
readonly max: number;
|
|
858
|
+
readonly ordered: boolean;
|
|
859
|
+
}
|
|
860
|
+
/** One implementation of a stage. An option with `members` is a meta option: it chooses between whole configs, or wraps them. */
|
|
861
|
+
export interface StageOption {
|
|
862
|
+
readonly id: string;
|
|
863
|
+
readonly params: readonly SpaceParam[];
|
|
864
|
+
readonly members?: MemberRule;
|
|
865
|
+
}
|
|
866
|
+
/** One stage of the pipeline of an engine. A config of an `optional` stage can have no option. */
|
|
867
|
+
export interface SpaceStage {
|
|
868
|
+
readonly name: string;
|
|
869
|
+
readonly options: readonly StageOption[];
|
|
870
|
+
readonly optional?: boolean;
|
|
871
|
+
}
|
|
872
|
+
/** A reference to one option of a stage. The option `null` refers to an optional stage that a config does not use. */
|
|
873
|
+
export interface OptionRef {
|
|
874
|
+
readonly stage: string;
|
|
875
|
+
readonly option: string | null;
|
|
876
|
+
}
|
|
877
|
+
/** A rule that keeps out invalid combinations. A config with the option `if` also has the option `then`, or does not have the option `then.not`. */
|
|
878
|
+
export interface SpaceConstraint {
|
|
879
|
+
readonly if: OptionRef;
|
|
880
|
+
readonly then: OptionRef | {
|
|
881
|
+
readonly not: OptionRef;
|
|
882
|
+
};
|
|
883
|
+
}
|
|
884
|
+
/** The strategy space of an engine: the stages, the constraints and the named configs. `docs/STRATEGY-SPACE.md` tells the rules. */
|
|
885
|
+
export interface StrategySpace {
|
|
886
|
+
readonly schema: typeof STRATEGY_SPACE_SCHEMA;
|
|
887
|
+
/** The name of the space. A config names the space with this value. */
|
|
888
|
+
readonly engine: string;
|
|
889
|
+
/** The version of the space. It is not part of a config or of its id. A record writes it. */
|
|
890
|
+
readonly version: string;
|
|
891
|
+
readonly stages: readonly SpaceStage[];
|
|
892
|
+
readonly constraints?: readonly SpaceConstraint[];
|
|
893
|
+
/** The named strategies of the engine, as points of the space. Old records stay comparable through them. */
|
|
894
|
+
readonly named?: Readonly<Record<string, StrategyConfig>>;
|
|
895
|
+
/** The spaces of a product space, from `productSpace`. A meta option of a part takes members of that part. */
|
|
896
|
+
readonly parts?: readonly StrategySpace[];
|
|
897
|
+
}
|
|
898
|
+
/** The choice of one stage in a config: an option, its params and, for a meta option, its members. */
|
|
899
|
+
export interface StageChoice {
|
|
900
|
+
readonly option: string;
|
|
901
|
+
/** The values of the active params. A param that is not set gets its default. */
|
|
902
|
+
readonly params?: Readonly<Record<string, ParamValue>>;
|
|
903
|
+
/** The members of a meta option: configs of the same space, with no meta option. */
|
|
904
|
+
readonly members?: readonly StrategyConfig[];
|
|
905
|
+
}
|
|
906
|
+
/** One point of a strategy space. The value `null` of a stage tells that the config does not use the optional stage. */
|
|
907
|
+
export interface StrategyConfig {
|
|
908
|
+
/** The `engine` of the space, without its version. */
|
|
909
|
+
readonly space: string;
|
|
910
|
+
readonly stages: Readonly<Record<string, StageChoice | null>>;
|
|
911
|
+
}
|
|
912
|
+
/** The count of the grid points of a space. */
|
|
913
|
+
export interface SpaceSize {
|
|
914
|
+
/** The count of the configs without a meta option. */
|
|
915
|
+
readonly base: bigint;
|
|
916
|
+
/** The count of the configs with a meta option. The value is `null` when the count is more than `maxMeta`. */
|
|
917
|
+
readonly meta: bigint | null;
|
|
918
|
+
}
|
|
919
|
+
/** The options of `spaceSize`. */
|
|
920
|
+
export interface SpaceSizeOptions {
|
|
921
|
+
/** The count of the levels of each numeric param, a whole number of 1 or more. */
|
|
922
|
+
readonly levels: number;
|
|
923
|
+
/** The largest meta count that `spaceSize` gives. The default is `10n ** 18n`. */
|
|
924
|
+
readonly maxMeta?: bigint;
|
|
925
|
+
}
|
|
926
|
+
/** The options of a grid. The grid gives only the configs without a meta option. */
|
|
927
|
+
export interface GridOptions {
|
|
928
|
+
readonly mode: "grid";
|
|
929
|
+
readonly levels: number;
|
|
930
|
+
/** The largest count of configs. A larger grid causes a `RangeError`. The default is 100000. */
|
|
931
|
+
readonly limit?: number;
|
|
932
|
+
}
|
|
933
|
+
/** The options of a sample. */
|
|
934
|
+
export interface SampleOptions {
|
|
935
|
+
readonly mode: "sample";
|
|
936
|
+
/** The count of the configs, a whole number of 0 or more. */
|
|
937
|
+
readonly n: number;
|
|
938
|
+
readonly seed: number;
|
|
939
|
+
/** With `skip` (the default), the sample has no meta option. With `sample`, a meta option draws its members from base samples. */
|
|
940
|
+
readonly meta?: "skip" | "sample";
|
|
941
|
+
/** The largest count of option draws. The default is the larger value of 1000 and `100 * n`. */
|
|
942
|
+
readonly maxTries?: number;
|
|
943
|
+
}
|
|
944
|
+
/** The options of `enumerateSpace`. */
|
|
945
|
+
export type EnumerateOptions = GridOptions | SampleOptions;
|
|
946
|
+
/**
|
|
947
|
+
* This function checks one config of a space. It gives one break for each problem. An empty list tells that the config is good.
|
|
948
|
+
* The `claim` of a break is the kind of the problem, for example `missing`, `unknown`, `inactive`, `param`, `constraint`, `members` or `depth`.
|
|
949
|
+
*/
|
|
950
|
+
export declare function checkConfig(space: StrategySpace, config: StrategyConfig): ClaimBreak[];
|
|
951
|
+
/**
|
|
952
|
+
* This function checks a space. It gives one break for each problem. An empty list tells that the space is good.
|
|
953
|
+
* It finds duplicate names, empty ranges, defaults out of range, enums without values, bad log scales, unknown names and bad named configs.
|
|
954
|
+
* The `inputs` of a break of a named config have the name of the config.
|
|
955
|
+
*/
|
|
956
|
+
export declare function checkSpace(space: StrategySpace): ClaimBreak[];
|
|
957
|
+
/**
|
|
958
|
+
* This function gives the canonical form of a config: each stage of the space, the active params only, the defaults, and stable numbers.
|
|
959
|
+
* An unused optional stage is `null`. The members of an unordered meta option are sorted by their `configId`.
|
|
960
|
+
* It throws an `Error` for a config with a break of `checkConfig`.
|
|
961
|
+
*/
|
|
962
|
+
export declare function canonicalConfig(space: StrategySpace, config: StrategyConfig): StrategyConfig;
|
|
963
|
+
/**
|
|
964
|
+
* This function gives the id of a config: the first 16 hex characters of the SHA-256 of `canonicalJson` of `canonicalConfig`.
|
|
965
|
+
* Two spellings of one config get one id. The version of the space is not part of the id.
|
|
966
|
+
*/
|
|
967
|
+
export declare function configId(space: StrategySpace, config: StrategyConfig): string;
|
|
968
|
+
/**
|
|
969
|
+
* This function gives the grid values of one param, in increasing order. An `enum` gives its values, and a `bool` gives `false` and `true`.
|
|
970
|
+
* With 1 level, a numeric param gives its default. With k levels, it gives k points from `min` to `max` on its scale and step, without repeats.
|
|
971
|
+
*/
|
|
972
|
+
export declare function paramLevels(param: SpaceParam, levels: number): ParamValue[];
|
|
973
|
+
/**
|
|
974
|
+
* This function gives the count of the grid points of a space, with `levels` levels for each numeric param.
|
|
975
|
+
* It counts only the active params and the combinations that keep the constraints. It gives the meta configs apart.
|
|
976
|
+
*/
|
|
977
|
+
export declare function spaceSize(space: StrategySpace, options: SpaceSizeOptions): SpaceSize;
|
|
978
|
+
/**
|
|
979
|
+
* This function gives configs of a space, in their canonical form. Each config keeps the constraints. The result is deterministic.
|
|
980
|
+
*
|
|
981
|
+
* - The mode `grid` gives each grid point without a meta option, in a stable order. Stages, options and values go in the order of the space.
|
|
982
|
+
* - The mode `sample` gives `n` configs of a seeded Latin hypercube. The options of a stage get equal strata, and each active param gets its own strata.
|
|
983
|
+
* - A sample draws again when a point breaks a constraint. After `maxTries` draws, it throws an `Error`. Two sampled configs can be equal.
|
|
984
|
+
*/
|
|
985
|
+
export declare function enumerateSpace(space: StrategySpace, options: EnumerateOptions): StrategyConfig[];
|
|
986
|
+
/**
|
|
987
|
+
* This function joins configs of the parts of a product space into one config of the space `space`.
|
|
988
|
+
* The name of each stage gets the prefix `<space of the part>.`. The members of a meta option do not change.
|
|
989
|
+
*/
|
|
990
|
+
export declare function joinConfigs(space: string, parts: readonly StrategyConfig[]): StrategyConfig;
|
|
991
|
+
/** This function gives the config of the part `engine` of a joint config. It throws a `RangeError` when no stage has the prefix `<engine>.`. */
|
|
992
|
+
export declare function splitConfig(config: StrategyConfig, engine: string): StrategyConfig;
|
|
993
|
+
/**
|
|
994
|
+
* This function joins two spaces, for example a packer and a router, into the space `name`. The stages of `a` and `b` get the prefixes `<a.engine>.` and `<b.engine>.`.
|
|
995
|
+
* The constraints get the same prefixes. The named configs are the pairs `<name of a>+<name of b>`. It throws a `RangeError` when the two engines have the same name.
|
|
996
|
+
*/
|
|
997
|
+
export declare function productSpace(a: StrategySpace, b: StrategySpace, name: string): StrategySpace;
|
|
998
|
+
/**
|
|
999
|
+
* The largest count of inputs for the exact permutation test. Up to this count, the test enumerates all `2^n` sign sets.
|
|
1000
|
+
* At 16 inputs, that is 65 536 sign sets, approximately 3 times the default draws. Above it, the cost doubles with each input, so the test uses seeded draws.
|
|
1001
|
+
*/
|
|
1002
|
+
export declare const VERDICT_EXACT_MAX = 16;
|
|
1003
|
+
/** The largest value of the option `exactMax`. At 20 inputs, the exact test has approximately 1 million sign sets. */
|
|
1004
|
+
export declare const VERDICT_EXACT_CAP = 20;
|
|
1005
|
+
/** The default count of the samples of each bootstrap. It is the parameter `bootstrapRuns` of `docs/PROMOTION.md`. */
|
|
1006
|
+
export declare const VERDICT_RUNS = 1e4;
|
|
1007
|
+
/** The default count of the random sign sets of the permutation test above `VERDICT_EXACT_MAX` inputs. */
|
|
1008
|
+
export declare const VERDICT_DRAWS = 2e4;
|
|
1009
|
+
/** The default seed of the bootstraps and of the random sign sets. */
|
|
1010
|
+
export declare const VERDICT_SEED = 1;
|
|
1011
|
+
/** The fields of a record that the verdict reads. */
|
|
1012
|
+
export type VerdictRecord = Pick<LayoutRecord, "strategy" | "input" | "seed" | "measures"> & {
|
|
1013
|
+
readonly skipped?: string;
|
|
1014
|
+
};
|
|
1015
|
+
/** One side of a verdict: a strategy id, or a test that selects the records of the side. */
|
|
1016
|
+
export type VerdictSide<R extends VerdictRecord = VerdictRecord> = string | ((record: R) => boolean);
|
|
1017
|
+
/** The arguments of `verdict`. `tie` and `level` have no default. */
|
|
1018
|
+
export interface VerdictOptions<R extends VerdictRecord = VerdictRecord> {
|
|
1019
|
+
/** The unit of the verdict. The family is the only unit. */
|
|
1020
|
+
readonly by: "family";
|
|
1021
|
+
/** The hook that gives the family of a record, for example `familyOf` of the cell of its input. */
|
|
1022
|
+
readonly family: (record: R) => string;
|
|
1023
|
+
/** The measure. Its direction tells which side is better. */
|
|
1024
|
+
readonly measure: Pick<MeasureSpec, "id" | "direction">;
|
|
1025
|
+
/** The baseline side. */
|
|
1026
|
+
readonly a: VerdictSide<R>;
|
|
1027
|
+
/** The candidate side. A positive difference tells that `b` is better than `a`. */
|
|
1028
|
+
readonly b: VerdictSide<R>;
|
|
1029
|
+
/**
|
|
1030
|
+
* The minimum effect of the sign of a family, as `minEffect` of `MeasureSpec`. A smaller change of the family mean is a tie.
|
|
1031
|
+
* `compareMeasure` compares the two family means, so the smallest tie is one grid step of `RECORD_EPS`.
|
|
1032
|
+
*/
|
|
1033
|
+
readonly tie: number | {
|
|
1034
|
+
readonly rel: number;
|
|
1035
|
+
};
|
|
1036
|
+
/** The significance level, from 0 to 1. The permutation p must be below it. The intervals have the level `1 - level`. */
|
|
1037
|
+
readonly level: number;
|
|
1038
|
+
/** The count of the samples of each bootstrap. The default is `VERDICT_RUNS`. */
|
|
1039
|
+
readonly runs?: number;
|
|
1040
|
+
/** The count of the random sign sets above the exact limit. The default is `VERDICT_DRAWS`. */
|
|
1041
|
+
readonly draws?: number;
|
|
1042
|
+
/** The seed of the bootstraps and of the random sign sets. The default is `VERDICT_SEED`. */
|
|
1043
|
+
readonly seed?: number;
|
|
1044
|
+
/** The largest count of inputs for the exact test. The default is `VERDICT_EXACT_MAX`. The value 0 always uses draws. */
|
|
1045
|
+
readonly exactMax?: number;
|
|
1046
|
+
}
|
|
1047
|
+
/** A mean with its bootstrap interval. The interval is clear of 0 when `lo > 0` or `hi < 0`. */
|
|
1048
|
+
export interface VerdictInterval {
|
|
1049
|
+
readonly mean: number;
|
|
1050
|
+
readonly lo: number;
|
|
1051
|
+
readonly hi: number;
|
|
1052
|
+
}
|
|
1053
|
+
/** The difference of one family: the count of its inputs, the mean of their differences and its sign. */
|
|
1054
|
+
export interface FamilyVerdict {
|
|
1055
|
+
readonly family: string;
|
|
1056
|
+
readonly n: number;
|
|
1057
|
+
readonly mean: number;
|
|
1058
|
+
/** The value 1 tells that `b` is better, -1 that `b` is worse, and 0 a tie by `tie`. */
|
|
1059
|
+
readonly sign: -1 | 0 | 1;
|
|
1060
|
+
}
|
|
1061
|
+
/** The stratified paired permutation test. With `exact`, `draws` is the count of all the sign sets. */
|
|
1062
|
+
export interface VerdictPermutation {
|
|
1063
|
+
readonly p: number;
|
|
1064
|
+
readonly exact: boolean;
|
|
1065
|
+
readonly draws: number;
|
|
1066
|
+
readonly seed: number;
|
|
1067
|
+
}
|
|
1068
|
+
/** The two-sided exact sign test of the family signs. It is a report only. Ties do not count. */
|
|
1069
|
+
export interface VerdictSignTest {
|
|
1070
|
+
readonly wins: number;
|
|
1071
|
+
readonly losses: number;
|
|
1072
|
+
readonly ties: number;
|
|
1073
|
+
readonly p: number;
|
|
1074
|
+
}
|
|
1075
|
+
/** The label of a verdict. `better` and `worse` tell the side of `b`. */
|
|
1076
|
+
export type VerdictLabel = "better" | "worse" | "depends on the mix" | "no verdict";
|
|
1077
|
+
/** The result of `verdict`. */
|
|
1078
|
+
export interface VerdictResult {
|
|
1079
|
+
readonly measure: string;
|
|
1080
|
+
/** The count of the paired inputs. */
|
|
1081
|
+
readonly n: number;
|
|
1082
|
+
/** The mean of the family means, with a bootstrap of the seeds inside each family. */
|
|
1083
|
+
readonly stratified: VerdictInterval;
|
|
1084
|
+
/** The mean of the inputs, with a bootstrap of the inputs. */
|
|
1085
|
+
readonly pooled: VerdictInterval;
|
|
1086
|
+
readonly permutation: VerdictPermutation;
|
|
1087
|
+
/** The families, in sort order. */
|
|
1088
|
+
readonly families: readonly FamilyVerdict[];
|
|
1089
|
+
readonly signTest: VerdictSignTest;
|
|
1090
|
+
/** `true` only when the two means have the same sign, the two intervals are clear of 0 and the permutation p is below `level`. */
|
|
1091
|
+
readonly agree: boolean;
|
|
1092
|
+
readonly label: VerdictLabel;
|
|
1093
|
+
/** The inputs without a pair: one side has no record, a skipped record or no value of the measure. */
|
|
1094
|
+
readonly dropped: readonly string[];
|
|
1095
|
+
}
|
|
1096
|
+
/**
|
|
1097
|
+
* This function gives the verdict of the candidate `b` against the baseline `a` on one measure, with the family as the unit (`docs/VERDICT.md`).
|
|
1098
|
+
*
|
|
1099
|
+
* - It pairs the records by input and seed. The difference of a pair is `b - a` for a measure where more is better, else `a - b`.
|
|
1100
|
+
* - `stratified` is the mean of the family means. Its bootstrap draws the seeds inside each family. `pooled` is the mean of the inputs.
|
|
1101
|
+
* - The permutation test changes the sign of each difference inside its family. Its statistic is the mean of the family means.
|
|
1102
|
+
* - The label is `better` or `worse` only when `agree` is `true`. Opposite signs of the two means give `depends on the mix`.
|
|
1103
|
+
*
|
|
1104
|
+
* It throws a `RangeError` for a missing `tie` or `level`, and for no pair. Two records of one side and input, or a value that is not finite, also cause a `RangeError`.
|
|
1105
|
+
*/
|
|
1106
|
+
export declare function verdict<R extends VerdictRecord>(records: Iterable<R>, options: VerdictOptions<R>): VerdictResult;
|
|
793
1107
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/geometry.ts","../src/tolerance.ts","../src/input.ts","../src/output.ts","../src/record.ts","../src/rules.ts","../src/turn.ts","../src/measures.ts","../src/strategy.ts","../src/random.ts","../src/edges.ts","../src/hash.ts","../src/portfolio.ts","../src/corpus.ts"],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../src/geometry.ts","../src/tolerance.ts","../src/input.ts","../src/output.ts","../src/record.ts","../src/rules.ts","../src/turn.ts","../src/measures.ts","../src/strategy.ts","../src/random.ts","../src/edges.ts","../src/hash.ts","../src/portfolio.ts","../src/corpus.ts","../src/strategy-space.ts","../src/verdict.ts"],"mappings":"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"}
|