{
  "definitions": [
    {
      "callable": true,
      "callees": [
        {
          "file": "core/analyzers/representation.graph.analyzer.ts",
          "name": "fillBands",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-analyzers-representation-graph-analyzer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/analyzers/representation.graph.analyzer.ts",
            "label": "core/analyzers/representation.graph.analyzer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/analyzers/representation.graph.analyzer.ts.md",
            "ref": "anatomy:file-patterns-core-analyzers-representation-graph-analyzer-ts"
          }
        }
      ],
      "callers": [
        {
          "file": "core/aggregators/representation.graph.aggregator.ts",
          "name": "result",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
            "label": "core/aggregators/representation.graph.aggregator.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
            "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "relay",
      "kind": "lexical_declaration",
      "line": 37,
      "name": "orderedOf",
      "signature": "export const orderedOf = function orderedOf("
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/aggregators/representation.graph.aggregator.ts",
          "name": "recordMembers",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
            "label": "core/aggregators/representation.graph.aggregator.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
            "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 10,
      "name": "combinations2",
      "signature": "export const combinations2 = function combinations2(members: readonly string[]): string[][] {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/analyzers/representation.graph.analyzer.ts",
          "name": "orderedOf",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-analyzers-representation-graph-analyzer-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/analyzers/representation.graph.analyzer.ts",
            "label": "core/analyzers/representation.graph.analyzer.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/analyzers/representation.graph.analyzer.ts.md",
            "ref": "anatomy:file-patterns-core-analyzers-representation-graph-analyzer-ts"
          }
        }
      ],
      "exported": false,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 28,
      "name": "fillBands",
      "signature": "const fillBands = function fillBands(numeric: ReadonlyMap<number, number>, low: number, span: number): number[] {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/aggregators/representation.graph.aggregator.ts",
          "name": "result",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
            "label": "core/aggregators/representation.graph.aggregator.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
            "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 52,
      "name": "compositionOf",
      "signature": "export const compositionOf = function compositionOf(numeric: ReadonlyMap<number, number>): Composition | null {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/aggregators/representation.graph.aggregator.ts",
          "name": "observeNumeric",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
            "label": "core/aggregators/representation.graph.aggregator.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
            "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 67,
      "name": "countAdjacent",
      "signature": "export const countAdjacent = function countAdjacent(values: readonly number[]): number {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/aggregators/representation.graph.aggregator.ts",
          "name": "result",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
            "label": "core/aggregators/representation.graph.aggregator.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
            "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 71,
      "name": "positionalOf",
      "signature": "export const positionalOf = function positionalOf("
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/aggregators/representation.graph.aggregator.ts",
          "name": "result",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
            "label": "core/aggregators/representation.graph.aggregator.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
            "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 84,
      "name": "liftOf",
      "signature": "export const liftOf = function liftOf("
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/aggregators/representation.graph.aggregator.ts",
          "name": "result",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
            "label": "core/aggregators/representation.graph.aggregator.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
            "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 101,
      "name": "topPairsOf",
      "signature": "export const topPairsOf = function topPairsOf(pairs: ReadonlyMap<string, number>, limit: number): [string[], number][] {"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [
        {
          "file": "core/aggregators/representation.graph.aggregator.ts",
          "name": "result",
          "source": {
            "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
            "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
            "label": "core/aggregators/representation.graph.aggregator.ts",
            "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
            "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
          }
        }
      ],
      "exported": true,
      "flow": "leaf",
      "kind": "lexical_declaration",
      "line": 108,
      "name": "slotPatternsOf",
      "signature": "export const slotPatternsOf = function slotPatternsOf("
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 4,
      "name": "PAIR",
      "signature": "const PAIR = 2;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 5,
      "name": "BANDS",
      "signature": "const BANDS = 3;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 6,
      "name": "MIN_PATTERN",
      "signature": "const MIN_PATTERN = 2;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 8,
      "name": "MEMBER_SEP",
      "signature": "export const MEMBER_SEP = \"␟\";"
    },
    {
      "callable": true,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 14,
      "name": "numericBounds",
      "signature": "const numericBounds = function numericBounds(numeric: ReadonlyMap<number, number>): NumericBounds {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 15,
      "name": "total",
      "signature": "let total = 0;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 16,
      "name": "weighted",
      "signature": "let weighted = 0;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 17,
      "name": "low",
      "signature": "let low = Infinity;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 18,
      "name": "high",
      "signature": "let high = -Infinity;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 29,
      "name": "bands",
      "signature": "const bands = [0, 0, 0];"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": false,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 31,
      "name": "band",
      "signature": "const band = span === 0 ? 0 : Math.min(Math.floor(((value - low) / span) * BANDS), BANDS - 1);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 42,
      "name": "{ low, high, total, weighted }",
      "signature": "const { low, high, total, weighted } = numericBounds(numeric);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 46,
      "name": "span",
      "signature": "const span = high - low;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 48,
      "name": "symmetry",
      "signature": "const symmetry = span > 0 ? 1 - Math.abs(weighted / total - midpoint) / (span / PAIR) : 1;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 53,
      "name": "{ low, high, total }",
      "signature": "const { low, high, total } = numericBounds(numeric);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 57,
      "name": "midpoint",
      "signature": "const midpoint = (low + high) / PAIR;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 58,
      "name": "odd",
      "signature": "let odd = 0;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 59,
      "name": "above",
      "signature": "let above = 0;"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 77,
      "name": "[value, count]",
      "signature": "const [value, count] = [...(positions.get(index) ?? new Map<string, number>()).entries()].sort("
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 92,
      "name": "scored",
      "signature": "const scored = [...pairs.entries()].map(([key, observed]): [string[], number] => {"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 93,
      "name": "[a = \"\", b = \"\"]",
      "signature": "const [a = \"\", b = \"\"] = key.split(MEMBER_SEP);"
    },
    {
      "callable": false,
      "callees": [],
      "callers": [],
      "exported": true,
      "flow": "isolated",
      "kind": "lexical_declaration",
      "line": 117,
      "name": "[index = \"\", left = \"\", right = \"\"]",
      "signature": "const [index = \"\", left = \"\", right = \"\"] = key.split(MEMBER_SEP);"
    }
  ],
  "document": null,
  "findings": [],
  "generated": false,
  "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-analyzers-representation-graph-analyzer-ts",
  "language": "typescript",
  "layer": "processing",
  "name": "representation.graph.analyzer.ts",
  "path": "core/analyzers/representation.graph.analyzer.ts",
  "ref": "anatomy:file-patterns-core-analyzers-representation-graph-analyzer-ts",
  "relations": [
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/patterns#folder-patterns-core-analyzers",
          "json": "https://banes-lab.com/json/anatomy/patterns/folder-patterns-core-analyzers",
          "label": "core/analyzers",
          "markdown": "https://banes-lab.com/anatomy/patterns/folder-patterns-core-analyzers.md",
          "ref": "chapter:/anatomy/patterns#folder-patterns-core-analyzers"
        }
      ],
      "relation": "contained-in"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-aggregators-representation-graph-aggregator-ts",
          "json": "https://banes-lab.com/json/source/patterns/core/aggregators/representation.graph.aggregator.ts",
          "label": "core/aggregators/representation.graph.aggregator.ts",
          "markdown": "https://banes-lab.com/source/patterns/core/aggregators/representation.graph.aggregator.ts.md",
          "ref": "anatomy:file-patterns-core-aggregators-representation-graph-aggregator-ts"
        }
      ],
      "relation": "used-by"
    },
    {
      "links": [
        {
          "href": "https://banes-lab.com/anatomy/patterns#folder-patterns-core-aggregators",
          "json": "https://banes-lab.com/json/anatomy/patterns/folder-patterns-core-aggregators",
          "label": "core/aggregators",
          "markdown": "https://banes-lab.com/anatomy/patterns/folder-patterns-core-aggregators.md",
          "ref": "chapter:/anatomy/patterns#folder-patterns-core-aggregators"
        },
        {
          "href": "https://banes-lab.com/anatomy/patterns#folder-patterns-core-analyzers",
          "json": "https://banes-lab.com/json/anatomy/patterns/folder-patterns-core-analyzers",
          "label": "core/analyzers",
          "markdown": "https://banes-lab.com/anatomy/patterns/folder-patterns-core-analyzers.md",
          "ref": "chapter:/anatomy/patterns#folder-patterns-core-analyzers"
        }
      ],
      "relation": "linked-from"
    }
  ],
  "slots": {
    "concern": "analyzer",
    "subject": "representation",
    "variant": "graph"
  },
  "stats": {
    "bytes": 4433,
    "callable": 10,
    "definitions": 31,
    "edges": 1,
    "exported": 20,
    "files": 1,
    "findings": {},
    "flows": {
      "relay": 1,
      "leaf": 8,
      "isolated": 22
    },
    "lines": {
      "blank": 12,
      "code": 108,
      "total": 120
    }
  },
  "summary": "108 lines of code and 31 definitions.",
  "text": "https://banes-lab.com/source/patterns/core/analyzers/representation.graph.analyzer.ts.txt",
  "tree": "patterns",
  "siblings": {
    "next": {
      "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-analyzers-schema-analyzer-ts",
      "json": "https://banes-lab.com/json/source/patterns/core/analyzers/schema.analyzer.ts",
      "label": "core/analyzers/schema.analyzer.ts",
      "markdown": "https://banes-lab.com/source/patterns/core/analyzers/schema.analyzer.ts.md",
      "ref": "anatomy:file-patterns-core-analyzers-schema-analyzer-ts"
    },
    "previous": {
      "href": "https://banes-lab.com/anatomy/patterns#file-patterns-core-analyzers-representation-distribution-analyzer-ts",
      "json": "https://banes-lab.com/json/source/patterns/core/analyzers/representation.distribution.analyzer.ts",
      "label": "core/analyzers/representation.distribution.analyzer.ts",
      "markdown": "https://banes-lab.com/source/patterns/core/analyzers/representation.distribution.analyzer.ts.md",
      "ref": "anatomy:file-patterns-core-analyzers-representation-distribution-analyzer-ts"
    }
  },
  "up": {
    "href": null,
    "json": "https://banes-lab.com/json/api/source/patterns/core/analyzers",
    "label": "core/analyzers",
    "markdown": "https://banes-lab.com/api/source/patterns/core/analyzers.md",
    "ref": "api:source/patterns/core/analyzers"
  }
}
