Symbolics

Symbolic programming for the next generation of numerical software

https://github.com/juliasymbolics/symbolics.jl

Science Score: 77.0%

This score indicates how likely this project is to be science-related based on various indicators:

  • CITATION.cff file
    Found CITATION.cff file
  • codemeta.json file
    Found codemeta.json file
  • .zenodo.json file
    Found .zenodo.json file
  • DOI references
    Found 5 DOI reference(s) in README
  • Academic publication links
    Links to: arxiv.org, acm.org
  • Committers with academic emails
    12 of 102 committers (11.8%) from academic institutions
  • Institutional organization owner
  • JOSS paper metadata
  • Scientific vocabulary similarity
    Low similarity (13.1%) to scientific vocabulary

Keywords

cas computer-algebra-system high-performance mathematics parallel-computing symbolic-computing

Keywords from Contributors

ode sciml differential-equations sde pde dde dae ordinary-differential-equations stochastic-differential-equations delay-differential-equations
Last synced: 6 months ago · JSON representation ·

Repository

Symbolic programming for the next generation of numerical software

Basic Info
Statistics
  • Stars: 1,443
  • Watchers: 23
  • Forks: 172
  • Open Issues: 482
  • Releases: 224
Topics
cas computer-algebra-system high-performance mathematics parallel-computing symbolic-computing
Created about 5 years ago · Last pushed 6 months ago
Metadata Files
Readme Changelog License Citation

README.md

Symbolics.jl

Github Action CI codecov Build Status Stable Dev

Symbolics.jl is a fast and modern Computer Algebra System (CAS) for a fast and modern programming language (Julia). The goal is to have a high-performance and parallelized symbolic algebra system that is directly extendable in the same language as that of the users.

Installation

To install Symbolics.jl, use the Julia package manager:

julia julia> using Pkg julia> Pkg.add("Symbolics")

Documentation

For information on using the package, see the stable documentation. Use the in-development documentation for the version of the documentation which contains the unreleased features.

Relationship to Other Packages

  • SymbolicUtils.jl: This is a rule-rewriting system that is the core of Symbolics.jl. Symbolics.jl builds off of SymbolicUtils.jl to extend it to a whole symbolic algebra system, complete with support for differentiation, solving symbolic systems of equations, etc. If you're looking for the barebones to build a new CAS for specific algebras, SymbolicUtils.jl is that foundation. Otherwise, Symbolics.jl is for you.
  • ModelingToolkit.jl: This is a symbolic-numeric modeling system for the SciML ecosystem. It heavily uses Symbolics.jl for its representation of symbolic equations along with tools like differentiation, and adds the representation of common modeling systems like ODEs, SDEs, and more.

Example

```julia julia> using Symbolics

julia> @variables t x y julia> D = Differential(t)

julia> z = t + t^2 julia> D(z) # symbolic representation of derivative(t + t^2, t) Differential(t)(t + t^2)

julia> expand_derivatives(D(z)) 1 + 2t

julia> Symbolics.jacobian([x + x*y, x^2 + y],[x, y]) 2×2 Matrix{Num}: 1 + y x 2x 1

julia> B = simplify.([t^2 + t + t^2 2t + 4t x + y + y + 2t x^2 - x^2 + y^2]) 2×2 Matrix{Num}: t + 2(t^2) 6t x + 2t + 2y y^2

julia> simplify.(substitute.(B, (Dict(x => y^2),))) 2×2 Matrix{Num}: t + 2(t^2) 6t 2t + y^2 + 2y y^2

julia> substitute.(B, (Dict(x => 2.0, y => 3.0, t => 4.0),)) 2×2 Matrix{Num}: 36.0 24.0 16.0 9.0 ```

Citation

If you use Symbolics.jl, please cite this paper (or see the free arxiv version)

bib @article{10.1145/3511528.3511535, author = {Gowda, Shashi and Ma, Yingbo and Cheli, Alessandro and Gw\'{o}\'{z}zd\'{z}, Maja and Shah, Viral B. and Edelman, Alan and Rackauckas, Christopher}, title = {High-Performance Symbolic-Numerics via Multiple Dispatch}, year = {2022}, issue_date = {September 2021}, publisher = {Association for Computing Machinery}, address = {New York, NY, USA}, volume = {55}, number = {3}, issn = {1932-2240}, url = {https://doi.org/10.1145/3511528.3511535}, doi = {10.1145/3511528.3511535}, abstract = {As mathematical computing becomes more democratized in high-level languages, high-performance symbolic-numeric systems are necessary for domain scientists and engineers to get the best performance out of their machine without deep knowledge of code optimization. Naturally, users need different term types either to have different algebraic properties for them, or to use efficient data structures. To this end, we developed Symbolics.jl, an extendable symbolic system which uses dynamic multiple dispatch to change behavior depending on the domain needs. In this work we detail an underlying abstract term interface which allows for speed without sacrificing generality. We show that by formalizing a generic API on actions independent of implementation, we can retroactively add optimized data structures to our system without changing the pre-existing term rewriters. We showcase how this can be used to optimize term construction and give a 113x acceleration on general symbolic transformations. Further, we show that such a generic API allows for complementary term-rewriting implementations. Exploiting this feature, we demonstrate the ability to swap between classical term-rewriting simplifiers and e-graph-based term-rewriting simplifiers. We illustrate how this symbolic system improves numerical computing tasks by showcasing an e-graph ruleset which minimizes the number of CPU cycles during expression evaluation, and demonstrate how it simplifies a real-world reaction-network simulation to halve the runtime. Additionally, we show a reaction-diffusion partial differential equation solver which is able to be automatically converted into symbolic expressions via multiple dispatch tracing, which is subsequently accelerated and parallelized to give a 157x simulation speedup. Together, this presents Symbolics.jl as a next-generation symbolic-numeric computing environment geared towards modeling and simulation.}, journal = {ACM Commun. Comput. Algebra}, month = {jan}, pages = {92–96}, numpages = {5} }

Owner

  • Name: JuliaSymbolics
  • Login: JuliaSymbolics
  • Kind: organization

A fast and modern CAS for a fast and modern language

Citation (CITATION.bib)

## Citation

If you use Symbolics.jl, please [cite this paper](https://arxiv.org/abs/2105.03949)

@article{10.1145/3511528.3511535,
author = {Gowda, Shashi and Ma, Yingbo and Cheli, Alessandro and Gw\'{o}\'{z}zd\'{z}, Maja and Shah, Viral B. and Edelman, Alan and Rackauckas, Christopher},
title = {High-Performance Symbolic-Numerics via Multiple Dispatch},
year = {2022},
issue_date = {September 2021},
publisher = {Association for Computing Machinery},
address = {New York, NY, USA},
volume = {55},
number = {3},
issn = {1932-2240},
url = {https://doi.org/10.1145/3511528.3511535},
doi = {10.1145/3511528.3511535},
abstract = {As mathematical computing becomes more democratized in high-level languages, high-performance symbolic-numeric systems are necessary for domain scientists and engineers to get the best performance out of their machine without deep knowledge of code optimization. Naturally, users need different term types either to have different algebraic properties for them, or to use efficient data structures. To this end, we developed Symbolics.jl, an extendable symbolic system which uses dynamic multiple dispatch to change behavior depending on the domain needs. In this work we detail an underlying abstract term interface which allows for speed without sacrificing generality. We show that by formalizing a generic API on actions independent of implementation, we can retroactively add optimized data structures to our system without changing the pre-existing term rewriters. We showcase how this can be used to optimize term construction and give a 113x acceleration on general symbolic transformations. Further, we show that such a generic API allows for complementary term-rewriting implementations. Exploiting this feature, we demonstrate the ability to swap between classical term-rewriting simplifiers and e-graph-based term-rewriting simplifiers. We illustrate how this symbolic system improves numerical computing tasks by showcasing an e-graph ruleset which minimizes the number of CPU cycles during expression evaluation, and demonstrate how it simplifies a real-world reaction-network simulation to halve the runtime. Additionally, we show a reaction-diffusion partial differential equation solver which is able to be automatically converted into symbolic expressions via multiple dispatch tracing, which is subsequently accelerated and parallelized to give a 157x simulation speedup. Together, this presents Symbolics.jl as a next-generation symbolic-numeric computing environment geared towards modeling and simulation.},
journal = {ACM Commun. Comput. Algebra},
month = {jan},
pages = {92–96},
numpages = {5}
}

GitHub Events

Total
  • Create event: 137
  • Issues event: 149
  • Release event: 45
  • Watch event: 93
  • Delete event: 89
  • Issue comment event: 687
  • Push event: 475
  • Pull request review event: 120
  • Pull request review comment event: 76
  • Pull request event: 394
  • Fork event: 21
Last Year
  • Create event: 137
  • Issues event: 149
  • Release event: 45
  • Watch event: 93
  • Delete event: 89
  • Issue comment event: 687
  • Push event: 475
  • Pull request review event: 120
  • Pull request review comment event: 76
  • Pull request event: 394
  • Fork event: 21

Committers

Last synced: about 2 years ago

All Time
  • Total Commits: 1,204
  • Total Committers: 102
  • Avg Commits per committer: 11.804
  • Development Distribution Score (DDS): 0.667
Past Year
  • Commits: 173
  • Committers: 37
  • Avg Commits per committer: 4.676
  • Development Distribution Score (DDS): 0.763
Top Committers
Name Email Commits
Shashi Gowda g****a@m****u 401
Yingbo Ma m****5@g****m 239
Christopher Rackauckas a****s@c****m 163
Bowen S. Zhu b****u@f****u 58
Kamil Ziemian k****t@g****m 21
xtalax a****y@g****m 18
ArnoStrouwen a****n@t****e 16
github-actions[bot] 4****] 13
Fredrik Bagge Carlson c****b@u****g 13
CompatHelper Julia c****y@j****g 12
Joe Carpinelli j****p@u****u 12
Jimmy Envall j****l@g****m 10
Luke Adams l****e@l****m 10
Shashi Gowda s****1@g****m 10
benjamin currie s****a@g****m 10
Valentin Kaisermayer v****r@b****u 9
Pepijn de Vos p****s@g****m 8
sumiya11 a****2@m****u 8
dependabot[bot] 4****] 7
Philip Bittihn p****p@b****e 6
Sam Isaacson i****s 5
Chris Elrod e****c@g****m 5
Fredrik Bagge Carlson b****n@g****m 5
Mason Protter m****r@i****m 5
anand jain a****j@u****u 5
Aayush Sabharwal a****l@j****m 4
David Gustavsson d****n@g****m 4
Grigorii Starkov g****i@t****e 4
Raphael Chinchilla r****a@u****u 4
ashutosh-b-b a****3@g****m 4
and 72 more...

Issues and Pull Requests

Last synced: 6 months ago

All Time
  • Total issues: 343
  • Total pull requests: 761
  • Average time to close issues: 8 months
  • Average time to close pull requests: about 1 month
  • Total issue authors: 190
  • Total pull request authors: 78
  • Average comments per issue: 2.99
  • Average comments per pull request: 1.28
  • Merged pull requests: 571
  • Bot issues: 0
  • Bot pull requests: 137
Past Year
  • Issues: 109
  • Pull requests: 418
  • Average time to close issues: 10 days
  • Average time to close pull requests: 3 days
  • Issue authors: 65
  • Pull request authors: 30
  • Average comments per issue: 0.96
  • Average comments per pull request: 1.17
  • Merged pull requests: 324
  • Bot issues: 0
  • Bot pull requests: 72
Top Authors
Issue Authors
  • baggepinnen (16)
  • AayushSabharwal (11)
  • TorkelE (9)
  • n0rbed (9)
  • ChrisRackauckas (8)
  • bowenszhu (7)
  • nsajko (6)
  • B-LIE (6)
  • thorek1 (5)
  • LilithHafner (5)
  • dpsanders (5)
  • isaacsas (5)
  • lassepe (5)
  • hersle (5)
  • Audrius-St (4)
Pull Request Authors
  • ChrisRackauckas (147)
  • AayushSabharwal (142)
  • github-actions[bot] (90)
  • dependabot[bot] (47)
  • YingboMa (27)
  • hersle (25)
  • n0rbed (24)
  • shashi (23)
  • baggepinnen (17)
  • devmotion (13)
  • bowenszhu (13)
  • sumiya11 (12)
  • ArnoStrouwen (11)
  • TorkelE (8)
  • karlwessel (7)
Top Labels
Issue Labels
array variables (12) good first issue (5) code-generation (2) register (1) julia-compiler (1) enhancement (1) error-reporting (1) array library (1)
Pull Request Labels
dependencies (47) github_actions (9)

Packages

  • Total packages: 3
  • Total downloads:
    • julia 4,370 total
  • Total dependent packages: 101
    (may contain duplicates)
  • Total dependent repositories: 0
    (may contain duplicates)
  • Total versions: 675
juliahub.com: Symbolics

Symbolic programming for the next generation of numerical software

  • Versions: 225
  • Dependent Packages: 101
  • Dependent Repositories: 0
  • Downloads: 4,370 Total
Rankings
Stargazers count: 0.2%
Forks count: 0.7%
Dependent packages count: 0.9%
Average: 2.9%
Dependent repos count: 9.9%
Last synced: 6 months ago
proxy.golang.org: github.com/juliasymbolics/symbolics.jl
  • Versions: 225
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.5%
Average: 5.7%
Dependent repos count: 5.9%
Last synced: 6 months ago
proxy.golang.org: github.com/JuliaSymbolics/Symbolics.jl
  • Versions: 225
  • Dependent Packages: 0
  • Dependent Repositories: 0
Rankings
Dependent packages count: 5.5%
Average: 5.7%
Dependent repos count: 5.9%
Last synced: 6 months ago

Dependencies

.github/workflows/Documentation.yml actions
  • actions/checkout v2 composite
  • julia-actions/setup-julia latest composite
.github/workflows/Downstream.yml actions
  • actions/checkout v2 composite
  • julia-actions/julia-buildpkg latest composite
  • julia-actions/setup-julia v1 composite
.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
.github/workflows/ci.yml actions
  • actions/cache v1 composite
  • actions/checkout v2 composite
  • codecov/codecov-action v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite