{
  "capability_id": "math.exponent",
  "tool_id": "exponent",
  "engine": "exponent",
  "calculation_version": "1.0.4",
  "generated_at": "2026-09-16T22:03:43.778Z",
  "engine_build": "2026-09-10",
  "test_count": 38,
  "passed": 38,
  "failed": 0,
  "tests_summary": {
    "golden": {
      "total": 16,
      "passed": 16
    },
    "boundary": {
      "total": 22,
      "passed": 22
    },
    "property": {
      "total": 0,
      "passed": 0
    }
  },
  "engine_tested": true,
  "expert_reviewed": false,
  "internally_reviewed": false,
  "review_kind": null,
  "source_checked": true,
  "reviewed_by": null,
  "reviewer_role": null,
  "last_reviewed": null,
  "expert_review": {
    "status": "optional_not_performed",
    "reviewer": null,
    "scope": [
      "formula",
      "input semantics",
      "assumptions",
      "limitations",
      "sources",
      "tests"
    ],
    "note": "Domain expert review is optional under CVP (CVP-EXP-01). Absence does not block CVP Verified. See Review policy for supplemental domain assurance."
  },
  "internal_review": {
    "status": "not_applicable",
    "reviewer": null
  },
  "page": "https://www.calculatorx.com/calc/math/exponent",
  "api": "https://www.calculatorx.com/api/v1/calc/exponent",
  "schema_input": "https://www.calculatorx.com/schemas/math.exponent.input.json",
  "schema_output": "https://www.calculatorx.com/schemas/math.exponent.output.json",
  "assumptions": [
    "Real arithmetic only. Complex values are not returned.",
    "0⁰ is undefined. 0 raised to a negative power is undefined.",
    "Negative bases are allowed only with an integer exponent. Non-integer exponents of a negative base are NOT_REAL (this engine does not special-case odd roots).",
    "Token e as base uses Math.exp(n), not (Math.E)**n.",
    "Solve exponent uses n = log(y)/log(a) only when a > 0, a ≠ 1, y > 0. 1ⁿ = 1 is INFINITELY_MANY; 1ⁿ = 2 is NO_REAL_SOLUTION; 0ⁿ = 0 (n > 0) is INFINITELY_MANY.",
    "Solve base: odd integer n → unique real a = sign(y)·|y|^(1/n). Even integer n and y > 0 → two reals ± with warning TWO_REAL_SOLUTIONS (principal value is non-negative). Even n and y < 0 → NOT_REAL. n = 0 and y = 1 → INFINITELY_MANY."
  ],
  "limitations": [
    "0⁰ and 0^(negative) → UNDEFINED_POWER",
    "Negative base with non-integer exponent → NOT_REAL",
    "Forward solve_for=y returns a scalar; inverse returns a structured object"
  ],
  "boundary_conditions": [
    "Missing required inputs for the selected solve_for returns MISSING_REQUIRED_INPUT. Invalid solve_for returns INVALID_SOLVE_FOR.",
    "Non-numeric, object, array, boolean, NaN, or Infinity inputs return INVALID_NUMBER.",
    "0⁰ and 0^(n<0) return UNDEFINED_POWER.",
    "Negative a with non-integer n returns NOT_REAL.",
    "IEEE-754 overflow returns RESULT_OVERFLOW, not Infinity. Underflow to 0 for nonzero a returns RESULT_UNDERFLOW.",
    "Identity cases 1ⁿ = 1 and a⁰ = 1 (a ≠ 0) return INFINITELY_MANY. Impossible identities return NO_REAL_SOLUTION."
  ],
  "sources": [
    {
      "title": "NIST Digital Library of Mathematical Functions, Chapter 4",
      "section": "Logarithm, Exponential, Powers",
      "url": "https://dlmf.nist.gov/4",
      "supports": "Real powers a^n, including negative exponents as reciprocals and fractional exponents as roots when the result is real",
      "kind": "reference"
    },
    {
      "title": "NIST DLMF §4.2",
      "section": "Logarithm and the exponential as inverse operations",
      "url": "https://dlmf.nist.gov/4.2",
      "supports": "a^n = exp(n ln a) for a > 0; this engine uses that identity via IEEE-754 a**n / Math.exp, not a table",
      "kind": "reference"
    },
    {
      "title": "CalculatorX mathematical conventions",
      "section": "0^0 undefined; negative base only with integer exponent",
      "supports": "Matches the on-page real-arithmetic contract. solve_for=y is the scalar forward engine; a and n are published inverses of aⁿ = y with explicit multiplicity.",
      "kind": "definition"
    }
  ],
  "methods": [],
  "fingerprint": "sha256:706200fba755b76ba5f07e0f52328bb7dc198c70a2633895f579bcb11ff1445d",
  "tests": [
    {
      "id": "two-to-ten",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 2,
        "n": 10
      },
      "expect": 1024,
      "expectWarning": null,
      "actual": 1024,
      "tol": 0
    },
    {
      "id": "five-neg-two",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 5,
        "n": -2
      },
      "expect": 0.04,
      "expectWarning": null,
      "actual": 0.04,
      "tol": 1e-12
    },
    {
      "id": "sqrt-nine",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 9,
        "n": 0.5
      },
      "expect": 3,
      "expectWarning": null,
      "actual": 3,
      "tol": 1e-12
    },
    {
      "id": "seven-to-zero",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 7,
        "n": 0
      },
      "expect": 1,
      "expectWarning": null,
      "actual": 1,
      "tol": 0
    },
    {
      "id": "neg-base-odd",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": -2,
        "n": 3
      },
      "expect": -8,
      "expectWarning": null,
      "actual": -8,
      "tol": 0
    },
    {
      "id": "e-to-one",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": "e",
        "n": 1
      },
      "expect": 2.718281828459045,
      "expectWarning": null,
      "actual": 2.718281828459045,
      "tol": 1e-12
    },
    {
      "id": "zero-to-five",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 0,
        "n": 5
      },
      "expect": 0,
      "expectWarning": null,
      "actual": 0,
      "tol": 0
    },
    {
      "id": "half-squared",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 0.5,
        "n": 2
      },
      "expect": 0.25,
      "expectWarning": null,
      "actual": 0.25,
      "tol": 0
    },
    {
      "id": "zero-to-zero",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": 0,
        "n": 0
      },
      "expectError": "UNDEFINED_POWER",
      "code": "UNDEFINED_POWER",
      "error": "0⁰ is undefined."
    },
    {
      "id": "zero-neg",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": 0,
        "n": -1
      },
      "expectError": "UNDEFINED_POWER",
      "code": "UNDEFINED_POWER",
      "error": "0 raised to a negative power is undefined."
    },
    {
      "id": "neg-sqrt",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": -2,
        "n": 0.5
      },
      "expectError": "NOT_REAL",
      "code": "NOT_REAL",
      "error": "Negative base with a non-integer exponent is not real in this engine."
    },
    {
      "id": "overflow",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": 10,
        "n": 400
      },
      "expectError": "RESULT_OVERFLOW",
      "code": "RESULT_OVERFLOW",
      "error": "Result overflowed or is undefined for these inputs."
    },
    {
      "id": "underflow",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": 10,
        "n": -400
      },
      "expectError": "RESULT_UNDERFLOW",
      "code": "RESULT_UNDERFLOW",
      "error": "Result underflowed to zero for these inputs."
    },
    {
      "id": "empty-a",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "n": 10
      },
      "expectError": "MISSING_REQUIRED_INPUT",
      "code": "MISSING_REQUIRED_INPUT",
      "error": "Enter base a and exponent n to compute y = aⁿ, or set solve_for to a or n."
    },
    {
      "id": "cube-root-two",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 2,
        "n": 0.3333333333333333
      },
      "expect": 1.2599210498948732,
      "expectWarning": null,
      "actual": 1.2599210498948732,
      "tol": 1e-12
    },
    {
      "id": "e-to-three",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": "e",
        "n": 3
      },
      "expect": 20.085536923187668,
      "expectWarning": null,
      "actual": 20.085536923187668,
      "tol": 1e-12
    },
    {
      "id": "two-neg-ten",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 2,
        "n": -10
      },
      "expect": 0.0009765625,
      "expectWarning": null,
      "actual": 0.0009765625,
      "tol": 0
    },
    {
      "id": "neg-base-zero",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": -2,
        "n": 0
      },
      "expect": 1,
      "expectWarning": null,
      "actual": 1,
      "tol": 0
    },
    {
      "id": "ten-308",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "a": 10,
        "n": 308
      },
      "expect": 1e+308,
      "expectWarning": null,
      "actual": 1e+308,
      "tol": 0
    },
    {
      "id": "empty-n",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": 2
      },
      "expectError": "MISSING_REQUIRED_INPUT",
      "code": "MISSING_REQUIRED_INPUT",
      "error": "Enter base a and exponent n to compute y = aⁿ, or set solve_for to a or n."
    },
    {
      "id": "empty-both",
      "ok": true,
      "kind": "boundary",
      "inputs": {},
      "expectError": "MISSING_REQUIRED_INPUT",
      "code": "MISSING_REQUIRED_INPUT",
      "error": "Enter base a and exponent n to compute y = aⁿ, or set solve_for to a or n."
    },
    {
      "id": "a-object",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": {},
        "n": 2
      },
      "expectError": "INVALID_NUMBER",
      "code": "INVALID_NUMBER",
      "error": "Enter a finite number."
    },
    {
      "id": "n-array",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": 2,
        "n": []
      },
      "expectError": "INVALID_NUMBER",
      "code": "INVALID_NUMBER",
      "error": "Enter a finite number."
    },
    {
      "id": "n-boolean",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": 2,
        "n": true
      },
      "expectError": "INVALID_NUMBER",
      "code": "INVALID_NUMBER",
      "error": "Enter a finite number."
    },
    {
      "id": "a-infinity",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": "Infinity",
        "n": 2
      },
      "expectError": "INVALID_NUMBER",
      "code": "INVALID_NUMBER",
      "error": "Enter a finite number."
    },
    {
      "id": "n-nan",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": 2,
        "n": "NaN"
      },
      "expectError": "INVALID_NUMBER",
      "code": "INVALID_NUMBER",
      "error": "Enter a finite number."
    },
    {
      "id": "a-abc",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "a": "abc",
        "n": 2
      },
      "expectError": "INVALID_NUMBER",
      "code": "INVALID_NUMBER",
      "error": "Enter a finite number."
    },
    {
      "id": "solve-base-even-two-reals",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "solve_for": "a",
        "n": 2,
        "y": 4
      },
      "expect": 2,
      "expectWarning": "TWO_REAL_SOLUTIONS",
      "actual": {
        "solve_for": "a",
        "value": 2,
        "a": 2,
        "n": 2,
        "y": 4,
        "warnings": [
          {
            "code": "TWO_REAL_SOLUTIONS",
            "severity": "warning",
            "detail": "Even integer n with y > 0 has two real bases a = ± y^(1/n). The principal value is the non-negative root.",
            "suggestion": "Report both signs when the equation is aⁿ = y. The published principal value is |a|."
          }
        ],
        "solutions": [
          2,
          -2
        ]
      },
      "tol": 0
    },
    {
      "id": "solve-base-odd-neg",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "solve_for": "a",
        "n": 3,
        "y": -8
      },
      "expect": -2,
      "expectWarning": null,
      "actual": {
        "solve_for": "a",
        "value": -2,
        "a": -2,
        "n": 3,
        "y": -8,
        "warnings": []
      },
      "tol": 1e-12
    },
    {
      "id": "solve-base-even-neg",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "solve_for": "a",
        "n": 2,
        "y": -4
      },
      "expectError": "NOT_REAL",
      "code": "NOT_REAL",
      "error": "Negative y with a non-odd-integer exponent has no real base."
    },
    {
      "id": "solve-base-n-zero-y-one",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "solve_for": "a",
        "n": 0,
        "y": 1
      },
      "expectError": "INFINITELY_MANY",
      "code": "INFINITELY_MANY",
      "error": "a⁰ = 1 for every a ≠ 0, so this equation has infinitely many real bases."
    },
    {
      "id": "solve-base-n-zero-y-two",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "solve_for": "a",
        "n": 0,
        "y": 2
      },
      "expectError": "NO_REAL_SOLUTION",
      "code": "NO_REAL_SOLUTION",
      "error": "a⁰ = 1 for a ≠ 0, so y ≠ 1 has no real base."
    },
    {
      "id": "solve-exp-1024",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "solve_for": "n",
        "a": 2,
        "y": 1024
      },
      "expect": 10,
      "expectWarning": null,
      "actual": {
        "solve_for": "n",
        "value": 10,
        "a": 2,
        "n": 10,
        "y": 1024,
        "warnings": []
      },
      "tol": 0
    },
    {
      "id": "solve-exp-one-one",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "solve_for": "n",
        "a": 1,
        "y": 1
      },
      "expectError": "INFINITELY_MANY",
      "code": "INFINITELY_MANY",
      "error": "1ⁿ = 1 for every real n, so this equation has infinitely many exponents."
    },
    {
      "id": "solve-exp-one-two",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "solve_for": "n",
        "a": 1,
        "y": 2
      },
      "expectError": "NO_REAL_SOLUTION",
      "code": "NO_REAL_SOLUTION",
      "error": "1ⁿ = 1, so y ≠ 1 has no real exponent."
    },
    {
      "id": "solve-exp-zero-zero",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "solve_for": "n",
        "a": 0,
        "y": 0
      },
      "expectError": "INFINITELY_MANY",
      "code": "INFINITELY_MANY",
      "error": "0ⁿ = 0 for every n > 0, so this equation has infinitely many exponents."
    },
    {
      "id": "solve-exp-neg-base-integer",
      "ok": true,
      "kind": "golden",
      "inputs": {
        "solve_for": "n",
        "a": -2,
        "y": -8
      },
      "expect": 3,
      "expectWarning": null,
      "actual": {
        "solve_for": "n",
        "value": 3,
        "a": -2,
        "n": 3,
        "y": -8,
        "warnings": []
      },
      "tol": 0
    },
    {
      "id": "invalid-solve-for",
      "ok": true,
      "kind": "boundary",
      "inputs": {
        "solve_for": "z",
        "a": 2,
        "n": 10
      },
      "expectError": "INVALID_SOLVE_FOR",
      "code": "INVALID_SOLVE_FOR",
      "error": "solve_for must be y, a, or n."
    }
  ],
  "tier": "engine_tested",
  "verification": {
    "tests": {
      "passed": 38,
      "total": 38,
      "golden": 16,
      "boundary": 22,
      "property": 0
    },
    "contract_checks": {
      "passed": 3,
      "total": 3
    }
  },
  "evidence_core_generated_at": "2026-09-10T22:48:17.762Z",
  "rendered_at": "2026-09-16T22:03:43.778Z",
  "release_integrity": {
    "status": "verified",
    "scope": "workspace",
    "production_attestation_required": true,
    "calculation_version": "1.0.4",
    "artifacts": {
      "engine": "1.0.4",
      "page": "1.0.4",
      "capability": "1.0.4",
      "evidence": "1.0.4",
      "input_schema": "1.0.4",
      "output_schema": "1.0.4",
      "mcp_contract": "1.0.4"
    },
    "digests": {
      "input_schema_sha256": "ce9f339fda5323c16b5118ed74d125a73b9d09a65acd73fc515078d08c8d06c4",
      "output_schema_sha256": "bc3ef2f7394c1739149d1c1e3751fe91fa1e793ef15fc5f1621834eebad02c63",
      "evidence_sha256": "50d9cf26b57ed5bc423750f3bbf38416f16382a286ac24836a9fa9616e8248a9",
      "evidence_core_sha256": "50d9cf26b57ed5bc423750f3bbf38416f16382a286ac24836a9fa9616e8248a9",
      "capability_sha256": "9fe4e7725791ce4cd60238f5685403362e3bf0007563f9428cfe2f1f87ddaf55",
      "engine_sha256": "c8d4ccdbfeaf61d7b024d4e1babb0c2ba3b324c1b37bd0cb456a526d8d2b1bd1",
      "mcp_contract_sha256": "863098b311a7b17dc4b229a6302b90b3545b175f716e5d84772c7be8e9716b86"
    },
    "contract_checks": {
      "total": 3,
      "passed": 3,
      "failed": 0,
      "items": [
        {
          "id": "release-artifacts-aligned",
          "status": "pass",
          "detail": "1.0.4"
        },
        {
          "id": "schema-valid-input-executes",
          "status": "pass"
        },
        {
          "id": "engine-success-output-validates-schema",
          "status": "pass"
        }
      ]
    },
    "report": "https://www.calculatorx.com/.well-known/calculatorx-release-integrity.json"
  }
}
