{"id":28533223,"url":"https://github.com/sciml/scimloperators.jl","last_synced_at":"2026-04-04T03:01:17.397Z","repository":{"id":37003645,"uuid":"496999845","full_name":"SciML/SciMLOperators.jl","owner":"SciML","description":"SciMLOperators.jl: Matrix-Free Operators for the SciML Scientific Machine Learning Common Interface in Julia","archived":false,"fork":false,"pushed_at":"2026-04-04T01:14:44.000Z","size":4322,"stargazers_count":55,"open_issues_count":30,"forks_count":14,"subscribers_count":8,"default_branch":"master","last_synced_at":"2026-04-04T02:31:24.519Z","etag":null,"topics":["differential-equations","julia","linear-algebra","ode","scientific-machine-learning","sciml"],"latest_commit_sha":null,"homepage":"https://docs.sciml.ai/SciMLOperators/stable","language":"Julia","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SciML.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":"SciML"}},"created_at":"2022-05-27T13:05:19.000Z","updated_at":"2026-04-04T00:44:49.000Z","dependencies_parsed_at":"2024-03-01T09:44:42.074Z","dependency_job_id":"640b11d7-c1d1-4d0e-85b1-1cdecf9b88f1","html_url":"https://github.com/SciML/SciMLOperators.jl","commit_stats":{"total_commits":782,"total_committers":17,"mean_commits":46.0,"dds":"0.22506393861892582","last_synced_commit":"7ea582b7554d192241196c262a65d58090a5b748"},"previous_names":[],"tags_count":75,"template":false,"template_full_name":null,"purl":"pkg:github/SciML/SciMLOperators.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SciML%2FSciMLOperators.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SciML%2FSciMLOperators.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SciML%2FSciMLOperators.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SciML%2FSciMLOperators.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SciML","download_url":"https://codeload.github.com/SciML/SciMLOperators.jl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SciML%2FSciMLOperators.jl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31385935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-04T01:22:39.193Z","status":"online","status_checked_at":"2026-04-04T02:00:07.569Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["differential-equations","julia","linear-algebra","ode","scientific-machine-learning","sciml"],"created_at":"2025-06-09T17:01:42.148Z","updated_at":"2026-04-04T03:01:17.390Z","avatar_url":"https://github.com/SciML.png","language":"Julia","readme":"# `SciMLOperators.jl`\n\n*Unified operator interface for `SciML.ai` and beyond*\n\n[![Join the chat at https://julialang.zulipchat.com #sciml-bridged](https://img.shields.io/static/v1?label=Zulip\u0026message=chat\u0026color=9558b2\u0026labelColor=389826)](https://julialang.zulipchat.com/#narrow/stream/279055-sciml-bridged)\n[![Global Docs](https://img.shields.io/badge/docs-SciML-blue.svg)](https://docs.sciml.ai/SciMLOperators/stable)\n\n[![codecov](https://codecov.io/gh/SciML/SciMLOperators.jl/branch/master/graph/badge.svg)](https://codecov.io/gh/SciML/SciMLOperators.jl)\n[![Build Status](https://github.com/SciML/SciMLOperators.jl/workflows/CI/badge.svg)](https://github.com/SciML/SciMLOperators.jl/actions?query=workflow%3ACI)\n\n[![ColPrac: Contributor's Guide on Collaborative Practices for Community Packages](https://img.shields.io/badge/ColPrac-Contributor%27s%20Guide-blueviolet)](https://github.com/SciML/ColPrac)\n[![SciML Code Style](https://img.shields.io/static/v1?label=code%20style\u0026message=SciML\u0026color=9558b2\u0026labelColor=389826)](https://github.com/SciML/SciMLStyle)\n\n`SciMLOperators` is a package for managing linear, nonlinear,\ntime-dependent, and parameter dependent operators acting on vectors,\n(or column-vectors of matrices). We provide wrappers for matrix-free\noperators, fast tensor-product evaluations, pre-cached mutating\nevaluations, as well as `Zygote`-compatible non-mutating evaluations.\n\nThe lazily implemented operator algebra allows the user to update the\noperator state by passing in an update function that accepts arbitrary\nparameter objects. Further, our operators behave like `AbstractMatrix` types\nthanks to  overloads defined for methods in `Base`, and `LinearAlgebra`.\n\nTherefore, an `AbstractSciMLOperator` can be passed to `LinearSolve.jl`,\nor `NonlinearSolve.jl` as a linear/nonlinear operator, or to\n`OrdinaryDiffEq.jl` as an `ODEFunction`. Examples of usage within the\n`SciML` ecosystem are provided in the documentation.\n\n## Installation\n\n`SciMLOperators.jl` is a registered package and can be installed via\n\n```\njulia\u003e import Pkg\njulia\u003e Pkg.add(\"SciMLOperators\")\n```\n\n## Examples\n\nLet `M`, `D`, `F` be matrix-based, diagonal-matrix-based, and function-based\n`SciMLOperators` respectively.\n\nLet `M`, `D`, `F` be matrix-based, diagonal-matrix-based, and function-based\n`SciMLOperators` respectively.\n\n```@example operator_algebra\nusing SciMLOperators, LinearAlgebra\nN = 4\nfunction f(v, u, p, t)\n    u .* v\nend\nfunction f(w, v, u, p, t)\n    w .= u .* v\nend\n\nu = rand(4)\np = nothing # parameter struct\nt = 0.0     # time\n\nM = MatrixOperator(rand(N, N))\nD = DiagonalOperator(rand(N))\nF = FunctionOperator(f, zeros(N), zeros(N); u, p, t)\n```\n\nThen, the following codes just work.\n\n```@example operator_algebra\nL1 = 2M + 3F + LinearAlgebra.I + rand(N, N)\nL2 = D * F * M'\nL3 = kron(M, D, F)\nL4 = lu(M) \\ D\nL5 = [M; D]' * [M F; F D] * [F; D]\n```\n\nEach `L#` can be applied to `AbstractVector`s of appropriate sizes:\n\n```@example operator_algebra\nv = rand(N)\nw = L1(v, u, p, t) # == L1 * v\n\nv_kron = rand(N^3)\nw_kron = L3(v_kron, u, p, t) # == L3 * v_kron\n```\n\nFor mutating operator evaluations, call `cache_operator` to generate an\nin-place cache, so the operation is nonallocating.\n\n```@example operator_algebra\nα, β = rand(2)\n\n# allocate cache\nL2 = cache_operator(L2, u)\nL4 = cache_operator(L4, u)\n\n# allocation-free evaluation\nL2(w, v, u, p, t) # == mul!(w, L2, v)\nL4(w, v, u, p, t, α, β) # == mul!(w, L4, v, α, β)\n```\n\n## Roadmap\n\n  - [ ] [Complete integration with `SciML` ecosystem](https://github.com/SciML/SciMLOperators.jl/issues/142)\n  - [ ] [Block-matrices](https://github.com/SciML/SciMLOperators.jl/issues/161)\n  - [x] [Benchmark and speed-up tensorbproduct evaluations](https://github.com/SciML/SciMLOperators.jl/issues/58)\n  - [ ] [Fast tensor-sum (`kronsum`) evaluation](https://github.com/SciML/SciMLOperators.jl/issues/53)\n  - [ ] [Fully flesh out operator array algebra](https://github.com/SciML/SciMLOperators.jl/issues/62)\n  - [ ] [Operator fusion/matrix chain multiplication at constant `(u, p, t)`-slices](https://github.com/SciML/SciMLOperators.jl/issues/51)\n","funding_links":["https://github.com/sponsors/SciML"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsciml%2Fscimloperators.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsciml%2Fscimloperators.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsciml%2Fscimloperators.jl/lists"}