mathnet/mathnet-symbolics
48.0
Weak · 23 September 2026
5k
lines of production code
F#
primary language
5
measurements over time
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.