Secure local scientific computation for engineering and science: exact arithmetic, units, equations, calculus, matrices, statistics, uncertainties, and constants.
SciMath demonstrates strong definition quality with 8 well-scoped tools, comprehensive parameter schemas, and detailed descriptions. All tools have explicit input schemas with types and descriptions. Tool names are action-oriented (calculate, convert_units, solve, etc.). Descriptions are substantive (100-250 chars), explaining WHAT the tool does and WHEN to use it. Parameters include enums, defaults, and constraints. However, output schemas are not explicitly documented in the visible code, only inferred via MathResult model. Error handling guidance is minimal; descriptions don't explain recovery paths. Tool annotations (readOnlyHint, idempotentHint) are correctly applied to all tools, signaling safety to agents.
Evaluate one arithmetic/scientific expression safely. Use explicit `*` and variables. For dimensional work, pass original unit-bearing variable strings (for example `12.4 kN*m`) and always set output_unit; never add manual conversion factors to the expression. Returns exact and high-precision numeric forms when unitless.
Differentiate, integrate, take a limit, or expand a series symbolically. For definite integrals provide both bounds; for limits and series provide point. `order` selects derivative order or the number of series terms.
Convert a dimensionful value such as `32 degF`, `120 km/hour`, or `5 psi` to a compatible target unit. Dimensional mismatches are errors rather than guessed conversions.
Perform exact matrix and linear-algebra operations on matrices up to 25x25. Supply other_matrix for multiplication or as the right-hand side of solve. String entries such as `1/3` preserve exact values. Condition-number results include numerical-stability warnings.
Look up a physical constant from SciPy's bundled CODATA table by common alias or name. Returns its value, unit, standard uncertainty, source metadata, and an optional compatible unit conversion. Examples: c, G, hbar, Boltzmann constant, electron mass.
Output schema not explicitly documented in tool descriptions. MathResult model is inferred from code but not visible in parameter/return documentation. LLMs cannot plan downstream operations without knowing what fields to expect.
Error handling descriptions are absent. Tools do not explain what errors are retryable, user-fixable, or fatal. No recovery guidance (e.g., 'If dimensional mismatch occurs, check unit compatibility'). Agents cannot self-correct on failure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 65 | 2026-07-28+ | v2 |
Propagate independent standard uncertainties through an expression. Each measurement has value, uncertainty, and optional unit. Returns nominal value, standard uncertainty, relative uncertainty, and a coverage interval; use output_unit when the result is dimensionful.
Solve up to eight algebraic equations for explicitly named variables. Each equation may use `left = right` or a zero-valued expression. Returns every solution in exact and numerical form; choose the real or complex domain explicitly.
Compute descriptive statistics, Pearson correlation, linear regression, a Student-t confidence interval for a mean, or an independent Welch t-test. Provide data_y for paired correlation/regression or the second t-test sample.
Parameter 'variables' in calculate and propagate_uncertainty accepts dict[str, Scalar] but Scalar is defined as 'int | float | str'. Ambiguous: can a string be a unit-bearing value like '12.4 kN*m' or a plain number string? Description hints at unit-bearing strings but schema is unclear.
Measurement object structure for propagate_uncertainty is not defined in visible code. Parameter description says 'Dictionary mapping variable names to Measurement objects (value, uncertainty, optional unit)' but the schema for Measurement is not shown. LLMs cannot construct valid input without seeing the schema.
No pagination or result-limiting guidance for tools that could return large outputs (e.g., solve with multiple solutions, statistics with large datasets). No mention of max matrix size enforcement (description says '25x25' but no validation shown).