Skip to content
CAI
Software that uses CAICheck a score

mathnet/mathnet-symbolics

48.0

Weak · 23 September 2026

5k

lines of production code

F#

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a symbolic mathematics library that provides tools for representing, manipulating, and computing with mathematical expressions. It supports calculus operations like differentiation and Taylor series, algebraic simplification, and numerical approximation. The library allows users to parse and format expressions into various visual and markup languages, including Infix, LaTeX, and MathML. Additionally, it offers typed expression handling and compilation capabilities for efficient evaluation.

How it got here

2014 — Symbolic math and build modernization

8 changes.

This period focused on modernizing the project's build infrastructure by migrating to the .NET SDK-style system and FAKE build scripts, while simultaneously expanding the symbolic math capabilities with new calculus, algebraic, and approximation modules. The work also introduced a VisualExpression type for symbolic representation and standardized project documentation and configuration files.

2017–2020 — Symbolic expression typing and formatting

8 changes.

This period focused on enhancing the Symbolics library by introducing typed expression types and comprehensive formatting support for Infix, LaTeX, and MathML. The work included implementing type tracking and enrichment metadata for symbolic computation, alongside extensive test coverage for parsing, simplification, and compilation of mathematical operators and polynomials.

Features

Added docu documentation templates and configuration

The docu tooling now includes a complete set of Spark templates for generating HTML documentation, including main index pages, namespace listings, and detailed type pages for classes, interfaces, methods, properties, and events. A configuration file for docu.exe was added to specify the .NET Framework 4.5 runtime, and supporting JavaScript files (including jQuery 1.3.2) were included to handle interactive features like collapsible code examples in the generated documentation.

tools · high confidence

Added project documentation and build configuration files

The repository now includes standard project documentation files (CONTRIBUTing.md, CONTRIBUTORS.md, LICENSE.md, README.md, RELEASENOTES.md) and build configuration files (Directory.Build.props, NuGet.config, global.json, .editorconfig, .gitattributes, .gitignore, appveyor.yml, build scripts, and Vagrantfile). These files establish the project's contribution guidelines, license terms, release history, and build environment setup.

(repo-wide) · high confidence

Expanded calculus, algebraic, and approximation capabilities

The Symbolics library introduces new modules for calculus (Calculus.fs), algebraic manipulation (Algebraic.fs), and numerical approximation (Approximate.fs, Approximation.fs). The Calculus module adds symbolic differentiation, Taylor series expansion, and tangent/normal line calculations. The Algebraic module provides functions for expanding, factoring, and separating polynomial expressions. The Approximate module enables conversion of symbolic expressions to floating-point or complex values, supporting both real and complex arithmetic. These changes enhance the library's ability to perform symbolic and numerical computations.

src/Symbolics · high confidence

Introduce Infix, LaTeX, and MathML formatters for Visual Expressions

Added new modules in the Visual namespace to parse and format mathematical expressions into Infix, LaTeX, and MathML representations. The Infix module provides a parser and formatter for standard mathematical notation, while the LaTeX and MathML modules handle conversion to their respective markup languages, enabling users to export symbolic expressions in these widely used formats.

src/Symbolics/Visual · high confidence

Introduce VisualExpression type for symbolic math representation

Added VisualExpression and VisualExpressionStyle types in the MathNet.Symbolics library to provide a visual representation of symbolic expressions. This new type supports a wide range of mathematical functions including trigonometric (Sin, Cos, Tan, Csc, Sec, Cot, and their inverses), hyperbolic (Sinh, Cosh, Tanh, Csch, Sech, Coth), special functions (Airy, Bessel, Hankel), and constants (E, Pi, I). The VisualExpression type is designed for visual aspects and as an interchange format between different representations, allowing conversion from and to the core Expression type.

MathNet.Symbolics · high confidence

Introduce typed and enriched expression types for symbolic computation

The Symbolics library introduces a new \TypedExpression\ type that tracks numeric types (Rational, Real, Complex) and explicit casting wrappers directly within the expression tree. This is supported by an \EnrichedExpression\ base type that carries enrichment metadata on every node, enabling conversions to and from standard \Expression\ types. The \TypedExpression\ module provides a \derive\ function to infer types from an untyped \Expression\, while the \Linq\ module adds a \Parse\ function to convert .NET \System.Linq.Expressions\ into MathNet expressions, and the \Quotations\ module is moved to the \Typed\ folder and updated to use the new \fromInt32\/\fromDouble\ operators instead of the old \From\ prefix constructors.

src/Symbolics/Typed · high confidence

Behavioural changes

Migrated build system to FAKE with new build scripts

The build system has been replaced with a FAKE-based build script (build.fs) and supporting modules (Building, Testing, Packaging, Documentation, Publishing, Versioning, Model). This introduces new build targets for cleaning, versioning, restoring, building, testing, generating documentation and API references, and publishing artifacts (NuGet packages, zip files, and release tags). The build.sln file was renamed and updated to target Visual Studio 17, and a .gitignore file was added to exclude build artifacts.

build · high confidence

Removal of local packages directory and configuration files

The local 'packages' directory and its associated configuration files (.gitattributes, .gitignore, repositories.config) have been removed from the repository. This change aligns with the build process no longer committing packages to the repository, indicating a shift away from tracking local package dependencies directly in version control.

packages · medium confidence

Removed legacy license and readme files from Math.NET Numerics packages

The \license.txt\ and \readme.txt\ files have been deleted from the \MathNet.Numerics\ and \MathNet.Numerics.FSharp\ package directories. This cleanup removes the previous license text and release notes from the package distribution, likely as part of the v3.0.0-alpha8 update which simplifies the package structure.

packages/MathNet.Numerics.3.0.0-alpha8, packages/MathNet.Numerics.FSharp.3.0.0-alpha8 · high confidence

Test coverage

Add tests for new and existing mathematical operators; Added NUnitLite test runner for Symbolics.Tests; Added compilation tests for real and complex expressions; Added comprehensive test coverage for polynomial and rational expression operations; Added tests for visual expression parsing and formatting; Added unit tests for symbolic expression parsing, formatting, and simplification.

Dependencies

Upgrade to .NET 8.0 and modernize build infrastructure

The project has been migrated to the modern .NET SDK-style project system, updating the target frameworks to include .NET 8.0 alongside .NET 6.0, .NET 4.8, and .NET Standard 2.0. This change replaces the legacy MSBuild configuration with a simplified SDK-based structure, updating the build tooling to use Fake 6.0.0 and upgrading core dependencies such as Math.NET Numerics to version 6.0.0-beta1 and FParsec to 2.0.0-beta2.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 65 → 48 (-17.3)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 82 → 82 (+0.6)
  • Architecture 100 → 100 (+0.0)
  • Maturity 48 → 35 (-12.3)
  • Readiness 74 → 71 (-2.8)
  • Security 95 → 77 (-17.9)
  • Accessibility 39 (new)

Resolved (35)

  • Dependency hygiene not measured — no packages were read
  • Duplicated block (11 lines × 2) (src/Symbolics/Approximation.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Approximation.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Expression.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Expression.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Polynomial.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Structure.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Structure.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Typed/TypedExpression.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Visual/Infix.fs)
  • Duplicated block (7 lines × 2) (src/Symbolics/Exponential.fs)
  • Duplicated block (7 lines × 2) (src/Symbolics/Polynomial.fs)
  • Duplicated block (7 lines × 4) (src/Symbolics/Expression.fs)
  • Duplicated block (9 lines × 2) (src/Symbolics/Approximation.fs)
  • Duplicated block (9 lines × 2) (src/Symbolics/Polynomial.fs)
  • Duplicated block (9 lines × 2) (src/Symbolics/Typed/Linq.fs)
  • Duplicated block (9 lines × 2) (src/Symbolics/Visual/Infix.fs)
  • LaTeXFormatter.format (cognitive 49) (src/Symbolics/Visual/LaTeX.fs)
  • LaTeXFormatter.format (cyclomatic 56) (src/Symbolics/Visual/LaTeX.fs)
  • Linq.toLambda (cognitive 16) (src/Symbolics/Typed/Linq.fs)
  • …and 15 more

New (27)

  • Documentation: no usage examples (README.md)
  • Duplicated block (1–6 lines × 4) (src/Symbolics/Expression.fs)
  • Duplicated block (20 lines × 2) (src/Symbolics/Visual/LaTeX.fs)
  • Duplicated block (22 lines × 2) (src/Symbolics/Approximation.fs)
  • Duplicated block (5 lines × 2) (src/Symbolics/Approximation.fs)
  • Duplicated block (5 lines × 2) (src/Symbolics/Approximation.fs)
  • Duplicated block (5 lines × 2) (src/Symbolics/Expression.fs)
  • Duplicated block (5 lines × 2) (src/Symbolics/Structure.fs)
  • Duplicated block (5 lines × 2) (src/Symbolics/Visual/Infix.fs)
  • Duplicated block (5–8 lines × 2) (src/Symbolics/Exponential.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Polynomial.fs)
  • Duplicated block (6 lines × 2) (src/Symbolics/Structure.fs)
  • Duplicated block (6 lines × 4) (src/Symbolics/Expression.fs)
  • Duplicated block (7 lines × 2) (src/Symbolics/Typed/TypedExpression.fs)
  • Duplicated block (8 lines × 2) (src/Symbolics/Trigonometric.fs)
  • Duplicated block (8 lines × 2) (src/Symbolics/Visual/Infix.fs)
  • Duplicated block (9 lines × 2) (src/Symbolics/Polynomial.fs)
  • Duplicated block (9 lines × 2) (src/Symbolics/Polynomial.fs)
  • Duplicated block (9 lines × 2) (src/Symbolics/Typed/Linq.fs)
  • Duplicated block (9–10 lines × 2) (src/Symbolics/Approximation.fs)
  • …and 7 more

Architecture

  • Containers 0 added · 0 removed · contexts 0 added · 3 removed · edges 0 added · 0 removed

Removed bounded contexts (3)

  • MathNet.Symbolics
  • MathNet.Symbolics.Tests
  • build

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

mathnet/mathnet-symbolics was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 23 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 49bc5d4390cf554c5711c8bee6f5db72bde25f91 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-955b9cee9818.